gAJjc3BoaW54LmVudmlyb25tZW50CkJ1aWxkRW52aXJvbm1lbnQKcQEpgXECfXEDKFUPdG9jX251bV9lbnRyaWVzcQR9cQUoWB0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3EGSwFYNAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGNxB0sBWBkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzcQhLAVgaAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNxCUsBWCQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNxCksBWB4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW1xC0sBWDYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGNxDEsBWBcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eXENSwJYBQAAAGluZGV4cQ5LBlgcAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZXEPSwFYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW9xEEsBWCgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVycRFLAVgcAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZXESSwJYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHETSwFYFgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnNxFEsBWBkAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3VicRVLAVgmAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXJxFksBWBMAAABhcGFjaGVfYmVhbS5tZXRyaWNzcRdLAlgjAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3JxGEsBWB8AAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtcRlLAVghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtcRpLAVgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlcRtLAVgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3NxHEsBWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja3EdSwFYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbHEeSwFYEwAAAGFwYWNoZV9iZWFtLnRlc3RpbmdxH0sCWCEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmVxIEsBWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXBxIUsBWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc3EiSwFYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcnEjSwFYGQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9xJEsBWBgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxxJUsBWCYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pb3EmSwJYSwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnB5dGhvbl9ycGNfZGlyZWN0X3J1bm5lcnEnSwFYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZXEoSwFYHQAAAGFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzcSlLAVgRAAAAYXBhY2hlX2JlYW0udXRpbHNxKksCWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHNxK0sBWCMAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc3EsSwFYGwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaXEtSwJYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXEuSwFYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVycS9LAVgdAAAAYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNxMEsBWBcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYnExSwJYGQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWxxMksBWBwAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVycTNLAVgTAAAAYXBhY2hlX2JlYW0ucnVubmVyc3E0SwNYHQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzcTVLAVgcAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2lua3E2SwFYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3JxN0sBWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VycThLAVgeAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlcTlLAVgbAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5cTpLAVgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbHE7SwFYHwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1xPEsBWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrcT1LAVggAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHNxPksBWBUAAABhcGFjaGVfYmVhbS5pby5hdnJvaW9xP0sBWBIAAABhcGFjaGVfYmVhbS5jb2RlcnNxQEsCWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXFBSwFYHQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzcUJLAVg3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3FDSwFYEgAAAGFwYWNoZV9iZWFtLmlvLmdjcHFESwNYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVycUVLAVgeAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtcUZLAVgaAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJxR0sBWBsAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXNxSEsBWBoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc3FJSwFYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGVxSksBWB4AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2VxS0sBWCAAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc3FMSwFYHgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc3FNSwFYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmVxTksBWBMAAABhcGFjaGVfYmVhbS52ZXJzaW9ucU9LAVgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlc3FQSwFYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucXVlcnlfc3BsaXR0ZXJxUUsBWBEAAABhcGFjaGVfYmVhbS5lcnJvcnFSSwFYLgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3JxU0sBWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcnFUSwFYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzcVVLAVg5AAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVycVZLAVgnAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlcVdLAVgZAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc3FYSwFYHwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFxWUsCWCAAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbXFaSwFYFAAAAGFwYWNoZV9iZWFtLmludGVybmFscVtLA1guAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmVuZHBvaW50c19wYjJfZ3JwY3FcSwFYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVycV1LAVgfAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbHFeSwFYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnFfSwFYFQAAAGFwYWNoZV9iZWFtLmlvLnRleHRpb3FgSwFYOAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjcWFLAVgVAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlcWJLAVgSAAAAYXBhY2hlX2JlYW0ucHZhbHVlcWNLAVgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0cWRLAVgvAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHlxZUsBWBYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zcWZLAlgXAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnlxZ0sBWCMAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZXFoSwFYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcWlLAVguAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcnFqSwFYGAAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbnFrSwFYGAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcHFsSwJYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzcW1LAVgwAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjcW5LAVgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9xb0sBWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVycXBLAVgxAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY3FxSwFYDgAAAGFwYWNoZV9iZWFtLmlvcXJLA1gYAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvcXNLAVgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXJxdEsBWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzcXVLAVgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3RxdksCWCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVycXdLAVgTAAAAYXBhY2hlX2JlYW0ub3B0aW9uc3F4SwJYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zcXlLAVgcAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvd3F6SwNYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRocXtLAVggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWxxfEsCWBkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcX1LAVgUAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmVxfksBWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxxf0sBWBUAAABhcGFjaGVfYmVhbS50eXBlaGludHNxgEsCWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NxgUsBWBoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdHGCSwJYHQAAAGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlcYNLAXVVEV92aWV3Y29kZV9tb2R1bGVzcYR9cYUoVRphcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcnGGKFj+MwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQaXBlbGluZVJ1bm5lciwgYW4gYWJzdHJhY3QgYmFzZSBydW5uZXIgb2JqZWN0LiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc2hlbHZlCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCgpfX2FsbF9fID0gWydQaXBlbGluZVJ1bm5lcicsICdQaXBlbGluZVN0YXRlJywgJ1BpcGVsaW5lUmVzdWx0J10KCgpkZWYgX2dldF9ydW5uZXJfbWFwKHJ1bm5lcl9uYW1lcywgbW9kdWxlX3BhdGgpOgogICIiIkNyZWF0ZSBhIG1hcCBvZiBydW5uZXIgbmFtZSBpbiBsb3dlciBjYXNlIHRvIGZ1bGwgaW1wb3J0IHBhdGggdG8gdGhlCiAgcnVubmVyIGNsYXNzLgogICIiIgogIHJldHVybiB7cnVubmVyX25hbWUubG93ZXIoKTogbW9kdWxlX3BhdGggKyBydW5uZXJfbmFtZQogICAgICAgICAgZm9yIHJ1bm5lcl9uYW1lIGluIHJ1bm5lcl9uYW1lc30KCgpfRElSRUNUX1JVTk5FUl9QQVRIID0gJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuJwpfREFUQUZMT1dfUlVOTkVSX1BBVEggPSAoCiAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuJykKX1RFU1RfUlVOTkVSX1BBVEggPSAnYXBhY2hlX2JlYW0ucnVubmVycy50ZXN0LicKX1BZVEhPTl9SUENfRElSRUNUX1JVTk5FUiA9ICgKICAgICdhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC4nCiAgICAncHl0aG9uX3JwY19kaXJlY3RfcnVubmVyLicpCgpfS05PV05fUFlUSE9OX1JQQ19ESVJFQ1RfUlVOTkVSID0gKCdQeXRob25SUENEaXJlY3RSdW5uZXInLCkKX0tOT1dOX0RJUkVDVF9SVU5ORVJTID0gKCdEaXJlY3RSdW5uZXInLCAnRWFnZXJSdW5uZXInKQpfS05PV05fREFUQUZMT1dfUlVOTkVSUyA9ICgnRGF0YWZsb3dSdW5uZXInLCkKX0tOT1dOX1RFU1RfUlVOTkVSUyA9ICgnVGVzdERhdGFmbG93UnVubmVyJywpCgpfUlVOTkVSX01BUCA9IHt9Cl9SVU5ORVJfTUFQLnVwZGF0ZShfZ2V0X3J1bm5lcl9tYXAoX0tOT1dOX0RJUkVDVF9SVU5ORVJTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ESVJFQ1RfUlVOTkVSX1BBVEgpKQpfUlVOTkVSX01BUC51cGRhdGUoX2dldF9ydW5uZXJfbWFwKF9LTk9XTl9EQVRBRkxPV19SVU5ORVJTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQVRBRkxPV19SVU5ORVJfUEFUSCkpCl9SVU5ORVJfTUFQLnVwZGF0ZShfZ2V0X3J1bm5lcl9tYXAoX0tOT1dOX1BZVEhPTl9SUENfRElSRUNUX1JVTk5FUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUFlUSE9OX1JQQ19ESVJFQ1RfUlVOTkVSKSkKX1JVTk5FUl9NQVAudXBkYXRlKF9nZXRfcnVubmVyX21hcChfS05PV05fVEVTVF9SVU5ORVJTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9URVNUX1JVTk5FUl9QQVRIKSkKCl9BTExfS05PV05fUlVOTkVSUyA9ICgKICAgIF9LTk9XTl9ESVJFQ1RfUlVOTkVSUyArIF9LTk9XTl9EQVRBRkxPV19SVU5ORVJTICsgX0tOT1dOX1RFU1RfUlVOTkVSUykKCgpkZWYgY3JlYXRlX3J1bm5lcihydW5uZXJfbmFtZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDcmVhdGVzIGEgcnVubmVyIGluc3RhbmNlIGZyb20gYSBydW5uZXIgY2xhc3MgbmFtZS4KCiAgQXJnczoKICAgIHJ1bm5lcl9uYW1lOiBOYW1lIG9mIHRoZSBwaXBlbGluZSBydW5uZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgIERpcmVjdFJ1bm5lciwgRGF0YWZsb3dSdW5uZXIgYW5kIFRlc3REYXRhZmxvd1J1bm5lci4KCiAgUmV0dXJuczoKICAgIEEgcnVubmVyIG9iamVjdC4KCiAgUmFpc2VzOgogICAgUnVudGltZUVycm9yOiBpZiBhbiBpbnZhbGlkIHJ1bm5lciBuYW1lIGlzIHVzZWQuCiAgIiIiCgogICMgR2V0IHRoZSBxdWFsaWZpZWQgcnVubmVyIG5hbWUgYnkgdXNpbmcgdGhlIGxvd2VyIGNhc2UgcnVubmVyIG5hbWUuIElmIHRoYXQKICAjIGZhaWxzIHRyeSBhcHBlbmRpbmcgdGhlIG5hbWUgd2l0aCAncnVubmVyJyBhbmQgY2hlY2sgaWYgaXQgbWF0Y2hlcy4KICAjIElmIHRoYXQgYWxzbyBmYWlscywgdXNlIHRoZSBnaXZlbiBydW5uZXIgbmFtZSBhcyBpcy4KICBydW5uZXJfbmFtZSA9IF9SVU5ORVJfTUFQLmdldCgKICAgICAgcnVubmVyX25hbWUubG93ZXIoKSwKICAgICAgX1JVTk5FUl9NQVAuZ2V0KHJ1bm5lcl9uYW1lLmxvd2VyKCkgKyAncnVubmVyJywgcnVubmVyX25hbWUpKQoKICBpZiAnLicgaW4gcnVubmVyX25hbWU6CiAgICBtb2R1bGUsIHJ1bm5lciA9IHJ1bm5lcl9uYW1lLnJzcGxpdCgnLicsIDEpCiAgICB0cnk6CiAgICAgIHJldHVybiBnZXRhdHRyKF9faW1wb3J0X18obW9kdWxlLCB7fSwge30sIFtydW5uZXJdLCAtMSksIHJ1bm5lcikoKQogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICBpZiBydW5uZXJfbmFtZSBpbiBfS05PV05fREFUQUZMT1dfUlVOTkVSUzoKICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgICAgICAgJ0dvb2dsZSBDbG91ZCBEYXRhZmxvdyBydW5uZXIgbm90IGF2YWlsYWJsZSwgJwogICAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKICBlbHNlOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnVW5leHBlY3RlZCBwaXBlbGluZSBydW5uZXI6ICVzLiBWYWxpZCB2YWx1ZXMgYXJlICVzICcKICAgICAgICAnb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIGEgUGlwZWxpbmVSdW5uZXIgc3ViY2xhc3MuJyAlICgKICAgICAgICAgICAgcnVubmVyX25hbWUsICcsICcuam9pbihfQUxMX0tOT1dOX1JVTk5FUlMpKSkKCgpjbGFzcyBQaXBlbGluZVJ1bm5lcihvYmplY3QpOgogICIiIkEgcnVubmVyIG9mIGEgcGlwZWxpbmUgb2JqZWN0LgoKICBUaGUgYmFzZSBydW5uZXIgcHJvdmlkZXMgYSBydW4oKSBtZXRob2QgZm9yIHZpc2l0aW5nIGV2ZXJ5IG5vZGUgaW4gdGhlCiAgcGlwZWxpbmUncyBEQUcgYW5kIGV4ZWN1dGluZyB0aGUgdHJhbnNmb3JtcyBjb21wdXRpbmcgdGhlIFBWYWx1ZSBpbiB0aGUgbm9kZS4KCiAgQSBjdXN0b20gcnVubmVyIHdpbGwgdHlwaWNhbGx5IHByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciBzb21lIG9mIHRoZQogIHRyYW5zZm9ybSBtZXRob2RzIChQYXJEbywgR3JvdXBCeUtleSwgQ3JlYXRlLCBldGMuKS4gSXQgbWF5IGFsc28KICBwcm92aWRlIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciBjbGVhcl9wdmFsdWUoKSwgd2hpY2ggaXMgdXNlZCB0byB3aXBlIG91dAogIG1hdGVyaWFsaXplZCB2YWx1ZXMgaW4gb3JkZXIgdG8gcmVkdWNlIGZvb3RwcmludC4KICAiIiIKCiAgZGVmIHJ1bihzZWxmLCB0cmFuc2Zvcm0sIG9wdGlvbnM9Tm9uZSk6CiAgICAiIiJSdW4gdGhlIGdpdmVuIHRyYW5zZm9ybSB3aXRoIHRoaXMgcnVubmVyLgogICAgIiIiCiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCiAgICBwID0gUGlwZWxpbmUocnVubmVyPXNlbGYsIG9wdGlvbnM9b3B0aW9ucykKICAgIHAgfCB0cmFuc2Zvcm0KICAgIHJldHVybiBwLnJ1bigpCgogIGRlZiBydW5fcGlwZWxpbmUoc2VsZiwgcGlwZWxpbmUpOgogICAgIiIiRXhlY3V0ZSB0aGUgZW50aXJlIHBpcGVsaW5lIG9yIHRoZSBzdWItREFHIHJlYWNoYWJsZSBmcm9tIGEgbm9kZS4KCiAgICBSdW5uZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KICAgICIiIgoKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgUnVuVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgoKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bm5lcik6CiAgICAgICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIHRyeToKICAgICAgICAgIHNlbGYucnVubmVyLnJ1bl90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgbG9nZ2luZy5lcnJvcignRXJyb3Igd2hpbGUgdmlzaXRpbmcgJXMnLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAgcmFpc2UKCiAgICBwaXBlbGluZS52aXNpdChSdW5WaXNpdG9yKHNlbGYpKQoKICBkZWYgYXBwbHkoc2VsZiwgdHJhbnNmb3JtLCBpbnB1dCk6CiAgICAiIiJSdW5uZXIgY2FsbGJhY2sgZm9yIGEgcGlwZWxpbmUuYXBwbHkgY2FsbC4KCiAgICBBcmdzOgogICAgICB0cmFuc2Zvcm06IHRoZSB0cmFuc2Zvcm0gdG8gYXBwbHkuCiAgICAgIGlucHV0OiB0cmFuc2Zvcm0ncyBpbnB1dCAodHlwaWNhbGx5IGEgUENvbGxlY3Rpb24pLgoKICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1bm5lciBjbGFzcyBtYXkgd2FudCB0byBkbyBjdXN0b20KICAgIHBpcGVsaW5lIGNvbnN0cnVjdGlvbiBmb3IgYSBnaXZlbiB0cmFuc2Zvcm0uICBUbyBvdmVycmlkZSB0aGUgYmVoYXZpb3IKICAgIGZvciBhIHRyYW5zZm9ybSBjbGFzcyBYeXosIGltcGxlbWVudCBhbiBhcHBseV9YeXogbWV0aG9kIHdpdGggdGhpcyBzYW1lCiAgICBzaWduYXR1cmUuCiAgICAiIiIKICAgIGZvciBjbHMgaW4gdHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgbSA9IGdldGF0dHIoc2VsZiwgJ2FwcGx5XyVzJyAlIGNscy5fX25hbWVfXywgTm9uZSkKICAgICAgaWYgbToKICAgICAgICByZXR1cm4gbSh0cmFuc2Zvcm0sIGlucHV0KQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnRXhlY3V0aW9uIG9mIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcy4nICUgKHRyYW5zZm9ybSwgc2VsZikpCgogIGRlZiBhcHBseV9QVHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSwgaW5wdXQpOgogICAgIyBUaGUgYmFzZSBjYXNlIG9mIGFwcGx5IGlzIHRvIGNhbGwgdGhlIHRyYW5zZm9ybSdzIGV4cGFuZC4KICAgIHJldHVybiB0cmFuc2Zvcm0uZXhwYW5kKGlucHV0KQoKICBkZWYgcnVuX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAiIiJSdW5uZXIgY2FsbGJhY2sgZm9yIGEgcGlwZWxpbmUucnVuIGNhbGwuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtX25vZGU6IHRyYW5zZm9ybSBub2RlIGZvciB0aGUgdHJhbnNmb3JtIHRvIHJ1bi4KCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW5uZXIgY2xhc3MgbXVzdCBpbXBsZW1lbnQgcnVuX0FiYyBmb3IKICAgIHNvbWUgY2xhc3MgQWJjIGluIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgZXZlcnkgbm9uLWNvbXBvc2l0ZQogICAgdHJhbnNmb3JtIFh5eiBpbiB0aGUgcGlwZWxpbmUuCiAgICAiIiIKICAgIGZvciBjbHMgaW4gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgbSA9IGdldGF0dHIoc2VsZiwgJ3J1bl8lcycgJSBjbHMuX19uYW1lX18sIE5vbmUpCiAgICAgIGlmIG06CiAgICAgICAgcmV0dXJuIG0odHJhbnNmb3JtX25vZGUpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdFeGVjdXRpb24gb2YgWyVzXSBub3QgaW1wbGVtZW50ZWQgaW4gcnVubmVyICVzLicgJSAoCiAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwgc2VsZikpCgoKY2xhc3MgUFZhbHVlQ2FjaGUob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIExvY2FsIGNhY2hlIGZvciBhcmJpdHJhcnkgaW5mb3JtYXRpb24gY29tcHV0ZWQgZm9yIFBWYWx1ZSBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2Rpc2tfYmFja2VkX2NhY2hlPUZhbHNlKToKICAgICMgQ2FjaGUgb2YgdmFsdWVzIGNvbXB1dGVkIHdoaWxlIGEgcnVubmVyIGV4ZWN1dGVzIGEgcGlwZWxpbmUuIFRoaXMgaXMgYQogICAgIyBkaWN0aW9uYXJ5IG9mIFBWYWx1ZXMgYW5kIHRoZWlyIGNvbXB1dGVkIHZhbHVlcy4gTm90ZSB0aGF0IGluIHByaW5jaXBsZQogICAgIyB0aGUgcnVubmVyIGNvdWxkIGNvbnRhaW4gUFZhbHVlcyBmcm9tIHNldmVyYWwgcGlwZWxpbmVzIHdpdGhvdXQgY2xhc2hlcwogICAgIyBzaW5jZSBhIFBWYWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggb25lIGFuZCBvbmx5IG9uZSBwaXBlbGluZS4gVGhlIGtleXMgb2YKICAgICMgdGhlIGRpY3Rpb25hcnkgYXJlIHR1cGxlIG9mIFBWYWx1ZSBpbnN0YW5jZSBhZGRyZXNzZXMgb2J0YWluZWQgdXNpbmcgaWQoKQogICAgIyBhbmQgdGFnIG5hbWVzIGNvbnZlcnRlZCB0byBzdHJpbmdzLgoKICAgIHNlbGYuX3VzZV9kaXNrX2JhY2tlZF9jYWNoZSA9IHVzZV9kaXNrX2JhY2tlZF9jYWNoZQogICAgaWYgdXNlX2Rpc2tfYmFja2VkX2NhY2hlOgogICAgICBzZWxmLl90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgIHNlbGYuX2NhY2hlID0gc2hlbHZlLm9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3RlbXBkaXIsICdzaGVsdmUnKSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NhY2hlID0ge30KCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICBpZiBzZWxmLl91c2VfZGlza19iYWNrZWRfY2FjaGU6CiAgICAgIHNlbGYuX2NhY2hlLmNsb3NlKCkKICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1wZGlyKQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5fY2FjaGUpCgogIGRlZiB0b19jYWNoZV9rZXkoc2VsZiwgdHJhbnNmb3JtLCB0YWcpOgogICAgcmV0dXJuIHRyYW5zZm9ybS5mdWxsX2xhYmVsLCB0YWcKCiAgZGVmIF9lbnN1cmVfcHZhbHVlX2hhc19yZWFsX3Byb2R1Y2VyKHNlbGYsIHB2YWx1ZSk6CiAgICAiIiJFbnN1cmUgdGhlIHBhc3NlZC1pbiBQVmFsdWUgaGFzIHRoZSByZWFsX3Byb2R1Y2VyIGF0dHJpYnV0ZS4KCiAgICBBcmdzOgogICAgICBwdmFsdWU6IEEgUFZhbHVlIGluc3RhbmNlIHdob3NlIGNhY2hlZCB2YWx1ZSBpcyByZXF1ZXN0ZWQuCgogICAgRHVyaW5nIHRoZSBydW5uZXIncyBleGVjdXRpb24gb25seSB0aGUgcmVzdWx0cyBvZiB0aGUgcHJpbWl0aXZlIHRyYW5zZm9ybXMKICAgIGFyZSBjYWNoZWQuIFdoZW5ldmVyIHdlIGFyZSBsb29raW5nIGZvciBhIFBWYWx1ZSB0aGF0IGlzIHRoZSBvdXRwdXQgb2YgYQogICAgY29tcG9zaXRlIHRyYW5zZm9ybSB3ZSBuZWVkIHRvIGZpbmQgdGhlIG91dHB1dCBvZiBpdHMgcmlnaHRtb3N0IHRyYW5zZm9ybQogICAgcGFydC4KICAgICIiIgogICAgaWYgbm90IGhhc2F0dHIocHZhbHVlLCAncmVhbF9wcm9kdWNlcicpOgogICAgICByZWFsX3Byb2R1Y2VyID0gcHZhbHVlLnByb2R1Y2VyCiAgICAgIHdoaWxlIHJlYWxfcHJvZHVjZXIucGFydHM6CiAgICAgICAgcmVhbF9wcm9kdWNlciA9IHJlYWxfcHJvZHVjZXIucGFydHNbLTFdCiAgICAgIHB2YWx1ZS5yZWFsX3Byb2R1Y2VyID0gcmVhbF9wcm9kdWNlcgoKICBkZWYgaXNfY2FjaGVkKHNlbGYsIHBvYmopOgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICAgIGlmIGlzaW5zdGFuY2UocG9iaiwgQXBwbGllZFBUcmFuc2Zvcm0pOgogICAgICB0cmFuc2Zvcm0gPSBwb2JqCiAgICAgIHRhZyA9IE5vbmUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgICAgdHJhbnNmb3JtID0gcG9iai5yZWFsX3Byb2R1Y2VyCiAgICAgIHRhZyA9IHBvYmoudGFnCiAgICByZXR1cm4gc2VsZi50b19jYWNoZV9rZXkodHJhbnNmb3JtLCB0YWcpIGluIHNlbGYuX2NhY2hlCgogIGRlZiBjYWNoZV9vdXRwdXQoc2VsZiwgdHJhbnNmb3JtLCB0YWdfb3JfdmFsdWUsIHZhbHVlPU5vbmUpOgogICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgdmFsdWUgPSB0YWdfb3JfdmFsdWUKICAgICAgdGFnID0gTm9uZQogICAgZWxzZToKICAgICAgdGFnID0gdGFnX29yX3ZhbHVlCiAgICBzZWxmLl9jYWNoZVsKICAgICAgICBzZWxmLnRvX2NhY2hlX2tleSh0cmFuc2Zvcm0sIHRhZyldID0gW3ZhbHVlLCB0cmFuc2Zvcm0ucmVmY291bnRzW3RhZ11dCgogIGRlZiBnZXRfcHZhbHVlKHNlbGYsIHB2YWx1ZSwgZGVjcmVmPVRydWUpOgogICAgIiIiR2V0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgUFZhbHVlIGZyb20gdGhlIGNhY2hlLiIiIgogICAgc2VsZi5fZW5zdXJlX3B2YWx1ZV9oYXNfcmVhbF9wcm9kdWNlcihwdmFsdWUpCiAgICB0cnk6CiAgICAgIHZhbHVlX3dpdGhfcmVmY291bnQgPSBzZWxmLl9jYWNoZVtzZWxmLmtleShwdmFsdWUpXQogICAgICBpZiBkZWNyZWY6CiAgICAgICAgdmFsdWVfd2l0aF9yZWZjb3VudFsxXSAtPSAxCiAgICAgICAgbG9nZ2luZy5kZWJ1ZygnUFZhbHVlIGNvbXB1dGVkIGJ5ICVzICh0YWcgJXMpOiByZWZjb3VudDogJWQgPT4gJWQnLAogICAgICAgICAgICAgICAgICAgICAgcHZhbHVlLnJlYWxfcHJvZHVjZXIuZnVsbF9sYWJlbCwgc2VsZi5rZXkocHZhbHVlKVsxXSwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3dpdGhfcmVmY291bnRbMV0gKyAxLCB2YWx1ZV93aXRoX3JlZmNvdW50WzFdKQogICAgICAgIGlmIHZhbHVlX3dpdGhfcmVmY291bnRbMV0gPD0gMDoKICAgICAgICAgIHNlbGYuY2xlYXJfcHZhbHVlKHB2YWx1ZSkKICAgICAgcmV0dXJuIHZhbHVlX3dpdGhfcmVmY291bnRbMF0KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgaWYgKHB2YWx1ZS50YWcgaXMgbm90IE5vbmUKICAgICAgICAgIGFuZCBzZWxmLnRvX2NhY2hlX2tleShwdmFsdWUucmVhbF9wcm9kdWNlciwgTm9uZSkgaW4gc2VsZi5fY2FjaGUpOgogICAgICAgICMgVGhpcyBpcyBhbiB1bmRlY2xhcmVkLCBlbXB0eSBvdXRwdXQgb2YgYSBEb0ZuIGV4ZWN1dGVkCiAgICAgICAgIyBpbiB0aGUgbG9jYWwgcnVubmVyIGJlZm9yZSB0aGlzIG91dHB1dCB3YXMgcmVmZXJlbmNlZC4KICAgICAgICByZXR1cm4gW10KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBkZWYgZ2V0X3Vud2luZG93ZWRfcHZhbHVlKHNlbGYsIHB2YWx1ZSwgZGVjcmVmPVRydWUpOgogICAgcmV0dXJuIFt2LnZhbHVlIGZvciB2IGluIHNlbGYuZ2V0X3B2YWx1ZShwdmFsdWUsIGRlY3JlZildCgogIGRlZiBjbGVhcl9wdmFsdWUoc2VsZiwgcHZhbHVlKToKICAgICIiIlJlbW92ZXMgYSBQVmFsdWUgZnJvbSB0aGUgY2FjaGUuIiIiCiAgICBpZiBzZWxmLmlzX2NhY2hlZChwdmFsdWUpOgogICAgICBkZWwgc2VsZi5fY2FjaGVbc2VsZi5rZXkocHZhbHVlKV0KCiAgZGVmIGtleShzZWxmLCBwb2JqKToKICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgIHJldHVybiBzZWxmLnRvX2NhY2hlX2tleShwb2JqLnJlYWxfcHJvZHVjZXIsIHBvYmoudGFnKQoKCmNsYXNzIFBpcGVsaW5lU3RhdGUob2JqZWN0KToKICAiIiJTdGF0ZSBvZiB0aGUgUGlwZWxpbmUsIGFzIHJldHVybmVkIGJ5IDphdHRyOmBQaXBlbGluZVJlc3VsdC5zdGF0ZWAuCgogIFRoaXMgaXMgbWVhbnQgdG8gYmUgdGhlIHVuaW9uIG9mIGFsbCB0aGUgc3RhdGVzIGFueSBydW5uZXIgY2FuIHB1dCBhCiAgcGlwZWxpbmUgaW4uIEN1cnJlbnRseSwgaXQgcmVwcmVzZW50cyB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhZmxvdwogIEFQSSBKb2JTdGF0ZSBlbnVtLgogICIiIgogIFVOS05PV04gPSAnVU5LTk9XTicgICMgbm90IHNwZWNpZmllZAogIFNUQVJUSU5HID0gJ1NUQVJUSU5HJyAgIyBub3QgeWV0IHN0YXJ0ZWQKICBTVE9QUEVEID0gJ1NUT1BQRUQnICAjIHBhdXNlZCBvciBub3QgeWV0IHN0YXJ0ZWQKICBSVU5OSU5HID0gJ1JVTk5JTkcnICAjIGN1cnJlbnRseSBydW5uaW5nCiAgRE9ORSA9ICdET05FJyAgIyBzdWNjZXNzZnVsbHkgY29tcGxldGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBGQUlMRUQgPSAnRkFJTEVEJyAgIyBmYWlsZWQgKHRlcm1pbmFsIHN0YXRlKQogIENBTkNFTExFRCA9ICdDQU5DRUxMRUQnICAjIGV4cGxpY2l0bHkgY2FuY2VsbGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBVUERBVEVEID0gJ1VQREFURUQnICAjIHJlcGxhY2VkIGJ5IGFub3RoZXIgam9iICh0ZXJtaW5hbCBzdGF0ZSkKICBEUkFJTklORyA9ICdEUkFJTklORycgICMgc3RpbGwgcHJvY2Vzc2luZywgbm8gbG9uZ2VyIHJlYWRpbmcgZGF0YQogIERSQUlORUQgPSAnRFJBSU5FRCcgICMgZHJhaW5pbmcgY29tcGxldGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBQRU5ESU5HID0gJ1BFTkRJTkcnICMgdGhlIGpvYiBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBpcyBub3QgeWV0IHJ1bm5pbmcuCiAgQ0FOQ0VMTElORyA9ICdDQU5DRUxMSU5HJyAjIGpvYiBoYXMgYmVlbiBleHBsaWNpdGx5IGNhbmNlbGxlZCBhbmQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RvcHBpbmcKCgpjbGFzcyBQaXBlbGluZVJlc3VsdChvYmplY3QpOgogICIiIkEgOmNsYXNzOmBQaXBlbGluZVJlc3VsdGAgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm8gYWJvdXQgYSBwaXBlbGluZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlKToKICAgIHNlbGYuX3N0YXRlID0gc3RhdGUKCiAgQHByb3BlcnR5CiAgZGVmIHN0YXRlKHNlbGYpOgogICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwaXBlbGluZSBleGVjdXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fc3RhdGUKCiAgZGVmIHdhaXRfdW50aWxfZmluaXNoKHNlbGYsIGR1cmF0aW9uPU5vbmUpOgogICAgIiIiV2FpdHMgdW50aWwgdGhlIHBpcGVsaW5lIGZpbmlzaGVzIGFuZCByZXR1cm5zIHRoZSBmaW5hbCBzdGF0dXMuCgogICAgQXJnczoKICAgICAgZHVyYXRpb24gKGludCk6IFRoZSB0aW1lIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIGpvYiB0byBmaW5pc2guCiAgICAgICAgSWYgaXQgaXMgc2V0IHRvIDpkYXRhOmBOb25lYCwgaXQgd2lsbCB3YWl0IGluZGVmaW5pdGVseSB1bnRpbCB0aGUgam9iCiAgICAgICAgaXMgZmluaXNoZWQuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5JT0Vycm9yOiBJZiB0aGVyZSBpcyBhIHBlcnNpc3RlbnQgcHJvYmxlbSBnZXR0aW5nIGpvYgogICAgICAgIGluZm9ybWF0aW9uLgogICAgICB+ZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZEVycm9yOiBJZiB0aGUgcnVubmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcwogICAgICAgIG9wZXJhdGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgZmluYWwgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLCBvciA6ZGF0YTpgTm9uZWAgb24gdGltZW91dC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2FuY2VsKHNlbGYpOgogICAgIiIiQ2FuY2VscyB0aGUgcGlwZWxpbmUgZXhlY3V0aW9uLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuSU9FcnJvcjogSWYgdGhlcmUgaXMgYSBwZXJzaXN0ZW50IHByb2JsZW0gZ2V0dGluZyBqb2IKICAgICAgICBpbmZvcm1hdGlvbi4KICAgICAgfmV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWRFcnJvcjogSWYgdGhlIHJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKICAgICAgICBvcGVyYXRpb24uCgogICAgUmV0dXJuczoKICAgICAgVGhlIGZpbmFsIHN0YXRlIG9mIHRoZSBwaXBlbGluZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgICIiIlJldHVybnMgOmNsYXNzOmB+YXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljUmVzdWx0c2Agb2JqZWN0IHRvCiAgICBxdWVyeSBtZXRyaWNzIGZyb20gdGhlIHJ1bm5lci4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLk5vdEltcGxlbWVudGVkRXJyb3I6IElmIHRoZSBydW5uZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCiAgICAgICAgb3BlcmF0aW9uLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogIGRlZiBhZ2dyZWdhdGVkX3ZhbHVlcyhzZWxmLCBhZ2dyZWdhdG9yX29yX25hbWUpOgogICAgIiIiUmV0dXJuIGEgZGljdCBvZiBzdGVwIG5hbWVzIHRvIHZhbHVlcyBvZiB0aGUgQWdncmVnYXRvci4iIiIKICAgIGxvZ2dpbmcud2FybignJXMgZG9lcyBub3QgaW1wbGVtZW50IGFnZ3JlZ2F0ZWRfdmFsdWVzJywKICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgIHJldHVybiB7fQp9cYcoWCYAAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmUuUnVuVmlzaXRvclgFAAAAY2xhc3NLi0uWh1gVAAAAUGlwZWxpbmVSZXN1bHQuY2FuY2VsWAMAAABkZWZNXgFNawGHWCEAAABQVmFsdWVDYWNoZS5nZXRfdW53aW5kb3dlZF9wdmFsdWVYAwAAAGRlZk0dAU0fAYdYDwAAAFBWYWx1ZUNhY2hlLmtleVgDAAAAZGVmTSUBTSgBh1gsAAAAUFZhbHVlQ2FjaGUuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXJYAwAAAGRlZkviS/KHWBcAAABQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmTUMBTUUBh1g2AAAAUGlwZWxpbmVSdW5uZXIucnVuX3BpcGVsaW5lLlJ1blZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZLkEuWh1gcAAAAUGlwZWxpbmVSdW5uZXIucnVuX3RyYW5zZm9ybVgDAAAAZGVmS7BLwYdYFgAAAFBWYWx1ZUNhY2hlLmdldF9wdmFsdWVYAwAAAGRlZk0HAU0cAYdYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoWAMAAABkZWZNSwFNXQGHWBQAAABQaXBlbGluZVJlc3VsdC5zdGF0ZVgDAAAAZGVmTUYBTUoBh1gTAAAAUFZhbHVlQ2FjaGUuX19sZW5fX1gDAAAAZGVmS9xL3odYFQAAAFBWYWx1ZUNhY2hlLmlzX2NhY2hlZFgDAAAAZGVmS/NL/YdYIAAAAFBpcGVsaW5lUmVzdWx0LmFnZ3JlZ2F0ZWRfdmFsdWVzWAMAAABkZWZNdwFNfAGHWBQAAABQaXBlbGluZVJ1bm5lci5hcHBseVgDAAAAZGVmS5lLq4dYFAAAAFBWYWx1ZUNhY2hlLl9faW5pdF9fWAMAAABkZWZLyEvWh1gLAAAAUFZhbHVlQ2FjaGVYBQAAAGNsYXNzS8NNKAGHWB8AAABQaXBlbGluZVJ1bm5lci5hcHBseV9QVHJhbnNmb3JtWAMAAABkZWZLrEuvh1gOAAAAUGlwZWxpbmVSdW5uZXJYBQAAAGNsYXNzS2tLwYdYEwAAAFBWYWx1ZUNhY2hlLl9fZGVsX19YAwAAAGRlZkvXS9uHWA4AAABQaXBlbGluZVJlc3VsdFgFAAAAY2xhc3NNQAFNfAGHWA0AAABjcmVhdGVfcnVubmVyWAMAAABkZWZLQktph1gYAAAAUFZhbHVlQ2FjaGUuY2xlYXJfcHZhbHVlWAMAAABkZWZNIAFNJAGHWBsAAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmVYAwAAAGRlZkuBS5iHWC8AAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmUuUnVuVmlzaXRvci5fX2luaXRfX1gDAAAAZGVmS41Lj4dYEgAAAFBpcGVsaW5lUnVubmVyLnJ1blgDAAAAZGVmS3dLgIdYFgAAAFBpcGVsaW5lUmVzdWx0Lm1ldHJpY3NYAwAAAGRlZk1sAU11AYdYGAAAAFBWYWx1ZUNhY2hlLmNhY2hlX291dHB1dFgDAAAAZGVmS/5NBgGHWA0AAABQaXBlbGluZVN0YXRlWAUAAABjbGFzc00qAU09AYdYGAAAAFBWYWx1ZUNhY2hlLnRvX2NhY2hlX2tleVgDAAAAZGVmS99L4YdYDwAAAF9nZXRfcnVubmVyX21hcFgDAAAAZGVmSx9LJYd1fXGIKFggAAAAUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVycYlYGwAAAFBpcGVsaW5lUnVubmVyLnJ1bl9waXBlbGluZWiJWBwAAABQaXBlbGluZVJ1bm5lci5ydW5fdHJhbnNmb3JtaIlYFAAAAFBpcGVsaW5lUnVubmVyLmFwcGx5aIlYEgAAAFBpcGVsaW5lUnVubmVyLnJ1bmiJWB8AAABQaXBlbGluZVJ1bm5lci5hcHBseV9QVHJhbnNmb3JtaIlYDQAAAFBpcGVsaW5lU3RhdGVoiVgVAAAAUGlwZWxpbmVSZXN1bHQuY2FuY2VsaIlYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoaIlYDgAAAFBpcGVsaW5lUnVubmVyaIlYDgAAAFBpcGVsaW5lUmVzdWx0aIlYFgAAAFBpcGVsaW5lUmVzdWx0Lm1ldHJpY3NoiXVjZG9jdXRpbHMubm9kZXMKcmVwcnVuaWNvZGUKcYpYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVycYuFgXGMfXGNYnRxjlUjYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IoWEBdAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkFuIGV4ZWN1dG9yIHRoYXQgc2NoZWR1bGVzIGFuZCBleGVjdXRlcyBhcHBsaWVkIHB0cmFuc2Zvcm1zLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBsb2dnaW5nCmltcG9ydCBRdWV1ZQppbXBvcnQgc3lzCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHRyYWNlYmFjawpmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtWYWx1ZURpY3Rpb25hcnkKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY3NDb250YWluZXIKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgU2NvcGVkTWV0cmljc0NvbnRhaW5lcgoKCmNsYXNzIF9FeGVjdXRvclNlcnZpY2Uob2JqZWN0KToKICAiIiJUaHJlYWQgcG9vbCBmb3IgZXhlY3V0aW5nIHRhc2tzIGluIHBhcmFsbGVsLiIiIgoKICBjbGFzcyBDYWxsYWJsZVRhc2sob2JqZWN0KToKCiAgICBkZWYgY2FsbChzZWxmKToKICAgICAgcGFzcwoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZik6CiAgICAgIHJldHVybiBOb25lCgogIGNsYXNzIF9FeGVjdXRvclNlcnZpY2VXb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CiAgICAiIiJXb3JrZXIgdGhyZWFkIGZvciBleGVjdXRpbmcgYSBzaW5nbGUgdGFzayBhdCBhIHRpbWUuIiIiCgogICAgIyBBbW91bnQgdG8gYmxvY2sgd2FpdGluZyBmb3IgZ2V0dGluZyBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlIGluIHNlY29uZHMuCiAgICBUSU1FT1VUID0gNQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwgaW5kZXgpOgogICAgICBzdXBlcihfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCiAgICAgIHNlbGYuX2luZGV4ID0gaW5kZXgKICAgICAgc2VsZi5fZGVmYXVsdF9uYW1lID0gJ0V4ZWN1dG9yU2VydmljZVdvcmtlci0nICsgc3RyKGluZGV4KQogICAgICBzZWxmLl91cGRhdGVfbmFtZSgpCiAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkID0gRmFsc2UKCiAgICAgICMgU3RvcCB3b3JrZXIgdGhyZWFkIHdoZW4gbWFpbiB0aHJlYWQgZXhpdHMuCiAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQogICAgICBzZWxmLnN0YXJ0KCkKCiAgICBkZWYgX3VwZGF0ZV9uYW1lKHNlbGYsIHRhc2s9Tm9uZSk6CiAgICAgIGlmIHRhc2sgYW5kIHRhc2submFtZToKICAgICAgICBuYW1lID0gdGFzay5uYW1lCiAgICAgIGVsc2U6CiAgICAgICAgbmFtZSA9IHNlbGYuX2RlZmF1bHRfbmFtZQogICAgICBzZWxmLm5hbWUgPSAnVGhyZWFkOiAlZCwgJXMgKCVzKScgJSAoCiAgICAgICAgICBzZWxmLl9pbmRleCwgbmFtZSwgJ2V4ZWN1dGluZycgaWYgdGFzayBlbHNlICdpZGxlJykKCiAgICBkZWYgX2dldF90YXNrX29yX25vbmUoc2VsZik6CiAgICAgIHRyeToKICAgICAgICAjIERvIG5vdCBibG9jayBpbmRlZmluaXRlbHksIG90aGVyd2lzZSB3ZSBtYXkgbm90IGFjdCBmb3IgYSByZXF1ZXN0ZWQKICAgICAgICAjIHNodXRkb3duLgogICAgICAgIHJldHVybiBzZWxmLnF1ZXVlLmdldCgKICAgICAgICAgICAgdGltZW91dD1fRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuVElNRU9VVCkKICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgd2hpbGUgbm90IHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkOgogICAgICAgIHRhc2sgPSBzZWxmLl9nZXRfdGFza19vcl9ub25lKCkKICAgICAgICBpZiB0YXNrOgogICAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBub3Qgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQ6CiAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlX25hbWUodGFzaykKICAgICAgICAgICAgICB0YXNrLmNhbGwoKQogICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9uYW1lKCkKICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIHNlbGYucXVldWUudGFza19kb25lKCkKCiAgICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkID0gVHJ1ZQoKICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3dvcmtlcnMpOgogICAgc2VsZi5xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgIHNlbGYud29ya2VycyA9IFtfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIoCiAgICAgICAgc2VsZi5xdWV1ZSwgaSkgZm9yIGkgaW4gcmFuZ2UobnVtX3dvcmtlcnMpXQogICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQgPSBGYWxzZQoKICBkZWYgc3VibWl0KHNlbGYsIHRhc2spOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFzaywgX0V4ZWN1dG9yU2VydmljZS5DYWxsYWJsZVRhc2spCiAgICBpZiBub3Qgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQ6CiAgICAgIHNlbGYucXVldWUucHV0KHRhc2spCgogIGRlZiBhd2FpdF9jb21wbGV0aW9uKHNlbGYpOgogICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CiAgICAgIHdvcmtlci5qb2luKCkKCiAgZGVmIHNodXRkb3duKHNlbGYpOgogICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQgPSBUcnVlCgogICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CiAgICAgIHdvcmtlci5zaHV0ZG93bigpCgogICAgIyBDb25zdW1lIGFsbCB0aGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBxdWV1ZQogICAgd2hpbGUgbm90IHNlbGYucXVldWUuZW1wdHkoKToKICAgICAgdHJ5OgogICAgICAgIHNlbGYucXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgc2VsZi5xdWV1ZS50YXNrX2RvbmUoKQogICAgICBleGNlcHQgUXVldWUuRW1wdHk6CiAgICAgICAgY29udGludWUKICAgICMgQWxsIGV4aXN0aW5nIHRocmVhZHMgd2lsbCBldmVudHVhbGx5IHRlcm1pbmF0ZSAoYWZ0ZXIgdGhleSBjb21wbGV0ZSB0aGVpcgogICAgIyBsYXN0IHRhc2spLgoKCmNsYXNzIF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUob2JqZWN0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yX3NlcnZpY2UsIHNjaGVkdWxlZCk6CiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UgPSBleGVjdXRvcl9zZXJ2aWNlCiAgICBzZWxmLnNjaGVkdWxlZCA9IHNjaGVkdWxlZAoKICBkZWYgc2NoZWR1bGUoc2VsZiwgd29yayk6CiAgICBzZWxmLnNjaGVkdWxlZC5hZGQod29yaykKICAgIHNlbGYuZXhlY3V0b3Jfc2VydmljZS5zdWJtaXQod29yaykKCiAgZGVmIGNvbXBsZXRlKHNlbGYsIGNvbXBsZXRlZF93b3JrKToKICAgIHNlbGYuc2NoZWR1bGVkLnJlbW92ZShjb21wbGV0ZWRfd29yaykKCgpjbGFzcyBfUGFyYWxsZWxFdmFsdWF0aW9uU3RhdGUoX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZSk6CiAgIiIiQSBUcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUgd2l0aCB1bmxpbWl0ZWQgcGFyYWxsZWxpc20uCgogIEFueSBUcmFuc2Zvcm1FeGVjdXRvciBzY2hlZHVsZWQgd2lsbCBiZSBpbW1lZGlhdGVseSBzdWJtaXR0ZWQgdG8gdGhlCiAgRXhlY3V0b3JTZXJ2aWNlLgoKICBBIHByaW5jaXBhbCB1c2Ugb2YgdGhpcyBpcyBmb3IgZXZhbHVhdG9ycyB0aGF0IGNhbiBnZW5lcmF0ZSBvdXRwdXQgYnVuZGxlcwogIG9ubHkgdXNpbmcgdGhlIGlucHV0IGJ1bmRsZSAoZS5nLiBQYXJEbykuCiAgIiIiCiAgcGFzcwoKCmNsYXNzIF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUoX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZSk6CiAgIiIiQSBUcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUgd2l0aCBhIHNpbmdsZSB3b3JrIHF1ZXVlLgoKICBBbnkgVHJhbnNmb3JtRXhlY3V0b3Igc2NoZWR1bGVkIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSB3b3JrIHF1ZXVlLiBPbmx5IG9uZQogIGl0ZW0gb2Ygd29yayB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUgRXhlY3V0b3JTZXJ2aWNlIGF0IGFueSB0aW1lLgoKICBBIHByaW5jaXBhbCB1c2Ugb2YgdGhpcyBpcyBmb3IgZXZhbHVhdG9ycyB0aGF0IGtlZXBzIGEgZ2xvYmFsIHN0YXRlIHN1Y2ggYXMKICBfR3JvdXBCeUtleU9ubHkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvcl9zZXJ2aWNlLCBzY2hlZHVsZWQpOgogICAgc3VwZXIoX1NlcmlhbEV2YWx1YXRpb25TdGF0ZSwgc2VsZikuX19pbml0X18oZXhlY3V0b3Jfc2VydmljZSwgc2NoZWR1bGVkKQogICAgc2VsZi5zZXJpYWxfcXVldWUgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCiAgICBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID0gTm9uZQogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCiAgZGVmIGNvbXBsZXRlKHNlbGYsIGNvbXBsZXRlZF93b3JrKToKICAgIHNlbGYuX3VwZGF0ZV9jdXJyZW50bHlfZXZhbHVhdGluZyhOb25lLCBjb21wbGV0ZWRfd29yaykKICAgIHN1cGVyKF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUsIHNlbGYpLmNvbXBsZXRlKGNvbXBsZXRlZF93b3JrKQoKICBkZWYgc2NoZWR1bGUoc2VsZiwgbmV3X3dvcmspOgogICAgc2VsZi5fdXBkYXRlX2N1cnJlbnRseV9ldmFsdWF0aW5nKG5ld193b3JrLCBOb25lKQoKICBkZWYgX3VwZGF0ZV9jdXJyZW50bHlfZXZhbHVhdGluZyhzZWxmLCBuZXdfd29yaywgY29tcGxldGVkX3dvcmspOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBuZXdfd29yazoKICAgICAgICBzZWxmLnNlcmlhbF9xdWV1ZS5hcHBlbmQobmV3X3dvcmspCiAgICAgIGlmIGNvbXBsZXRlZF93b3JrOgogICAgICAgIGFzc2VydCBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID09IGNvbXBsZXRlZF93b3JrCiAgICAgICAgc2VsZi5jdXJyZW50bHlfZXZhbHVhdGluZyA9IE5vbmUKICAgICAgaWYgc2VsZi5zZXJpYWxfcXVldWUgYW5kIG5vdCBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nOgogICAgICAgIG5leHRfd29yayA9IHNlbGYuc2VyaWFsX3F1ZXVlLnBvcCgpCiAgICAgICAgc2VsZi5jdXJyZW50bHlfZXZhbHVhdGluZyA9IG5leHRfd29yawogICAgICAgIHN1cGVyKF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUsIHNlbGYpLnNjaGVkdWxlKG5leHRfd29yaykKCgpjbGFzcyBfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcyhvYmplY3QpOgogICIiIlNjaGVkdWxlcyBhbmQgY29tcGxldGVzIFRyYW5zZm9ybUV4ZWN1dG9ycy4KCiAgQ29udHJvbHMgdGhlIGNvbmN1cnJlbmN5IGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgYXBwbGllZCB0cmFuc2Zvcm0gdGhlIGV4ZWN1dG9yCiAgZXhpc3RzIGZvci4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yX3NlcnZpY2UpOgogICAgc2VsZi5fZXhlY3V0b3Jfc2VydmljZSA9IGV4ZWN1dG9yX3NlcnZpY2UKICAgIHNlbGYuX3NjaGVkdWxlZCA9IHNldCgpCiAgICBzZWxmLl9wYXJhbGxlbCA9IF9QYXJhbGxlbEV2YWx1YXRpb25TdGF0ZSgKICAgICAgICBzZWxmLl9leGVjdXRvcl9zZXJ2aWNlLCBzZWxmLl9zY2hlZHVsZWQpCiAgICBzZWxmLl9zZXJpYWxfY2FjaGUgPSBXZWFrVmFsdWVEaWN0aW9uYXJ5KCkKCiAgZGVmIHBhcmFsbGVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3BhcmFsbGVsCgogIGRlZiBzZXJpYWwoc2VsZiwgc3RlcCk6CiAgICBjYWNoZWQgPSBzZWxmLl9zZXJpYWxfY2FjaGUuZ2V0KHN0ZXApCiAgICBpZiBub3QgY2FjaGVkOgogICAgICBjYWNoZWQgPSBfU2VyaWFsRXZhbHVhdGlvblN0YXRlKHNlbGYuX2V4ZWN1dG9yX3NlcnZpY2UsIHNlbGYuX3NjaGVkdWxlZCkKICAgICAgc2VsZi5fc2VyaWFsX2NhY2hlW3N0ZXBdID0gY2FjaGVkCiAgICByZXR1cm4gY2FjaGVkCgogIEBwcm9wZXJ0eQogIGRlZiBleGVjdXRvcnMoc2VsZik6CiAgICByZXR1cm4gZnJvemVuc2V0KHNlbGYuX3NjaGVkdWxlZCkKCgpjbGFzcyBfQ29tcGxldGlvbkNhbGxiYWNrKG9iamVjdCk6CiAgIiIiVGhlIGRlZmF1bHQgY29tcGxldGlvbiBjYWxsYmFjay4KCiAgVGhlIGRlZmF1bHQgY29tcGxldGlvbiBjYWxsYmFjayBpcyB1c2VkIHRvIGNvbXBsZXRlIHRyYW5zZm9ybSBldmFsdWF0aW9ucwogIHRoYXQgYXJlIHRyaWdnZXJlZCBkdWUgdG8gdGhlIGFycml2YWwgb2YgZWxlbWVudHMgZnJvbSBhbiB1cHN0cmVhbSB0cmFuc2Zvcm0sCiAgb3IgZm9yIGEgc291cmNlIHRyYW5zZm9ybS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYWxsX3VwZGF0ZXMsIHRpbWVyX2ZpcmluZ3M9Tm9uZSk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2FsbF91cGRhdGVzID0gYWxsX3VwZGF0ZXMKICAgIHNlbGYuX3RpbWVyX2ZpcmluZ3MgPSB0aW1lcl9maXJpbmdzIG9yIFtdCgogIGRlZiBoYW5kbGVfcmVzdWx0KHNlbGYsIHRyYW5zZm9ybV9leGVjdXRvciwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fcmVzdWx0KToKICAgIG91dHB1dF9jb21taXR0ZWRfYnVuZGxlcyA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5oYW5kbGVfcmVzdWx0KAogICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNlbGYuX3RpbWVyX2ZpcmluZ3MsIHRyYW5zZm9ybV9yZXN1bHQpCiAgICBmb3Igb3V0cHV0X2NvbW1pdHRlZF9idW5kbGUgaW4gb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzOgogICAgICBzZWxmLl9hbGxfdXBkYXRlcy5vZmZlcihfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fRXhlY3V0b3JVcGRhdGUoCiAgICAgICAgICB0cmFuc2Zvcm1fZXhlY3V0b3IsCiAgICAgICAgICBjb21taXR0ZWRfYnVuZGxlPW91dHB1dF9jb21taXR0ZWRfYnVuZGxlKSkKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdHJhbnNmb3JtX3Jlc3VsdC51bnByb2Nlc3NlZF9idW5kbGVzOgogICAgICBzZWxmLl9hbGxfdXBkYXRlcy5vZmZlcigKICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9FeGVjdXRvclVwZGF0ZSgKICAgICAgICAgICAgICB0cmFuc2Zvcm1fZXhlY3V0b3IsCiAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlPXVucHJvY2Vzc2VkX2J1bmRsZSkpCiAgICByZXR1cm4gb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzCgogIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHRyYW5zZm9ybV9leGVjdXRvciwgZXhjZXB0aW9uKToKICAgIHNlbGYuX2FsbF91cGRhdGVzLm9mZmVyKAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9FeGVjdXRvclVwZGF0ZSgKICAgICAgICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yLCBleGNlcHRpb249ZXhjZXB0aW9uKSkKCgpjbGFzcyBUcmFuc2Zvcm1FeGVjdXRvcihfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzayk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBUcmFuc2Zvcm1FeGVjdXRvciB3aWxsIGV2YWx1YXRlIGEgYnVuZGxlIHVzaW5nIGFuIGFwcGxpZWQgcHRyYW5zZm9ybS4KCiAgQSBDYWxsYWJsZVRhc2sgcmVzcG9uc2libGUgZm9yIGNvbnN0cnVjdGluZyBhIFRyYW5zZm9ybUV2YWx1YXRvciBhbmQKICBldmFsdWF0aW5nIGl0IG9uIHNvbWUgYnVuZGxlIG9mIGlucHV0LCBhbmQgcmVnaXN0ZXJpbmcgdGhlIHJlc3VsdCB1c2luZyB0aGUKICBjb21wbGV0aW9uIGNhbGxiYWNrLgogICIiIgoKICBfTUFYX1JFVFJZX1BFUl9CVU5ETEUgPSA0CgogIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LCBldmFsdWF0aW9uX2NvbnRleHQsCiAgICAgICAgICAgICAgIGlucHV0X2J1bmRsZSwgZmlyZWRfdGltZXJzLCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGNvbXBsZXRpb25fY2FsbGJhY2ssIHRyYW5zZm9ybV9ldmFsdWF0aW9uX3N0YXRlKToKICAgIHNlbGYuX3RyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkgPSB0cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2lucHV0X2J1bmRsZSA9IGlucHV0X2J1bmRsZQogICAgc2VsZi5fZmlyZWRfdGltZXJzID0gZmlyZWRfdGltZXJzCiAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYuX2NvbXBsZXRpb25fY2FsbGJhY2sgPSBjb21wbGV0aW9uX2NhbGxiYWNrCiAgICBzZWxmLl90cmFuc2Zvcm1fZXZhbHVhdGlvbl9zdGF0ZSA9IHRyYW5zZm9ybV9ldmFsdWF0aW9uX3N0YXRlCiAgICBzZWxmLl9zaWRlX2lucHV0X3ZhbHVlcyA9IHt9CiAgICBzZWxmLmJsb2NrZWQgPSBGYWxzZQogICAgc2VsZi5fY2FsbF9jb3VudCA9IDAKICAgIHNlbGYuX3JldHJ5X2NvdW50ID0gMAogICAgc2VsZi5fbWF4X3JldHJpZXNfcGVyX2J1bmRsZSA9IFRyYW5zZm9ybUV4ZWN1dG9yLl9NQVhfUkVUUllfUEVSX0JVTkRMRQoKICBkZWYgY2FsbChzZWxmKToKICAgIHNlbGYuX2NhbGxfY291bnQgKz0gMQogICAgYXNzZXJ0IHNlbGYuX2NhbGxfY291bnQgPD0gKDEgKyBsZW4oc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnNpZGVfaW5wdXRzKSkKICAgIG1ldHJpY3NfY29udGFpbmVyID0gTWV0cmljc0NvbnRhaW5lcihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCkKICAgIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lciA9IFNjb3BlZE1ldHJpY3NDb250YWluZXIobWV0cmljc19jb250YWluZXIpCgogICAgZm9yIHNpZGVfaW5wdXQgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnNpZGVfaW5wdXRzOgogICAgICBpZiBzaWRlX2lucHV0IG5vdCBpbiBzZWxmLl9zaWRlX2lucHV0X3ZhbHVlczoKICAgICAgICBoYXNfcmVzdWx0LCB2YWx1ZSA9ICgKICAgICAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmdldF92YWx1ZV9vcl9zY2hlZHVsZV9hZnRlcl9vdXRwdXQoCiAgICAgICAgICAgICAgICBzaWRlX2lucHV0LCBzZWxmKSkKICAgICAgICBpZiBub3QgaGFzX3Jlc3VsdDoKICAgICAgICAgICMgTW9uaXRvciB0YXNrIHdpbGwgcmVzY2hlZHVsZSB0aGlzIGV4ZWN1dG9yIG9uY2UgdGhlIHNpZGUgaW5wdXQgaXMKICAgICAgICAgICMgYXZhaWxhYmxlLgogICAgICAgICAgcmV0dXJuCiAgICAgICAgc2VsZi5fc2lkZV9pbnB1dF92YWx1ZXNbc2lkZV9pbnB1dF0gPSB2YWx1ZQogICAgc2lkZV9pbnB1dF92YWx1ZXMgPSBbc2VsZi5fc2lkZV9pbnB1dF92YWx1ZXNbc2lkZV9pbnB1dF0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzaWRlX2lucHV0IGluIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0c10KCiAgICB3aGlsZSBzZWxmLl9yZXRyeV9jb3VudCA8IHNlbGYuX21heF9yZXRyaWVzX3Blcl9idW5kbGU6CiAgICAgIHRyeToKICAgICAgICBzZWxmLmF0dGVtcHRfY2FsbChtZXRyaWNzX2NvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfbWV0cmljc19jb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9pbnB1dF92YWx1ZXMpCiAgICAgICAgYnJlYWsKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHNlbGYuX3JldHJ5X2NvdW50ICs9IDEKICAgICAgICBsb2dnaW5nLmVycm9yKAogICAgICAgICAgICAnRXhjZXB0aW9uIGF0IGJ1bmRsZSAlciwgZHVlIHRvIGFuIGV4Y2VwdGlvbi5cbiAlcycsCiAgICAgICAgICAgIHNlbGYuX2lucHV0X2J1bmRsZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKICAgICAgICBpZiBzZWxmLl9yZXRyeV9jb3VudCA9PSBzZWxmLl9tYXhfcmV0cmllc19wZXJfYnVuZGxlOgogICAgICAgICAgbG9nZ2luZy5lcnJvcignR2l2aW5nIHVwIGFmdGVyICVzIGF0dGVtcHRzLicsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heF9yZXRyaWVzX3Blcl9idW5kbGUpCiAgICAgICAgICBzZWxmLl9jb21wbGV0aW9uX2NhbGxiYWNrLmhhbmRsZV9leGNlcHRpb24oc2VsZiwgZSkKCiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQubWV0cmljcygpLmNvbW1pdF9waHlzaWNhbCgKICAgICAgICBzZWxmLl9pbnB1dF9idW5kbGUsCiAgICAgICAgbWV0cmljc19jb250YWluZXIuZ2V0X2N1bXVsYXRpdmUoKSkKICAgIHNlbGYuX3RyYW5zZm9ybV9ldmFsdWF0aW9uX3N0YXRlLmNvbXBsZXRlKHNlbGYpCgogIGRlZiBhdHRlbXB0X2NhbGwoc2VsZiwgbWV0cmljc19jb250YWluZXIsCiAgICAgICAgICAgICAgICAgICBzY29wZWRfbWV0cmljc19jb250YWluZXIsCiAgICAgICAgICAgICAgICAgICBzaWRlX2lucHV0X3ZhbHVlcyk6CiAgICBldmFsdWF0b3IgPSBzZWxmLl90cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LmdldF9ldmFsdWF0b3IoCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLCBzZWxmLl9pbnB1dF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dF92YWx1ZXMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcikKCiAgICB3aXRoIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcjoKICAgICAgZXZhbHVhdG9yLnN0YXJ0X2J1bmRsZSgpCgogICAgaWYgc2VsZi5fZmlyZWRfdGltZXJzOgogICAgICBmb3IgdGltZXJfZmlyaW5nIGluIHNlbGYuX2ZpcmVkX3RpbWVyczoKICAgICAgICBldmFsdWF0b3IucHJvY2Vzc190aW1lcl93cmFwcGVyKHRpbWVyX2ZpcmluZykKCiAgICBpZiBzZWxmLl9pbnB1dF9idW5kbGU6CiAgICAgIGZvciB2YWx1ZSBpbiBzZWxmLl9pbnB1dF9idW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKCk6CiAgICAgICAgZXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudCh2YWx1ZSkKCiAgICB3aXRoIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcjoKICAgICAgcmVzdWx0ID0gZXZhbHVhdG9yLmZpbmlzaF9idW5kbGUoKQogICAgICByZXN1bHQubG9naWNhbF9tZXRyaWNfdXBkYXRlcyA9IG1ldHJpY3NfY29udGFpbmVyLmdldF9jdW11bGF0aXZlKCkKCiAgICBpZiBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuaGFzX2NhY2hlOgogICAgICBmb3IgdW5jb21taXR0ZWRfYnVuZGxlIGluIHJlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlczoKICAgICAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuYXBwZW5kX3RvX2NhY2hlKAogICAgICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0sIHVuY29tbWl0dGVkX2J1bmRsZS50YWcsCiAgICAgICAgICAgIHVuY29tbWl0dGVkX2J1bmRsZS5nZXRfZWxlbWVudHNfaXRlcmFibGUoKSkKICAgICAgdW5kZWNsYXJlZF90YWdfdmFsdWVzID0gcmVzdWx0LnVuZGVjbGFyZWRfdGFnX3ZhbHVlcwogICAgICBpZiB1bmRlY2xhcmVkX3RhZ192YWx1ZXM6CiAgICAgICAgZm9yIHRhZywgdmFsdWUgaW4gdW5kZWNsYXJlZF90YWdfdmFsdWVzLml0ZXJpdGVtcygpOgogICAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmFwcGVuZF90b19jYWNoZSgKICAgICAgICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0sIHRhZywgdmFsdWUpCgogICAgc2VsZi5fY29tcGxldGlvbl9jYWxsYmFjay5oYW5kbGVfcmVzdWx0KHNlbGYsIHNlbGYuX2lucHV0X2J1bmRsZSwgcmVzdWx0KQogICAgcmV0dXJuIHJlc3VsdAoKCmNsYXNzIEV4ZWN1dG9yKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHNlbGYuX2V4ZWN1dG9yID0gX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IoKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgc3RhcnQoc2VsZiwgcm9vdHMpOgogICAgc2VsZi5fZXhlY3V0b3Iuc3RhcnQocm9vdHMpCgogIGRlZiBhd2FpdF9jb21wbGV0aW9uKHNlbGYpOgogICAgc2VsZi5fZXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbigpCgoKY2xhc3MgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iob2JqZWN0KToKICAiIiJBbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmb3IgRXhlY3V0b3IuIiIiCgogIE5VTV9XT1JLRVJTID0gMQoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfdG9fY29uc3VtZXJzLCB0cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LAogICAgICAgICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlID0gX0V4ZWN1dG9yU2VydmljZSgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5OVU1fV09SS0VSUykKICAgIHNlbGYudHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2VzID0gX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMoCiAgICAgICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlKQogICAgc2VsZi52YWx1ZV90b19jb25zdW1lcnMgPSB2YWx1ZV90b19jb25zdW1lcnMKICAgIHNlbGYudHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeSA9IHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkKICAgIHNlbGYuZXZhbHVhdGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLmFsbF91cGRhdGVzID0gX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1R5cGVkVXBkYXRlUXVldWUoCiAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlKQogICAgc2VsZi52aXNpYmxlX3VwZGF0ZXMgPSBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZSgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKQogICAgc2VsZi5kZWZhdWx0X2NvbXBsZXRpb25fY2FsbGJhY2sgPSBfQ29tcGxldGlvbkNhbGxiYWNrKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgc2VsZi5hbGxfdXBkYXRlcykKCiAgZGVmIHN0YXJ0KHNlbGYsIHJvb3RzKToKICAgIHNlbGYucm9vdF9ub2RlcyA9IGZyb3plbnNldChyb290cykKICAgIHNlbGYuYWxsX25vZGVzID0gZnJvemVuc2V0KAogICAgICAgIGl0ZXJ0b29scy5jaGFpbigKICAgICAgICAgICAgcm9vdHMsCiAgICAgICAgICAgICppdGVydG9vbHMuY2hhaW4oc2VsZi52YWx1ZV90b19jb25zdW1lcnMudmFsdWVzKCkpKSkKICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXMgPSB7fQogICAgZm9yIHJvb3Rfbm9kZSBpbiBzZWxmLnJvb3Rfbm9kZXM6CiAgICAgIHByb3ZpZGVyID0gKHNlbGYudHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAuZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVyKHJvb3Rfbm9kZSkpCiAgICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXNbcm9vdF9ub2RlXSA9IHByb3ZpZGVyLmdldF9yb290X2J1bmRsZXMoKQogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdCgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2soc2VsZikpCgogIGRlZiBhd2FpdF9jb21wbGV0aW9uKHNlbGYpOgogICAgdXBkYXRlID0gc2VsZi52aXNpYmxlX3VwZGF0ZXMudGFrZSgpCiAgICB0cnk6CiAgICAgIGlmIHVwZGF0ZS5leGNlcHRpb246CiAgICAgICAgdCwgdiwgdGIgPSB1cGRhdGUuZXhjX2luZm8KICAgICAgICByYWlzZSB0LCB2LCB0YgogICAgZmluYWxseToKICAgICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLnNodXRkb3duKCkKICAgICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLmF3YWl0X2NvbXBsZXRpb24oKQoKICBkZWYgc2NoZWR1bGVfY29uc3VtZXJzKHNlbGYsIGNvbW1pdHRlZF9idW5kbGUpOgogICAgaWYgY29tbWl0dGVkX2J1bmRsZS5wY29sbGVjdGlvbiBpbiBzZWxmLnZhbHVlX3RvX2NvbnN1bWVyczoKICAgICAgY29uc3VtZXJzID0gc2VsZi52YWx1ZV90b19jb25zdW1lcnNbY29tbWl0dGVkX2J1bmRsZS5wY29sbGVjdGlvbl0KICAgICAgZm9yIGFwcGxpZWRfcHRyYW5zZm9ybSBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5zY2hlZHVsZV9jb25zdW1wdGlvbihhcHBsaWVkX3B0cmFuc2Zvcm0sIGNvbW1pdHRlZF9idW5kbGUsIFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbXBsZXRpb25fY2FsbGJhY2spCgogIGRlZiBzY2hlZHVsZV91bnByb2Nlc3NlZF9idW5kbGUoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlKToKICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXNbYXBwbGllZF9wdHJhbnNmb3JtXS5hcHBlbmQodW5wcm9jZXNzZWRfYnVuZGxlKQoKICBkZWYgc2NoZWR1bGVfY29uc3VtcHRpb24oc2VsZiwgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtLCBjb21taXR0ZWRfYnVuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlZF90aW1lcnMsIG9uX2NvbXBsZXRlKToKICAgICIiIlNjaGVkdWxlcyBldmFsdWF0aW9uIG9mIHRoZSBnaXZlbiBidW5kbGUgd2l0aCB0aGUgdHJhbnNmb3JtLiIiIgogICAgYXNzZXJ0IGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybQogICAgYXNzZXJ0IGNvbW1pdHRlZF9idW5kbGUKICAgIGFzc2VydCBvbl9jb21wbGV0ZQogICAgaWYgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LnNob3VsZF9leGVjdXRlX3NlcmlhbGx5KAogICAgICAgIGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgIHRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlID0gc2VsZi50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMuc2VyaWFsKAogICAgICAgICAgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtKQogICAgZWxzZToKICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UgPSBzZWxmLnRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlcy5wYXJhbGxlbCgpCgogICAgdHJhbnNmb3JtX2V4ZWN1dG9yID0gVHJhbnNmb3JtRXhlY3V0b3IoCiAgICAgICAgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LCBzZWxmLmV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBjb21taXR0ZWRfYnVuZGxlLCBmaXJlZF90aW1lcnMsIGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBvbl9jb21wbGV0ZSwgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UpCiAgICB0cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZS5zY2hlZHVsZSh0cmFuc2Zvcm1fZXhlY3V0b3IpCgogIGNsYXNzIF9UeXBlZFVwZGF0ZVF1ZXVlKG9iamVjdCk6CiAgICAiIiJUeXBlIGNoZWNraW5nIHVwZGF0ZSBxdWV1ZSB3aXRoIGJsb2NraW5nIGFuZCBub24tYmxvY2tpbmcgb3BlcmF0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbV90eXBlKToKICAgICAgc2VsZi5faXRlbV90eXBlID0gaXRlbV90eXBlCiAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQoKICAgIGRlZiBwb2xsKHNlbGYpOgogICAgICB0cnk6CiAgICAgICAgaXRlbSA9IHNlbGYuX3F1ZXVlLmdldF9ub3dhaXQoKQogICAgICAgIHNlbGYuX3F1ZXVlLnRhc2tfZG9uZSgpCiAgICAgICAgcmV0dXJuICBpdGVtCiAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiB0YWtlKHNlbGYpOgogICAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBRdWV1ZS5RdWV1ZS5nZXQoKSBkb2VzIG5vdCBwcm9wYWdhdGUKICAgICAgIyBLZXlib2FyZEludGVycnVwdHMgd2hlbiBhIHRpbWVvdXQgaXMgbm90IHVzZWQuICBXZSB0aGVyZWZvcmUgdXNlIGEKICAgICAgIyBvbmUtc2Vjb25kIHRpbWVvdXQgaW4gdGhlIGZvbGxvd2luZyBsb29wIHRvIGFsbG93IEtleWJvYXJkSW50ZXJydXB0cwogICAgICAjIHRvIGJlIGNvcnJlY3RseSBwcm9wYWdhdGVkLgogICAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgIGl0ZW0gPSBzZWxmLl9xdWV1ZS5nZXQodGltZW91dD0xKQogICAgICAgICAgc2VsZi5fcXVldWUudGFza19kb25lKCkKICAgICAgICAgIHJldHVybiBpdGVtCiAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgogICAgICAgICAgcGFzcwoKICAgIGRlZiBvZmZlcihzZWxmLCBpdGVtKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXRlbSwgc2VsZi5faXRlbV90eXBlKQogICAgICBzZWxmLl9xdWV1ZS5wdXRfbm93YWl0KGl0ZW0pCgogIGNsYXNzIF9FeGVjdXRvclVwZGF0ZShvYmplY3QpOgogICAgIiIiQW4gaW50ZXJuYWwgc3RhdHVzIHVwZGF0ZSBvbiB0aGUgc3RhdGUgb2YgdGhlIGV4ZWN1dG9yLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm1fZXhlY3V0b3IsIGNvbW1pdHRlZF9idW5kbGU9Tm9uZSwKICAgICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9idW5kbGU9Tm9uZSwgZXhjZXB0aW9uPU5vbmUpOgogICAgICBzZWxmLnRyYW5zZm9ybV9leGVjdXRvciA9IHRyYW5zZm9ybV9leGVjdXRvcgogICAgICAjIEV4YWN0bHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIG5vdC1Ob25lCiAgICAgIGFzc2VydCBzdW0oWwogICAgICAgICAgYm9vbChjb21taXR0ZWRfYnVuZGxlKSwKICAgICAgICAgIGJvb2wodW5wcm9jZXNzZWRfYnVuZGxlKSwKICAgICAgICAgIGJvb2woZXhjZXB0aW9uKV0pID09IDEKICAgICAgc2VsZi5jb21taXR0ZWRfYnVuZGxlID0gY29tbWl0dGVkX2J1bmRsZQogICAgICBzZWxmLnVucHJvY2Vzc2VkX2J1bmRsZSA9IHVucHJvY2Vzc2VkX2J1bmRsZQogICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbgogICAgICBzZWxmLmV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgaWYgc2VsZi5leGNfaW5mb1sxXSBpcyBub3QgZXhjZXB0aW9uOgogICAgICAgICMgTm90IHRoZSByaWdodCBleGNlcHRpb24uCiAgICAgICAgc2VsZi5leGNfaW5mbyA9IChleGNlcHRpb24sIE5vbmUsIE5vbmUpCgogIGNsYXNzIF9WaXNpYmxlRXhlY3V0b3JVcGRhdGUob2JqZWN0KToKICAgICIiIkFuIHVwZGF0ZSBvZiBpbnRlcmVzdCB0byB0aGUgdXNlci4KCiAgICBVc2VkIGZvciBhd2FpdGluZyB0aGUgY29tcGxldGlvbiB0byBkZWNpZGUgd2hldGhlciB0byByZXR1cm4gbm9ybWFsbHkgb3IKICAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbz0oTm9uZSwgTm9uZSwgTm9uZSkpOgogICAgICBzZWxmLmZpbmlzaGVkID0gZXhjX2luZm9bMF0gaXMgbm90IE5vbmUKICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNfaW5mb1sxXSBvciBleGNfaW5mb1swXQogICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KCiAgY2xhc3MgX01vbml0b3JUYXNrKF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrKToKICAgICIiIk1vbml0b3JUYXNrIGNvbnRpbnVvdXNseSBydW5zIHRvIGVuc3VyZSB0aGF0IHBpcGVsaW5lIG1ha2VzIHByb2dyZXNzLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvcik6CiAgICAgIHNlbGYuX2V4ZWN1dG9yID0gZXhlY3V0b3IKCiAgICBAcHJvcGVydHkKICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICByZXR1cm4gJ21vbml0b3InCgogICAgZGVmIGNhbGwoc2VsZik6CiAgICAgIHRyeToKICAgICAgICB1cGRhdGUgPSBzZWxmLl9leGVjdXRvci5hbGxfdXBkYXRlcy5wb2xsKCkKICAgICAgICB3aGlsZSB1cGRhdGU6CiAgICAgICAgICBpZiB1cGRhdGUuY29tbWl0dGVkX2J1bmRsZToKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtZXJzKHVwZGF0ZS5jb21taXR0ZWRfYnVuZGxlKQogICAgICAgICAgZWxpZiB1cGRhdGUudW5wcm9jZXNzZWRfYnVuZGxlOgogICAgICAgICAgICBzZWxmLl9leGVjdXRvci5zY2hlZHVsZV91bnByb2Nlc3NlZF9idW5kbGUoCiAgICAgICAgICAgICAgICB1cGRhdGUudHJhbnNmb3JtX2V4ZWN1dG9yLl9hcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICB1cGRhdGUudW5wcm9jZXNzZWRfYnVuZGxlKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgYXNzZXJ0IHVwZGF0ZS5leGNlcHRpb24KICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdBIHRhc2sgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuZXhjZXB0aW9uKQogICAgICAgICAgICBzZWxmLl9leGVjdXRvci52aXNpYmxlX3VwZGF0ZXMub2ZmZXIoCiAgICAgICAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIHVwZGF0ZS5leGNfaW5mbykpCiAgICAgICAgICB1cGRhdGUgPSBzZWxmLl9leGVjdXRvci5hbGxfdXBkYXRlcy5wb2xsKCkKICAgICAgICBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuc2NoZWR1bGVfcGVuZGluZ191bmJsb2NrZWRfdGFza3MoCiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV4ZWN1dG9yX3NlcnZpY2UpCiAgICAgICAgc2VsZi5fYWRkX3dvcmtfaWZfbmVjZXNzYXJ5KHNlbGYuX2ZpcmVfdGltZXJzKCkpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGxvZ2dpbmcuZXJyb3IoJ01vbml0b3IgdGFzayBkaWVkIGR1ZSB0byBleGNlcHRpb24uXG4gJXMnLCBlKQogICAgICAgIHNlbGYuX2V4ZWN1dG9yLnZpc2libGVfdXBkYXRlcy5vZmZlcigKICAgICAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1Zpc2libGVFeGVjdXRvclVwZGF0ZSgKICAgICAgICAgICAgICAgIHN5cy5leGNfaW5mbygpKSkKICAgICAgZmluYWxseToKICAgICAgICBpZiBub3Qgc2VsZi5fc2hvdWxkX3NodXRkb3duKCk6CiAgICAgICAgICBzZWxmLl9leGVjdXRvci5leGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdChzZWxmKQoKICAgIGRlZiBfc2hvdWxkX3NodXRkb3duKHNlbGYpOgogICAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgY29tcGxldGVkIGFuZCBzaG91bGQgYmUgc2h1dCBkb3duLgoKICAgICAgSWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlIHF1ZXVlIG9mIHRhc2tzIHRvIGRvLCBkbyBub3Qgc2h1dCBkb3duLgoKICAgICAgT3RoZXJ3aXNlLCBjaGVjayBpZiBhbGwgdGhlIHRyYW5zZm9ybXMnIHdhdGVybWFya3MgYXJlIGNvbXBsZXRlLgogICAgICBJZiB0aGV5IGFyZSBub3QsIHRoZSBwaXBlbGluZSBpcyBub3QgcHJvZ3Jlc3NpbmcgKHN0YWxsIGRldGVjdGVkKS4KICAgICAgV2hldGhlciB0aGUgcGlwZWxpbmUgaGFzIHN0YWxsZWQgb3Igbm90LCB0aGUgZXhlY3V0b3Igc2hvdWxkIHNodXQKICAgICAgZG93biB0aGUgcGlwZWxpbmUuCgogICAgICBSZXR1cm5zOgogICAgICAgIFRydWUgb25seSBpZiB0aGUgcGlwZWxpbmUgaGFzIHJlYWNoZWQgYSB0ZXJtaW5hbCBzdGF0ZSBhbmQgc2hvdWxkCiAgICAgICAgYmUgc2h1dCBkb3duLgoKICAgICAgIiIiCiAgICAgIGlmIHNlbGYuX2lzX2V4ZWN1dGluZygpOgogICAgICAgICMgVGhlcmUgYXJlIHNvbWUgYnVuZGxlcyBzdGlsbCBpbiBwcm9ncmVzcy4KICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgZWxzZToKICAgICAgICBpZiBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuaXNfZG9uZSgpOgogICAgICAgICAgc2VsZi5fZXhlY3V0b3IudmlzaWJsZV91cGRhdGVzLm9mZmVyKAogICAgICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUoKSkKICAgICAgICBlbHNlOgogICAgICAgICAgIyBOb3RoaW5nIGlzIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uLCBidXQgd2F0ZXJtYXJrcyBpbmNvbXBsZXRlLgogICAgICAgICAgc2VsZi5fZXhlY3V0b3IudmlzaWJsZV91cGRhdGVzLm9mZmVyKAogICAgICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUoCiAgICAgICAgICAgICAgICAgIChFeGNlcHRpb24oJ01vbml0b3IgdGFzayBkZXRlY3RlZCBhIHBpcGVsaW5lIHN0YWxsLicpLAogICAgICAgICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgICAgICAgIE5vbmUpKSkKICAgICAgICBzZWxmLl9leGVjdXRvci5leGVjdXRvcl9zZXJ2aWNlLnNodXRkb3duKCkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBfZmlyZV90aW1lcnMoc2VsZik6CiAgICAgICIiIlNjaGVkdWxlcyB0cmlnZ2VyZWQgY29uc3VtZXJzIGlmIGFueSB0aW1lcnMgZmlyZWQuCgogICAgICBSZXR1cm5zOgogICAgICAgIFRydWUgaWYgdGltZXJzIGZpcmVkLgogICAgICAiIiIKICAgICAgdHJhbnNmb3JtX2ZpcmVkX3RpbWVycywgXyA9ICgKICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dC5leHRyYWN0X2FsbF90aW1lcnMoKSkKICAgICAgZm9yIGFwcGxpZWRfcHRyYW5zZm9ybSwgZmlyZWRfdGltZXJzIGluIHRyYW5zZm9ybV9maXJlZF90aW1lcnM6CiAgICAgICAgIyBVc2UgYW4gZW1wdHkgY29tbWl0dGVkIGJ1bmRsZS4ganVzdCB0byB0cmlnZ2VyLgogICAgICAgIGVtcHR5X2J1bmRsZSA9ICgKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKAogICAgICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0c1swXSkpCiAgICAgICAgdGltZXJfY29tcGxldGlvbl9jYWxsYmFjayA9IF9Db21wbGV0aW9uQ2FsbGJhY2soCiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dCwgc2VsZi5fZXhlY3V0b3IuYWxsX3VwZGF0ZXMsCiAgICAgICAgICAgIHRpbWVyX2ZpcmluZ3M9ZmlyZWRfdGltZXJzKQoKICAgICAgICBzZWxmLl9leGVjdXRvci5zY2hlZHVsZV9jb25zdW1wdGlvbigKICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLCBlbXB0eV9idW5kbGUsIGZpcmVkX3RpbWVycywKICAgICAgICAgICAgdGltZXJfY29tcGxldGlvbl9jYWxsYmFjaykKICAgICAgcmV0dXJuIGJvb2wodHJhbnNmb3JtX2ZpcmVkX3RpbWVycykKCiAgICBkZWYgX2lzX2V4ZWN1dGluZyhzZWxmKToKICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIGpvYiBpcyBzdGlsbCBleGVjdXRpbmcuCgogICAgICBSZXR1cm5zOgogICAgICAgIFRydWUgaWYgdGhlcmUgYXJlIGFueSB0aW1lcnMgc2V0IG9yIGlmIHRoZXJlIGlzIGF0IGxlYXN0CiAgICAgICAgb25lIG5vbi1ibG9ja2VkIFRyYW5zZm9ybUV4ZWN1dG9yIGFjdGl2ZS4iIiIKCiAgICAgIHdhdGVybWFya19tYW5hZ2VyID0gc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0Ll93YXRlcm1hcmtfbWFuYWdlcgogICAgICBfLCBhbnlfdW5maXJlZF9yZWFsdGltZV90aW1lcnMgPSB3YXRlcm1hcmtfbWFuYWdlci5leHRyYWN0X2FsbF90aW1lcnMoKQogICAgICBpZiBhbnlfdW5maXJlZF9yZWFsdGltZV90aW1lcnM6CiAgICAgICAgcmV0dXJuIFRydWUKCiAgICAgIGV4ZWN1dG9ycyA9IHNlbGYuX2V4ZWN1dG9yLnRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlcy5leGVjdXRvcnMKICAgICAgaWYgbm90IGV4ZWN1dG9yczoKICAgICAgICAjIE5vdGhpbmcgaXMgZXhlY3V0aW5nLgogICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgIyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgZXhlY3V0b3JzIGlzIG5vdCBibG9ja2VkLgogICAgICBmb3IgdHJhbnNmb3JtX2V4ZWN1dG9yIGluIGV4ZWN1dG9yczoKICAgICAgICBpZiBub3QgdHJhbnNmb3JtX2V4ZWN1dG9yLmJsb2NrZWQ6CiAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgX2FkZF93b3JrX2lmX25lY2Vzc2FyeShzZWxmLCB0aW1lcnNfZmlyZWQpOgogICAgICAiIiJBZGRzIG1vcmUgd29yayBmcm9tIHRoZSByb290cyBpZiBwaXBlbGluZSByZXF1aXJlcyBtb3JlIGlucHV0LgoKICAgICAgSWYgYWxsIGFjdGl2ZSBUcmFuc2Zvcm1FeGVjdXRvcnMgYXJlIGluIGEgYmxvY2tlZCBzdGF0ZSwgYWRkIG1vcmUgd29yawogICAgICBmcm9tIHJvb3Qgbm9kZXMgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGEKICAgICAgcGlwZWxpbmUgaGFzIGVsZW1lbnRzIGF2YWlsYWJsZSBmcm9tIHRoZSByb290IG5vZGVzIGl0IHdpbGwgYWRkIHRob3NlCiAgICAgIGVsZW1lbnRzIHdoZW4gbmVjZXNzYXJ5LgoKICAgICAgQXJnczoKICAgICAgICB0aW1lcnNfZmlyZWQ6IFRydWUgaWYgYW55IHRpbWVycyBmaXJlZCBwcmlvciB0byB0aGlzIGNhbGwuCiAgICAgICIiIgogICAgICAjIElmIGFueSB0aW1lcnMgaGF2ZSBmaXJlZCwgdGhleSB3aWxsIGFkZCBtb3JlIHdvcms7IE5vIG5lZWQgdG8gYWRkIG1vcmUuCiAgICAgIGlmIHRpbWVyc19maXJlZDoKICAgICAgICByZXR1cm4KCiAgICAgIGlmIHNlbGYuX2lzX2V4ZWN1dGluZygpOgogICAgICAgICMgV2UgaGF2ZSBhdCBsZWFzdCBvbmUgZXhlY3V0b3IgdGhhdCBjYW4gcHJvY2VlZCB3aXRob3V0IGFkZGluZwogICAgICAgICMgYWRkaXRpb25hbCB3b3JrLgogICAgICAgIHJldHVybgoKICAgICAgIyBBbGwgY3VycmVudCBUcmFuc2Zvcm1FeGVjdXRvcnMgYXJlIGJsb2NrZWQ7IGFkZCBtb3JlIHdvcmsgZnJvbSBhbnkKICAgICAgIyBwZW5kaW5nIGJ1bmRsZXMuCiAgICAgIGZvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fZXhlY3V0b3IuYWxsX25vZGVzOgogICAgICAgIGlmIG5vdCBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuaXNfZG9uZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgICAgcGVuZGluZ19idW5kbGVzID0gc2VsZi5fZXhlY3V0b3Iubm9kZV90b19wZW5kaW5nX2J1bmRsZXMuZ2V0KAogICAgICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwgW10pCiAgICAgICAgICBmb3IgYnVuZGxlIGluIHBlbmRpbmdfYnVuZGxlczoKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtcHRpb24oCiAgICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sIGJ1bmRsZSwgW10sCiAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRvci5kZWZhdWx0X2NvbXBsZXRpb25fY2FsbGJhY2spCiAgICAgICAgICBzZWxmLl9leGVjdXRvci5ub2RlX3RvX3BlbmRpbmdfYnVuZGxlc1thcHBsaWVkX3B0cmFuc2Zvcm1dID0gW10KfXGPKFggAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3JYBQAAAGNsYXNzTXQBTZICh1gmAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iuc3RhcnRYAwAAAGRlZk2JAU2WAYdYKwAAAF9FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlci5ydW5YAwAAAGRlZktSS12HWB8AAABfU2VyaWFsRXZhbHVhdGlvblN0YXRlLl9faW5pdF9fWAMAAABkZWZLpUuqh1g4AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1R5cGVkVXBkYXRlUXVldWUub2ZmZXJYAwAAAGRlZk3bAU3eAYdYHwAAAF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUuY29tcGxldGVYAwAAAGRlZkurS66HWBEAAABFeGVjdXRvci5fX2luaXRfX1gDAAAAZGVmTWoBTWwBh1gZAAAAX0V4ZWN1dG9yU2VydmljZS5zaHV0ZG93blgDAAAAZGVmS3BLfYdYQAAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUuX19pbml0X19YAwAAAGRlZk35AU39AYdYHQAAAF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrWAUAAABjbGFzc0smSy6HWDEAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5hd2FpdF9jb21wbGV0aW9uWAMAAABkZWZNlwFNoAGHWBkAAABfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlWAUAAABjbGFzc0uBS42HWBgAAABfUGFyYWxsZWxFdmFsdWF0aW9uU3RhdGVYBQAAAGNsYXNzS49LmYdYOwAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlLl9faW5pdF9fWAMAAABkZWZNwgFNxQGHWEQAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX2FkZF93b3JrX2lmX25lY2Vzc2FyeVgDAAAAZGVmTXMCTZICh1gcAAAAX0NvbXBsZXRpb25DYWxsYmFjay5fX2luaXRfX1gDAAAAZGVmS+RL6IdYEwAAAF9Db21wbGV0aW9uQ2FsbGJhY2tYBQAAAGNsYXNzS9xL/IdYMgAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5jYWxsWAMAAABkZWZNCAJNJQKHWDAAAABfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX19pbml0X19YAwAAAGRlZks1S0CHWBkAAABFeGVjdXRvci5hd2FpdF9jb21wbGV0aW9uWAMAAABkZWZNcAFNcgGHWDcAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlWAUAAABjbGFzc03yAU39AYdYJAAAAF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzLmV4ZWN1dG9yc1gDAAAAZGVmS9dL2odYEAAAAF9FeGVjdXRvclNlcnZpY2VYBQAAAGNsYXNzSyNLfYdYGgAAAF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzWAUAAABjbGFzc0u/S9qHWA4AAABFeGVjdXRvci5zdGFydFgDAAAAZGVmTW0BTW8Bh1gfAAAAX1NlcmlhbEV2YWx1YXRpb25TdGF0ZS5zY2hlZHVsZVgDAAAAZGVmS69LsYdYIgAAAF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrLm5hbWVYAwAAAGRlZksrSy6HWDQAAABfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX3VwZGF0ZV9uYW1lWAMAAABkZWZLQUtIh1gjAAAAX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMuX19pbml0X19YAwAAAGRlZkvGS8yHWDMAAABfU2VyaWFsRXZhbHVhdGlvblN0YXRlLl91cGRhdGVfY3VycmVudGx5X2V2YWx1YXRpbmdYAwAAAGRlZkuyS72HWBcAAABfRXhlY3V0b3JTZXJ2aWNlLnN1Ym1pdFgDAAAAZGVmS2dLa4dYOgAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5fZmlyZV90aW1lcnNYAwAAAGRlZk1GAk1bAodYIgAAAF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUuc2NoZWR1bGVYAwAAAGRlZkuHS4qHWCIAAABfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzay5jYWxsWAMAAABkZWZLKEsqh1gZAAAAX0V4ZWN1dG9yU2VydmljZS5fX2luaXRfX1gDAAAAZGVmS2FLZodYNwAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlLnRha2VYAwAAAGRlZk3OAU3aAYdYCAAAAEV4ZWN1dG9yWAUAAABjbGFzc01nAU1yAYdYFgAAAFRyYW5zZm9ybUV4ZWN1dG9yLmNhbGxYAwAAAGRlZk0aAU1BAYdYKQAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9faW5pdF9fWAMAAABkZWZNeQFNiAGHWDkAAABfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX2dldF90YXNrX29yX25vbmVYAwAAAGRlZktJS1GHWCQAAABfQ29tcGxldGlvbkNhbGxiYWNrLmhhbmRsZV9leGNlcHRpb25YAwAAAGRlZkv4S/yHWDUAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5zY2hlZHVsZV9jb25zdW1wdGlvblgDAAAAZGVmTawBTb4Bh1gtAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX01vbml0b3JUYXNrWAUAAABjbGFzc03+AU2SAodYNgAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5fX2luaXRfX1gDAAAAZGVmTQECTQMCh1gwAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlWAUAAABjbGFzc03fAU3xAYdYIgAAAF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUuY29tcGxldGVYAwAAAGRlZkuLS42HWD4AAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX3Nob3VsZF9zaHV0ZG93blgDAAAAZGVmTSYCTUUCh1gwAAAAX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyLnNodXRkb3duWAMAAABkZWZLXktgh1gWAAAAX1NlcmlhbEV2YWx1YXRpb25TdGF0ZVgFAAAAY2xhc3NLm0u9h1ghAAAAX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMuc2VyaWFsWAMAAABkZWZL0EvWh1g3AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1R5cGVkVXBkYXRlUXVldWUucG9sbFgDAAAAZGVmTcYBTc0Bh1g5AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlLl9faW5pdF9fWAMAAABkZWZN4gFN8QGHWDMAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5zY2hlZHVsZV9jb25zdW1lcnNYAwAAAGRlZk2hAU2nAYdYIQAAAF9Db21wbGV0aW9uQ2FsbGJhY2suaGFuZGxlX3Jlc3VsdFgDAAAAZGVmS+lL94dYIgAAAF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUuX19pbml0X19YAwAAAGRlZkuDS4aHWB4AAABUcmFuc2Zvcm1FeGVjdXRvci5hdHRlbXB0X2NhbGxYAwAAAGRlZk1CAU1lAYdYPAAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLnNjaGVkdWxlX3VucHJvY2Vzc2VkX2J1bmRsZVgDAAAAZGVmTagBTasBh1gnAAAAX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyWAUAAABjbGFzc0svS2CHWDIAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZVgFAAAAY2xhc3NNvwFN3gGHWBEAAABUcmFuc2Zvcm1FeGVjdXRvclgFAAAAY2xhc3NL/k1lAYdYGgAAAFRyYW5zZm9ybUV4ZWN1dG9yLl9faW5pdF9fWAMAAABkZWZNCgFNGQGHWDIAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2submFtZVgDAAAAZGVmTQQCTQcCh1ghAAAAX0V4ZWN1dG9yU2VydmljZS5hd2FpdF9jb21wbGV0aW9uWAMAAABkZWZLbEtvh1gjAAAAX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMucGFyYWxsZWxYAwAAAGRlZkvNS8+HWDsAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX2lzX2V4ZWN1dGluZ1gDAAAAZGVmTVwCTXICh3V9cZAoWB4AAABUcmFuc2Zvcm1FeGVjdXRvci5hdHRlbXB0X2NhbGxYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9ycZFYGQAAAEV4ZWN1dG9yLmF3YWl0X2NvbXBsZXRpb25okVgIAAAARXhlY3V0b3JokVgWAAAAVHJhbnNmb3JtRXhlY3V0b3IuY2FsbGiRWBEAAABUcmFuc2Zvcm1FeGVjdXRvcmiRWA4AAABFeGVjdXRvci5zdGFydGiRdWiKWCMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcnGShYFxk31xlGJ0VR1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3GVKFhkPwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJXaW5kb3dpbmcgY29uY2VwdHMuCgpBIFdpbmRvd0ludG8gdHJhbnNmb3JtIGxvZ2ljYWxseSBkaXZpZGVzIHVwIG9yIGdyb3VwcyB0aGUgZWxlbWVudHMgb2YgYQpQQ29sbGVjdGlvbiBpbnRvIGZpbml0ZSB3aW5kb3dzIGFjY29yZGluZyB0byBhIHdpbmRvd2luZyBmdW5jdGlvbiAoZGVyaXZlZCBmcm9tCldpbmRvd0ZuKS4KClRoZSBvdXRwdXQgb2YgV2luZG93SW50byBjb250YWlucyB0aGUgc2FtZSBlbGVtZW50cyBhcyBpbnB1dCwgYnV0IHRoZXkgaGF2ZSBiZWVuCmxvZ2ljYWxseSBhc3NpZ25lZCB0byB3aW5kb3dzLiBUaGUgbmV4dCBHcm91cEJ5S2V5KHMpIHRyYW5zZm9ybXMsIGluY2x1ZGluZyBvbmUKd2l0aGluIGEgY29tcG9zaXRlIHRyYW5zZm9ybSwgd2lsbCBncm91cCBieSB0aGUgY29tYmluYXRpb24gb2Yga2V5cyBhbmQgd2luZG93cy4KCldpbmRvd2luZyBhIFBDb2xsZWN0aW9uIGFsbG93cyBjaHVua3Mgb2YgaXQgdG8gYmUgcHJvY2Vzc2VkIGluZGl2aWR1YWxseSwgYmVmb3JlCnRoZSBlbnRpcmUgUENvbGxlY3Rpb24gaXMgYXZhaWxhYmxlLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKUENvbGxlY3Rpb24ocykgd2l0aCB1bmJvdW5kZWQgc2l6ZSwgc2luY2UgdGhlIGZ1bGwgUENvbGxlY3Rpb24gaXMgbmV2ZXIKYXZhaWxhYmxlIGF0IG9uY2UsIHNpbmNlIG1vcmUgZGF0YSBpcyBjb250aW51YWxseSBhcnJpdmluZy4gRm9yIFBDb2xsZWN0aW9uKHMpCndpdGggYSBib3VuZGVkIHNpemUgKGFrYS4gY29udmVudGlvbmFsIGJhdGNoIG1vZGUpLCBieSBkZWZhdWx0LCBhbGwgZGF0YSBpcwppbXBsaWNpdGx5IGluIGEgc2luZ2xlIHdpbmRvdyAoc2VlIEdsb2JhbFdpbmRvd3MpLCB1bmxlc3MgV2luZG93SW50byBpcwphcHBsaWVkLgoKRm9yIGV4YW1wbGUsIGEgc2ltcGxlIGZvcm0gb2Ygd2luZG93aW5nIGRpdmlkZXMgdXAgdGhlIGRhdGEgaW50byBmaXhlZC13aWR0aAp0aW1lIGludGVydmFscywgdXNpbmcgRml4ZWRXaW5kb3dzLgoKU2Vjb25kcyBhcmUgdXNlZCBhcyB0aGUgdGltZSB1bml0IGZvciB0aGUgYnVpbHQtaW4gd2luZG93aW5nIHByaW1pdGl2ZXMgaGVyZS4KSW50ZWdlciBvciBmbG9hdGluZyBwb2ludCBzZWNvbmRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlc2UgcHJpbWl0aXZlcy4KCkludGVybmFsbHksIHNlY29uZHMsIHdpdGggbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHksIGFyZSBzdG9yZWQgYXMKdGltZXV0aWwuVGltZXN0YW1wIGFuZCB0aW1ldXRpbC5EdXJhdGlvbiBvYmplY3RzLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQKcHJlY2lzaW9uIGVycm9ycyB0aGF0IHdvdWxkIG9jY3VyIHdpdGggZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25zLgoKQ3VzdG9tIHdpbmRvd2luZyBmdW5jdGlvbiBjbGFzc2VzIGNhbiBiZSBjcmVhdGVkLCBieSBzdWJjbGFzc2luZyBmcm9tCldpbmRvd0ZuLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYWJjCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZHVyYXRpb25fcGIyCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB0aW1lc3RhbXBfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHRpbWV1dGlsCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHVybnMKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1BWF9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1JTl9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IER1cmF0aW9uCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBUaW1lc3RhbXAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKX19hbGxfXyA9IFsKICAgICdUaW1lc3RhbXBDb21iaW5lcicsCiAgICAnV2luZG93Rm4nLAogICAgJ0JvdW5kZWRXaW5kb3cnLAogICAgJ0ludGVydmFsV2luZG93JywKICAgICdUaW1lc3RhbXBlZFZhbHVlJywKICAgICdHbG9iYWxXaW5kb3cnLAogICAgJ05vbk1lcmdpbmdXaW5kb3dGbicsCiAgICAnR2xvYmFsV2luZG93cycsCiAgICAnRml4ZWRXaW5kb3dzJywKICAgICdTbGlkaW5nV2luZG93cycsCiAgICAnU2Vzc2lvbnMnLAogICAgXQoKCiMgVE9ETyhjY3kpOiByZXZpc2l0IG5hbWluZyBhbmQgc2VtYW50aWNzIG9uY2UgSmF2YSBBcGFjaGUgQmVhbSBmaW5hbGl6ZXMgdGhlaXIKIyBiZWhhdmlvci4KY2xhc3MgVGltZXN0YW1wQ29tYmluZXIob2JqZWN0KToKICAiIiJEZXRlcm1pbmVzIGhvdyBvdXRwdXQgdGltZXN0YW1wcyBvZiBncm91cGluZyBvcGVyYXRpb25zIGFyZSBhc3NpZ25lZC4iIiIKCiAgT1VUUFVUX0FUX0VPVyA9IGJlYW1fcnVubmVyX2FwaV9wYjIuT3V0cHV0VGltZS5FTkRfT0ZfV0lORE9XCiAgT1VUUFVUX0FUX0VBUkxJRVNUID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5PdXRwdXRUaW1lLkVBUkxJRVNUX0lOX1BBTkUKICBPVVRQVVRfQVRfTEFURVNUID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5PdXRwdXRUaW1lLkxBVEVTVF9JTl9QQU5FCiAgIyBUT0RPKHJvYmVydHdiKTogQWRkIHRoaXMgdG8gdGhlIHJ1bm5lciBBUEkgb3IgcmVtb3ZlIGl0LgogIE9VVFBVVF9BVF9FQVJMSUVTVF9UUkFOU0ZPUk1FRCA9ICdPVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRUQnCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X2ltcGwodGltZXN0YW1wX2NvbWJpbmVyLCB3aW5kb3dfZm4pOgogICAgaWYgdGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FT1c6CiAgICAgIHJldHVybiB0aW1ldXRpbC5PdXRwdXRBdEVuZE9mV2luZG93SW1wbCgpCiAgICBlbGlmIHRpbWVzdGFtcF9jb21iaW5lciA9PSBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1Q6CiAgICAgIHJldHVybiB0aW1ldXRpbC5PdXRwdXRBdEVhcmxpZXN0SW5wdXRUaW1lc3RhbXBJbXBsKCkKICAgIGVsaWYgdGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9MQVRFU1Q6CiAgICAgIHJldHVybiB0aW1ldXRpbC5PdXRwdXRBdExhdGVzdElucHV0VGltZXN0YW1wSW1wbCgpCiAgICBlbGlmIHRpbWVzdGFtcF9jb21iaW5lciA9PSBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRUQ6CiAgICAgIHJldHVybiB0aW1ldXRpbC5PdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwod2luZG93X2ZuKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBUaW1lc3RhbXBDb21iaW5lcjogJXMuJyAlIHRpbWVzdGFtcF9jb21iaW5lcikKCgpjbGFzcyBXaW5kb3dGbih1cm5zLlJ1bm5lckFwaUZuKToKICAiIiJBbiBhYnN0cmFjdCB3aW5kb3dpbmcgZnVuY3Rpb24gZGVmaW5pbmcgYSBiYXNpYyBhc3NpZ24gYW5kIG1lcmdlLiIiIgoKICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKCiAgY2xhc3MgQXNzaWduQ29udGV4dChvYmplY3QpOgogICAgIiIiQ29udGV4dCBwYXNzZWQgdG8gV2luZG93Rm4uYXNzaWduKCkuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVzdGFtcCwgZWxlbWVudD1Ob25lLCB3aW5kb3c9Tm9uZSk6CiAgICAgIHNlbGYudGltZXN0YW1wID0gVGltZXN0YW1wLm9mKHRpbWVzdGFtcCkKICAgICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAogICAgICBzZWxmLndpbmRvdyA9IHdpbmRvdwoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGFzc2lnbihzZWxmLCBhc3NpZ25fY29udGV4dCk6CiAgICAiIiJBc3NvY2lhdGVzIHdpbmRvd3MgdG8gYW4gZWxlbWVudC4KCiAgICBBcmd1bWVudHM6CiAgICAgIGFzc2lnbl9jb250ZXh0OiBJbnN0YW5jZSBvZiBBc3NpZ25Db250ZXh0LgoKICAgIFJldHVybnM6CiAgICAgIEFuIGl0ZXJhYmxlIG9mIEJvdW5kZWRXaW5kb3cuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgY2xhc3MgTWVyZ2VDb250ZXh0KG9iamVjdCk6CiAgICAiIiJDb250ZXh0IHBhc3NlZCB0byBXaW5kb3dGbi5tZXJnZSgpIHRvIHBlcmZvcm0gbWVyZ2luZywgaWYgYW55LiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dzKToKICAgICAgc2VsZi53aW5kb3dzID0gbGlzdCh3aW5kb3dzKQoKICAgIGRlZiBtZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBtZXJnZShzZWxmLCBtZXJnZV9jb250ZXh0KToKICAgICIiIlJldHVybnMgYSB3aW5kb3cgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIG1lcmdpbmcgYSBzZXQgb2Ygd2luZG93cy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGlzX21lcmdpbmcoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhpcyBXaW5kb3dGbiBtZXJnZXMgd2luZG93cy4iIiIKICAgIHJldHVybiBUcnVlCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIGlucHV0X3RpbWVzdGFtcCk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKICAgICIiIkdpdmVuIGlucHV0IHRpbWUgYW5kIG91dHB1dCB3aW5kb3csIHJldHVybnMgb3V0cHV0IHRpbWUgZm9yIHdpbmRvdy4KCiAgICBJZiBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRUQgaXMgdXNlZCBpbiB0aGUKICAgIFdpbmRvd2luZywgdGhlIG91dHB1dCB0aW1lc3RhbXAgZm9yIHRoZSBnaXZlbiB3aW5kb3cgd2lsbCBiZSB0aGUgZWFybGllc3QKICAgIG9mIHRoZSB0aW1lc3RhbXBzIHJldHVybmVkIGJ5IGdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZSgpIGZvciBlbGVtZW50cwogICAgb2YgdGhlIHdpbmRvdy4KCiAgICBBcmd1bWVudHM6CiAgICAgIHdpbmRvdzogT3V0cHV0IHdpbmRvdyBvZiBlbGVtZW50LgogICAgICBpbnB1dF90aW1lc3RhbXA6IElucHV0IHRpbWVzdGFtcCBvZiBlbGVtZW50IGFzIGEgdGltZXV0aWwuVGltZXN0YW1wCiAgICAgICAgb2JqZWN0LgoKICAgIFJldHVybnM6CiAgICAgIFRyYW5zZm9ybWVkIHRpbWVzdGFtcC4KICAgICIiIgogICAgIyBCeSBkZWZhdWx0LCBqdXN0IHJldHVybiB0aGUgaW5wdXQgdGltZXN0YW1wLgogICAgcmV0dXJuIGlucHV0X3RpbWVzdGFtcAoKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4odXJucy5QSUNLTEVEX1dJTkRPV19GTikKCgpjbGFzcyBCb3VuZGVkV2luZG93KG9iamVjdCk6CiAgIiIiQSB3aW5kb3cgZm9yIHRpbWVzdGFtcHMgaW4gcmFuZ2UgKC1pbmZpbml0eSwgZW5kKS4KCiAgQXR0cmlidXRlczoKICAgIGVuZDogRW5kIG9mIHdpbmRvdy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVuZCk6CiAgICBzZWxmLmVuZCA9IFRpbWVzdGFtcC5vZihlbmQpCgogIGRlZiBtYXhfdGltZXN0YW1wKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZW5kLnByZWRlY2Vzc29yKCkKCiAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgogICAgIyBPcmRlciBmaXJzdCBieSBlbmRwb2ludCwgdGhlbiBhcmJpdHJhcmlseS4KICAgIHJldHVybiBjbXAoc2VsZi5lbmQsIG90aGVyLmVuZCkgb3IgY21wKGhhc2goc2VsZiksIGhhc2gob3RoZXIpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5lbmQpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnWz8sICVzKScgJSBmbG9hdChzZWxmLmVuZCkKCgpjbGFzcyBJbnRlcnZhbFdpbmRvdyhCb3VuZGVkV2luZG93KToKICAiIiJBIHdpbmRvdyBmb3IgdGltZXN0YW1wcyBpbiByYW5nZSBbc3RhcnQsIGVuZCkuCgogIEF0dHJpYnV0ZXM6CiAgICBzdGFydDogU3RhcnQgb2Ygd2luZG93IGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAgIGVuZDogRW5kIG9mIHdpbmRvdyBhcyBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgZW5kKToKICAgIHN1cGVyKEludGVydmFsV2luZG93LCBzZWxmKS5fX2luaXRfXyhlbmQpCiAgICBzZWxmLnN0YXJ0ID0gVGltZXN0YW1wLm9mKHN0YXJ0KQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi5zdGFydCwgc2VsZi5lbmQpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLnN0YXJ0ID09IG90aGVyLnN0YXJ0IGFuZCBzZWxmLmVuZCA9PSBvdGhlci5lbmQKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdbJXMsICVzKScgJSAoZmxvYXQoc2VsZi5zdGFydCksIGZsb2F0KHNlbGYuZW5kKSkKCiAgZGVmIGludGVyc2VjdHMoc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG90aGVyLnN0YXJ0IDwgc2VsZi5lbmQgb3Igc2VsZi5zdGFydCA8IG90aGVyLmVuZAoKICBkZWYgdW5pb24oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIEludGVydmFsV2luZG93KAogICAgICAgIG1pbihzZWxmLnN0YXJ0LCBvdGhlci5zdGFydCksIG1heChzZWxmLmVuZCwgb3RoZXIuZW5kKSkKCgpjbGFzcyBUaW1lc3RhbXBlZFZhbHVlKG9iamVjdCk6CiAgIiIiQSB0aW1lc3RhbXBlZCB2YWx1ZSBoYXZpbmcgYSB2YWx1ZSBhbmQgYSB0aW1lc3RhbXAuCgogIEF0dHJpYnV0ZXM6CiAgICB2YWx1ZTogVGhlIHVuZGVybHlpbmcgdmFsdWUuCiAgICB0aW1lc3RhbXA6IFRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCB0aW1lc3RhbXApOgogICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICBzZWxmLnRpbWVzdGFtcCA9IFRpbWVzdGFtcC5vZih0aW1lc3RhbXApCgogIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgogICAgICByZXR1cm4gY21wKHR5cGUoc2VsZiksIHR5cGUob3RoZXIpKQogICAgcmV0dXJuIGNtcCgoc2VsZi52YWx1ZSwgc2VsZi50aW1lc3RhbXApLCAob3RoZXIudmFsdWUsIG90aGVyLnRpbWVzdGFtcCkpCgoKY2xhc3MgR2xvYmFsV2luZG93KEJvdW5kZWRXaW5kb3cpOgogICIiIlRoZSBkZWZhdWx0IHdpbmRvdyBpbnRvIHdoaWNoIGFsbCBkYXRhIGlzIHBsYWNlZCAodmlhIEdsb2JhbFdpbmRvd3MpLiIiIgogIF9pbnN0YW5jZSA9IE5vbmUKCiAgZGVmIF9fbmV3X18oY2xzKToKICAgIGlmIGNscy5faW5zdGFuY2UgaXMgTm9uZToKICAgICAgY2xzLl9pbnN0YW5jZSA9IHN1cGVyKEdsb2JhbFdpbmRvdywgY2xzKS5fX25ld19fKGNscykKICAgIHJldHVybiBjbHMuX2luc3RhbmNlCgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHN1cGVyKEdsb2JhbFdpbmRvdywgc2VsZikuX19pbml0X18oTUFYX1RJTUVTVEFNUCkKICAgIHNlbGYuc3RhcnQgPSBNSU5fVElNRVNUQU1QCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnR2xvYmFsV2luZG93JwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd3MgYXJlIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKCmNsYXNzIE5vbk1lcmdpbmdXaW5kb3dGbihXaW5kb3dGbik6CgogIGRlZiBpc19tZXJnaW5nKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBtZXJnZShzZWxmLCBtZXJnZV9jb250ZXh0KToKICAgIHBhc3MgICMgTm8gbWVyZ2luZy4KCgpjbGFzcyBHbG9iYWxXaW5kb3dzKE5vbk1lcmdpbmdXaW5kb3dGbik6CiAgIiIiQSB3aW5kb3dpbmcgZnVuY3Rpb24gdGhhdCBhc3NpZ25zIGV2ZXJ5dGhpbmcgdG8gb25lIGdsb2JhbCB3aW5kb3cuIiIiCgogIEBjbGFzc21ldGhvZAogIGRlZiB3aW5kb3dlZF92YWx1ZShjbHMsIHZhbHVlLCB0aW1lc3RhbXA9TUlOX1RJTUVTVEFNUCk6CiAgICByZXR1cm4gV2luZG93ZWRWYWx1ZSh2YWx1ZSwgdGltZXN0YW1wLCAoR2xvYmFsV2luZG93KCksKSkKCiAgZGVmIGFzc2lnbihzZWxmLCBhc3NpZ25fY29udGV4dCk6CiAgICByZXR1cm4gW0dsb2JhbFdpbmRvdygpXQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMuR2xvYmFsV2luZG93Q29kZXIoKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd2ZuIGlzIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gdXJucy5HTE9CQUxfV0lORE9XU19GTiwgTm9uZQoKICBAdXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4odXJucy5HTE9CQUxfV0lORE9XU19GTiwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfZm5fcGFyYW1ldGVyLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gR2xvYmFsV2luZG93cygpCgoKY2xhc3MgRml4ZWRXaW5kb3dzKE5vbk1lcmdpbmdXaW5kb3dGbik6CiAgIiIiQSB3aW5kb3dpbmcgZnVuY3Rpb24gdGhhdCBhc3NpZ25zIGVhY2ggZWxlbWVudCB0byBvbmUgdGltZSBpbnRlcnZhbC4KCiAgVGhlIGF0dHJpYnV0ZXMgc2l6ZSBhbmQgb2Zmc2V0IGRldGVybWluZSBpbiB3aGF0IHRpbWUgaW50ZXJ2YWwgYSB0aW1lc3RhbXAKICB3aWxsIGJlIHNsb3R0ZWQuIFRoZSB0aW1lIGludGVydmFscyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKICBbTiAqIHNpemUgKyBvZmZzZXQsIChOICsgMSkgKiBzaXplICsgb2Zmc2V0KQoKICBBdHRyaWJ1dGVzOgogICAgc2l6ZTogU2l6ZSBvZiB0aGUgd2luZG93IGFzIHNlY29uZHMuCiAgICBvZmZzZXQ6IE9mZnNldCBvZiB0aGlzIHdpbmRvdyBhcyBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guIFdpbmRvd3Mgc3RhcnQgYXQKICAgICAgdD1OICogc2l6ZSArIG9mZnNldCB3aGVyZSB0PTAgaXMgdGhlIGVwb2NoLiBUaGUgb2Zmc2V0IG11c3QgYmUgYSB2YWx1ZQogICAgICBpbiByYW5nZSBbMCwgc2l6ZSkuIElmIGl0IGlzIG5vdCBpdCB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gdGhpcyByYW5nZS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIG9mZnNldD0wKToKICAgIGlmIHNpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuc2l6ZSA9IER1cmF0aW9uLm9mKHNpemUpCiAgICBzZWxmLm9mZnNldCA9IFRpbWVzdGFtcC5vZihvZmZzZXQpICUgc2VsZi5zaXplCgogIGRlZiBhc3NpZ24oc2VsZiwgY29udGV4dCk6CiAgICB0aW1lc3RhbXAgPSBjb250ZXh0LnRpbWVzdGFtcAogICAgc3RhcnQgPSB0aW1lc3RhbXAgLSAodGltZXN0YW1wIC0gc2VsZi5vZmZzZXQpICUgc2VsZi5zaXplCiAgICByZXR1cm4gW0ludGVydmFsV2luZG93KHN0YXJ0LCBzdGFydCArIHNlbGYuc2l6ZSldCgogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5JbnRlcnZhbFdpbmRvd0NvZGVyKCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpID09IEZpeGVkV2luZG93czoKICAgICAgcmV0dXJuIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplIGFuZCBzZWxmLm9mZnNldCA9PSBvdGhlci5vZmZzZXQKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICh1cm5zLkZJWEVEX1dJTkRPV1NfRk4sCiAgICAgICAgICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLkZpeGVkV2luZG93c1BheWxvYWQoCiAgICAgICAgICAgICAgICBzaXplPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3BiMi5EdXJhdGlvbiwgc2VsZi5zaXplLm1pY3JvcyksCiAgICAgICAgICAgICAgICBvZmZzZXQ9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX3BiMi5UaW1lc3RhbXAsIHNlbGYub2Zmc2V0Lm1pY3JvcykpKQoKICBAdXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4oCiAgICAgIHVybnMuRklYRURfV0lORE9XU19GTiwgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuRml4ZWRXaW5kb3dzUGF5bG9hZCkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihmbl9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBGaXhlZFdpbmRvd3MoCiAgICAgICAgc2l6ZT1EdXJhdGlvbihtaWNyb3M9Zm5fcGFyYW1ldGVyLnNpemUuVG9NaWNyb3NlY29uZHMoKSksCiAgICAgICAgb2Zmc2V0PVRpbWVzdGFtcChtaWNyb3M9Zm5fcGFyYW1ldGVyLm9mZnNldC5Ub01pY3Jvc2Vjb25kcygpKSkKCgpjbGFzcyBTbGlkaW5nV2luZG93cyhOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIkEgd2luZG93aW5nIGZ1bmN0aW9uIHRoYXQgYXNzaWducyBlYWNoIGVsZW1lbnQgdG8gYSBzZXQgb2Ygc2xpZGluZyB3aW5kb3dzLgoKICBUaGUgYXR0cmlidXRlcyBzaXplIGFuZCBvZmZzZXQgZGV0ZXJtaW5lIGluIHdoYXQgdGltZSBpbnRlcnZhbCBhIHRpbWVzdGFtcAogIHdpbGwgYmUgc2xvdHRlZC4gVGhlIHRpbWUgaW50ZXJ2YWxzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtdWxhOgogIFtOICogcGVyaW9kICsgb2Zmc2V0LCBOICogcGVyaW9kICsgb2Zmc2V0ICsgc2l6ZSkKCiAgQXR0cmlidXRlczoKICAgIHNpemU6IFNpemUgb2YgdGhlIHdpbmRvdyBhcyBzZWNvbmRzLgogICAgcGVyaW9kOiBQZXJpb2Qgb2YgdGhlIHdpbmRvd3MgYXMgc2Vjb25kcy4KICAgIG9mZnNldDogT2Zmc2V0IG9mIHRoaXMgd2luZG93IGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4gV2luZG93cyBzdGFydCBhdAogICAgICB0PU4gKiBwZXJpb2QgKyBvZmZzZXQgd2hlcmUgdD0wIGlzIHRoZSBlcG9jaC4gVGhlIG9mZnNldCBtdXN0IGJlIGEgdmFsdWUKICAgICAgaW4gcmFuZ2UgWzAsIHBlcmlvZCkuIElmIGl0IGlzIG5vdCBpdCB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gdGhpcyByYW5nZS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIHBlcmlvZCwgb2Zmc2V0PTApOgogICAgaWYgc2l6ZSA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgc2l6ZSBwYXJhbWV0ZXIgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nKQogICAgc2VsZi5zaXplID0gRHVyYXRpb24ub2Yoc2l6ZSkKICAgIHNlbGYucGVyaW9kID0gRHVyYXRpb24ub2YocGVyaW9kKQogICAgc2VsZi5vZmZzZXQgPSBUaW1lc3RhbXAub2Yob2Zmc2V0KSAlIHBlcmlvZAoKICBkZWYgYXNzaWduKHNlbGYsIGNvbnRleHQpOgogICAgdGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAKICAgIHN0YXJ0ID0gdGltZXN0YW1wIC0gKCh0aW1lc3RhbXAgLSBzZWxmLm9mZnNldCkgJSBzZWxmLnBlcmlvZCkKICAgIHJldHVybiBbCiAgICAgICAgSW50ZXJ2YWxXaW5kb3coVGltZXN0YW1wKG1pY3Jvcz1zKSwgVGltZXN0YW1wKG1pY3Jvcz1zKSArIHNlbGYuc2l6ZSkKICAgICAgICBmb3IgcyBpbiByYW5nZShzdGFydC5taWNyb3MsIHRpbWVzdGFtcC5taWNyb3MgLSBzZWxmLnNpemUubWljcm9zLAogICAgICAgICAgICAgICAgICAgICAgIC1zZWxmLnBlcmlvZC5taWNyb3MpXQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMuSW50ZXJ2YWxXaW5kb3dDb2RlcigpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSA9PSBTbGlkaW5nV2luZG93czoKICAgICAgcmV0dXJuIChzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQogICAgICAgICAgICAgIGFuZCBzZWxmLm9mZnNldCA9PSBvdGhlci5vZmZzZXQKICAgICAgICAgICAgICBhbmQgc2VsZi5wZXJpb2QgPT0gb3RoZXIucGVyaW9kKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKHVybnMuU0xJRElOR19XSU5ET1dTX0ZOLAogICAgICAgICAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TbGlkaW5nV2luZG93c1BheWxvYWQoCiAgICAgICAgICAgICAgICBzaXplPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3BiMi5EdXJhdGlvbiwgc2VsZi5zaXplLm1pY3JvcyksCiAgICAgICAgICAgICAgICBvZmZzZXQ9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX3BiMi5UaW1lc3RhbXAsIHNlbGYub2Zmc2V0Lm1pY3JvcyksCiAgICAgICAgICAgICAgICBwZXJpb2Q9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fcGIyLkR1cmF0aW9uLCBzZWxmLnBlcmlvZC5taWNyb3MpKSkKCiAgQHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuKAogICAgICB1cm5zLlNMSURJTkdfV0lORE9XU19GTiwKICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2xpZGluZ1dpbmRvd3NQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIFNsaWRpbmdXaW5kb3dzKAogICAgICAgIHNpemU9RHVyYXRpb24obWljcm9zPWZuX3BhcmFtZXRlci5zaXplLlRvTWljcm9zZWNvbmRzKCkpLAogICAgICAgIG9mZnNldD1UaW1lc3RhbXAobWljcm9zPWZuX3BhcmFtZXRlci5vZmZzZXQuVG9NaWNyb3NlY29uZHMoKSksCiAgICAgICAgcGVyaW9kPUR1cmF0aW9uKG1pY3Jvcz1mbl9wYXJhbWV0ZXIucGVyaW9kLlRvTWljcm9zZWNvbmRzKCkpKQoKCmNsYXNzIFNlc3Npb25zKFdpbmRvd0ZuKToKICAiIiJBIHdpbmRvd2luZyBmdW5jdGlvbiB0aGF0IGdyb3VwcyBlbGVtZW50cyBpbnRvIHNlc3Npb25zLgoKICBBIHNlc3Npb24gaXMgZGVmaW5lZCBhcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSBldmVudHMKICBzZXBhcmF0ZWQgYnkgYSBzcGVjaWZpZWQgZ2FwIHNpemUuCgogIEF0dHJpYnV0ZXM6CiAgICBnYXBfc2l6ZTogU2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4gd2luZG93cyBhcyBmbG9hdGluZy1wb2ludCBzZWNvbmRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZ2FwX3NpemUpOgogICAgaWYgZ2FwX3NpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuZ2FwX3NpemUgPSBEdXJhdGlvbi5vZihnYXBfc2l6ZSkKCiAgZGVmIGFzc2lnbihzZWxmLCBjb250ZXh0KToKICAgIHRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wCiAgICByZXR1cm4gW0ludGVydmFsV2luZG93KHRpbWVzdGFtcCwgdGltZXN0YW1wICsgc2VsZi5nYXBfc2l6ZSldCgogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5JbnRlcnZhbFdpbmRvd0NvZGVyKCkKCiAgZGVmIG1lcmdlKHNlbGYsIG1lcmdlX2NvbnRleHQpOgogICAgdG9fbWVyZ2UgPSBbXQogICAgZW5kID0gTUlOX1RJTUVTVEFNUAogICAgZm9yIHcgaW4gc29ydGVkKG1lcmdlX2NvbnRleHQud2luZG93cywga2V5PWxhbWJkYSB3OiB3LnN0YXJ0KToKICAgICAgaWYgdG9fbWVyZ2U6CiAgICAgICAgaWYgZW5kID4gdy5zdGFydDoKICAgICAgICAgIHRvX21lcmdlLmFwcGVuZCh3KQogICAgICAgICAgaWYgdy5lbmQgPiBlbmQ6CiAgICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgICAgZWxzZToKICAgICAgICAgIGlmIGxlbih0b19tZXJnZSkgPiAxOgogICAgICAgICAgICBtZXJnZV9jb250ZXh0Lm1lcmdlKHRvX21lcmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQogICAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgIGVsc2U6CiAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICBlbmQgPSB3LmVuZAogICAgaWYgbGVuKHRvX21lcmdlKSA+IDE6CiAgICAgIG1lcmdlX2NvbnRleHQubWVyZ2UodG9fbWVyZ2UsIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgPT0gU2Vzc2lvbnM6CiAgICAgIHJldHVybiBzZWxmLmdhcF9zaXplID09IG90aGVyLmdhcF9zaXplCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAodXJucy5TRVNTSU9OX1dJTkRPV1NfRk4sCiAgICAgICAgICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLlNlc3Npb25zUGF5bG9hZCgKICAgICAgICAgICAgICAgIGdhcF9zaXplPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3BiMi5EdXJhdGlvbiwgc2VsZi5nYXBfc2l6ZS5taWNyb3MpKSkKCiAgQHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuKAogICAgICB1cm5zLlNFU1NJT05fV0lORE9XU19GTiwgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2Vzc2lvbnNQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIFNlc3Npb25zKAogICAgICAgIGdhcF9zaXplPUR1cmF0aW9uKG1pY3Jvcz1mbl9wYXJhbWV0ZXIuZ2FwX3NpemUuVG9NaWNyb3NlY29uZHMoKSkpCn1xlihYDgAAAFNsaWRpbmdXaW5kb3dzWAUAAABjbGFzc01vAU2oAYdYDwAAAFNlc3Npb25zLmFzc2lnblgDAAAAZGVmTbkBTbwBh1geAAAAV2luZG93Rm4uTWVyZ2VDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZLiUuLh1gIAAAAV2luZG93Rm5YBQAAAGNsYXNzS21LsIdYJgAAAEZpeGVkV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNZwFNbQGHWBQAAABJbnRlcnZhbFdpbmRvdy51bmlvblgDAAAAZGVmS+VL6IdYIgAAAFNlc3Npb25zLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk3fAU3kAYdYJQAAAEdsb2JhbFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk00AU02AYdYFQAAAEdsb2JhbFdpbmRvdy5fX3JlcHJfX1gDAAAAZGVmTQkBTQsBh1gUAAAAR2xvYmFsV2luZG93cy5fX25lX19YAwAAAGRlZk0xAU0zAYdYFQAAAEludGVydmFsV2luZG93Ll9fZXFfX1gDAAAAZGVmS9xL3odYEwAAAFdpbmRvd0ZuLmlzX21lcmdpbmdYAwAAAGRlZkuUS5eHWBEAAABTZXNzaW9ucy5fX2luaXRfX1gDAAAAZGVmTbQBTbgBh1gkAAAAV2luZG93Rm4uZ2V0X3RyYW5zZm9ybWVkX291dHB1dF90aW1lWAMAAABkZWZLnEuuh1gkAAAARml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNXwFNZgGHWBoAAABUaW1lc3RhbXBDb21iaW5lci5nZXRfaW1wbFgDAAAAZGVmS19La4dYKAAAAFNsaWRpbmdXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2gAU2oAYdYFQAAAFNsaWRpbmdXaW5kb3dzLl9fZXFfX1gDAAAAZGVmTZABTZUBh1gWAAAAQm91bmRlZFdpbmRvdy5fX2hhc2hfX1gDAAAAZGVmS8ZLyIdYEwAAAEdsb2JhbFdpbmRvdy5fX2VxX19YAwAAAGRlZk0PAU0SAYdYHAAAAEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWVYAwAAAGRlZk0gAU0jAYdYFQAAAFdpbmRvd0ZuLk1lcmdlQ29udGV4dFgFAAAAY2xhc3NLhkuOh1gUAAAAQm91bmRlZFdpbmRvdy5fX2VxX19YAwAAAGRlZkvDS8WHWA4AAABXaW5kb3dGbi5tZXJnZVgDAAAAZGVmS49Lk4dYJgAAAFNsaWRpbmdXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNlgFNnwGHWB8AAABTbGlkaW5nV2luZG93cy5nZXRfd2luZG93X2NvZGVyWAMAAABkZWZNjQFNjwGHWA8AAABXaW5kb3dGbi5hc3NpZ25YAwAAAGRlZkt6S4WHWBkAAABJbnRlcnZhbFdpbmRvdy5pbnRlcnNlY3RzWAMAAABkZWZL4kvkh1gdAAAATm9uTWVyZ2luZ1dpbmRvd0ZuLmlzX21lcmdpbmdYAwAAAGRlZk0WAU0YAYdYEwAAAEZpeGVkV2luZG93cy5fX25lX19YAwAAAGRlZk1cAU1eAYdYFwAAAEludGVydmFsV2luZG93Ll9faW5pdF9fWAMAAABkZWZL1UvYh1gfAAAAV2luZG93Rm4uQXNzaWduQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmS3VLeYdYGAAAAFRpbWVzdGFtcGVkVmFsdWUuX19jbXBfX1gDAAAAZGVmS/ZL+odYFAAAAEdsb2JhbFdpbmRvd3MuYXNzaWduWAMAAABkZWZNJAFNJgGHWBEAAABUaW1lc3RhbXBDb21iaW5lclgFAAAAY2xhc3NLVktrh1gWAAAAQm91bmRlZFdpbmRvdy5fX2luaXRfX1gDAAAAZGVmS7lLu4dYDwAAAFNlc3Npb25zLl9fZXFfX1gDAAAAZGVmTdUBTdgBh1gXAAAAU2xpZGluZ1dpbmRvd3MuX19pbml0X19YAwAAAGRlZk1+AU2EAYdYEAAAAFRpbWVzdGFtcGVkVmFsdWVYBQAAAGNsYXNzS+pL+odYEgAAAE5vbk1lcmdpbmdXaW5kb3dGblgFAAAAY2xhc3NNFAFNGwGHWB0AAABGaXhlZFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlclgDAAAAZGVmTVUBTVcBh1gYAAAATm9uTWVyZ2luZ1dpbmRvd0ZuLm1lcmdlWAMAAABkZWZNGQFNGwGHWA4AAABTZXNzaW9ucy5tZXJnZVgDAAAAZGVmTcABTdQBh1ggAAAAU2Vzc2lvbnMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk3ZAU3eAYdYGwAAAFdpbmRvd0ZuLk1lcmdlQ29udGV4dC5tZXJnZVgDAAAAZGVmS4xLjodYGQAAAFNlc3Npb25zLmdldF93aW5kb3dfY29kZXJYAwAAAGRlZk29AU2/AYdYGwAAAEJvdW5kZWRXaW5kb3cubWF4X3RpbWVzdGFtcFgDAAAAZGVmS7xLvodYFAAAAEdsb2JhbFdpbmRvdy5fX25ld19fWAMAAABkZWZNAAFNBAGHWBUAAABCb3VuZGVkV2luZG93Ll9fY21wX19YAwAAAGRlZku/S8KHWBUAAABGaXhlZFdpbmRvd3MuX19pbml0X19YAwAAAGRlZk1KAU1PAYdYGQAAAFRpbWVzdGFtcGVkVmFsdWUuX19pbml0X19YAwAAAGRlZkvyS/WHWA0AAABCb3VuZGVkV2luZG93WAUAAABjbGFzc0uyS8uHWBUAAABHbG9iYWxXaW5kb3cuX19oYXNoX19YAwAAAGRlZk0MAU0OAYdYEwAAAEZpeGVkV2luZG93cy5fX2VxX19YAwAAAGRlZk1YAU1bAYdYDQAAAEdsb2JhbFdpbmRvd3NYBQAAAGNsYXNzTR0BTToBh1gZAAAAV2luZG93Rm4uZ2V0X3dpbmRvd19jb2RlclgDAAAAZGVmS5hLm4dYDAAAAEZpeGVkV2luZG93c1gFAAAAY2xhc3NNPAFNbQGHWAgAAABTZXNzaW9uc1gFAAAAY2xhc3NNqgFN5AGHWBMAAABGaXhlZFdpbmRvd3MuYXNzaWduWAMAAABkZWZNUAFNVAGHWBcAAABJbnRlcnZhbFdpbmRvdy5fX3JlcHJfX1gDAAAAZGVmS99L4YdYFQAAAFNsaWRpbmdXaW5kb3dzLmFzc2lnblgDAAAAZGVmTYUBTYwBh1gOAAAASW50ZXJ2YWxXaW5kb3dYBQAAAGNsYXNzS81L6IdYFwAAAEludGVydmFsV2luZG93Ll9faGFzaF9fWAMAAABkZWZL2Uvbh1gMAAAAR2xvYmFsV2luZG93WAUAAABjbGFzc0v8TRIBh1gWAAAAV2luZG93Rm4uQXNzaWduQ29udGV4dFgFAAAAY2xhc3NLckt5h1gUAAAAR2xvYmFsV2luZG93cy5fX2VxX19YAwAAAGRlZk0tAU0wAYdYJwAAAEdsb2JhbFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTTcBTToBh1gWAAAAQm91bmRlZFdpbmRvdy5fX3JlcHJfX1gDAAAAZGVmS8lLy4dYFQAAAEdsb2JhbFdpbmRvdy5fX2luaXRfX1gDAAAAZGVmTQUBTQgBh1geAAAAR2xvYmFsV2luZG93cy5nZXRfd2luZG93X2NvZGVyWAMAAABkZWZNJwFNKQGHWBYAAABHbG9iYWxXaW5kb3dzLl9faGFzaF9fWAMAAABkZWZNKgFNLAGHdX1xlyhYDgAAAFNsaWRpbmdXaW5kb3dzWB0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3GYWAgAAABXaW5kb3dGbmiYWCYAAABGaXhlZFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmiYWCIAAABTZXNzaW9ucy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyaJhYEwAAAEZpeGVkV2luZG93cy5hc3NpZ25omFgUAAAASW50ZXJ2YWxXaW5kb3cudW5pb25omFgTAAAAV2luZG93Rm4uaXNfbWVyZ2luZ2iYWCQAAABXaW5kb3dGbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWVomFgkAAAARml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaJhYGgAAAFRpbWVzdGFtcENvbWJpbmVyLmdldF9pbXBsaJhYKAAAAFNsaWRpbmdXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJomFggAAAAU2Vzc2lvbnMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJomFgcAAAAR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZWiYWBUAAABXaW5kb3dGbi5NZXJnZUNvbnRleHRomFgNAAAAR2xvYmFsV2luZG93c2iYWA4AAABXaW5kb3dGbi5tZXJnZWiYWCYAAABTbGlkaW5nV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmiYWB8AAABTbGlkaW5nV2luZG93cy5nZXRfd2luZG93X2NvZGVyaJhYDwAAAFdpbmRvd0ZuLmFzc2lnbmiYWBkAAABJbnRlcnZhbFdpbmRvdy5pbnRlcnNlY3RzaJhYDAAAAEdsb2JhbFdpbmRvd2iYWA8AAABTZXNzaW9ucy5hc3NpZ25omFgQAAAAVGltZXN0YW1wZWRWYWx1ZWiYWBkAAABXaW5kb3dGbi5nZXRfd2luZG93X2NvZGVyaJhYEgAAAE5vbk1lcmdpbmdXaW5kb3dGbmiYWB0AAABGaXhlZFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcmiYWBgAAABOb25NZXJnaW5nV2luZG93Rm4ubWVyZ2VomFgOAAAAU2Vzc2lvbnMubWVyZ2VomFgbAAAAV2luZG93Rm4uTWVyZ2VDb250ZXh0Lm1lcmdlaJhYGQAAAFNlc3Npb25zLmdldF93aW5kb3dfY29kZXJomFgbAAAAQm91bmRlZFdpbmRvdy5tYXhfdGltZXN0YW1waJhYHQAAAE5vbk1lcmdpbmdXaW5kb3dGbi5pc19tZXJnaW5naJhYDQAAAEJvdW5kZWRXaW5kb3domFgMAAAARml4ZWRXaW5kb3dzaJhYCAAAAFNlc3Npb25zaJhYJQAAAEdsb2JhbFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJomFgVAAAAU2xpZGluZ1dpbmRvd3MuYXNzaWduaJhYDgAAAEludGVydmFsV2luZG93aJhYEQAAAFRpbWVzdGFtcENvbWJpbmVyaJhYFgAAAFdpbmRvd0ZuLkFzc2lnbkNvbnRleHRomFgnAAAAR2xvYmFsV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyaJhYHgAAAEdsb2JhbFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcmiYWBQAAABHbG9iYWxXaW5kb3dzLmFzc2lnbmiYdWiKWB0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3GZhYFxmn1xm2J0cZxVHmFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbXGdKFiKIgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiIiIkxvY2FsIEZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgZmlsZXMgb24gZGlzay4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgZ2xvYgppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzZWRGaWxlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVNZXRhZGF0YQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBNYXRjaFJlc3VsdAoKX19hbGxfXyA9IFsnTG9jYWxGaWxlU3lzdGVtJ10KCgpjbGFzcyBMb2NhbEZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiQSBMb2NhbCBgYEZpbGVTeXN0ZW1gYCBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nIGZpbGVzIG9uIGRpc2suCiAgIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmV0dXJuIE5vbmUKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICByZXR1cm4gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAqcGF0aHMpCgogIGRlZiBzcGxpdChzZWxmLCBwYXRoKToKICAgICIiIlNwbGl0cyB0aGUgZ2l2ZW4gcGF0aCBpbnRvIHR3byBwYXJ0cy4KCiAgICBTcGxpdHMgdGhlIHBhdGggaW50byBhIHBhaXIgKGhlYWQsIHRhaWwpIHN1Y2ggdGhhdCB0YWlsIGNvbnRhaW5zIHRoZSBsYXN0CiAgICBjb21wb25lbnQgb2YgdGhlIHBhdGggYW5kIGhlYWQgY29udGFpbnMgZXZlcnl0aGluZyB1cCB0byB0aGF0LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgcmV0dXJuIG9zLnBhdGguc3BsaXQob3MucGF0aC5hYnNwYXRoKHBhdGgpKQoKICBkZWYgbWtkaXJzKHNlbGYsIHBhdGgpOgogICAgIiIiUmVjdXJzaXZlbHkgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvdmlkZWQgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yIGlmIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgogICAgIiIiCiAgICB0cnk6CiAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgIHJhaXNlIElPRXJyb3IoZXJyKQoKICBkZWYgbWF0Y2goc2VsZiwgcGF0dGVybnMsIGxpbWl0cz1Ob25lKToKICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHBhdGhzIHRvIHRoZSBwYXR0ZXJuIHByb3ZpZGVkLgoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBwYXR0ZXJuIG1hdGNoIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBpZiBsaW1pdHMgaXMgTm9uZToKICAgICAgbGltaXRzID0gW05vbmVdICogbGVuKHBhdHRlcm5zKQogICAgZWxzZToKICAgICAgZXJyX21zZyA9ICJQYXR0ZXJucyBhbmQgbGltaXRzIHNob3VsZCBiZSBlcXVhbCBpbiBsZW5ndGgiCiAgICAgIGFzc2VydCBsZW4ocGF0dGVybnMpID09IGxlbihsaW1pdHMpLCBlcnJfbXNnCgogICAgZGVmIF9tYXRjaChwYXR0ZXJuLCBsaW1pdCk6CiAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHBhdGhzIHRvIHRoZSBwYXR0ZXJuIHByb3ZpZGVkLgogICAgICAiIiIKICAgICAgZmlsZXMgPSBnbG9iLmdsb2IocGF0dGVybikKICAgICAgbWV0YWRhdGEgPSBbRmlsZU1ldGFkYXRhKGYsIG9zLnBhdGguZ2V0c2l6ZShmKSkgZm9yIGYgaW4gZmlsZXNbOmxpbWl0XV0KICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHBhdHRlcm4sIG1ldGFkYXRhKQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgcmVzdWx0ID0gW10KICAgIGZvciBwYXR0ZXJuLCBsaW1pdCBpbiB6aXAocGF0dGVybnMsIGxpbWl0cyk6CiAgICAgIHRyeToKICAgICAgICByZXN1bHQuYXBwZW5kKF9tYXRjaChwYXR0ZXJuLCBsaW1pdCkpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbcGF0dGVybl0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIk1hdGNoIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgX3BhdGhfb3BlbihzZWxmLCBwYXRoLCBtb2RlLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiSGVscGVyIGZ1bmN0aW9ucyB0byBvcGVuIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbW9kZS4KICAgICIiIgogICAgY29tcHJlc3Npb25fdHlwZSA9IEZpbGVTeXN0ZW0uX2dldF9jb21wcmVzc2lvbl90eXBlKHBhdGgsIGNvbXByZXNzaW9uX3R5cGUpCiAgICByYXdfZmlsZSA9IG9wZW4ocGF0aCwgbW9kZSkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQ6CiAgICAgIHJldHVybiByYXdfZmlsZQogICAgZWxzZToKICAgICAgcmV0dXJuIENvbXByZXNzZWRGaWxlKHJhd19maWxlLCBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBjcmVhdGUoc2VsZiwgcGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHdyaXRlIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGF0aF9vcGVuKHBhdGgsICd3YicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIG9wZW4oc2VsZiwgcGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSByZWFkIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGF0aF9vcGVuKHBhdGgsICdyYicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGNvcHkoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogbGlzdCBvZiBzb3VyY2UgZmlsZSBvYmplY3RzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IGxpc3Qgb2YgZGVzdGluYXRpb24gb2YgdGhlIG5ldyBvYmplY3QKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGVycl9tc2cgPSAoInNvdXJjZV9maWxlX25hbWVzIGFuZCBkZXN0aW5hdGlvbl9maWxlX25hbWVzIHNob3VsZCAiCiAgICAgICAgICAgICAgICJiZSBlcXVhbCBpbiBsZW5ndGgiKQogICAgYXNzZXJ0IGxlbihzb3VyY2VfZmlsZV9uYW1lcykgPT0gbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpLCBlcnJfbXNnCgogICAgZGVmIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbik6CiAgICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCiAgICAgICIiIgogICAgICB0cnk6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGluYXRpb24pOgogICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkZXN0aW5hdGlvbik6CiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGVzdGluYXRpb24pCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICBvcy5yZW1vdmUoZGVzdGluYXRpb24pCiAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihzb3VyY2UpOgogICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgICAgZWxzZToKICAgICAgICAgIHNodXRpbC5jb3B5Mihzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnIpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgX2NvcHlfcGF0aChzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkNvcHkgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCgogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVuYW1lIHRoZSBmaWxlcyBhdCB0aGUgc291cmNlIGxpc3QgdG8gdGhlIGRlc3RpbmF0aW9uIGxpc3QuCiAgICBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpc3RzIHNob3VsZCBiZSBvZiB0aGUgc2FtZSBzaXplLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBMaXN0IG9mIGZpbGUgcGF0aHMgdGhhdCBuZWVkIHRvIGJlIG1vdmVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBmb3IgdGhlIGZpbGVzCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSByZW5hbWUgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGVycl9tc2cgPSAoInNvdXJjZV9maWxlX25hbWVzIGFuZCBkZXN0aW5hdGlvbl9maWxlX25hbWVzIHNob3VsZCAiCiAgICAgICAgICAgICAgICJiZSBlcXVhbCBpbiBsZW5ndGgiKQogICAgYXNzZXJ0IGxlbihzb3VyY2VfZmlsZV9uYW1lcykgPT0gbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpLCBlcnJfbXNnCgogICAgZGVmIF9yZW5hbWVfZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgIiIiUmVuYW1lIGEgc2luZ2xlIGZpbGUgb2JqZWN0IiIiCiAgICAgIHRyeToKICAgICAgICBvcy5yZW5hbWUoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgIHJhaXNlIElPRXJyb3IoZXJyKQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIHNvdXJjZSwgZGVzdGluYXRpb24gaW4gemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgdHJ5OgogICAgICAgIF9yZW5hbWVfZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIlJlbmFtZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIkNoZWNrIGlmIHRoZSBwcm92aWRlZCBwYXRoIGV4aXN0cyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgcGF0aCBleGlzdHMKICAgICIiIgogICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCgogIGRlZiBkZWxldGUoc2VsZiwgcGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBkZWYgX2RlbGV0ZV9wYXRoKHBhdGgpOgogICAgICAiIiJSZWN1cnNpdmVseSBkZWxldGUgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IHRoZSBwcm92aWRlZCBwYXRoLgogICAgICAiIiIKICAgICAgdHJ5OgogICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQogICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnIpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgdHJ5OgogICAgICAgIF9kZWxldGVfcGF0aChwYXRoKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zW3BhdGhdID0gZQoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJEZWxldGUgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCn1xnihYFQAAAExvY2FsRmlsZVN5c3RlbS5zcGxpdFgDAAAAZGVmSzdLQ4dYFAAAAExvY2FsRmlsZVN5c3RlbS5jb3B5WAMAAABkZWZLnEvDh1gVAAAATG9jYWxGaWxlU3lzdGVtLm1hdGNoWAMAAABkZWZLUkt2h1gUAAAATG9jYWxGaWxlU3lzdGVtLm9wZW5YAwAAAGRlZkuPS5uHWBwAAABMb2NhbEZpbGVTeXN0ZW0ubWF0Y2guX21hdGNoWAMAAABkZWZLZEtqh1gaAAAATG9jYWxGaWxlU3lzdGVtLl9wYXRoX29wZW5YAwAAAGRlZkt3S4GHWBYAAABMb2NhbEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZLREtRh1gWAAAATG9jYWxGaWxlU3lzdGVtLmNyZWF0ZVgDAAAAZGVmS4JLjodYFgAAAExvY2FsRmlsZVN5c3RlbS5kZWxldGVYAwAAAGRlZkvuTQwBh1gWAAAATG9jYWxGaWxlU3lzdGVtLmV4aXN0c1gDAAAAZGVmS+RL7YdYDwAAAExvY2FsRmlsZVN5c3RlbVgFAAAAY2xhc3NLI00MAYdYFgAAAExvY2FsRmlsZVN5c3RlbS5zY2hlbWVYAwAAAGRlZksmSyuHWBYAAABMb2NhbEZpbGVTeXN0ZW0ucmVuYW1lWAMAAABkZWZLxEvjh1gjAAAATG9jYWxGaWxlU3lzdGVtLnJlbmFtZS5fcmVuYW1lX2ZpbGVYAwAAAGRlZkvTS9mHWCMAAABMb2NhbEZpbGVTeXN0ZW0uZGVsZXRlLl9kZWxldGVfcGF0aFgDAAAAZGVmS/hNAgGHWBQAAABMb2NhbEZpbGVTeXN0ZW0uam9pblgDAAAAZGVmSyxLNodYHwAAAExvY2FsRmlsZVN5c3RlbS5jb3B5Ll9jb3B5X3BhdGhYAwAAAGRlZkuqS7mHdX1xnyhYFQAAAExvY2FsRmlsZVN5c3RlbS5zcGxpdFgeAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtcaBYFAAAAExvY2FsRmlsZVN5c3RlbS5jb3B5aKBYFAAAAExvY2FsRmlsZVN5c3RlbS5vcGVuaKBYFgAAAExvY2FsRmlsZVN5c3RlbS5ta2RpcnNooFgWAAAATG9jYWxGaWxlU3lzdGVtLmRlbGV0ZWigWBYAAABMb2NhbEZpbGVTeXN0ZW0uZXhpc3RzaKBYDwAAAExvY2FsRmlsZVN5c3RlbWigWBYAAABMb2NhbEZpbGVTeXN0ZW0uc2NoZW1laKBYFgAAAExvY2FsRmlsZVN5c3RlbS5yZW5hbWVooFgVAAAATG9jYWxGaWxlU3lzdGVtLm1hdGNoaKBYFAAAAExvY2FsRmlsZVN5c3RlbS5qb2luaKBYFgAAAExvY2FsRmlsZVN5c3RlbS5jcmVhdGVooHVoilgeAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtcaGFgXGifXGjYnRxpFULX19idWlsdGluX19xpYlVJmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVycaYoWJcoAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNsb3VkIERhdGFzdG9yZSBoZWxwZXIgZnVuY3Rpb25zLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmltcG9ydCBlcnJubwppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmZyb20gc29ja2V0IGltcG9ydCBlcnJvciBhcyBTb2NrZXRFcnJvcgoKIyBweWxpbnQ6IGRpc2FibGU9dW5ncm91cGVkLWltcG9ydHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AgaW1wb3J0IGF1dGgKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBkYXRhc3RvcmUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBkYXRhc3RvcmVfcGIyCiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBlbnRpdHlfcGIyCiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBxdWVyeV9wYjIKICBmcm9tIGdvb2dsZS5ycGMgaW1wb3J0IGNvZGVfcGIyCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUgaW1wb3J0IFByb3BlcnR5RmlsdGVyLCBDb21wb3NpdGVGaWx0ZXIKICBmcm9tIGdvb2dsZWRhdGFzdG9yZSBpbXBvcnQgaGVscGVyIGFzIGRhdGFzdG9yZV9oZWxwZXIKICBmcm9tIGdvb2dsZWRhdGFzdG9yZS5jb25uZWN0aW9uIGltcG9ydCBEYXRhc3RvcmUKICBmcm9tIGdvb2dsZWRhdGFzdG9yZS5jb25uZWN0aW9uIGltcG9ydCBSUENFcnJvcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgojIHB5bGludDogZW5hYmxlPXVuZ3JvdXBlZC1pbXBvcnRzCgoKZGVmIGtleV9jb21wYXJhdG9yKGsxLCBrMik6CiAgIiIiQSBjb21wYXJhdG9yIGZvciBEYXRhc3RvcmUga2V5cy4KCiAgQ29tcGFyaXNvbiBpcyBvbmx5IHZhbGlkIGZvciBrZXlzIGluIHRoZSBzYW1lIHBhcnRpdGlvbi4gVGhlIGNvbXBhcmlzb24gaGVyZQogIGlzIGJldHdlZW4gdGhlIGxpc3Qgb2YgcGF0aHMgZm9yIGVhY2gga2V5LgogICIiIgoKICBpZiBrMS5wYXJ0aXRpb25faWQgIT0gazIucGFydGl0aW9uX2lkOgogICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNvbXBhcmUga2V5cyB3aXRoIGRpZmZlcmVudCBwYXJ0aXRpb24gaWRzLicpCgogIGsyX2l0ZXIgPSBpdGVyKGsyLnBhdGgpCgogIGZvciBrMV9wYXRoIGluIGsxLnBhdGg6CiAgICBrMl9wYXRoID0gbmV4dChrMl9pdGVyLCBOb25lKQogICAgaWYgbm90IGsyX3BhdGg6CiAgICAgIHJldHVybiAxCgogICAgcmVzdWx0ID0gY29tcGFyZV9wYXRoKGsxX3BhdGgsIGsyX3BhdGgpCgogICAgaWYgcmVzdWx0ICE9IDA6CiAgICAgIHJldHVybiByZXN1bHQKCiAgazJfcGF0aCA9IG5leHQoazJfaXRlciwgTm9uZSkKICBpZiBrMl9wYXRoOgogICAgcmV0dXJuIC0xCiAgcmV0dXJuIDAKCgpkZWYgY29tcGFyZV9wYXRoKHAxLCBwMik6CiAgIiIiQSBjb21wYXJhdG9yIGZvciBrZXkgcGF0aC4KCiAgQSBwYXRoIGhhcyBlaXRoZXIgYW4gYGlkYCBvciBhIGBuYW1lYCBmaWVsZCBkZWZpbmVkLiBUaGUKICBjb21wYXJpc29uIHdvcmtzIHdpdGggdGhlIGZvbGxvd2luZyBydWxlczoKCiAgMS4gSWYgb25lIHBhdGggaGFzIGBpZGAgZGVmaW5lZCB3aGlsZSB0aGUgb3RoZXIgZG9lc24ndCwgdGhlbiB0aGUKICBvbmUgd2l0aCBgaWRgIGRlZmluZWQgaXMgY29uc2lkZXJlZCBzbWFsbGVyLgogIDIuIElmIGJvdGggcGF0aHMgaGF2ZSBgaWRgIGRlZmluZWQsIHRoZW4gdGhlaXIgaWRzIGFyZSBjb21wYXJlZC4KICAzLiBJZiBubyBgaWRgIGlzIGRlZmluZWQgZm9yIGJvdGggcGF0aHMsIHRoZW4gdGhlaXIgYG5hbWVzYCBhcmUgY29tcGFyZWQuCiAgIiIiCgogIHJlc3VsdCA9IGNtcChwMS5raW5kLCBwMi5raW5kKQogIGlmIHJlc3VsdCAhPSAwOgogICAgcmV0dXJuIHJlc3VsdAoKICBpZiBwMS5IYXNGaWVsZCgnaWQnKToKICAgIGlmIG5vdCBwMi5IYXNGaWVsZCgnaWQnKToKICAgICAgcmV0dXJuIC0xCgogICAgcmV0dXJuIGNtcChwMS5pZCwgcDIuaWQpCgogIGlmIHAyLkhhc0ZpZWxkKCdpZCcpOgogICAgcmV0dXJuIDEKCiAgcmV0dXJuIGNtcChwMS5uYW1lLCBwMi5uYW1lKQoKCmRlZiBnZXRfZGF0YXN0b3JlKHByb2plY3QpOgogICIiIlJldHVybnMgYSBDbG91ZCBEYXRhc3RvcmUgY2xpZW50LiIiIgogIGNyZWRlbnRpYWxzID0gYXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFscygpCiAgcmV0dXJuIERhdGFzdG9yZShwcm9qZWN0LCBjcmVkZW50aWFscywgaG9zdD0nYmF0Y2gtZGF0YXN0b3JlLmdvb2dsZWFwaXMuY29tJykKCgpkZWYgbWFrZV9yZXF1ZXN0KHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnkpOgogICIiIk1ha2UgYSBDbG91ZCBEYXRhc3RvcmUgcmVxdWVzdCBmb3IgdGhlIGdpdmVuIHF1ZXJ5LiIiIgogIHJlcSA9IGRhdGFzdG9yZV9wYjIuUnVuUXVlcnlSZXF1ZXN0KCkKICByZXEucGFydGl0aW9uX2lkLkNvcHlGcm9tKG1ha2VfcGFydGl0aW9uKHByb2plY3QsIG5hbWVzcGFjZSkpCgogIHJlcS5xdWVyeS5Db3B5RnJvbShxdWVyeSkKICByZXR1cm4gcmVxCgoKZGVmIG1ha2VfcGFydGl0aW9uKHByb2plY3QsIG5hbWVzcGFjZSk6CiAgIiIiTWFrZSBhIFBhcnRpdGlvbklkIGZvciB0aGUgZ2l2ZW4gcHJvamVjdCBhbmQgbmFtZXNwYWNlLiIiIgogIHBhcnRpdGlvbiA9IGVudGl0eV9wYjIuUGFydGl0aW9uSWQoKQogIHBhcnRpdGlvbi5wcm9qZWN0X2lkID0gcHJvamVjdAogIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgIHBhcnRpdGlvbi5uYW1lc3BhY2VfaWQgPSBuYW1lc3BhY2UKCiAgcmV0dXJuIHBhcnRpdGlvbgoKCmRlZiByZXRyeV9vbl9ycGNfZXJyb3IoZXhjZXB0aW9uKToKICAiIiJBIHJldHJ5IGZpbHRlciBmb3IgQ2xvdWQgRGF0YXN0b3JlIFJQQ0Vycm9ycy4iIiIKICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUlBDRXJyb3IpOgogICAgZXJyX2NvZGUgPSBleGNlcHRpb24uY29kZQogICAgIyBUT0RPKEJFQU0tMjE1Nik6IHB1dCB0aGVzZSBjb2RlcyBpbiBhIGdsb2JhbCBsaXN0IGFuZCB1c2UgdGhhdCBpbnN0ZWFkLgogICAgcmV0dXJuIChlcnJfY29kZSA9PSBjb2RlX3BiMi5ERUFETElORV9FWENFRURFRCBvcgogICAgICAgICAgICBlcnJfY29kZSA9PSBjb2RlX3BiMi5VTkFWQUlMQUJMRSBvcgogICAgICAgICAgICBlcnJfY29kZSA9PSBjb2RlX3BiMi5VTktOT1dOIG9yCiAgICAgICAgICAgIGVycl9jb2RlID09IGNvZGVfcGIyLklOVEVSTkFMKQoKICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgU29ja2V0RXJyb3IpOgogICAgcmV0dXJuIChleGNlcHRpb24uZXJybm8gPT0gZXJybm8uRUNPTk5SRVNFVCBvcgogICAgICAgICAgICBleGNlcHRpb24uZXJybm8gPT0gZXJybm8uRVRJTUVET1VUKQoKICByZXR1cm4gRmFsc2UKCgpkZWYgZmV0Y2hfZW50aXRpZXMocHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSwgZGF0YXN0b3JlKToKICAiIiJBIGhlbHBlciBtZXRob2QgdG8gZmV0Y2ggZW50aXRpZXMgZnJvbSBDbG91ZCBEYXRhc3RvcmUuCgogIEFyZ3M6CiAgICBwcm9qZWN0OiBQcm9qZWN0IElECiAgICBuYW1lc3BhY2U6IENsb3VkIERhdGFzdG9yZSBuYW1lc3BhY2UKICAgIHF1ZXJ5OiBRdWVyeSB0byBiZSByZWFkIGZyb20KICAgIGRhdGFzdG9yZTogQ2xvdWQgRGF0YXN0b3JlIENsaWVudAoKICBSZXR1cm5zOgogICAgQW4gaXRlcmF0b3Igb2YgZW50aXRpZXMuCiAgIiIiCiAgcmV0dXJuIFF1ZXJ5SXRlcmF0b3IocHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSwgZGF0YXN0b3JlKQoKCmRlZiBpc19rZXlfdmFsaWQoa2V5KToKICAiIiJSZXR1cm5zIFRydWUgaWYgYSBDbG91ZCBEYXRhc3RvcmUga2V5IGlzIGNvbXBsZXRlLgoKICBBIGtleSBpcyBjb21wbGV0ZSBpZiBpdHMgbGFzdCBlbGVtZW50IGhhcyBlaXRoZXIgYW4gaWQgb3IgYSBuYW1lLgogICIiIgogIGlmIG5vdCBrZXkucGF0aDoKICAgIHJldHVybiBGYWxzZQogIHJldHVybiBrZXkucGF0aFstMV0uSGFzRmllbGQoJ2lkJykgb3Iga2V5LnBhdGhbLTFdLkhhc0ZpZWxkKCduYW1lJykKCgpkZWYgd3JpdGVfbXV0YXRpb25zKGRhdGFzdG9yZSwgcHJvamVjdCwgbXV0YXRpb25zLCB0aHJvdHRsZXIsCiAgICAgICAgICAgICAgICAgICAgcnBjX3N0YXRzX2NhbGxiYWNrPU5vbmUsIHRocm90dGxlX2RlbGF5PTEpOgogICIiIkEgaGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIGEgYmF0Y2ggb2YgbXV0YXRpb25zIHRvIENsb3VkIERhdGFzdG9yZS4KCiAgSWYgYSBjb21taXQgZmFpbHMsIGl0IHdpbGwgYmUgcmV0cmllZCB1cHRvIDUgdGltZXMuIEFsbCBtdXRhdGlvbnMgaW4gdGhlCiAgYmF0Y2ggd2lsbCBiZSBjb21taXR0ZWQgYWdhaW4sIGV2ZW4gaWYgdGhlIGNvbW1pdCB3YXMgcGFydGlhbGx5IHN1Y2Nlc3NmdWwuCiAgSWYgdGhlIHJldHJ5IGxpbWl0IGlzIGV4Y2VlZGVkLCB0aGUgbGFzdCBleGNlcHRpb24gZnJvbSBDbG91ZCBEYXRhc3RvcmUgd2lsbAogIGJlIHJhaXNlZC4KCiAgQXJnczoKICAgIGRhdGFzdG9yZTogZ29vZ2xlZGF0YXN0b3JlLmNvbm5lY3Rpb24uRGF0YXN0b3JlCiAgICBwcm9qZWN0OiBzdHIsIHByb2plY3QgaWQKICAgIG11dGF0aW9uczogbGlzdCBvZiBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxLmRhdGFzdG9yZV9wYjIuTXV0YXRpb24KICAgIHJwY19zdGF0c19jYWxsYmFjazogYSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYXJndW1lbnRzIGBzdWNjZXNzZXNgIGFuZAogICAgICAgIGBmYWlsdXJlc2AgYW5kIGB0aHJvdHRsZWRfc2Vjc2A7IHRoaXMgaXMgY2FsbGVkIHRvIHJlY29yZCBzdWNjZXNzZnVsCiAgICAgICAgYW5kIGZhaWxlZCBSUENzIHRvIERhdGFzdG9yZSBhbmQgdGltZSBzcGVudCB3YWl0aW5nIGZvciB0aHJvdHRsaW5nLgogICAgdGhyb3R0bGVyOiBBZGFwdGl2ZVRocm90dGxlciwgdG8gdXNlIHRvIHNlbGVjdCByZXF1ZXN0cyB0byBiZSB0aHJvdHRsZWQuCiAgICB0aHJvdHRsZV9kZWxheTogZmxvYXQsIHRpbWUgaW4gc2Vjb25kcyB0byBzbGVlcCB3aGVuIHRocm90dGxlZC4KCiAgUmV0dXJucyBhIHR1cGxlIG9mOgogICAgQ29tbWl0UmVzcG9uc2UsIHRoZSByZXNwb25zZSBmcm9tIERhdGFzdG9yZTsKICAgIGludCwgdGhlIGxhdGVuY3kgb2YgdGhlIHN1Y2Nlc3NmdWwgUlBDIGluIG1pbGxpc2Vjb25kcy4KICAiIiIKICBjb21taXRfcmVxdWVzdCA9IGRhdGFzdG9yZV9wYjIuQ29tbWl0UmVxdWVzdCgpCiAgY29tbWl0X3JlcXVlc3QubW9kZSA9IGRhdGFzdG9yZV9wYjIuQ29tbWl0UmVxdWVzdC5OT05fVFJBTlNBQ1RJT05BTAogIGNvbW1pdF9yZXF1ZXN0LnByb2plY3RfaWQgPSBwcm9qZWN0CiAgZm9yIG11dGF0aW9uIGluIG11dGF0aW9uczoKICAgIGNvbW1pdF9yZXF1ZXN0Lm11dGF0aW9ucy5hZGQoKS5Db3B5RnJvbShtdXRhdGlvbikKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZihudW1fcmV0cmllcz01LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5X29uX3JwY19lcnJvcikKICBkZWYgY29tbWl0KHJlcXVlc3QpOgogICAgIyBDbGllbnQtc2lkZSB0aHJvdHRsaW5nLgogICAgd2hpbGUgdGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3QodGltZS50aW1lKCkqMTAwMCk6CiAgICAgIGxvZ2dpbmcuaW5mbygiRGVsYXlpbmcgcmVxdWVzdCBmb3IgJWRzIGR1ZSB0byBwcmV2aW91cyBmYWlsdXJlcyIsCiAgICAgICAgICAgICAgICAgICB0aHJvdHRsZV9kZWxheSkKICAgICAgdGltZS5zbGVlcCh0aHJvdHRsZV9kZWxheSkKICAgICAgcnBjX3N0YXRzX2NhbGxiYWNrKHRocm90dGxlZF9zZWNzPXRocm90dGxlX2RlbGF5KQoKICAgIHRyeToKICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgIHJlc3BvbnNlID0gZGF0YXN0b3JlLmNvbW1pdChyZXF1ZXN0KQogICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCgogICAgICBycGNfc3RhdHNfY2FsbGJhY2soc3VjY2Vzc2VzPTEpCiAgICAgIHRocm90dGxlci5zdWNjZXNzZnVsX3JlcXVlc3Qoc3RhcnRfdGltZSoxMDAwKQogICAgICBjb21taXRfdGltZV9tcyA9IGludCgoZW5kX3RpbWUtc3RhcnRfdGltZSkqMTAwMCkKICAgICAgcmV0dXJuIHJlc3BvbnNlLCBjb21taXRfdGltZV9tcwogICAgZXhjZXB0IChSUENFcnJvciwgU29ja2V0RXJyb3IpOgogICAgICBpZiBycGNfc3RhdHNfY2FsbGJhY2s6CiAgICAgICAgcnBjX3N0YXRzX2NhbGxiYWNrKGVycm9ycz0xKQogICAgICByYWlzZQoKICByZXNwb25zZSwgY29tbWl0X3RpbWVfbXMgPSBjb21taXQoY29tbWl0X3JlcXVlc3QpCiAgcmV0dXJuIHJlc3BvbnNlLCBjb21taXRfdGltZV9tcwoKCmRlZiBtYWtlX2xhdGVzdF90aW1lc3RhbXBfcXVlcnkobmFtZXNwYWNlKToKICAiIiJNYWtlIGEgUXVlcnkgdG8gZmV0Y2ggdGhlIGxhdGVzdCB0aW1lc3RhbXAgc3RhdGlzdGljcy4iIiIKICBxdWVyeSA9IHF1ZXJ5X3BiMi5RdWVyeSgpCiAgaWYgbmFtZXNwYWNlIGlzIE5vbmU6CiAgICBxdWVyeS5raW5kLmFkZCgpLm5hbWUgPSAnX19TdGF0X1RvdGFsX18nCiAgZWxzZToKICAgIHF1ZXJ5LmtpbmQuYWRkKCkubmFtZSA9ICdfX1N0YXRfTnNfVG90YWxfXycKCiAgIyBEZXNjZW5kaW5nIG9yZGVyIG9mIGB0aW1lc3RhbXBgCiAgZGF0YXN0b3JlX2hlbHBlci5hZGRfcHJvcGVydHlfb3JkZXJzKHF1ZXJ5LCAiLXRpbWVzdGFtcCIpCiAgIyBPbmx5IGdldCB0aGUgbGF0ZXN0IGVudGl0eQogIHF1ZXJ5LmxpbWl0LnZhbHVlID0gMQogIHJldHVybiBxdWVyeQoKCmRlZiBtYWtlX2tpbmRfc3RhdHNfcXVlcnkobmFtZXNwYWNlLCBraW5kLCBsYXRlc3RfdGltZXN0YW1wKToKICAiIiJNYWtlIGEgUXVlcnkgdG8gZmV0Y2ggdGhlIGxhdGVzdCBraW5kIHN0YXRpc3RpY3MuIiIiCiAga2luZF9zdGF0X3F1ZXJ5ID0gcXVlcnlfcGIyLlF1ZXJ5KCkKICBpZiBuYW1lc3BhY2UgaXMgTm9uZToKICAgIGtpbmRfc3RhdF9xdWVyeS5raW5kLmFkZCgpLm5hbWUgPSAnX19TdGF0X0tpbmRfXycKICBlbHNlOgogICAga2luZF9zdGF0X3F1ZXJ5LmtpbmQuYWRkKCkubmFtZSA9ICdfX1N0YXRfTnNfS2luZF9fJwoKICBraW5kX2ZpbHRlciA9IGRhdGFzdG9yZV9oZWxwZXIuc2V0X3Byb3BlcnR5X2ZpbHRlcigKICAgICAgcXVlcnlfcGIyLkZpbHRlcigpLCAna2luZF9uYW1lJywgUHJvcGVydHlGaWx0ZXIuRVFVQUwsIHVuaWNvZGUoa2luZCkpCiAgdGltZXN0YW1wX2ZpbHRlciA9IGRhdGFzdG9yZV9oZWxwZXIuc2V0X3Byb3BlcnR5X2ZpbHRlcigKICAgICAgcXVlcnlfcGIyLkZpbHRlcigpLCAndGltZXN0YW1wJywgUHJvcGVydHlGaWx0ZXIuRVFVQUwsCiAgICAgIGxhdGVzdF90aW1lc3RhbXApCgogIGRhdGFzdG9yZV9oZWxwZXIuc2V0X2NvbXBvc2l0ZV9maWx0ZXIoa2luZF9zdGF0X3F1ZXJ5LmZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZUZpbHRlci5BTkQsIGtpbmRfZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX2ZpbHRlcikKICByZXR1cm4ga2luZF9zdGF0X3F1ZXJ5CgoKY2xhc3MgUXVlcnlJdGVyYXRvcihvYmplY3QpOgogICIiIkEgaXRlcmF0b3IgY2xhc3MgZm9yIGVudGl0aWVzIG9mIGEgZ2l2ZW4gcXVlcnkuCgogIEVudGl0aWVzIGFyZSByZWFkIGluIGJhdGNoZXMuIFJldHJpZXMgb24gZmFpbHVyZXMuCiAgIiIiCiAgIyBNYXhpbXVtIG51bWJlciBvZiByZXN1bHRzIHRvIHJlcXVlc3QgcGVyIHF1ZXJ5LgogIF9CQVRDSF9TSVpFID0gNTAwCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBuYW1lc3BhY2UsIHF1ZXJ5LCBkYXRhc3RvcmUpOgogICAgc2VsZi5fcXVlcnkgPSBxdWVyeQogICAgc2VsZi5fZGF0YXN0b3JlID0gZGF0YXN0b3JlCiAgICBzZWxmLl9wcm9qZWN0ID0gcHJvamVjdAogICAgc2VsZi5fbmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLl9zdGFydF9jdXJzb3IgPSBOb25lCiAgICBzZWxmLl9saW1pdCA9IHNlbGYuX3F1ZXJ5LmxpbWl0LnZhbHVlIG9yIHN5cy5tYXhzaXplCiAgICBzZWxmLl9yZXEgPSBtYWtlX3JlcXVlc3QocHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSkKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZihudW1fcmV0cmllcz01LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5X29uX3JwY19lcnJvcikKICBkZWYgX25leHRfYmF0Y2goc2VsZik6CiAgICAiIiJGZXRjaGVzIHRoZSBuZXh0IGJhdGNoIG9mIGVudGl0aWVzLiIiIgogICAgaWYgc2VsZi5fc3RhcnRfY3Vyc29yIGlzIG5vdCBOb25lOgogICAgICBzZWxmLl9yZXEucXVlcnkuc3RhcnRfY3Vyc29yID0gc2VsZi5fc3RhcnRfY3Vyc29yCgogICAgIyBzZXQgYmF0Y2ggc2l6ZQogICAgc2VsZi5fcmVxLnF1ZXJ5LmxpbWl0LnZhbHVlID0gbWluKHNlbGYuX0JBVENIX1NJWkUsIHNlbGYuX2xpbWl0KQogICAgcmVzcCA9IHNlbGYuX2RhdGFzdG9yZS5ydW5fcXVlcnkoc2VsZi5fcmVxKQogICAgcmV0dXJuIHJlc3AKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgbW9yZV9yZXN1bHRzID0gVHJ1ZQogICAgd2hpbGUgbW9yZV9yZXN1bHRzOgogICAgICByZXNwID0gc2VsZi5fbmV4dF9iYXRjaCgpCiAgICAgIGZvciBlbnRpdHlfcmVzdWx0IGluIHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHM6CiAgICAgICAgeWllbGQgZW50aXR5X3Jlc3VsdC5lbnRpdHkKCiAgICAgIHNlbGYuX3N0YXJ0X2N1cnNvciA9IHJlc3AuYmF0Y2guZW5kX2N1cnNvcgogICAgICBudW1fcmVzdWx0cyA9IGxlbihyZXNwLmJhdGNoLmVudGl0eV9yZXN1bHRzKQogICAgICBzZWxmLl9saW1pdCAtPSBudW1fcmVzdWx0cwoKICAgICAgIyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJlYWQgbW9yZSBlbnRpdGllcy4KICAgICAgIyBUcnVlIHdoZW4gcXVlcnkgbGltaXQgaGFzbid0IGJlZW4gc2F0aXNmaWVkIGFuZCB0aGVyZSBhcmUgbW9yZSBlbnRpdGllcwogICAgICAjIHRvIGJlIHJlYWQuIFRoZSBsYXR0ZXIgaXMgdHJ1ZSBpZiB0aGUgcmVzcG9uc2UgaGFzIGEgc3RhdHVzCiAgICAgICMgYE5PVF9GSU5JU0hFRGAgb3IgaWYgdGhlIG51bWJlciBvZiByZXN1bHRzIHJlYWQgaW4gdGhlIHByZXZpb3VzIGJhdGNoCiAgICAgICMgaXMgZXF1YWwgdG8gYF9CQVRDSF9TSVpFYCAoYWxsIGluZGljYXRpb25zIHRoYXQgdGhlcmUgaXMgbW9yZSBkYXRhIGJlCiAgICAgICMgcmVhZCkuCiAgICAgIG1vcmVfcmVzdWx0cyA9ICgoc2VsZi5fbGltaXQgPiAwKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICgobnVtX3Jlc3VsdHMgPT0gc2VsZi5fQkFUQ0hfU0laRSkgb3IKICAgICAgICAgICAgICAgICAgICAgICAocmVzcC5iYXRjaC5tb3JlX3Jlc3VsdHMgPT0KICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcGIyLlF1ZXJ5UmVzdWx0QmF0Y2guTk9UX0ZJTklTSEVEKSkpCn1xpyhYGwAAAG1ha2VfbGF0ZXN0X3RpbWVzdGFtcF9xdWVyeVgDAAAAZGVmS+dL9IdYFgAAAFF1ZXJ5SXRlcmF0b3IuX19pdGVyX19YAwAAAGRlZk0nAU08AYdYDwAAAHdyaXRlX211dGF0aW9uc1gDAAAAZGVmS65L5YdYGQAAAFF1ZXJ5SXRlcmF0b3IuX25leHRfYmF0Y2hYAwAAAGRlZk0bAU0mAYdYFgAAAHdyaXRlX211dGF0aW9ucy5jb21taXRYAwAAAGRlZkvLS+KHWBUAAABtYWtlX2tpbmRfc3RhdHNfcXVlcnlYAwAAAGRlZkv2TQgBh1gOAAAAa2V5X2NvbXBhcmF0b3JYAwAAAGRlZkszS02HWAwAAABjb21wYXJlX3BhdGhYAwAAAGRlZktPS2mHWBYAAABRdWVyeUl0ZXJhdG9yLl9faW5pdF9fWAMAAABkZWZNEgFNGgGHWA4AAABtYWtlX3BhcnRpdGlvblgDAAAAZGVmS3pLgodYDAAAAG1ha2VfcmVxdWVzdFgDAAAAZGVmS3FLeIdYDQAAAGdldF9kYXRhc3RvcmVYAwAAAGRlZktrS2+HWAwAAABpc19rZXlfdmFsaWRYAwAAAGRlZkukS6yHWA0AAABRdWVyeUl0ZXJhdG9yWAUAAABjbGFzc00KAU08AYdYEgAAAHJldHJ5X29uX3JwY19lcnJvclgDAAAAZGVmS4RLk4dYDgAAAGZldGNoX2VudGl0aWVzWAMAAABkZWZLlUuih3V9cagoWBsAAABtYWtlX2xhdGVzdF90aW1lc3RhbXBfcXVlcnlYJgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVycalYDwAAAHdyaXRlX211dGF0aW9uc2ipWA4AAABtYWtlX3BhcnRpdGlvbmipWBUAAABtYWtlX2tpbmRfc3RhdHNfcXVlcnloqVgOAAAAa2V5X2NvbXBhcmF0b3JoqVgMAAAAY29tcGFyZV9wYXRoaKlYEgAAAHJldHJ5X29uX3JwY19lcnJvcmipWAwAAABtYWtlX3JlcXVlc3RoqVgNAAAAZ2V0X2RhdGFzdG9yZWipWA0AAABRdWVyeUl0ZXJhdG9yaKlYDAAAAGlzX2tleV92YWxpZGipWA4AAABmZXRjaF9lbnRpdGllc2ipdWiKWCYAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcnGqhYFxq31xrGJ0ca1VGWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMoWPlwAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNvbGxlY3Rpb24gb2YgdXNlZnVsIGNvZGVycy4KCk9ubHkgdGhvc2UgY29kZXJzIGxpc3RlZCBpbiBfX2FsbF9fIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9mIHRoaXMgbW9kdWxlLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBiYXNlNjQKaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCgppbXBvcnQgZ29vZ2xlLnByb3RvYnVmCgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgY29kZXJfaW1wbApmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW5ncm91cGVkLWltcG9ydHMKdHJ5OgogIGZyb20gLnN0cmVhbSBpbXBvcnQgZ2V0X3ZhcmludF9zaXplCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBmcm9tIC5zbG93X3N0cmVhbSBpbXBvcnQgZ2V0X3ZhcmludF9zaXplCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgoKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KIyBBdm9pZCBkZXBlbmRlbmNpZXMgb24gdGhlIGZ1bGwgU0RLLgp0cnk6CiAgIyBJbXBvcnQgZGlsbCBmcm9tIHRoZSBwaWNrbGVyIG1vZHVsZSB0byBtYWtlIHN1cmUgb3VyIG1vbmtleS1wYXRjaGluZyBvZiBkaWxsCiAgIyBvY2N1cnMuCiAgZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyIGltcG9ydCBkaWxsCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAjIFdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc3RvY2sgZGlsbCBsaWJyYXJ5IGluIHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoZQogICMgZnVsbCBQeXRob24gU0RLLgogIGltcG9ydCBkaWxsCgoKX19hbGxfXyA9IFsnQ29kZXInLAogICAgICAgICAgICdCeXRlc0NvZGVyJywgJ0RpbGxDb2RlcicsICdGYXN0UHJpbWl0aXZlc0NvZGVyJywgJ0Zsb2F0Q29kZXInLAogICAgICAgICAgICdJdGVyYWJsZUNvZGVyJywgJ1BpY2tsZUNvZGVyJywgJ1Byb3RvQ29kZXInLCAnU2luZ2xldG9uQ29kZXInLAogICAgICAgICAgICdTdHJVdGY4Q29kZXInLCAnVGltZXN0YW1wQ29kZXInLCAnVHVwbGVDb2RlcicsCiAgICAgICAgICAgJ1R1cGxlU2VxdWVuY2VDb2RlcicsICdWYXJJbnRDb2RlcicsICdXaW5kb3dlZFZhbHVlQ29kZXInXQoKCmRlZiBzZXJpYWxpemVfY29kZXIoY29kZXIpOgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKICByZXR1cm4gJyVzJCVzJyAlIChjb2Rlci5fX2NsYXNzX18uX19uYW1lX18sIHBpY2tsZXIuZHVtcHMoY29kZXIpKQoKCmRlZiBkZXNlcmlhbGl6ZV9jb2RlcihzZXJpYWxpemVkKToKICBmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCiAgcmV0dXJuIHBpY2tsZXIubG9hZHMoc2VyaWFsaXplZC5zcGxpdCgnJCcsIDEpWzFdKQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKY2xhc3MgQ29kZXIob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjb2RlcnMuIiIiCgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgIiIiRW5jb2RlcyB0aGUgZ2l2ZW4gb2JqZWN0IGludG8gYSBieXRlIHN0cmluZy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0VuY29kZSBub3QgaW1wbGVtZW50ZWQ6ICVzLicgJSBzZWxmKQoKICBkZWYgZGVjb2RlKHNlbGYsIGVuY29kZWQpOgogICAgIiIiRGVjb2RlcyB0aGUgZ2l2ZW4gYnl0ZSBzdHJpbmcgaW50byB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEZWNvZGUgbm90IGltcGxlbWVudGVkOiAlcy4nICUgc2VsZikKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAiIiJXaGV0aGVyIHRoaXMgY29kZXIgaXMgZ3VhcmFudGVlZCB0byBlbmNvZGUgdmFsdWVzIGRldGVybWluaXN0aWNhbGx5LgoKICAgIEEgZGV0ZXJtaW5pc3RpYyBjb2RlciBpcyByZXF1aXJlZCBmb3Iga2V5IGNvZGVycyBpbiBHcm91cEJ5S2V5IG9wZXJhdGlvbnMKICAgIHRvIHByb2R1Y2UgY29uc2lzdGVudCByZXN1bHRzLgoKICAgIEZvciBleGFtcGxlLCBub3RlIHRoYXQgdGhlIGRlZmF1bHQgY29kZXIsIHRoZSBQaWNrbGVDb2RlciwgaXMgbm90CiAgICBkZXRlcm1pbmlzdGljOiB0aGUgb3JkZXJpbmcgb2YgcGlja2VkIGVudHJpZXMgaW4gbWFwcyBtYXkgdmFyeSBhY3Jvc3MKICAgIGV4ZWN1dGlvbnMgc2luY2UgdGhlcmUgaXMgbm8gZGVmaW5lZCBvcmRlciwgYW5kIHN1Y2ggYSBjb2RlciBpcyBub3QgaW4KICAgIGdlbmVyYWwgc3VpdGFibGUgZm9yIHVzYWdlIGFzIGEga2V5IGNvZGVyIGluIEdyb3VwQnlLZXkgb3BlcmF0aW9ucywgc2luY2UKICAgIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUga2V5IG1heSBiZSBlbmNvZGVkIGRpZmZlcmVudGx5LgoKICAgIFJldHVybnM6CiAgICAgIFdoZXRoZXIgY29kZXIgaXMgZGV0ZXJtaW5pc3RpYy4KICAgICIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICAiIiJSZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyB2ZXJzaW9uIG9mIHNlbGYsIGlmIHBvc3NpYmxlLgoKICAgIE90aGVyd2lzZSByYWlzZXMgYSB2YWx1ZSBlcnJvci4KICAgICIiIgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm9yX21lc3NhZ2Ugb3IgIiclcycgY2Fubm90IGJlIG1hZGUgZGV0ZXJtaW5pc3RpYy4iKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJFc3RpbWF0ZXMgdGhlIGVuY29kZWQgc2l6ZSBvZiB0aGUgZ2l2ZW4gdmFsdWUsIGluIGJ5dGVzLgoKICAgIERhdGFmbG93IGVzdGltYXRlcyB0aGUgZW5jb2RlZCBzaXplIG9mIGEgUENvbGxlY3Rpb24gcHJvY2Vzc2VkIGluIGEgcGlwZWxpbmUKICAgIHN0ZXAgYnkgdXNpbmcgdGhlIGVzdGltYXRlZCBzaXplIG9mIGEgcmFuZG9tIHNhbXBsZSBvZiBlbGVtZW50cyBpbiB0aGF0CiAgICBQQ29sbGVjdGlvbi4KCiAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbmNvZGVzIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJucyBpdHMgYnl0ZQogICAgc2l6ZS4gIElmIGEgY29kZXIgY2FuIHByb3ZpZGUgYSBmYXN0IGVzdGltYXRlIG9mIHRoZSBlbmNvZGVkIHNpemUgb2YgYSB2YWx1ZQogICAgKGUuZy4sIGlmIHRoZSBlbmNvZGluZyBoYXMgYSBmaXhlZCBzaXplKSwgaXQgY2FuIHByb3ZpZGUgaXRzIGVzdGltYXRlIGhlcmUKICAgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCgogICAgQXJndW1lbnRzOgogICAgICB2YWx1ZTogdGhlIHZhbHVlIHdob3NlIGVuY29kZWQgc2l6ZSBpcyB0byBiZSBlc3RpbWF0ZWQuCgogICAgUmV0dXJuczoKICAgICAgVGhlIGVzdGltYXRlZCBlbmNvZGVkIHNpemUgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgIiIiCiAgICByZXR1cm4gbGVuKHNlbGYuZW5jb2RlKHZhbHVlKSkKCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAjIE1ldGhvZHMgYmVsb3cgYXJlIGludGVybmFsIFNESyBkZXRhaWxzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZCBmb3IKICAjIHVzZXItZGVmaW5lZCBjb2RlcnMuCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgICIiIkNyZWF0ZXMgYSBDb2RlckltcGwgdG8gZG8gdGhlIGFjdHVhbCBlbmNvZGluZyBhbmQgZGVjb2RpbmcuCiAgICAiIiIKICAgIHJldHVybiBjb2Rlcl9pbXBsLkNhbGxiYWNrQ29kZXJJbXBsKHNlbGYuZW5jb2RlLCBzZWxmLmRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXN0aW1hdGVfc2l6ZSkKCiAgZGVmIGdldF9pbXBsKHNlbGYpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgdGhlIENvZGVySW1wbCBiYWNraW5nIHRoaXMgQ29kZXIuCiAgICAiIiIKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaW1wbCcpOgogICAgICBzZWxmLl9pbXBsID0gc2VsZi5fY3JlYXRlX2ltcGwoKQogICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLl9pbXBsLCBjb2Rlcl9pbXBsLkNvZGVySW1wbCkKICAgIHJldHVybiBzZWxmLl9pbXBsCgogIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGljdF93aXRob3V0X2ltcGwoKQoKICBkZWYgX2RpY3Rfd2l0aG91dF9pbXBsKHNlbGYpOgogICAgaWYgaGFzYXR0cihzZWxmLCAnX2ltcGwnKToKICAgICAgZCA9IGRpY3Qoc2VsZi5fX2RpY3RfXykKICAgICAgZGVsIGRbJ19pbXBsJ10KICAgICAgcmV0dXJuIGQKICAgIHJldHVybiBzZWxmLl9fZGljdF9fCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludChjbHMsIHVudXNlZF90eXBlaGludCwgdW51c2VkX3JlZ2lzdHJ5KToKICAgICMgSWYgbm90IG92ZXJyaWRkZW4sIGp1c3QgY29uc3RydWN0IHRoZSBjb2RlciB3aXRob3V0IGFyZ3VtZW50cy4KICAgIHJldHVybiBjbHMoKQoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgIGlmIHNlbGYuaXNfa3ZfY29kZXIoKToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigna2V5X2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICBpZiBzZWxmLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbHVlX2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgdGhlIGludGVybmFsIGNvbXBvbmVudCBjb2RlcnMgb2YgdGhpcyBjb2Rlci4iIiIKICAgICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZXRhaWwgb2YgdGhlIENvZGVyIEFQSSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZQogICAgIyByZWZpbmVkIGluIHVzZXItZGVmaW5lZCBDb2RlcnMuCiAgICByZXR1cm4gW10KCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmKToKICAgICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgICBSZXR1cm5zIEdvb2dsZSBDbG91ZCBEYXRhZmxvdyBBUEkgZGVzY3JpcHRpb24gb2YgdGhpcyBjb2Rlci4iIiIKICAgICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZXRhaWwgb2YgdGhlIENvZGVyIEFQSSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZQogICAgIyByZWZpbmVkIGluIHVzZXItZGVmaW5lZCBDb2RlcnMuCgogICAgdmFsdWUgPSB7CiAgICAgICAgIyBXZSBwYXNzIGNvZGVycyBpbiB0aGUgZm9ybSAiPGNvZGVyX25hbWU+JDxwaWNrbGVkX2RhdGE+IiB0byBtYWtlIHRoZQogICAgICAgICMgam9iIGRlc2NyaXB0aW9uIEpTT04gbW9yZSByZWFkYWJsZS4gIERhdGEgYmVmb3JlIHRoZSAkIGlzIGlnbm9yZWQgYnkKICAgICAgICAjIHRoZSB3b3JrZXIuCiAgICAgICAgJ0B0eXBlJzogc2VyaWFsaXplX2NvZGVyKHNlbGYpLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogbGlzdCgKICAgICAgICAgICAgY29tcG9uZW50LmFzX2Nsb3VkX29iamVjdCgpCiAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gc2VsZi5fZ2V0X2NvbXBvbmVudF9jb2RlcnMoKQogICAgICAgICksCiAgICB9CiAgICByZXR1cm4gdmFsdWUKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18KICAgICAgICAgICAgYW5kIHNlbGYuX2RpY3Rfd2l0aG91dF9pbXBsKCkgPT0gb3RoZXIuX2RpY3Rfd2l0aG91dF9pbXBsKCkpCiAgICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgX2tub3duX3VybnMgPSB7fQoKICBAY2xhc3NtZXRob2QKICBkZWYgcmVnaXN0ZXJfdXJuKGNscywgdXJuLCBwYXJhbWV0ZXJfdHlwZSwgZm49Tm9uZSk6CiAgICAiIiJSZWdpc3RlcnMgYSB1cm4gd2l0aCBhIGNvbnN0cnVjdG9yLgoKICAgIEZvciBleGFtcGxlLCBpZiAnYmVhbTpmbjpmb28nIGhhZCBwYXJhbWV0ZXIgdHlwZSBGb29QYXlsb2FkLCBvbmUgY291bGQKICAgIHdyaXRlIGBSdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4oJ2JlYW46Zm46Zm9vJywgRm9vUGF5bG9hZCwgZm9vX2Zyb21fcHJvdG8pYAogICAgd2hlcmUgZm9vX2Zyb21fcHJvdG8gdG9vayBhcyBhcmd1bWVudHMgYSBGb29QYXlsb2FkIGFuZCBhIFBpcGVsaW5lQ29udGV4dC4KICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvciByYXRoZXIgdGhhbiBwYXNzaW5nIHRoZQogICAgY2FsbGFibGUgaW4gYXMgdGhlIGZpbmFsIHBhcmFtZXRlci4KCiAgICBBIGNvcnJlc3BvbmRpbmcgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIgbWV0aG9kIHdvdWxkIGJlIGV4cGVjdGVkIHRoYXQKICAgIHJldHVybnMgdGhlIHR1cGxlICgnYmVhbTpmbjpmb28nLCBGb29QYXlsb2FkKQogICAgIiIiCiAgICBkZWYgcmVnaXN0ZXIoZm4pOgogICAgICBjbHMuX2tub3duX3VybnNbdXJuXSA9IHBhcmFtZXRlcl90eXBlLCBmbgogICAgICByZXR1cm4gc3RhdGljbWV0aG9kKGZuKQogICAgaWYgZm46CiAgICAgICMgVXNlZCBhcyBhIHN0YXRlbWVudC4KICAgICAgcmVnaXN0ZXIoZm4pCiAgICBlbHNlOgogICAgICAjIFVzZWQgYXMgYSBkZWNvcmF0b3IuCiAgICAgIHJldHVybiByZWdpc3RlcgoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHVybiwgdHlwZWRfcGFyYW0sIGNvbXBvbmVudHMgPSBzZWxmLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGNvbnRleHQpCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5Db2RlcigKICAgICAgICBzcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuU2RrRnVuY3Rpb25TcGVjKAogICAgICAgICAgICBzcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICAgICAgdXJuPXVybiwKICAgICAgICAgICAgICAgIHBheWxvYWQ9dHlwZWRfcGFyYW0uU2VyaWFsaXplVG9TdHJpbmcoKQogICAgICAgICAgICAgICAgaWYgdHlwZWRfcGFyYW0gaXMgbm90IE5vbmUgZWxzZSBOb25lKSksCiAgICAgICAgY29tcG9uZW50X2NvZGVyX2lkcz1bY29udGV4dC5jb2RlcnMuZ2V0X2lkKGMpIGZvciBjIGluIGNvbXBvbmVudHNdKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKGNscywgY29kZXJfcHJvdG8sIGNvbnRleHQpOgogICAgIiIiQ29udmVydHMgZnJvbSBhbiBTZGtGdW5jdGlvblNwZWMgdG8gYSBGbiBvYmplY3QuCgogICAgUHJlZmVyIHJlZ2lzdGVyaW5nIGEgdXJuIHdpdGggaXRzIHBhcmFtZXRlciB0eXBlIGFuZCBjb25zdHJ1Y3Rvci4KICAgICIiIgogICAgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yID0gY2xzLl9rbm93bl91cm5zW2NvZGVyX3Byb3RvLnNwZWMuc3BlYy51cm5dCiAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMoY29kZXJfcHJvdG8uc3BlYy5zcGVjLnBheWxvYWQsIHBhcmFtZXRlcl90eXBlKSwKICAgICAgICBbY29udGV4dC5jb2RlcnMuZ2V0X2J5X2lkKGMpIGZvciBjIGluIGNvZGVyX3Byb3RvLmNvbXBvbmVudF9jb2Rlcl9pZHNdLAogICAgICAgIGNvbnRleHQpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoCiAgICAgICAgdXJucy5QSUNLTEVEX0NPREVSLAogICAgICAgIGdvb2dsZS5wcm90b2J1Zi53cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSh2YWx1ZT1zZXJpYWxpemVfY29kZXIoc2VsZikpLAogICAgICAgICgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKHVybiwgY2xzKToKICAgICIiIlJlZ2lzdGVyIGEgY29kZXIgdGhhdCdzIGNvbXBsZXRlbHkgZGVmaW5lZCBieSBpdHMgdXJuIGFuZCBpdHMKICAgIGNvbXBvbmVudChzKSwgaWYgYW55LCB3aGljaCBhcmUgcGFzc2VkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuCiAgICAiIiIKICAgIGNscy50b19ydW5uZXJfYXBpX3BhcmFtZXRlciA9ICgKICAgICAgICBsYW1iZGEgc2VsZiwgdW51c2VkX2NvbnRleHQ6ICh1cm4sIE5vbmUsIHNlbGYuX2dldF9jb21wb25lbnRfY29kZXJzKCkpKQoKICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQogICAgQENvZGVyLnJlZ2lzdGVyX3Vybih1cm4sIE5vbmUpCiAgICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcGF5bG9hZCwgY29tcG9uZW50cywgdW51c2VkX2NvbnRleHQpOgogICAgICBpZiBjb21wb25lbnRzOgogICAgICAgIHJldHVybiBjbHMoKmNvbXBvbmVudHMpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGNscygpCgoKQENvZGVyLnJlZ2lzdGVyX3Vybih1cm5zLlBJQ0tMRURfQ09ERVIsIGdvb2dsZS5wcm90b2J1Zi53cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKZGVmIF9waWNrbGVfZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb21wb25lbnRzLCBjb250ZXh0KToKICByZXR1cm4gZGVzZXJpYWxpemVfY29kZXIocGF5bG9hZC52YWx1ZSkKCgpjbGFzcyBTdHJVdGY4Q29kZXIoQ29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBzdHJpbmdzIGFzIFVURi04LiIiIgoKICBkZWYgZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiB2YWx1ZS5lbmNvZGUoJ3V0Zi04JykKCiAgZGVmIGRlY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gdmFsdWUuZGVjb2RlKCd1dGYtOCcpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBUb1N0cmluZ0NvZGVyKENvZGVyKToKICAiIiJBIGRlZmF1bHQgc3RyaW5nIGNvZGVyIHVzZWQgaWYgbm8gc2luayBjb2RlciBpcyBzcGVjaWZpZWQuIiIiCgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6CiAgICAgIHJldHVybiB2YWx1ZS5lbmNvZGUoJ3V0Zi04JykKICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgcmV0dXJuIHZhbHVlCiAgICByZXR1cm4gc3RyKHZhbHVlKQoKICBkZWYgZGVjb2RlKHNlbGYsIF8pOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVG9TdHJpbmdDb2RlciBjYW5ub3QgYmUgdXNlZCBmb3IgZGVjb2RpbmcuJykKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCmNsYXNzIEZhc3RDb2RlcihDb2Rlcik6CiAgIiIiQ29kZXIgc3ViY2xhc3MgdXNlZCB3aGVuIGEgKGZhc3RlcikgQ29kZXJJbXBsIGlzIHN1cHBsaWVkIGRpcmVjdGx5LgoKICBUaGUgQ29kZXIgY2xhc3MgZGVmaW5lcyBfY3JlYXRlX2ltcGwgaW4gdGVybXMgb2YgZW5jb2RlKCkgYW5kIGRlY29kZSgpOwogIHRoaXMgY2xhc3MgaW52ZXJ0cyB0aGF0IGJ5IGRlZmluaW5nIGVuY29kZSgpIGFuZCBkZWNvZGUoKSBpbiB0ZXJtcyBvZgogIF9jcmVhdGVfaW1wbCgpLgogICIiIgoKICBkZWYgZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgICIiIkVuY29kZXMgdGhlIGdpdmVuIG9iamVjdCBpbnRvIGEgYnl0ZSBzdHJpbmcuIiIiCiAgICByZXR1cm4gc2VsZi5nZXRfaW1wbCgpLmVuY29kZSh2YWx1ZSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkKToKICAgICIiIkRlY29kZXMgdGhlIGdpdmVuIGJ5dGUgc3RyaW5nIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuZ2V0X2ltcGwoKS5kZWNvZGUoZW5jb2RlZCkKCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIHNlbGYuZ2V0X2ltcGwoKS5lc3RpbWF0ZV9zaXplKHZhbHVlKQoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIEJ5dGVzQ29kZXIoRmFzdENvZGVyKToKICAiIiJCeXRlIHN0cmluZyBjb2Rlci4iIiIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkJ5dGVzQ29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDpieXRlcycsCiAgICB9CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybih1cm5zLkJZVEVTX0NPREVSLCBCeXRlc0NvZGVyKQoKCmNsYXNzIFZhckludENvZGVyKEZhc3RDb2Rlcik6CiAgIiIiVmFyaWFibGUtbGVuZ3RoIGludGVnZXIgY29kZXIuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5WYXJJbnRDb2RlckltcGwoKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybih1cm5zLlZBUl9JTlRfQ09ERVIsIFZhckludENvZGVyKQoKCmNsYXNzIEZsb2F0Q29kZXIoRmFzdENvZGVyKToKICAiIiJBIGNvZGVyIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4iIiIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkZsb2F0Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKY2xhc3MgVGltZXN0YW1wQ29kZXIoRmFzdENvZGVyKToKICAiIiJBIGNvZGVyIHVzZWQgZm9yIHRpbWV1dGlsLlRpbWVzdGFtcCB2YWx1ZXMuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5UaW1lc3RhbXBDb2RlckltcGwoKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpjbGFzcyBTaW5nbGV0b25Db2RlcihGYXN0Q29kZXIpOgogICIiIkEgY29kZXIgdGhhdCBhbHdheXMgZW5jb2RlcyBleGFjdGx5IG9uZSB2YWx1ZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlNpbmdsZXRvbkNvZGVySW1wbChzZWxmLl92YWx1ZSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLl92YWx1ZSA9PSBvdGhlci5fdmFsdWUKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5fdmFsdWUpCgoKZGVmIG1heWJlX2RpbGxfZHVtcHMobyk6CiAgIiIiUGlja2xlIHVzaW5nIGNQaWNrbGUgb3IgdGhlIERpbGwgcGlja2xlciBhcyBhIGZhbGxiYWNrLiIiIgogICMgV2UgbmVlZCB0byB1c2UgdGhlIGRpbGwgcGlja2xlciBmb3Igb2JqZWN0cyBvZiBjZXJ0YWluIGN1c3RvbSBjbGFzc2VzLAogICMgaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgb25lcyB0aGF0IGNvbnRhaW4gbGFtYmRhcy4KICB0cnk6CiAgICByZXR1cm4gcGlja2xlLmR1bXBzKG8sIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQogIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIHJldHVybiBkaWxsLmR1bXBzKG8pCgoKZGVmIG1heWJlX2RpbGxfbG9hZHMobyk6CiAgIiIiVW5waWNrbGUgdXNpbmcgY1BpY2tsZSBvciB0aGUgRGlsbCBwaWNrbGVyIGFzIGEgZmFsbGJhY2suIiIiCiAgdHJ5OgogICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhvKQogIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIHJldHVybiBkaWxsLmxvYWRzKG8pCgoKY2xhc3MgX1BpY2tsZUNvZGVyQmFzZShGYXN0Q29kZXIpOgogICIiIkJhc2UgY2xhc3MgZm9yIHBpY2tsaW5nIGNvZGVycy4iIiIKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCBjb2RlciwgdGhlIFBpY2tsZUNvZGVyLCBpcyBub3QgZGV0ZXJtaW5pc3RpYyAoZm9yCiAgICAjIGV4YW1wbGUsIHRoZSBvcmRlcmluZyBvZiBwaWNrZWQgZW50cmllcyBpbiBtYXBzIG1heSB2YXJ5IGFjcm9zcwogICAgIyBleGVjdXRpb25zKSwgYW5kIHNvIGlzIG5vdCBpbiBnZW5lcmFsIHN1aXRhYmxlIGZvciB1c2FnZSBhcyBhIGtleSBjb2RlciBpbgogICAgIyBHcm91cEJ5S2V5IG9wZXJhdGlvbnMuCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBpc19wYWlyX2xpa2U9VHJ1ZSk6CiAgICB2YWx1ZSA9IHN1cGVyKF9QaWNrbGVDb2RlckJhc2UsIHNlbGYpLmFzX2Nsb3VkX29iamVjdCgpCiAgICAjIFdlIGN1cnJlbnRseSB1c2UgdGhpcyBjb2RlciBpbiBwbGFjZXMgd2hlcmUgd2UgY2Fubm90IGluZmVyIHRoZSBjb2RlciB0bwogICAgIyB1c2UgZm9yIHRoZSB2YWx1ZSB0eXBlIGluIGEgbW9yZSBncmFudWxhciB3YXkuICBJbiBwbGFjZXMgd2hlcmUgdGhlCiAgICAjIHNlcnZpY2UgZXhwZWN0cyBhIHBhaXIsIGl0IGNoZWNrcyBmb3IgdGhlICJpc19wYWlyX2xpa2UiIGtleSwgaW4gd2hpY2gKICAgICMgY2FzZSB3ZSB3b3VsZCBmYWlsIHdpdGhvdXQgdGhlIGhhY2sgYmVsb3cuCiAgICBpZiBpc19wYWlyX2xpa2U6CiAgICAgIHZhbHVlWydpc19wYWlyX2xpa2UnXSA9IFRydWUKICAgICAgdmFsdWVbJ2NvbXBvbmVudF9lbmNvZGluZ3MnXSA9IFsKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGlzX3BhaXJfbGlrZT1GYWxzZSksCiAgICAgICAgICBzZWxmLmFzX2Nsb3VkX29iamVjdChpc19wYWlyX2xpa2U9RmFsc2UpCiAgICAgIF0KCiAgICByZXR1cm4gdmFsdWUKCiAgIyBXZSBhbGxvdyAua2V5X2NvZGVyKCkgYW5kIC52YWx1ZV9jb2RlcigpIHRvIGJlIGNhbGxlZCBvbiBQaWNrbGVDb2RlciBzaW5jZQogICMgd2UgY2FuJ3QgYWx3YXlzIGluZmVyIHRoZSByZXR1cm4gdmFsdWVzIG9mIGxhbWJkYXMgaW4gUGFyRG8gb3BlcmF0aW9ucywgdGhlCiAgIyByZXN1bHQgb2Ygd2hpY2ggbWF5IGJlIHVzZWQgaW4gYSBHcm91cEJ5a2V5LgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKY2xhc3MgUGlja2xlQ29kZXIoX1BpY2tsZUNvZGVyQmFzZSk6CiAgIiIiQ29kZXIgdXNpbmcgUHl0aG9uJ3MgcGlja2xlIGZ1bmN0aW9uYWxpdHkuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICBkdW1wcyA9IHBpY2tsZS5kdW1wcwogICAgSElHSEVTVF9QUk9UT0NPTCA9IHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MCiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbCgKICAgICAgICBsYW1iZGEgeDogZHVtcHMoeCwgSElHSEVTVF9QUk9UT0NPTCksIHBpY2tsZS5sb2FkcykKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIHJldHVybiBEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlcihzZWxmLCBzdGVwX2xhYmVsKQoKCmNsYXNzIERpbGxDb2RlcihfUGlja2xlQ29kZXJCYXNlKToKICAiIiJDb2RlciB1c2luZyBkaWxsJ3MgcGlja2xlIGZ1bmN0aW9uYWxpdHkuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbChtYXliZV9kaWxsX2R1bXBzLCBtYXliZV9kaWxsX2xvYWRzKQoKCmNsYXNzIERldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiVGhyb3dzIHJ1bnRpbWUgZXJyb3JzIHdoZW4gZW5jb2Rpbmcgbm9uLWRldGVybWluaXN0aWMgdmFsdWVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY29kZXIsIHN0ZXBfbGFiZWwpOgogICAgc2VsZi5fdW5kZXJseWluZ19jb2RlciA9IGNvZGVyCiAgICBzZWxmLl9zdGVwX2xhYmVsID0gc3RlcF9sYWJlbAoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXJJbXBsKAogICAgICAgIHNlbGYuX3VuZGVybHlpbmdfY29kZXIuZ2V0X2ltcGwoKSwgc2VsZi5fc3RlcF9sYWJlbCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBGYXN0UHJpbWl0aXZlc0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiRW5jb2RlcyBzaW1wbGUgcHJpbWl0aXZlcyAoZS5nLiBzdHIsIGludCkgZWZmaWNpZW50bHkuCgogIEZvciB1bmtub3duIHR5cGVzLCBmYWxscyBiYWNrIHRvIGFub3RoZXIgY29kZXIgKGUuZy4gUGlja2xlQ29kZXIpLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmYWxsYmFja19jb2Rlcj1QaWNrbGVDb2RlcigpKToKICAgIHNlbGYuX2ZhbGxiYWNrX2NvZGVyID0gZmFsbGJhY2tfY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkZhc3RQcmltaXRpdmVzQ29kZXJJbXBsKAogICAgICAgIHNlbGYuX2ZhbGxiYWNrX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2ZhbGxiYWNrX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIoc2VsZiwgc3RlcF9sYWJlbCkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBpc19wYWlyX2xpa2U9VHJ1ZSk6CiAgICB2YWx1ZSA9IHN1cGVyKEZhc3RDb2Rlciwgc2VsZikuYXNfY2xvdWRfb2JqZWN0KCkKICAgICMgV2UgY3VycmVudGx5IHVzZSB0aGlzIGNvZGVyIGluIHBsYWNlcyB3aGVyZSB3ZSBjYW5ub3QgaW5mZXIgdGhlIGNvZGVyIHRvCiAgICAjIHVzZSBmb3IgdGhlIHZhbHVlIHR5cGUgaW4gYSBtb3JlIGdyYW51bGFyIHdheS4gIEluIHBsYWNlcyB3aGVyZSB0aGUKICAgICMgc2VydmljZSBleHBlY3RzIGEgcGFpciwgaXQgY2hlY2tzIGZvciB0aGUgImlzX3BhaXJfbGlrZSIga2V5LCBpbiB3aGljaAogICAgIyBjYXNlIHdlIHdvdWxkIGZhaWwgd2l0aG91dCB0aGUgaGFjayBiZWxvdy4KICAgIGlmIGlzX3BhaXJfbGlrZToKICAgICAgdmFsdWVbJ2lzX3BhaXJfbGlrZSddID0gVHJ1ZQogICAgICB2YWx1ZVsnY29tcG9uZW50X2VuY29kaW5ncyddID0gWwogICAgICAgICAgc2VsZi5hc19jbG91ZF9vYmplY3QoaXNfcGFpcl9saWtlPUZhbHNlKSwKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGlzX3BhaXJfbGlrZT1GYWxzZSkKICAgICAgXQoKICAgIHJldHVybiB2YWx1ZQoKICAjIFdlIGFsbG93IC5rZXlfY29kZXIoKSBhbmQgLnZhbHVlX2NvZGVyKCkgdG8gYmUgY2FsbGVkIG9uIEZhc3RQcmltaXRpdmVzQ29kZXIKICAjIHNpbmNlIHdlIGNhbid0IGFsd2F5cyBpbmZlciB0aGUgcmV0dXJuIHZhbHVlcyBvZiBsYW1iZGFzIGluIFBhckRvCiAgIyBvcGVyYXRpb25zLCB0aGUgcmVzdWx0IG9mIHdoaWNoIG1heSBiZSB1c2VkIGluIGEgR3JvdXBCeWtleS4KICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKCmNsYXNzIEJhc2U2NFBpY2tsZUNvZGVyKENvZGVyKToKICAiIiJDb2RlciBvZiBvYmplY3RzIGJ5IFB5dGhvbiBwaWNrbGUsIHRoZW4gYmFzZTY0IGVuY29kaW5nLiIiIgogICMgVE9ETyhyb2JlcnR3Yik6IERvIGJhc2U2NCBlbmNvZGluZyB3aGVyZSBpdCdzIG5lZWRlZCAoZS5nLiBpbiBqc29uKSByYXRoZXIKICAjIHRoYW4gdmlhIGEgc3BlY2lhbCBDb2Rlci4KCiAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShwaWNrbGUuZHVtcHModmFsdWUsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkKToKICAgIHJldHVybiBwaWNrbGUubG9hZHMoYmFzZTY0LmI2NGRlY29kZShlbmNvZGVkKSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjIE5vdGUgdGhhdCB0aGUgQmFzZTY0UGlja2xlQ29kZXIgaXMgbm90IGRldGVybWluaXN0aWMuICBTZWUgdGhlCiAgICAjIGNvcnJlc3BvbmRpbmcgY29tbWVudHMgZm9yIFBpY2tsZUNvZGVyIGFib3ZlLgogICAgcmV0dXJuIEZhbHNlCgogICMgV2UgYWxsb3cgLmtleV9jb2RlcigpIGFuZCAudmFsdWVfY29kZXIoKSB0byBiZSBjYWxsZWQgb24gQmFzZTY0UGlja2xlQ29kZXIKICAjIHNpbmNlIHdlIGNhbid0IGFsd2F5cyBpbmZlciB0aGUgcmV0dXJuIHZhbHVlcyBvZiBsYW1iZGFzIGluIFBhckRvCiAgIyBvcGVyYXRpb25zLCB0aGUgcmVzdWx0IG9mIHdoaWNoIG1heSBiZSB1c2VkIGluIGEgR3JvdXBCeWtleS4KICAjCiAgIyBUT0RPKGNjeSk6IHRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgS1YgdmFsdWVzIGZyb20gQ3JlYXRlIHRyYW5zZm9ybXMuCiAgIyBJbnZlc3RpZ2F0ZSBhIHdheSB0byB1bmlmeSB0aGlzIHdpdGggUGlja2xlQ29kZXIuCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmCgoKY2xhc3MgUHJvdG9Db2RlcihGYXN0Q29kZXIpOgogICIiIkEgQ29kZXIgZm9yIEdvb2dsZSBQcm90b2NvbCBCdWZmZXJzLgoKICBJdCBzdXBwb3J0cyBib3RoIFByb3RvY29sIEJ1ZmZlcnMgc3ludGF4IHZlcnNpb25zIDIgYW5kIDMuIEhvd2V2ZXIsCiAgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgcHl0aG9uIHByb3RvYnVmIGxpYnJhcnkgbXVzdCBleGFjdGx5IG1hdGNoIHRoZQogIHZlcnNpb24gb2YgdGhlIHByb3RvYyBjb21waWxlciB3aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwcm90b2J1ZgogIG1lc3NhZ2VzLgoKICBQcm90b0NvZGVyIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIGdsb2JhbCBDb2RlclJlZ2lzdHJ5IGFzIHRoZSBkZWZhdWx0IGNvZGVyIGZvcgogIGFueSBwcm90b2J1ZiBNZXNzYWdlIG9iamVjdC4KCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90b19tZXNzYWdlX3R5cGUpOgogICAgc2VsZi5wcm90b19tZXNzYWdlX3R5cGUgPSBwcm90b19tZXNzYWdlX3R5cGUKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlByb3RvQ29kZXJJbXBsKHNlbGYucHJvdG9fbWVzc2FnZV90eXBlKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgVE9ETyh2aWthc3JrKTogQSBwcm90byBtZXNzYWdlIGNhbiBiZSBkZXRlcm1pbmlzdGljIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4KICAgICMgYSBNYXAuCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYucHJvdG9fbWVzc2FnZV90eXBlID09IG90aGVyLnByb3RvX21lc3NhZ2VfdHlwZSkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5wcm90b19tZXNzYWdlX3R5cGUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV90eXBlX2hpbnQodHlwZWhpbnQsIHVudXNlZF9yZWdpc3RyeSk6CiAgICBpZiBpc3N1YmNsYXNzKHR5cGVoaW50LCBnb29nbGUucHJvdG9idWYubWVzc2FnZS5NZXNzYWdlKToKICAgICAgcmV0dXJuIFByb3RvQ29kZXIodHlwZWhpbnQpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCgnRXhwZWN0ZWQgYSBzdWJjbGFzcyBvZiBnb29nbGUucHJvdG9idWYubWVzc2FnZS5NZXNzYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAnLCBidXQgZ290IGEgJXMnICUgdHlwZWhpbnQpKQoKCmNsYXNzIFR1cGxlQ29kZXIoRmFzdENvZGVyKToKICAiIiJDb2RlciBvZiB0dXBsZSBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY29tcG9uZW50cyk6CiAgICBzZWxmLl9jb2RlcnMgPSB0dXBsZShjb21wb25lbnRzKQoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuVHVwbGVDb2RlckltcGwoW2MuZ2V0X2ltcGwoKSBmb3IgYyBpbiBzZWxmLl9jb2RlcnNdKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBhbGwoYy5pc19kZXRlcm1pbmlzdGljKCkgZm9yIGMgaW4gc2VsZi5fY29kZXJzKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gVHVwbGVDb2RlcihbYy5hc19kZXRlcm1pbmlzdGljX2NvZGVyKHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBzZWxmLl9jb2RlcnNdKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fdHlwZV9oaW50KHR5cGVoaW50LCByZWdpc3RyeSk6CiAgICByZXR1cm4gVHVwbGVDb2RlcihbcmVnaXN0cnkuZ2V0X2NvZGVyKHQpIGZvciB0IGluIHR5cGVoaW50LnR1cGxlX3R5cGVzXSkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmKToKICAgIGlmIHNlbGYuaXNfa3ZfY29kZXIoKToKICAgICAgcmV0dXJuIHsKICAgICAgICAgICdAdHlwZSc6ICdraW5kOnBhaXInLAogICAgICAgICAgJ2lzX3BhaXJfbGlrZSc6IFRydWUsCiAgICAgICAgICAnY29tcG9uZW50X2VuY29kaW5ncyc6IGxpc3QoCiAgICAgICAgICAgICAgY29tcG9uZW50LmFzX2Nsb3VkX29iamVjdCgpCiAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpCiAgICAgICAgICApLAogICAgICB9CgogICAgcmV0dXJuIHN1cGVyKFR1cGxlQ29kZXIsIHNlbGYpLmFzX2Nsb3VkX29iamVjdCgpCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5jb2RlcnMoKQoKICBkZWYgY29kZXJzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2NvZGVycwoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuX2NvZGVycykgPT0gMgoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgaWYgbGVuKHNlbGYuX2NvZGVycykgIT0gMjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHVwbGVDb2RlciBkb2VzIG5vdCBoYXZlIGV4YWN0bHkgMiBjb21wb25lbnRzLicpCiAgICByZXR1cm4gc2VsZi5fY29kZXJzWzBdCgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIGlmIGxlbihzZWxmLl9jb2RlcnMpICE9IDI6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1R1cGxlQ29kZXIgZG9lcyBub3QgaGF2ZSBleGFjdGx5IDIgY29tcG9uZW50cy4nKQogICAgcmV0dXJuIHNlbGYuX2NvZGVyc1sxXQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1R1cGxlQ29kZXJbJXNdJyAlICcsICcuam9pbihzdHIoYykgZm9yIGMgaW4gc2VsZi5fY29kZXJzKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi5fY29kZXJzID09IHNlbGYuX2NvZGVycykKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5fY29kZXJzKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBpZiBzZWxmLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJldHVybiB1cm5zLktWX0NPREVSLCBOb25lLCBzZWxmLmNvZGVycygpCiAgICBlbHNlOgogICAgICByZXR1cm4gc3VwZXIoVHVwbGVDb2Rlciwgc2VsZikudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29udGV4dCkKCiAgQENvZGVyLnJlZ2lzdGVyX3Vybih1cm5zLktWX0NPREVSLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXlsb2FkLCBjb21wb25lbnRzLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gVHVwbGVDb2Rlcihjb21wb25lbnRzKQoKCmNsYXNzIFR1cGxlU2VxdWVuY2VDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIG9mIGhvbW9nZW5lb3VzIHR1cGxlIG9iamVjdHMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtX2NvZGVyKToKICAgIHNlbGYuX2VsZW1fY29kZXIgPSBlbGVtX2NvZGVyCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5UdXBsZVNlcXVlbmNlQ29kZXJJbXBsKHNlbGYuX2VsZW1fY29kZXIuZ2V0X2ltcGwoKSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZWxlbV9jb2Rlci5pc19kZXRlcm1pbmlzdGljKCkKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIGlmIHNlbGYuaXNfZGV0ZXJtaW5pc3RpYygpOgogICAgICByZXR1cm4gc2VsZgogICAgZWxzZToKICAgICAgcmV0dXJuIFR1cGxlU2VxdWVuY2VDb2RlcigKICAgICAgICAgIHNlbGYuX2VsZW1fY29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludCh0eXBlaGludCwgcmVnaXN0cnkpOgogICAgcmV0dXJuIFR1cGxlU2VxdWVuY2VDb2RlcihyZWdpc3RyeS5nZXRfY29kZXIodHlwZWhpbnQuaW5uZXJfdHlwZSkpCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2VsZW1fY29kZXIsKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1R1cGxlU2VxdWVuY2VDb2Rlclslcl0nICUgc2VsZi5fZWxlbV9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi5fZWxlbV9jb2RlciA9PSBzZWxmLl9lbGVtX2NvZGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fZWxlbV9jb2RlcikpCgoKY2xhc3MgSXRlcmFibGVDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIG9mIGl0ZXJhYmxlcyBvZiBob21vZ2VuZW91cyBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZWxlbV9jb2Rlcik6CiAgICBzZWxmLl9lbGVtX2NvZGVyID0gZWxlbV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuSXRlcmFibGVDb2RlckltcGwoc2VsZi5fZWxlbV9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9lbGVtX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gSXRlcmFibGVDb2RlcigKICAgICAgICAgIHNlbGYuX2VsZW1fY29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlKSkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6c3RyZWFtJywKICAgICAgICAnaXNfc3RyZWFtX2xpa2UnOiBUcnVlLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogW3NlbGYuX2VsZW1fY29kZXIuYXNfY2xvdWRfb2JqZWN0KCldLAogICAgfQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZWxlbV9jb2RlcgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fdHlwZV9oaW50KHR5cGVoaW50LCByZWdpc3RyeSk6CiAgICByZXR1cm4gSXRlcmFibGVDb2RlcihyZWdpc3RyeS5nZXRfY29kZXIodHlwZWhpbnQuaW5uZXJfdHlwZSkpCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2VsZW1fY29kZXIsKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0l0ZXJhYmxlQ29kZXJbJXJdJyAlIHNlbGYuX2VsZW1fY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYuX2VsZW1fY29kZXIgPT0gc2VsZi5fZWxlbV9jb2RlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX2VsZW1fY29kZXIpKQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKHVybnMuSVRFUkFCTEVfQ09ERVIsIEl0ZXJhYmxlQ29kZXIpCgoKY2xhc3MgR2xvYmFsV2luZG93Q29kZXIoU2luZ2xldG9uQ29kZXIpOgogICIiIkNvZGVyIGZvciBnbG9iYWwgd2luZG93cy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKICAgIHN1cGVyKEdsb2JhbFdpbmRvd0NvZGVyLCBzZWxmKS5fX2luaXRfXyh3aW5kb3cuR2xvYmFsV2luZG93KCkpCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOmdsb2JhbF93aW5kb3cnLAogICAgfQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKHVybnMuR0xPQkFMX1dJTkRPV19DT0RFUiwgR2xvYmFsV2luZG93Q29kZXIpCgoKY2xhc3MgSW50ZXJ2YWxXaW5kb3dDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIGZvciBhbiB3aW5kb3cgZGVmaW5lZCBieSBhIHN0YXJ0IHRpbWVzdGFtcCBhbmQgYSBkdXJhdGlvbi4iIiIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkludGVydmFsV2luZG93Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDppbnRlcnZhbF93aW5kb3cnLAogICAgfQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4odXJucy5JTlRFUlZBTF9XSU5ET1dfQ09ERVIsIEludGVydmFsV2luZG93Q29kZXIpCgoKY2xhc3MgV2luZG93ZWRWYWx1ZUNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQ29kZXIgZm9yIHdpbmRvd2VkIHZhbHVlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdyYXBwZWRfdmFsdWVfY29kZXIsIHdpbmRvd19jb2Rlcj1Ob25lKToKICAgIGlmIG5vdCB3aW5kb3dfY29kZXI6CiAgICAgIHdpbmRvd19jb2RlciA9IFBpY2tsZUNvZGVyKCkKICAgIHNlbGYud3JhcHBlZF92YWx1ZV9jb2RlciA9IHdyYXBwZWRfdmFsdWVfY29kZXIKICAgIHNlbGYudGltZXN0YW1wX2NvZGVyID0gVGltZXN0YW1wQ29kZXIoKQogICAgc2VsZi53aW5kb3dfY29kZXIgPSB3aW5kb3dfY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLldpbmRvd2VkVmFsdWVDb2RlckltcGwoCiAgICAgICAgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLmdldF9pbXBsKCksCiAgICAgICAgc2VsZi50aW1lc3RhbXBfY29kZXIuZ2V0X2ltcGwoKSwKICAgICAgICBzZWxmLndpbmRvd19jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBhbGwoYy5pc19kZXRlcm1pbmlzdGljKCkgZm9yIGMgaW4gW3NlbGYud3JhcHBlZF92YWx1ZV9jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX2NvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aW5kb3dfY29kZXJdKQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDp3aW5kb3dlZF92YWx1ZScsCiAgICAgICAgJ2lzX3dyYXBwZXInOiBUcnVlLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICBjb21wb25lbnQuYXNfY2xvdWRfb2JqZWN0KCkKICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpXSwKICAgIH0KCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgIHJldHVybiBbc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLCBzZWxmLndpbmRvd19jb2Rlcl0KCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlci5pc19rdl9jb2RlcigpCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLmtleV9jb2RlcigpCgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIudmFsdWVfY29kZXIoKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1dpbmRvd2VkVmFsdWVDb2Rlclslc10nICUgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIgPT0gb3RoZXIud3JhcHBlZF92YWx1ZV9jb2RlcgogICAgICAgICAgICBhbmQgc2VsZi50aW1lc3RhbXBfY29kZXIgPT0gb3RoZXIudGltZXN0YW1wX2NvZGVyCiAgICAgICAgICAgIGFuZCBzZWxmLndpbmRvd19jb2RlciA9PSBvdGhlci53aW5kb3dfY29kZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKAogICAgICAgIChzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIsIHNlbGYudGltZXN0YW1wX2NvZGVyLCBzZWxmLndpbmRvd19jb2RlcikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4odXJucy5XSU5ET1dFRF9WQUxVRV9DT0RFUiwgV2luZG93ZWRWYWx1ZUNvZGVyKQoKCmNsYXNzIExlbmd0aFByZWZpeENvZGVyKEZhc3RDb2Rlcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb2RlciB3aGljaCBwcmVmaXhlcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIG9iamVjdCBpbiB0aGUgc3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfY29kZXIpOgogICAgc2VsZi5fdmFsdWVfY29kZXIgPSB2YWx1ZV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuTGVuZ3RoUHJlZml4Q29kZXJJbXBsKHNlbGYuX3ZhbHVlX2NvZGVyKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBzZWxmLl92YWx1ZV9jb2Rlci5pc19kZXRlcm1pbmlzdGljKCkKCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZiwgdmFsdWUpOgogICAgdmFsdWVfc2l6ZSA9IHNlbGYuX3ZhbHVlX2NvZGVyLmVzdGltYXRlX3NpemUodmFsdWUpCiAgICByZXR1cm4gZ2V0X3ZhcmludF9zaXplKHZhbHVlX3NpemUpICsgdmFsdWVfc2l6ZQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fdmFsdWVfY29kZXIKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6bGVuZ3RoX3ByZWZpeCcsCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbc2VsZi5fdmFsdWVfY29kZXIuYXNfY2xvdWRfb2JqZWN0KCldLAogICAgfQoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgcmV0dXJuIChzZWxmLl92YWx1ZV9jb2RlciwpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnTGVuZ3RoUHJlZml4Q29kZXJbJXJdJyAlIHNlbGYuX3ZhbHVlX2NvZGVyCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLl92YWx1ZV9jb2RlciA9PSBvdGhlci5fdmFsdWVfY29kZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl92YWx1ZV9jb2RlcikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4odXJucy5MRU5HVEhfUFJFRklYX0NPREVSLCBMZW5ndGhQcmVmaXhDb2RlcikKfXGuKFgRAAAAZGVzZXJpYWxpemVfY29kZXJYAwAAAGRlZktCS0WHWBwAAABfUGlja2xlQ29kZXJCYXNlLnZhbHVlX2NvZGVyWAMAAABkZWZN6wFN7QGHWBwAAABDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZLZEtth1ggAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk0pAk0sAodYHQAAAEJhc2U2NFBpY2tsZUNvZGVyLmlzX2t2X2NvZGVyWAMAAABkZWZNbgJNcAKHWCIAAABQaWNrbGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZN/gFNAAKHWBgAAABQaWNrbGVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk34AU39AYdYIQAAAFR1cGxlU2VxdWVuY2VDb2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmTf8CTQIDh1gNAAAAVG9TdHJpbmdDb2RlclgFAAAAY2xhc3NNMQFNQAGHWBkAAABUdXBsZVNlcXVlbmNlQ29kZXIuX19lcV9fWAMAAABkZWZNCQNNDAOHWBUAAABDb2Rlci5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZkv8TQcBh1gcAAAAX1BpY2tsZUNvZGVyQmFzZS5pc19rdl9jb2RlclgDAAAAZGVmTeUBTecBh1gYAAAAQmFzZTY0UGlja2xlQ29kZXIuZGVjb2RlWAMAAABkZWZNYAJNYgKHWB4AAABMZW5ndGhQcmVmaXhDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk2uA02wA4dYDwAAAHNlcmlhbGl6ZV9jb2RlclgDAAAAZGVmSz1LQIdYIwAAAEludGVydmFsV2luZG93Q29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNXANNYAOHWBcAAABUaW1lc3RhbXBDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTaABTaIBh1gdAAAAQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm5YAwAAAGRlZk0OAU0dAYdYEQAAAEZsb2F0Q29kZXIuX19lcV9fWAMAAABkZWZNjQFNjwGHWBwAAABJbnRlcnZhbFdpbmRvd0NvZGVyLl9faGFzaF9fWAMAAABkZWZNZANNZgOHWBkAAABUdXBsZUNvZGVyLmZyb21fdHlwZV9oaW50WAMAAABkZWZNswJNtgKHWB8AAABTaW5nbGV0b25Db2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNrQFNrwGHWB8AAABUaW1lc3RhbXBDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNmgFNnAGHWBEAAABCYXNlNjRQaWNrbGVDb2RlclgFAAAAY2xhc3NNWAJNdgKHWBoAAABJdGVyYWJsZUNvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTRcDTRkDh1gRAAAAVHVwbGVDb2Rlci5jb2RlcnNYAwAAAGRlZk3HAk3JAodYEQAAAFByb3RvQ29kZXIuX19lcV9fWAMAAABkZWZNkAJNkwKHWCIAAABXaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNgANNiAOHWBsAAABUaW1lc3RhbXBDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk2XAU2ZAYdYIQAAAEdsb2JhbFdpbmRvd0NvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTUoDTU4Dh1gWAAAAVHVwbGVDb2Rlci5pc19rdl9jb2RlclgDAAAAZGVmTcoCTcwCh1gFAAAAQ29kZXJYBQAAAGNsYXNzS0hNHQGHWBwAAABGYXN0UHJpbWl0aXZlc0NvZGVyLl9faW5pdF9fWAMAAABkZWZNJgJNKAKHWCkAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2Rlci5fX2luaXRfX1gDAAAAZGVmTQwCTQ8Ch1gdAAAASXRlcmFibGVDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZk0kA00qA4dYEgAAAFZhckludENvZGVyLl9fZXFfX1gDAAAAZGVmTXoBTXwBh1gjAAAASXRlcmFibGVDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnNYAwAAAGRlZk0yA000A4dYFgAAAENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZktTS2OHWBAAAABtYXliZV9kaWxsX2R1bXBzWAMAAABkZWZNtwFNvwGHWBUAAABTaW5nbGV0b25Db2Rlci5fX2VxX19YAwAAAGRlZk2wAU2yAYdYLAAAAERldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNHQJNHwKHWBcAAABCeXRlc0NvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTVwBTV4Bh1gtAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNEAJNEwKHWBMAAABGbG9hdENvZGVyLl9faGFzaF9fWAMAAABkZWZNkAFNkgGHWBoAAABJbnRlcnZhbFdpbmRvd0NvZGVyLl9fZXFfX1gDAAAAZGVmTWEDTWMDh1gTAAAAU3RyVXRmOENvZGVyLmRlY29kZVgDAAAAZGVmTSoBTSwBh1ggAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXJYBQAAAGNsYXNzTQkCTR8Ch1gdAAAAQmFzZTY0UGlja2xlQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZk10Ak12AodYFAAAAFRvU3RyaW5nQ29kZXIuZW5jb2RlWAMAAABkZWZNNAFNOgGHWBsAAABUdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2pAk2rAodYGwAAAENvZGVyLnJlZ2lzdGVyX3Vybi5yZWdpc3RlclgDAAAAZGVmS+hL64dYHQAAAFN0clV0ZjhDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNLQFNLwGHWBUAAABDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZku9S8+HWBoAAABMZW5ndGhQcmVmaXhDb2Rlci5fX2luaXRfX1gDAAAAZGVmTasDTa0Dh1gWAAAASXRlcmFibGVDb2Rlci5fX3JlcHJfX1gDAAAAZGVmTTUDTTcDh1gMAAAAU3RyVXRmOENvZGVyWAUAAABjbGFzc00kAU0vAYdYKQAAAFR1cGxlU2VxdWVuY2VDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZN+AJN/gKHWBQAAABDb2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmS6FLpYdYHAAAAEZhc3RQcmltaXRpdmVzQ29kZXIuX19oYXNoX19YAwAAAGRlZk1UAk1WAodYEQAAAFR1cGxlQ29kZXIuX19lcV9fWAMAAABkZWZN2gJN3QKHWCAAAABUdXBsZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmTcQCTcYCh1gaAAAAQnl0ZXNDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZk1iAU1mAYdYIQAAAFR1cGxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlclgDAAAAZGVmTawCTbICh1gSAAAAQ29kZXIuX19nZXRzdGF0ZV9fWAMAAABkZWZLl0uZh1gOAAAAU2luZ2xldG9uQ29kZXJYBQAAAGNsYXNzTaQBTbUBh1gWAAAASXRlcmFibGVDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTTwDTT4Dh1gMAAAAQ29kZXIuZGVjb2RlWAMAAABkZWZLT0tSh1gQAAAARmFzdENvZGVyLmRlY29kZVgDAAAAZGVmTU4BTVEBh1gTAAAAQ29kZXIudG9fcnVubmVyX2FwaVgDAAAAZGVmS/JL+4dYEQAAAENvZGVyLmlzX2t2X2NvZGVyWAMAAABkZWZLpkuoh1gUAAAAVmFySW50Q29kZXIuX19oYXNoX19YAwAAAGRlZk19AU1/AYdYEQAAAEJ5dGVzQ29kZXIuX19lcV9fWAMAAABkZWZNZwFNaQGHWB8AAABMZW5ndGhQcmVmaXhDb2Rlci5lc3RpbWF0ZV9zaXplWAMAAABkZWZNtANNtwOHWCAAAABfUGlja2xlQ29kZXJCYXNlLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTdMBTeEBh1gQAAAAbWF5YmVfZGlsbF9sb2Fkc1gDAAAAZGVmTcEBTccBh1gOAAAAVGltZXN0YW1wQ29kZXJYBQAAAGNsYXNzTZQBTaIBh1gfAAAARmFzdFByaW1pdGl2ZXNDb2Rlci52YWx1ZV9jb2RlclgDAAAAZGVmTU4CTVACh1gXAAAAVHVwbGVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk2mAk2oAodYEgAAAENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmS4dLjIdYEQAAAExlbmd0aFByZWZpeENvZGVyWAUAAABjbGFzc02mA03NA4dYEQAAAENvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZLr0u0h1gkAAAAVHVwbGVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZN5wJN6gKHWCwAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlclgDAAAAZGVmTRcCTRkCh1gqAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZNMAJNNQKHWBwAAABWYXJJbnRDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNdwFNeQGHWBkAAABJdGVyYWJsZUNvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNKwNNLQOHWBcAAABQcm90b0NvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTYgCTYoCh1gkAAAASXRlcmFibGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZNHQNNIwOHWCoAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2Rlci5rZXlfY29kZXJYAwAAAGRlZk0aAk0cAodYFAAAAFRvU3RyaW5nQ29kZXIuZGVjb2RlWAMAAABkZWZNOwFNPQGHWBsAAABUdXBsZVNlcXVlbmNlQ29kZXIuX19oYXNoX19YAwAAAGRlZk0NA00PA4dYDgAAAENvZGVyLl9fcmVwcl9fWAMAAABkZWZL0EvSh1gWAAAASXRlcmFibGVDb2Rlci5fX2luaXRfX1gDAAAAZGVmTRQDTRYDh1gjAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk17A01/A4dYGgAAAEZhc3RQcmltaXRpdmVzQ29kZXIuX19lcV9fWAMAAABkZWZNUQJNUwKHWBYAAABEaWxsQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNBQJNBwKHWBUAAABUaW1lc3RhbXBDb2Rlci5fX2VxX19YAwAAAGRlZk2dAU2fAYdYGAAAAExlbmd0aFByZWZpeENvZGVyLl9fZXFfX1gDAAAAZGVmTccDTcoDh1gSAAAAV2luZG93ZWRWYWx1ZUNvZGVyWAUAAABjbGFzc01rA02hA4dYCgAAAFByb3RvQ29kZXJYBQAAAGNsYXNzTXgCTZ4Ch1gXAAAARmxvYXRDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk2HAU2JAYdYKAAAAFdpbmRvd2VkVmFsdWVDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnNYAwAAAGRlZk2JA02LA4dYEAAAAEZhc3RDb2Rlci5lbmNvZGVYAwAAAGRlZk1KAU1NAYdYIQAAAExlbmd0aFByZWZpeENvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTbsDTcADh1ghAAAAX3BpY2tsZV9mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNHwFNIgGHWBcAAABfUGlja2xlQ29kZXJCYXNlLl9fZXFfX1gDAAAAZGVmTe4BTfABh1gbAAAAQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNXwFNYQGHWB0AAABGYXN0UHJpbWl0aXZlc0NvZGVyLmtleV9jb2RlclgDAAAAZGVmTUsCTU0Ch1gbAAAAQmFzZTY0UGlja2xlQ29kZXIua2V5X2NvZGVyWAMAAABkZWZNcQJNcwKHWBsAAABXaW5kb3dlZFZhbHVlQ29kZXIuX19yZXByX19YAwAAAGRlZk2VA02XA4dYFwAAAFNpbmdsZXRvbkNvZGVyLl9faW5pdF9fWAMAAABkZWZNpwFNqQGHWCcAAABMZW5ndGhQcmVmaXhDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnNYAwAAAGRlZk3BA03DA4dYEwAAAFR1cGxlQ29kZXIuX19oYXNoX19YAwAAAGRlZk3eAk3gAodYEgAAAFR1cGxlU2VxdWVuY2VDb2RlclgFAAAAY2xhc3NN7AJNDwOHWBsAAABGbG9hdENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2KAU2MAYdYHwAAAEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfa3ZfY29kZXJYAwAAAGRlZk1IAk1KAodYFwAAAFNpbmdsZXRvbkNvZGVyLl9faGFzaF9fWAMAAABkZWZNswFNtQGHWBQAAABUdXBsZUNvZGVyLmtleV9jb2RlclgDAAAAZGVmTc0CTdECh1gWAAAARmFzdENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTVUBTVcBh1gTAAAAUHJvdG9Db2Rlci5fX2hhc2hfX1gDAAAAZGVmTZQCTZYCh1gZAAAAUHJvdG9Db2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmTZcCTZ4Ch1gYAAAAQmFzZTY0UGlja2xlQ29kZXIuZW5jb2RlWAMAAABkZWZNXQJNXwKHWAkAAABGYXN0Q29kZXJYBQAAAGNsYXNzTUIBTVcBh1gcAAAASXRlcmFibGVDb2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmTS4DTTEDh1geAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2t2X2NvZGVyWAMAAABkZWZNjANNjgOHWAsAAABQaWNrbGVDb2RlclgFAAAAY2xhc3NN9QFNAAKHWBsAAABQcm90b0NvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2LAk2PAodYGwAAAENvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmS7VLvIdYIwAAAEZhc3RQcmltaXRpdmVzQ29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNNgJNRAKHWBoAAABUdXBsZUNvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTbcCTcMCh1gaAAAAX1BpY2tsZUNvZGVyQmFzZS5rZXlfY29kZXJYAwAAAGRlZk3oAU3qAYdYNwAAAENvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0XAU0dAYdYGQAAAFdpbmRvd2VkVmFsdWVDb2Rlci5fX2VxX19YAwAAAGRlZk2YA02dA4dYGAAAAENvZGVyLl9kaWN0X3dpdGhvdXRfaW1wbFgDAAAAZGVmS5pLoIdYGAAAAFZhckludENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTXQBTXYBh1giAAAATGVuZ3RoUHJlZml4Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTbEDTbMDh1gWAAAAVHVwbGVDb2Rlci52YWx1ZV9jb2RlclgDAAAAZGVmTdICTdYCh1geAAAAV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNkgNNlAOHWAsAAABWYXJJbnRDb2RlclgFAAAAY2xhc3NNcQFNfwGHWB8AAABXaW5kb3dlZFZhbHVlQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNdQNNegOHWCAAAABJbnRlcnZhbFdpbmRvd0NvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTVYDTVgDh1gXAAAARmFzdENvZGVyLmVzdGltYXRlX3NpemVYAwAAAGRlZk1SAU1UAYdYHgAAAEl0ZXJhYmxlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTRoDTRwDh1gbAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLl9faW5pdF9fWAMAAABkZWZN7wJN8QKHWAwAAABDb2Rlci5lbmNvZGVYAwAAAGRlZktLS06HWCgAAABUdXBsZVNlcXVlbmNlQ29kZXIuX2dldF9jb21wb25lbnRfY29kZXJzWAMAAABkZWZNAwNNBQOHWAwAAABDb2Rlci5fX2VxX19YAwAAAGRlZkvTS9eHWBMAAABUdXBsZUNvZGVyLl9fcmVwcl9fWAMAAABkZWZN1wJN2QKHWBIAAABDb2Rlci5yZWdpc3Rlcl91cm5YAwAAAGRlZkvbS/GHWBQAAABJdGVyYWJsZUNvZGVyLl9fZXFfX1gDAAAAZGVmTTgDTTsDh1gdAAAAQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0IAU0NAYdYHAAAAFdpbmRvd2VkVmFsdWVDb2Rlci5rZXlfY29kZXJYAwAAAGRlZk2PA02RA4dYJAAAAEludGVydmFsV2luZG93Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTVkDTVsDh1gJAAAARGlsbENvZGVyWAUAAABjbGFzc00CAk0HAodYEwAAAENvZGVyLmVzdGltYXRlX3NpemVYAwAAAGRlZktuS4GHWBoAAABMZW5ndGhQcmVmaXhDb2Rlci5fX3JlcHJfX1gDAAAAZGVmTcQDTcYDh1gQAAAAX1BpY2tsZUNvZGVyQmFzZVgFAAAAY2xhc3NNyQFN8wGHWBoAAABMZW5ndGhQcmVmaXhDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTcsDTc0Dh1giAAAAVHVwbGVDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTeECTeYCh1gkAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNLQJNLwKHWA0AAABJdGVyYWJsZUNvZGVyWAUAAABjbGFzc00RA00+A4dYHQAAAExlbmd0aFByZWZpeENvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNuANNugOHWBsAAABXaW5kb3dlZFZhbHVlQ29kZXIuX19pbml0X19YAwAAAGRlZk1uA010A4dYDwAAAENvZGVyLmtleV9jb2RlclgDAAAAZGVmS6lLrodYEwAAAEZhc3RQcmltaXRpdmVzQ29kZXJYBQAAAGNsYXNzTSECTVYCh1gTAAAAVHVwbGVDb2Rlci5fX2luaXRfX1gDAAAAZGVmTaMCTaUCh1gxAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTRQCTRYCh1gTAAAAU3RyVXRmOENvZGVyLmVuY29kZVgDAAAAZGVmTScBTSkBh1ghAAAAX1BpY2tsZUNvZGVyQmFzZS5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNzAFN0gGHWBoAAABHbG9iYWxXaW5kb3dDb2Rlci5fX2luaXRfX1gDAAAAZGVmTUYDTUkDh1gbAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLl9fcmVwcl9fWAMAAABkZWZNBgNNCAOHWBMAAABJbnRlcnZhbFdpbmRvd0NvZGVyWAUAAABjbGFzc01TA01mA4dYGwAAAFNpbmdsZXRvbkNvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTaoBTawBh1giAAAAQmFzZTY0UGlja2xlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTWMCTWcCh1gKAAAAQnl0ZXNDb2RlclgFAAAAY2xhc3NNWQFNbAGHWAoAAABUdXBsZUNvZGVyWAUAAABjbGFzc02gAk3qAodYEwAAAEJ5dGVzQ29kZXIuX19oYXNoX19YAwAAAGRlZk1qAU1sAYdYEwAAAFByb3RvQ29kZXIuX19pbml0X19YAwAAAGRlZk2FAk2HAodYCgAAAEZsb2F0Q29kZXJYBQAAAGNsYXNzTYQBTZIBh1gZAAAAX1BpY2tsZUNvZGVyQmFzZS5fX2hhc2hfX1gDAAAAZGVmTfEBTfMBh1gjAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk31Ak33AodYDgAAAENvZGVyLmdldF9pbXBsWAMAAABkZWZLjUuWh1gRAAAAR2xvYmFsV2luZG93Q29kZXJYBQAAAGNsYXNzTUMDTU4Dh1geAAAAVG9TdHJpbmdDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNPgFNQAGHWB8AAABUdXBsZVNlcXVlbmNlQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZN8gJN9AKHWBsAAABXaW5kb3dlZFZhbHVlQ29kZXIuX19oYXNoX19YAwAAAGRlZk2eA02hA4d1fXGvKFgWAAAAVHVwbGVDb2Rlci52YWx1ZV9jb2RlclgZAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc3GwWBwAAABDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyaLBYGwAAAFR1cGxlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2iwWB4AAABXaW5kb3dlZFZhbHVlQ29kZXIudmFsdWVfY29kZXJosFgbAAAAQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljaLBYCwAAAFZhckludENvZGVyaLBYCgAAAFByb3RvQ29kZXJosFgiAAAAUGlja2xlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcmiwWBUAAABDb2Rlci5hc19jbG91ZF9vYmplY3RosFgMAAAAU3RyVXRmOENvZGVyaLBYKQAAAFR1cGxlU2VxdWVuY2VDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyaLBYHgAAAEl0ZXJhYmxlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2iwWBQAAABDb2Rlci5mcm9tX3R5cGVfaGludGiwWAwAAABDb2Rlci5lbmNvZGVosFgVAAAAQ29kZXIuZnJvbV9ydW5uZXJfYXBpaLBYEgAAAENvZGVyLnJlZ2lzdGVyX3VybmiwWBoAAABCeXRlc0NvZGVyLmFzX2Nsb3VkX29iamVjdGiwWB0AAABGYXN0UHJpbWl0aXZlc0NvZGVyLmtleV9jb2RlcmiwWCEAAABUdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJosFgdAAAAQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJosFgkAAAASXRlcmFibGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyaLBYHQAAAENvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuaLBYCQAAAERpbGxDb2RlcmiwWCEAAABUdXBsZVNlcXVlbmNlQ29kZXIuZnJvbV90eXBlX2hpbnRosFgfAAAAU2luZ2xldG9uQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2iwWB8AAABUaW1lc3RhbXBDb2Rlci5pc19kZXRlcm1pbmlzdGljaLBYDAAAAENvZGVyLmRlY29kZWiwWBwAAABJdGVyYWJsZUNvZGVyLmZyb21fdHlwZV9oaW50aLBYIgAAAFR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJosFgTAAAAQ29kZXIudG9fcnVubmVyX2FwaWiwWBIAAABUdXBsZVNlcXVlbmNlQ29kZXJosFgbAAAARmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljaLBYJAAAAEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2iwWCIAAABXaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0aLBYDQAAAEl0ZXJhYmxlQ29kZXJosFgRAAAAVHVwbGVDb2Rlci5jb2RlcnNosFgdAAAAU3RyVXRmOENvZGVyLmlzX2RldGVybWluaXN0aWNosFgUAAAAVHVwbGVDb2Rlci5rZXlfY29kZXJosFgPAAAAQ29kZXIua2V5X2NvZGVyaLBYHwAAAEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfa3ZfY29kZXJosFgfAAAARmFzdFByaW1pdGl2ZXNDb2Rlci52YWx1ZV9jb2RlcmiwWBEAAABDb2Rlci5pc19rdl9jb2RlcmiwWBMAAABGYXN0UHJpbWl0aXZlc0NvZGVyaLBYFgAAAFR1cGxlQ29kZXIuaXNfa3ZfY29kZXJosFgFAAAAQ29kZXJosFgSAAAAV2luZG93ZWRWYWx1ZUNvZGVyaLBYHQAAAEl0ZXJhYmxlQ29kZXIuYXNfY2xvdWRfb2JqZWN0aLBYGQAAAFByb3RvQ29kZXIuZnJvbV90eXBlX2hpbnRosFgTAAAAU3RyVXRmOENvZGVyLmVuY29kZWiwWBEAAABDb2Rlci52YWx1ZV9jb2RlcmiwWBkAAABUdXBsZUNvZGVyLmZyb21fdHlwZV9oaW50aLBYIwAAAFR1cGxlU2VxdWVuY2VDb2Rlci5pc19kZXRlcm1pbmlzdGljaLBYJAAAAFR1cGxlQ29kZXIuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmiwWA4AAABTaW5nbGV0b25Db2RlcmiwWB4AAABXaW5kb3dlZFZhbHVlQ29kZXIuaXNfa3ZfY29kZXJosFgqAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyaLBYHAAAAFZhckludENvZGVyLmlzX2RldGVybWluaXN0aWNosFgbAAAAUHJvdG9Db2Rlci5pc19kZXRlcm1pbmlzdGljaLBYDgAAAENvZGVyLmdldF9pbXBsaLBYFgAAAENvZGVyLmlzX2RldGVybWluaXN0aWNosFgaAAAAVHVwbGVDb2Rlci5hc19jbG91ZF9vYmplY3RosFgcAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmtleV9jb2RlcmiwWAoAAABUdXBsZUNvZGVyaLBYDgAAAFRpbWVzdGFtcENvZGVyaLBYCgAAAEZsb2F0Q29kZXJosFgZAAAASXRlcmFibGVDb2Rlci52YWx1ZV9jb2RlcmiwWAsAAABQaWNrbGVDb2RlcmiwWCMAAABXaW5kb3dlZFZhbHVlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2iwWBMAAABDb2Rlci5lc3RpbWF0ZV9zaXplaLBYEwAAAFN0clV0ZjhDb2Rlci5kZWNvZGVosFgjAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5hc19jbG91ZF9vYmplY3RosFgKAAAAQnl0ZXNDb2RlcmiwdWiKWBkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzcbGFgXGyfXGzYnRxtFUaYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNxtShYGxgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiClVzZXItZmFjaW5nIGNsYXNzZXMgZm9yIE1ldHJpY3MgQVBJLgoKVGhlIGNsYXNzZXMgaW4gdGhpcyBmaWxlIGFsbG93IHVzZXJzIHRvIGRlZmluZSBhbmQgdXNlIG1ldHJpY3MgdG8gYmUgY29sbGVjdGVkCmFuZCBkaXNwbGF5ZWQgYXMgcGFydCBvZiB0aGVpciBwaXBlbGluZSBleGVjdXRpb24uCgotIE1ldHJpY3MgLSBUaGlzIGNsYXNzIGxldHMgcGlwZWxpbmUgYW5kIHRyYW5zZm9ybSB3cml0ZXJzIGNyZWF0ZSBhbmQgYWNjZXNzCiAgICBtZXRyaWMgb2JqZWN0cyBzdWNoIGFzIGNvdW50ZXJzLCBkaXN0cmlidXRpb25zLCBldGMuCiIiIgppbXBvcnQgaW5zcGVjdAoKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgTWV0cmljc0Vudmlyb25tZW50CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlIGltcG9ydCBDb3VudGVyCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlIGltcG9ydCBEaXN0cmlidXRpb24KZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UgaW1wb3J0IE1ldHJpY05hbWUKCl9fYWxsX18gPSBbJ01ldHJpY3MnLCAnTWV0cmljc0ZpbHRlciddCgoKY2xhc3MgTWV0cmljcyhvYmplY3QpOgogICIiIkxldHMgdXNlcnMgY3JlYXRlL2FjY2VzcyBtZXRyaWMgb2JqZWN0cyBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpOgogICAgaWYgaW5zcGVjdC5pc2NsYXNzKG5hbWVzcGFjZSk6CiAgICAgIHJldHVybiAne30ue30nLmZvcm1hdChuYW1lc3BhY2UuX19tb2R1bGVfXywgbmFtZXNwYWNlLl9fbmFtZV9fKQogICAgZWxpZiBpc2luc3RhbmNlKG5hbWVzcGFjZSwgc3RyKToKICAgICAgcmV0dXJuIG5hbWVzcGFjZQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biBuYW1lc3BhY2UgdHlwZScpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgY291bnRlcihuYW1lc3BhY2UsIG5hbWUpOgogICAgIiIiT2J0YWlucyBvciBjcmVhdGVzIGEgQ291bnRlciBtZXRyaWMuCgogICAgQXJnczoKICAgICAgbmFtZXNwYWNlOiBBIGNsYXNzIG9yIHN0cmluZyB0aGF0IGdpdmVzIHRoZSBuYW1lc3BhY2UgdG8gYSBtZXRyaWMKICAgICAgbmFtZTogQSBzdHJpbmcgdGhhdCBnaXZlcyBhIHVuaXF1ZSBuYW1lIHRvIGEgbWV0cmljCgogICAgUmV0dXJuczoKICAgICAgQSBDb3VudGVyIG9iamVjdC4KICAgICIiIgogICAgbmFtZXNwYWNlID0gTWV0cmljcy5nZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSkKICAgIHJldHVybiBNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyKE1ldHJpY05hbWUobmFtZXNwYWNlLCBuYW1lKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkaXN0cmlidXRpb24obmFtZXNwYWNlLCBuYW1lKToKICAgICIiIk9idGFpbnMgb3IgY3JlYXRlcyBhIERpc3RyaWJ1dGlvbiBtZXRyaWMuCgogICAgRGlzdHJpYnV0aW9uIG1ldHJpY3MgYXJlIHJlc3RyaWN0ZWQgdG8gaW50ZWdlci1vbmx5IGRpc3RyaWJ1dGlvbnMuCgogICAgQXJnczoKICAgICAgbmFtZXNwYWNlOiBBIGNsYXNzIG9yIHN0cmluZyB0aGF0IGdpdmVzIHRoZSBuYW1lc3BhY2UgdG8gYSBtZXRyaWMKICAgICAgbmFtZTogQSBzdHJpbmcgdGhhdCBnaXZlcyBhIHVuaXF1ZSBuYW1lIHRvIGEgbWV0cmljCgogICAgUmV0dXJuczoKICAgICAgQSBEaXN0cmlidXRpb24gb2JqZWN0LgogICAgIiIiCiAgICBuYW1lc3BhY2UgPSBNZXRyaWNzLmdldF9uYW1lc3BhY2UobmFtZXNwYWNlKQogICAgcmV0dXJuIE1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbihNZXRyaWNOYW1lKG5hbWVzcGFjZSwgbmFtZSkpCgogIGNsYXNzIERlbGVnYXRpbmdDb3VudGVyKENvdW50ZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldHJpY19uYW1lKToKICAgICAgc2VsZi5tZXRyaWNfbmFtZSA9IG1ldHJpY19uYW1lCgogICAgZGVmIGluYyhzZWxmLCBuPTEpOgogICAgICBjb250YWluZXIgPSBNZXRyaWNzRW52aXJvbm1lbnQuY3VycmVudF9jb250YWluZXIoKQogICAgICBpZiBjb250YWluZXIgaXMgbm90IE5vbmU6CiAgICAgICAgY29udGFpbmVyLmdldF9jb3VudGVyKHNlbGYubWV0cmljX25hbWUpLmluYyhuKQoKICBjbGFzcyBEZWxlZ2F0aW5nRGlzdHJpYnV0aW9uKERpc3RyaWJ1dGlvbik6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0cmljX25hbWUpOgogICAgICBzZWxmLm1ldHJpY19uYW1lID0gbWV0cmljX25hbWUKCiAgICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgICAgY29udGFpbmVyID0gTWV0cmljc0Vudmlyb25tZW50LmN1cnJlbnRfY29udGFpbmVyKCkKICAgICAgaWYgY29udGFpbmVyIGlzIG5vdCBOb25lOgogICAgICAgIGNvbnRhaW5lci5nZXRfZGlzdHJpYnV0aW9uKHNlbGYubWV0cmljX25hbWUpLnVwZGF0ZSh2YWx1ZSkKCgpjbGFzcyBNZXRyaWNSZXN1bHRzKG9iamVjdCk6CgogIEBzdGF0aWNtZXRob2QKICBkZWYgX21hdGNoZXNfbmFtZShmaWx0ZXIsIG1ldHJpY19rZXkpOgogICAgaWYgbm90IGZpbHRlci5uYW1lcyBhbmQgbm90IGZpbHRlci5uYW1lc3BhY2VzOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIGlmICgoZmlsdGVyLm5hbWVzcGFjZXMgYW5kCiAgICAgICAgIG1ldHJpY19rZXkubWV0cmljLm5hbWVzcGFjZSBpbiBmaWx0ZXIubmFtZXNwYWNlcykgb3IKICAgICAgICAoZmlsdGVyLm5hbWVzIGFuZAogICAgICAgICBtZXRyaWNfa2V5Lm1ldHJpYy5uYW1lIGluIGZpbHRlci5uYW1lcykpOgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX21hdGNoZXNfc3ViX3BhdGgoYWN0dWFsX3Njb3BlLCBmaWx0ZXJfc2NvcGUpOgogICAgc3RhcnRfcG9zID0gYWN0dWFsX3Njb3BlLmZpbmQoZmlsdGVyX3Njb3BlKQogICAgZW5kX3BvcyA9IHN0YXJ0X3BvcyArIGxlbihmaWx0ZXJfc2NvcGUpCgogICAgaWYgc3RhcnRfcG9zID09IC0xOgogICAgICByZXR1cm4gRmFsc2UgICMgTm8gbWF0Y2ggYXQgYWxsCiAgICBlbGlmIHN0YXJ0X3BvcyAhPSAwIGFuZCBhY3R1YWxfc2NvcGVbc3RhcnRfcG9zIC0gMV0gIT0gJy8nOgogICAgICByZXR1cm4gRmFsc2UgICMgVGhlIGZpcnN0IGVudHJ5IHdhcyBub3QgZXhhY3RseSBtYXRjaGVkCiAgICBlbGlmIGVuZF9wb3MgIT0gbGVuKGFjdHVhbF9zY29wZSkgYW5kIGFjdHVhbF9zY29wZVtlbmRfcG9zXSAhPSAnLyc6CiAgICAgIHJldHVybiBGYWxzZSAgIyBUaGUgbGFzdCBlbnRyeSB3YXMgbm90IGV4YWN0bHkgbWF0Y2hlZAogICAgcmV0dXJuIFRydWUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfbWF0Y2hlc19zY29wZShmaWx0ZXIsIG1ldHJpY19rZXkpOgogICAgaWYgbm90IGZpbHRlci5zdGVwczoKICAgICAgcmV0dXJuIFRydWUKCiAgICBmb3Igc3RlcCBpbiBmaWx0ZXIuc3RlcHM6CiAgICAgIGlmIE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfc3ViX3BhdGgobWV0cmljX2tleS5zdGVwLCBzdGVwKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBGYWxzZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1hdGNoZXMoZmlsdGVyLCBtZXRyaWNfa2V5KToKICAgIGlmIGZpbHRlciBpcyBOb25lOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIGlmIChNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX25hbWUoZmlsdGVyLCBtZXRyaWNfa2V5KSBhbmQKICAgICAgICBNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3Njb3BlKGZpbHRlciwgbWV0cmljX2tleSkpOgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBxdWVyeShzZWxmLCBmaWx0ZXI9Tm9uZSk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgTWV0cmljc0ZpbHRlcihvYmplY3QpOgogICIiIlNpbXBsZSBvYmplY3QgdG8gZmlsdGVyIG1ldHJpY3MgcmVzdWx0cy4KCiAgVGhpcyBjbGFzcyBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIElmIGZpbHRlcnMgYnkgbWF0Y2hpbmcgYSByZXN1bHQncyBzdGVwLW5hbWVzcGFjZS1uYW1lIHdpdGggdGhyZWUgaW50ZXJuYWwKICBzZXRzLiBObyBleGVjdXRpb24vbWF0Y2hpbmcgbG9naWMgaXMgYWRkZWQgdG8gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgbWF5CiAgYmUgdXNlZCB0byBjb25zdHJ1Y3QgYXJndW1lbnRzIGFzIGFuIFJQQyByZXF1ZXN0LiBJdCBpcyBsZWZ0IGZvciBydW5uZXJzCiAgdG8gaW1wbGVtZW50IG1hdGNoaW5nIGxvZ2ljIGJ5IHRoZW1zZWx2ZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fbmFtZXMgPSBzZXQoKQogICAgc2VsZi5fbmFtZXNwYWNlcyA9IHNldCgpCiAgICBzZWxmLl9zdGVwcyA9IHNldCgpCgogIEBwcm9wZXJ0eQogIGRlZiBzdGVwcyhzZWxmKToKICAgIHJldHVybiBmcm96ZW5zZXQoc2VsZi5fc3RlcHMpCgogIEBwcm9wZXJ0eQogIGRlZiBuYW1lcyhzZWxmKToKICAgIHJldHVybiBmcm96ZW5zZXQoc2VsZi5fbmFtZXMpCgogIEBwcm9wZXJ0eQogIGRlZiBuYW1lc3BhY2VzKHNlbGYpOgogICAgcmV0dXJuIGZyb3plbnNldChzZWxmLl9uYW1lc3BhY2VzKQoKICBkZWYgd2l0aF9uYW1lKHNlbGYsIG5hbWUpOgogICAgcmV0dXJuIHNlbGYud2l0aF9uYW1lcyhbbmFtZV0pCgogIGRlZiB3aXRoX25hbWVzKHNlbGYsIG5hbWVzKToKICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05hbWVzIG11c3QgYmUgYSBjb2xsZWN0aW9uLCBub3QgYSBzdHJpbmcnKQoKICAgIHNlbGYuX25hbWVzLnVwZGF0ZShuYW1lcykKICAgIHJldHVybiBzZWxmCgogIGRlZiB3aXRoX25hbWVzcGFjZShzZWxmLCBuYW1lc3BhY2UpOgogICAgcmV0dXJuIHNlbGYud2l0aF9uYW1lc3BhY2VzKFtuYW1lc3BhY2VdKQoKICBkZWYgd2l0aF9uYW1lc3BhY2VzKHNlbGYsIG5hbWVzcGFjZXMpOgogICAgaWYgaXNpbnN0YW5jZShuYW1lc3BhY2VzLCBzdHIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdOYW1lc3BhY2VzIG11c3QgYmUgYW4gaXRlcmFibGUsIG5vdCBhIHN0cmluZycpCgogICAgc2VsZi5fbmFtZXNwYWNlcy51cGRhdGUoW01ldHJpY3MuZ2V0X25hbWVzcGFjZShucykgZm9yIG5zIGluIG5hbWVzcGFjZXNdKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHdpdGhfc3RlcChzZWxmLCBzdGVwKToKICAgIHJldHVybiBzZWxmLndpdGhfc3RlcHMoW3N0ZXBdKQoKICBkZWYgd2l0aF9zdGVwcyhzZWxmLCBzdGVwcyk6CiAgICBpZiBpc2luc3RhbmNlKHN0ZXBzLCBzdHIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdGVwcyBtdXN0IGJlIGFuIGl0ZXJhYmxlLCBub3QgYSBzdHJpbmcnKQoKICAgIHNlbGYuX3N0ZXBzLnVwZGF0ZShzdGVwcykKICAgIHJldHVybiBzZWxmCn1xtihYFQAAAE1ldHJpY1Jlc3VsdHMubWF0Y2hlc1gDAAAAZGVmS4dLkIdYHQAAAE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2VzWAMAAABkZWZLvUvDh1gTAAAATWV0cmljc0ZpbHRlci5zdGVwc1gDAAAAZGVmS6RLp4dYGwAAAE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfbmFtZVgDAAAAZGVmS2NLbodYIgAAAE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIuX19pbml0X19YAwAAAGRlZktPS1GHWBkAAABNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyWAUAAABjbGFzc0tOS1aHWBgAAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNYAwAAAGRlZkuzS7mHWBwAAABNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3Njb3BlWAMAAABkZWZLfEuGh1gNAAAATWV0cmljc0ZpbHRlclgFAAAAY2xhc3NLlUvNh1gTAAAATWV0cmljUmVzdWx0cy5xdWVyeVgDAAAAZGVmS5FLk4dYHwAAAE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfc3ViX3BhdGhYAwAAAGRlZktvS3uHWBcAAABNZXRyaWNzRmlsdGVyLndpdGhfc3RlcFgDAAAAZGVmS8RLxodYFAAAAE1ldHJpY3MuZGlzdHJpYnV0aW9uWAMAAABkZWZLPktNh1gnAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLl9faW5pdF9fWAMAAABkZWZLWEtah1gNAAAATWV0cmljUmVzdWx0c1gFAAAAY2xhc3NLYUuTh1glAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLnVwZGF0ZVgDAAAAZGVmS1tLX4dYFgAAAE1ldHJpY3NGaWx0ZXIuX19pbml0X19YAwAAAGRlZkufS6OHWA8AAABNZXRyaWNzLmNvdW50ZXJYAwAAAGRlZkswSz2HWB0AAABNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyLmluY1gDAAAAZGVmS1JLVodYBwAAAE1ldHJpY3NYBQAAAGNsYXNzSyVLX4dYGAAAAE1ldHJpY3NGaWx0ZXIubmFtZXNwYWNlc1gDAAAAZGVmS6xLr4dYFQAAAE1ldHJpY3MuZ2V0X25hbWVzcGFjZVgDAAAAZGVmSydLL4dYHgAAAE1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvblgFAAAAY2xhc3NLV0tfh1gcAAAATWV0cmljc0ZpbHRlci53aXRoX25hbWVzcGFjZVgDAAAAZGVmS7pLvIdYFwAAAE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lWAMAAABkZWZLsEuyh1gTAAAATWV0cmljc0ZpbHRlci5uYW1lc1gDAAAAZGVmS6hLq4dYGAAAAE1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwc1gDAAAAZGVmS8dLzYd1fXG3KFgVAAAATWV0cmljcy5nZXRfbmFtZXNwYWNlWBoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY3G4WB4AAABNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb25ouFgUAAAATWV0cmljcy5kaXN0cmlidXRpb25ouFgZAAAATWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlcmi4WBwAAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNwYWNlaLhYJQAAAE1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbi51cGRhdGVouFgXAAAATWV0cmljc0ZpbHRlci53aXRoX25hbWVouFgNAAAATWV0cmljc0ZpbHRlcmi4WBgAAABNZXRyaWNzRmlsdGVyLndpdGhfc3RlcHNouFgPAAAATWV0cmljcy5jb3VudGVyaLhYHQAAAE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIuaW5jaLhYGAAAAE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc2i4WB0AAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNwYWNlc2i4WBcAAABNZXRyaWNzRmlsdGVyLndpdGhfc3RlcGi4WAcAAABNZXRyaWNzaLh1aIpYGgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljcbmFgXG6fXG7YnRxvFUkYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zcb0oWGxiAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpcGVsaW5lIG9wdGlvbnMgb2J0YWluZWQgZnJvbSBjb21tYW5kIGxpbmUgcGFyc2luZy4iIiIKCmltcG9ydCBhcmdwYXJzZQoKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBSdW50aW1lVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFN0YXRpY1ZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBIYXNEaXNwbGF5RGF0YQoKX19hbGxfXyA9IFsKICAgICdQaXBlbGluZU9wdGlvbnMnLAogICAgJ1N0YW5kYXJkT3B0aW9ucycsCiAgICAnVHlwZU9wdGlvbnMnLAogICAgJ0RpcmVjdE9wdGlvbnMnLAogICAgJ0dvb2dsZUNsb3VkT3B0aW9ucycsCiAgICAnV29ya2VyT3B0aW9ucycsCiAgICAnRGVidWdPcHRpb25zJywKICAgICdQcm9maWxpbmdPcHRpb25zJywKICAgICdTZXR1cE9wdGlvbnMnLAogICAgJ1Rlc3RPcHRpb25zJywKICAgIF0KCgpkZWYgX3N0YXRpY192YWx1ZV9wcm92aWRlcl9vZih2YWx1ZV90eXBlKToKICAiIiIiSGVscGVyIGZ1bmN0aW9uIHRvIHBsdWcgYSBWYWx1ZVByb3ZpZGVyIGludG8gYXJncGFyc2UuCgogIEFyZ3M6CiAgICB2YWx1ZV90eXBlOiB0aGUgdHlwZSBvZiB0aGUgdmFsdWUuIFNpbmNlIHRoZSB0eXBlIHBhcmFtIG9mIGFyZ3BhcnNlJ3MKICAgICAgICAgICAgICAgIGFkZF9hcmd1bWVudCB3aWxsIGFsd2F5cyBiZSBWYWx1ZVByb3ZpZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAgICBwcmVzZXJ2ZSB0aGUgdHlwZSBvZiB0aGUgYWN0dWFsIHZhbHVlLgogIFJldHVybnM6CiAgICBBIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBTdGF0aWNWYWx1ZVByb3ZpZGVyIGluIHRoZSBmb3JtIG9mIGEgZnVuY3Rpb24uCgogICIiIgogIGRlZiBfZih2YWx1ZSk6CiAgICBfZi5fX25hbWVfXyA9IHZhbHVlX3R5cGUuX19uYW1lX18KICAgIHJldHVybiBTdGF0aWNWYWx1ZVByb3ZpZGVyKHZhbHVlX3R5cGUsIHZhbHVlKQogIHJldHVybiBfZgoKCmNsYXNzIF9CZWFtQXJndW1lbnRQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgogICIiIkFuIEFyZ3VtZW50UGFyc2VyIHRoYXQgc3VwcG9ydHMgVmFsdWVQcm92aWRlciBvcHRpb25zLgoKICBFeGFtcGxlIFVzYWdlOjoKCiAgICBjbGFzcyBUZW1wbGF0ZVVzZXJPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgICAgIEBjbGFzc21ldGhvZAoKICAgICAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICAgICAgcGFyc2VyLmFkZF92YWx1ZV9wcm92aWRlcl9hcmd1bWVudCgnLS12cC1hcmcxJywgZGVmYXVsdD0nc3RhcnQnKQogICAgICAgIHBhcnNlci5hZGRfdmFsdWVfcHJvdmlkZXJfYXJndW1lbnQoJy0tdnAtYXJnMicpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ub24tdnAtYXJnJykKCiAgIiIiCiAgZGVmIGFkZF92YWx1ZV9wcm92aWRlcl9hcmd1bWVudChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiVmFsdWVQcm92aWRlciBhcmd1bWVudHMgY2FuIGJlIGVpdGhlciBvZiB0eXBlIGtleXdvcmQgb3IgcG9zaXRpb25hbC4KICAgIEF0IHJ1bnRpbWUsIGV2ZW4gcG9zaXRpb25hbCBhcmd1bWVudHMgd2lsbCBuZWVkIHRvIGJlIHN1cHBsaWVkIGluIHRoZQogICAga2V5L3ZhbHVlIGZvcm0uCiAgICAiIiIKICAgICMgRXh0cmFjdCB0aGUgb3B0aW9uIG5hbWUgZnJvbSBwb3NpdGlvbmFsIGFyZ3VtZW50IFsncG9zX2FyZyddCiAgICBhc3NlcnQgYXJncyAhPSAoKSBhbmQgbGVuKGFyZ3NbMF0pID49IDEKICAgIGlmIGFyZ3NbMF1bMF0gIT0gJy0nOgogICAgICBvcHRpb25fbmFtZSA9IGFyZ3NbMF0KICAgICAgaWYga3dhcmdzLmdldCgnbmFyZ3MnKSBpcyBOb25lOiAgIyBtYWtlIHRoZW0gb3B0aW9uYWxseSB0ZW1wbGF0ZWQKICAgICAgICBrd2FyZ3NbJ25hcmdzJ10gPSAnPycKICAgIGVsc2U6CiAgICAgICMgb3Iga2V5d29yZCBhcmd1bWVudHMgbGlrZSBbLS1rd19hcmcsIC1rLCAtd10gb3IgWy0ta3ctYXJnXQogICAgICBvcHRpb25fbmFtZSA9IFtpLnJlcGxhY2UoJy0tJywgJycpIGZvciBpIGluIGFyZ3MgaWYgaVs6Ml0gPT0gJy0tJ11bMF0KCiAgICAjIHJlYXNzaWduIHRoZSB0eXBlIHRvIG1ha2Ugcm9vbSBmb3IgdXNpbmcKICAgICMgU3RhdGljVmFsdWVQcm92aWRlciBhcyB0aGUgdHlwZSBmb3IgYWRkX2FyZ3VtZW50CiAgICB2YWx1ZV90eXBlID0ga3dhcmdzLmdldCgndHlwZScpIG9yIHN0cgogICAga3dhcmdzWyd0eXBlJ10gPSBfc3RhdGljX3ZhbHVlX3Byb3ZpZGVyX29mKHZhbHVlX3R5cGUpCgogICAgIyByZWFzc2lnbiBkZWZhdWx0IHRvIGRlZmF1bHRfdmFsdWUgdG8gbWFrZSByb29tIGZvciB1c2luZwogICAgIyBSdW50aW1lVmFsdWVQcm92aWRlciBhcyB0aGUgZGVmYXVsdCBmb3IgYWRkX2FyZ3VtZW50CiAgICBkZWZhdWx0X3ZhbHVlID0ga3dhcmdzLmdldCgnZGVmYXVsdCcpCiAgICBrd2FyZ3NbJ2RlZmF1bHQnXSA9IFJ1bnRpbWVWYWx1ZVByb3ZpZGVyKAogICAgICAgIG9wdGlvbl9uYW1lPW9wdGlvbl9uYW1lLAogICAgICAgIHZhbHVlX3R5cGU9dmFsdWVfdHlwZSwKICAgICAgICBkZWZhdWx0X3ZhbHVlPWRlZmF1bHRfdmFsdWUKICAgICkKCiAgICAjIGhhdmUgYWRkX2FyZ3VtZW50IGRvIG1vc3Qgb2YgdGhlIHdvcmsKICAgIHNlbGYuYWRkX2FyZ3VtZW50KCphcmdzLCAqKmt3YXJncykKCgpjbGFzcyBQaXBlbGluZU9wdGlvbnMoSGFzRGlzcGxheURhdGEpOgogICIiIlBpcGVsaW5lIG9wdGlvbnMgY2xhc3MgdXNlZCBhcyBjb250YWluZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLgoKICBUaGUgY2xhc3MgaXMgZXNzZW50aWFsbHkgYSB3cmFwcGVyIG92ZXIgdGhlIHN0YW5kYXJkIGFyZ3BhcnNlIFB5dGhvbiBtb2R1bGUKICAoc2VlIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sKS4gIFRvIGRlZmluZSBvbmUgb3B0aW9uCiAgb3IgYSBncm91cCBvZiBvcHRpb25zIHlvdSBzdWJjbGFzcyBmcm9tIFBpcGVsaW5lT3B0aW9uczo6CgogICAgY2xhc3MgWHl6T3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgoKICAgICAgQGNsYXNzbWV0aG9kCiAgICAgIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWJjJywgZGVmYXVsdD0nc3RhcnQnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0teHl6JywgZGVmYXVsdD0nZW5kJykKCiAgVGhlIGFyZ3VtZW50cyBmb3IgdGhlIGFkZF9hcmd1bWVudCgpIG1ldGhvZCBhcmUgZXhhY3RseSB0aGUgb25lcwogIGRlc2NyaWJlZCBpbiB0aGUgYXJncGFyc2UgcHVibGljIGRvY3VtZW50YXRpb24uCgogIFBpcGVsaW5lIG9iamVjdHMgcmVxdWlyZSBhbiBvcHRpb25zIG9iamVjdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgVGhpcyBpcyBvYnRhaW5lZCBzaW1wbHkgYnkgaW5pdGlhbGl6aW5nIGFuIG9wdGlvbnMgY2xhc3MgYXMgZGVmaW5lZCBhYm92ZTo6CgogICAgcCA9IFBpcGVsaW5lKG9wdGlvbnM9WHl6T3B0aW9ucygpKQogICAgaWYgcC5vcHRpb25zLnh5eiA9PSAnZW5kJzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignT3B0aW9uIHh5eiBoYXMgYW4gaW52YWxpZCB2YWx1ZS4nKQoKICBCeSBkZWZhdWx0IHRoZSBvcHRpb25zIGNsYXNzZXMgd2lsbCB1c2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBpbml0aWFsaXplCiAgdGhlIG9wdGlvbnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZsYWdzPU5vbmUsICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgYW4gb3B0aW9ucyBjbGFzcy4KCiAgICBUaGUgaW5pdGlhbGl6ZXIgd2lsbCB0cmF2ZXJzZSBhbGwgc3ViY2xhc3NlcywgYWRkIGFsbCB0aGVpciBhcmdwYXJzZQogICAgYXJndW1lbnRzIGFuZCB0aGVuIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIGJ5IGZsYWdzIG9yIGJ5IGRlZmF1bHQKICAgIHRoZSBvbmUgb2J0YWluZWQgZnJvbSBzeXMuYXJndi4KCiAgICBUaGUgc3ViY2xhc3NlcyBhcmUgbm90IGV4cGVjdGVkIHRvIHJlcXVpcmUgYSByZWRlZmluaXRpb24gb2YgX19pbml0X18uCgogICAgQXJnczoKICAgICAgZmxhZ3M6IEFuIGl0ZXJhYmxlIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gYmUgdXNlZC4gSWYgbm90IHNwZWNpZmllZAogICAgICAgIHRoZW4gc3lzLmFyZ3Ygd2lsbCBiZSB1c2VkIGFzIGlucHV0IGZvciBwYXJzaW5nIGFyZ3VtZW50cy4KCiAgICAgICoqa3dhcmdzOiBBZGQgb3ZlcnJpZGVzIGZvciBhcmd1bWVudHMgcGFzc2VkIGluIGZsYWdzLgogICAgIiIiCiAgICBzZWxmLl9mbGFncyA9IGZsYWdzCiAgICBzZWxmLl9hbGxfb3B0aW9ucyA9IGt3YXJncwogICAgcGFyc2VyID0gX0JlYW1Bcmd1bWVudFBhcnNlcigpCgogICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLm1ybygpOgogICAgICBpZiBjbHMgPT0gUGlwZWxpbmVPcHRpb25zOgogICAgICAgIGJyZWFrCiAgICAgIGVsaWYgJ19hZGRfYXJncGFyc2VfYXJncycgaW4gY2xzLl9fZGljdF9fOgogICAgICAgIGNscy5fYWRkX2FyZ3BhcnNlX2FyZ3MocGFyc2VyKQogICAgIyBUaGUgX3Zpc2libGVfb3B0aW9ucyBhdHRyaWJ1dGUgd2lsbCBjb250YWluIG9ubHkgdGhvc2Ugb3B0aW9ucyBmcm9tIHRoZQogICAgIyBmbGFncyAoaS5lLiwgY29tbWFuZCBsaW5lKSB0aGF0IGNhbiBiZSByZWNvZ25pemVkLiBUaGUgX2FsbF9vcHRpb25zCiAgICAjIGZpZWxkIGNvbnRhaW5zIGFkZGl0aW9uYWwgb3ZlcnJpZGVzLgogICAgc2VsZi5fdmlzaWJsZV9vcHRpb25zLCBfID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoZmxhZ3MpCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gcHJvdmlkZSBvcHRpb25zLgogICAgcGFzcwoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9kaWN0aW9uYXJ5KGNscywgb3B0aW9ucyk6CiAgICAiIiJSZXR1cm5zIGEgUGlwZWxpbmVPcHRpb25zIGZyb20gYSBkaWN0aW9uYXJ5IG9mIGFyZ3VtZW50cy4KCiAgICBBcmdzOgogICAgICBvcHRpb25zOiBEaWN0aW9uYXJ5IG9mIGFyZ3VtZW50IHZhbHVlIHBhaXJzLgoKICAgIFJldHVybnM6CiAgICAgIEEgUGlwZWxpbmVPcHRpb25zIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGFyZ3VtZW50cy4KICAgICIiIgogICAgZmxhZ3MgPSBbXQogICAgZm9yIGssIHYgaW4gb3B0aW9ucy5pdGVyaXRlbXMoKToKICAgICAgaWYgaXNpbnN0YW5jZSh2LCBib29sKToKICAgICAgICBpZiB2OgogICAgICAgICAgZmxhZ3MuYXBwZW5kKCctLSVzJyAlIGspCiAgICAgIGVsc2U6CiAgICAgICAgZmxhZ3MuYXBwZW5kKCctLSVzPSVzJyAlIChrLCB2KSkKCiAgICByZXR1cm4gY2xzKGZsYWdzKQoKICBkZWYgZ2V0X2FsbF9vcHRpb25zKHNlbGYsIGRyb3BfZGVmYXVsdD1GYWxzZSk6CiAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBhbGwgZGVmaW5lZCBhcmd1bWVudHMuCgogICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgYWxsIGRlZmluZWQgYXJndW1lbnRzIChhcmd1bWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbgogICAgYW55IHN1YmNsYXNzIG9mIFBpcGVsaW5lT3B0aW9ucykgaW50byBhIGRpY3Rpb25hcnkuCgogICAgQXJnczoKICAgICAgZHJvcF9kZWZhdWx0OiBJZiBzZXQgdG8gdHJ1ZSwgb3B0aW9ucyB0aGF0IGFyZSBlcXVhbCB0byB0aGVpciBkZWZhdWx0CiAgICAgICAgdmFsdWVzLCBhcmUgbm90IHJldHVybmVkIGFzIHBhcnQgb2YgdGhlIHJlc3VsdCBkaWN0aW9uYXJ5LgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rpb25hcnkgb2YgYWxsIGFyZ3MgYW5kIHZhbHVlcy4KICAgICIiIgoKICAgICMgVE9ETyhCRUFNLTEzMTkpOiBQaXBlbGluZU9wdGlvbiBzdWItY2xhc3NlcyBpbiB0aGUgbWFpbiBzZXNzaW9uIG1pZ2h0IGJlCiAgICAjIHJlcGVhdGVkLiBQaWNrIGxhc3QgdW5pcXVlIGluc3RhbmNlIG9mIGVhY2ggc3ViY2xhc3MgdG8gYXZvaWQgY29uZmxpY3RzLgogICAgc3Vic2V0ID0ge30KICAgIHBhcnNlciA9IF9CZWFtQXJndW1lbnRQYXJzZXIoKQogICAgZm9yIGNscyBpbiBQaXBlbGluZU9wdGlvbnMuX19zdWJjbGFzc2VzX18oKToKICAgICAgc3Vic2V0W3N0cihjbHMpXSA9IGNscwogICAgZm9yIGNscyBpbiBzdWJzZXQudmFsdWVzKCk6CiAgICAgIGNscy5fYWRkX2FyZ3BhcnNlX2FyZ3MocGFyc2VyKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAga25vd25fYXJncywgXyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKHNlbGYuX2ZsYWdzKQogICAgcmVzdWx0ID0gdmFycyhrbm93bl9hcmdzKQoKICAgICMgQXBwbHkgdGhlIG92ZXJyaWRlcyBpZiBhbnkKICAgIGZvciBrIGluIHJlc3VsdC5rZXlzKCk6CiAgICAgIGlmIGsgaW4gc2VsZi5fYWxsX29wdGlvbnM6CiAgICAgICAgcmVzdWx0W2tdID0gc2VsZi5fYWxsX29wdGlvbnNba10KICAgICAgaWYgKGRyb3BfZGVmYXVsdCBhbmQKICAgICAgICAgIHBhcnNlci5nZXRfZGVmYXVsdChrKSA9PSByZXN1bHRba10gYW5kCiAgICAgICAgICBub3QgaXNpbnN0YW5jZShwYXJzZXIuZ2V0X2RlZmF1bHQoayksIFZhbHVlUHJvdmlkZXIpKToKICAgICAgICBkZWwgcmVzdWx0W2tdCgogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZ2V0X2FsbF9vcHRpb25zKFRydWUpCgogIGRlZiB2aWV3X2FzKHNlbGYsIGNscyk6CiAgICB2aWV3ID0gY2xzKHNlbGYuX2ZsYWdzKQogICAgdmlldy5fYWxsX29wdGlvbnMgPSBzZWxmLl9hbGxfb3B0aW9ucwogICAgcmV0dXJuIHZpZXcKCiAgZGVmIF92aXNpYmxlX29wdGlvbl9saXN0KHNlbGYpOgogICAgcmV0dXJuIHNvcnRlZChvcHRpb24KICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBkaXIoc2VsZi5fdmlzaWJsZV9vcHRpb25zKSBpZiBvcHRpb25bMF0gIT0gJ18nKQoKICBkZWYgX19kaXJfXyhzZWxmKToKICAgIHJldHVybiBzb3J0ZWQoZGlyKHR5cGUoc2VsZikpICsgc2VsZi5fX2RpY3RfXy5rZXlzKCkgKwogICAgICAgICAgICAgICAgICBzZWxmLl92aXNpYmxlX29wdGlvbl9saXN0KCkpCgogIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICMgU3BlY2lhbCBtZXRob2RzIHdoaWNoIG1heSBiZSBhY2Nlc3NlZCBiZWZvcmUgdGhlIG9iamVjdCBpcwogICAgIyBmdWxseSBjb25zdHJ1Y3RlZCAoZS5nLiBpbiB1bnBpY2tsaW5nKS4KICAgIGlmIG5hbWVbOjJdID09IG5hbWVbLTI6XSA9PSAnX18nOgogICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKICAgIGVsaWYgbmFtZSBpbiBzZWxmLl92aXNpYmxlX29wdGlvbl9saXN0KCk6CiAgICAgIHJldHVybiBzZWxmLl9hbGxfb3B0aW9ucy5nZXQobmFtZSwgZ2V0YXR0cihzZWxmLl92aXNpYmxlX29wdGlvbnMsIG5hbWUpKQogICAgZWxzZToKICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiclcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWxmKS5fX25hbWVfXywgbmFtZSkpCgogIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICBpZiBuYW1lIGluICgnX2ZsYWdzJywgJ19hbGxfb3B0aW9ucycsICdfdmlzaWJsZV9vcHRpb25zJyk6CiAgICAgIHN1cGVyKFBpcGVsaW5lT3B0aW9ucywgc2VsZikuX19zZXRhdHRyX18obmFtZSwgdmFsdWUpCiAgICBlbGlmIG5hbWUgaW4gc2VsZi5fdmlzaWJsZV9vcHRpb25fbGlzdCgpOgogICAgICBzZWxmLl9hbGxfb3B0aW9uc1tuYW1lXSA9IHZhbHVlCiAgICBlbHNlOgogICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBuYW1lKSkKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oJyVzPSVzJyAlIChvcHRpb24sIGdldGF0dHIoc2VsZiwgb3B0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBzZWxmLl92aXNpYmxlX29wdGlvbl9saXN0KCkpKQoKCmNsYXNzIFN0YW5kYXJkT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgoKICBERUZBVUxUX1JVTk5FUiA9ICdEaXJlY3RSdW5uZXInCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1ydW5uZXInLAogICAgICAgIGhlbHA9KCdQaXBlbGluZSBydW5uZXIgdXNlZCB0byBleGVjdXRlIHRoZSB3b3JrZmxvdy4gVmFsaWQgdmFsdWVzIGFyZSAnCiAgICAgICAgICAgICAgJ0RpcmVjdFJ1bm5lciwgRGF0YWZsb3dSdW5uZXIuJykpCiAgICAjIFdoZXRoZXIgdG8gZW5hYmxlIHN0cmVhbWluZyBtb2RlLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zdHJlYW1pbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgbW9kZS4nKQoKCmNsYXNzIFR5cGVPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBUT0RPKGxhb2x1KTogQWRkIGEgdHlwZSBpbmZlcmVuY2luZyBvcHRpb24gaGVyZSBvbmNlIGltcGxlbWVudGVkLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10eXBlX2NoZWNrX3N0cmljdG5lc3MnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdERUZBVUxUX1RPX0FOWScsCiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydBTExfUkVRVUlSRUQnLCAnREVGQVVMVF9UT19BTlknXSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIGxldmVsIG9mIGV4aGF1c3RpdmUgbWFudWFsIHR5cGUtaGludCAnCiAgICAgICAgICAgICAgICAgICAgICAgICdhbm5vdGF0aW9uIHJlcXVpcmVkJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9fcGlwZWxpbmVfdHlwZV9jaGVjaycsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3BpcGVsaW5lX3R5cGVfY2hlY2snLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzYWJsZSB0eXBlIGNoZWNraW5nIGF0IHBpcGVsaW5lIGNvbnN0cnVjdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcnVudGltZV90eXBlX2NoZWNrJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIHR5cGUgY2hlY2tpbmcgYXQgcGlwZWxpbmUgZXhlY3V0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUuIE5PVEU6IG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdFJ1bm5lcicpCgoKY2xhc3MgRGlyZWN0T3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICIiIkRpcmVjdFJ1bm5lci1zcGVjaWZpYyBleGVjdXRpb24gb3B0aW9ucy4iIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5vX2RpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlJywKICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywKICAgICAgICBkZXN0PSdkaXJlY3RfcnVubmVyX3VzZV9zdGFja2VkX2J1bmRsZScsCiAgICAgICAgaGVscD0nRGlyZWN0UnVubmVyIHVzZXMgc3RhY2tlZCBXaW5kb3dlZFZhbHVlcyB3aXRoaW4gYSBCdW5kbGUgZm9yICcKICAgICAgICAnbWVtb3J5IG9wdGltaXphdGlvbi4gU2V0IC0tbm9fZGlyZWN0X3J1bm5lcl91c2Vfc3RhY2tlZF9idW5kbGUgdG8gJwogICAgICAgICdhdm9pZCBpdC4nKQoKCmNsYXNzIEdvb2dsZUNsb3VkT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICIiIkdvb2dsZSBDbG91ZCBEYXRhZmxvdyBzZXJ2aWNlIGV4ZWN1dGlvbiBvcHRpb25zLiIiIgoKICBCSUdRVUVSWV9BUElfU0VSVklDRSA9ICdiaWdxdWVyeS5nb29nbGVhcGlzLmNvbScKICBDT01QVVRFX0FQSV9TRVJWSUNFID0gJ2NvbXB1dGUuZ29vZ2xlYXBpcy5jb20nCiAgU1RPUkFHRV9BUElfU0VSVklDRSA9ICdzdG9yYWdlLmdvb2dsZWFwaXMuY29tJwogIERBVEFGTE9XX0VORFBPSU5UID0gJ2h0dHBzOi8vZGF0YWZsb3cuZ29vZ2xlYXBpcy5jb20nCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1kYXRhZmxvd19lbmRwb2ludCcsCiAgICAgICAgZGVmYXVsdD1jbHMuREFUQUZMT1dfRU5EUE9JTlQsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1RoZSBVUkwgZm9yIHRoZSBEYXRhZmxvdyBBUEkuIElmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHB1YmxpYyBVUkwgJwogICAgICAgICAnd2lsbCBiZSB1c2VkLicpKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcHJvamVjdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTmFtZSBvZiB0aGUgQ2xvdWQgcHJvamVjdCBvd25pbmcgdGhlIERhdGFmbG93ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2pvYi4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tam9iX25hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J05hbWUgb2YgdGhlIENsb3VkIERhdGFmbG93IGpvYi4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3RhZ2luZ19sb2NhdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nR0NTIHBhdGggZm9yIHN0YWdpbmcgY29kZSBwYWNrYWdlcyBuZWVkZWQgYnkgJwogICAgICAgICAgICAgICAgICAgICAgICAnd29ya2Vycy4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgICMgSWYgc3RhZ2luZ19sb2NhdGlvbiBpcyBub3Qgc2V0LCBpdCBkZWZhdWx0cyB0byB0ZW1wX2xvY2F0aW9uLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZW1wX2xvY2F0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdHQ1MgcGF0aCBmb3Igc2F2aW5nIHRlbXBvcmFyeSB3b3JrZmxvdyBqb2JzLicpCiAgICAjIFRoZSBDbG91ZCBEYXRhZmxvdyBzZXJ2aWNlIGRvZXMgbm90IHlldCBob25vciB0aGlzIHNldHRpbmcuIEhvd2V2ZXIsIG9uY2UKICAgICMgc2VydmljZSBzdXBwb3J0IGlzIGFkZGVkIHRoZW4gdXNlcnMgb2YgdGhpcyBTREsgd2lsbCBiZSBhYmxlIHRvIGNvbnRyb2wKICAgICMgdGhlIHJlZ2lvbi4gRGVmYXVsdCBpcyB1cCB0byB0aGUgRGF0YWZsb3cgc2VydmljZS4gU2VlCiAgICAjIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvcmVnaW9ucy16b25lcy9yZWdpb25zLXpvbmVzIGZvciBhCiAgICAjIGxpc3Qgb2YgdmFsaWQgb3B0aW9ucy8KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVnaW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ndXMtY2VudHJhbDEnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgR29vZ2xlIENvbXB1dGUgRW5naW5lIHJlZ2lvbiBmb3IgY3JlYXRpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICAnRGF0YWZsb3cgam9iLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNlcnZpY2VfYWNjb3VudF9lbWFpbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nSWRlbnRpdHkgdG8gcnVuIHZpcnR1YWwgbWFjaGluZXMgYXMuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9fYXV0aCcsIGRlc3Q9J25vX2F1dGgnLCB0eXBlPWJvb2wsIGRlZmF1bHQ9RmFsc2UpCiAgICAjIE9wdGlvbiB0byBydW4gdGVtcGxhdGVkIHBpcGVsaW5lcwogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZW1wbGF0ZV9sb2NhdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSBqb2IgdG8gc3BlY2lmaWVkIGxvY2FsIG9yIEdDUyBsb2NhdGlvbi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sYWJlbCcsICctLWxhYmVscycsCiAgICAgICAgZGVzdD0nbGFiZWxzJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J0xhYmVscyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIERhdGFmbG93IGpvYi4gTGFiZWxzIGFyZSBrZXkgJwogICAgICAgICd2YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgPSAoZS5nLiAtLWxhYmVsIGtleT12YWx1ZSkuJykKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgaWYgdmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVyKCk6CiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoc2VsZikpCiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICd0ZW1wX2xvY2F0aW9uJykpCiAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ3N0YWdpbmdfbG9jYXRpb24nLAogICAgICAgICAgICAgICAgIE5vbmUpIG9yIGdldGF0dHIoc2VsZiwgJ3RlbXBfbG9jYXRpb24nLCBOb25lKSBpcyBOb25lOgogICAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICdzdGFnaW5nX2xvY2F0aW9uJykpCgogICAgaWYgc2VsZi52aWV3X2FzKERlYnVnT3B0aW9ucykuZGF0YWZsb3dfam9iX2ZpbGU6CiAgICAgIGlmIHNlbGYudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnRlbXBsYXRlX2xvY2F0aW9uOgogICAgICAgIGVycm9ycy5hcHBlbmQoJy0tZGF0YWZsb3dfam9iX2ZpbGUgYW5kIC0tdGVtcGxhdGVfbG9jYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgJ2FyZSBtdXR1YWxseSBleGNsdXNpdmUuJykKCiAgICByZXR1cm4gZXJyb3JzCgoKIyBDb21tYW5kIGxpbmUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgd29ya2VyIHBvb2wgY29uZmlndXJhdGlvbi4KIyBUT0RPKHNpbHZpdWMpOiBVcGRhdGUgZGVzY3JpcHRpb24gd2hlbiBhdXRvc2NhbGluZyBvcHRpb25zIGFyZSBpbi4KY2xhc3MgV29ya2VyT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICIiIldvcmtlciBwb29sIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4iIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW51bV93b3JrZXJzJywKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ051bWJlciBvZiB3b3JrZXJzIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgRGF0YWZsb3cgam9iLiBJZiBub3QgJwogICAgICAgICAnc2V0LCB0aGUgRGF0YWZsb3cgc2VydmljZSB3aWxsIHVzZSBhIHJlYXNvbmFibGUgZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbWF4X251bV93b3JrZXJzJywKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ01heGltdW0gbnVtYmVyIG9mIHdvcmtlcnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBEYXRhZmxvdyBqb2IuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWF1dG9zY2FsaW5nX2FsZ29yaXRobScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgY2hvaWNlcz1bJ05PTkUnLCAnVEhST1VHSFBVVF9CQVNFRCddLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwgICMgTWVhbmluZyB1bnNldCwgZGlzdGluY3QgZnJvbSAnTk9ORScgbWVhbmluZyBkb24ndCBzY2FsZQogICAgICAgIGhlbHA9CiAgICAgICAgKCdJZiBhbmQgaG93IHRvIGF1dG9zY2FsZSB0aGUgd29ya2VycG9vbC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td29ya2VyX21hY2hpbmVfdHlwZScsCiAgICAgICAgZGVzdD0nbWFjaGluZV90eXBlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oJ01hY2hpbmUgdHlwZSB0byBjcmVhdGUgRGF0YWZsb3cgd29ya2VyIFZNcyBhcy4gU2VlICcKICAgICAgICAgICAgICAnaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9tYWNoaW5lLXR5cGVzICcKICAgICAgICAgICAgICAnZm9yIGEgbGlzdCBvZiB2YWxpZCBvcHRpb25zLiBJZiBub3Qgc2V0LCAnCiAgICAgICAgICAgICAgJ3RoZSBEYXRhZmxvdyBzZXJ2aWNlIHdpbGwgY2hvb3NlIGEgcmVhc29uYWJsZSAnCiAgICAgICAgICAgICAgJ2RlZmF1bHQuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRpc2tfc2l6ZV9nYicsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdSZW1vdGUgd29ya2VyIGRpc2sgc2l6ZSwgaW4gZ2lnYWJ5dGVzLCBvciAwIHRvIHVzZSB0aGUgZGVmYXVsdCBzaXplLiAnCiAgICAgICAgICdJZiBub3Qgc2V0LCB0aGUgRGF0YWZsb3cgc2VydmljZSB3aWxsIHVzZSBhIHJlYXNvbmFibGUgZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td29ya2VyX2Rpc2tfdHlwZScsCiAgICAgICAgZGVzdD0nZGlza190eXBlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oJ1NwZWNpZmllcyB3aGF0IHR5cGUgb2YgcGVyc2lzdGVudCBkaXNrIHNob3VsZCBiZSB1c2VkLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS16b25lJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdHQ0UgYXZhaWxhYmlsaXR5IHpvbmUgZm9yIGxhdW5jaGluZyB3b3JrZXJzLiBEZWZhdWx0IGlzIHVwIHRvIHRoZSAnCiAgICAgICAgICAgICdEYXRhZmxvdyBzZXJ2aWNlLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1uZXR3b3JrJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdHQ0UgbmV0d29yayBmb3IgbGF1bmNoaW5nIHdvcmtlcnMuIERlZmF1bHQgaXMgdXAgdG8gdGhlIERhdGFmbG93ICcKICAgICAgICAgICAgJ3NlcnZpY2UuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXN1Ym5ldHdvcmsnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0dDRSBzdWJuZXR3b3JrIGZvciBsYXVuY2hpbmcgd29ya2Vycy4gRGVmYXVsdCBpcyB1cCB0byB0aGUgJwogICAgICAgICAgICAnRGF0YWZsb3cgc2VydmljZS4gRXhwZWN0ZWQgZm9ybWF0IGlzICcKICAgICAgICAgICAgJ3JlZ2lvbnMvUkVHSU9OL3N1Ym5ldHdvcmtzL1NVQk5FVFdPUksgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCAnCiAgICAgICAgICAgICdzdWJuZXR3b3JrIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJwogICAgICAgICAgICAnaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy92cGMvJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXdvcmtlcl9oYXJuZXNzX2NvbnRhaW5lcl9pbWFnZScsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KCdEb2NrZXIgcmVnaXN0cnkgbG9jYXRpb24gb2YgY29udGFpbmVyIGltYWdlIHRvIHVzZSBmb3IgdGhlICcKICAgICAgICAgICAgICAnd29ya2VyIGhhcm5lc3MuIERlZmF1bHQgaXMgdGhlIGNvbnRhaW5lciBmb3IgdGhlIHZlcnNpb24gb2YgdGhlICcKICAgICAgICAgICAgICAnU0RLLiBOb3RlOiBjdXJyZW50bHksIG9ubHkgYXBwcm92ZWQgR29vZ2xlIENsb3VkIERhdGFmbG93ICcKICAgICAgICAgICAgICAnY29udGFpbmVyIGltYWdlcyBtYXkgYmUgdXNlZCBoZXJlLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS11c2VfcHVibGljX2lwcycsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nV2hldGhlciB0byBhc3NpZ24gcHVibGljIElQIGFkZHJlc3NlcyB0byB0aGUgd29ya2VyIFZNcy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1ub191c2VfcHVibGljX2lwcycsCiAgICAgICAgZGVzdD0ndXNlX3B1YmxpY19pcHMnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywKICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIGFzc2lnbiBvbmx5IHByaXZhdGUgSVAgYWRkcmVzc2VzIHRvIHRoZSB3b3JrZXIgVk1zLicpCgogIGRlZiB2YWxpZGF0ZShzZWxmLCB2YWxpZGF0b3IpOgogICAgZXJyb3JzID0gW10KICAgIGlmIHZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lcigpOgogICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZlKHNlbGYsICdudW1fd29ya2VycycpKQogICAgcmV0dXJuIGVycm9ycwoKCmNsYXNzIERlYnVnT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGF0YWZsb3dfam9iX2ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0RlYnVnIGZpbGUgdG8gd3JpdGUgdGhlIHdvcmtmbG93IHNwZWNpZmljYXRpb24uJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZXhwZXJpbWVudCcsICctLWV4cGVyaW1lbnRzJywKICAgICAgICBkZXN0PSdleHBlcmltZW50cycsCiAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnUnVubmVycyBtYXkgcHJvdmlkZSBhIG51bWJlciBvZiBleHBlcmltZW50YWwgZmVhdHVyZXMgdGhhdCBjYW4gYmUgJwogICAgICAgICAnZW5hYmxlZCB3aXRoIHRoaXMgZmxhZy4gUGxlYXNlIHN5bmMgd2l0aCB0aGUgb3duZXJzIG9mIHRoZSBydW5uZXIgJwogICAgICAgICAnYmVmb3JlIGVuYWJsaW5nIGFueSBleHBlcmltZW50cy4nKSkKCgpjbGFzcyBQcm9maWxpbmdPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wcm9maWxlX2NwdScsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB3b3JrIGl0ZW0gQ1BVIHByb2ZpbGluZy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wcm9maWxlX21lbW9yeScsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB3b3JrIGl0ZW0gaGVhcCBwcm9maWxpbmcuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcHJvZmlsZV9sb2NhdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nR0NTIHBhdGggZm9yIHNhdmluZyBwcm9maWxlciBkYXRhLicpCgoKY2xhc3MgU2V0dXBPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBPcHRpb25zIGZvciBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpbiB0aGUgd29ya2VyLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZXF1aXJlbWVudHNfZmlsZScsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdQYXRoIHRvIGEgcmVxdWlyZW1lbnRzIGZpbGUgY29udGFpbmluZyBwYWNrYWdlIGRlcGVuZGVuY2llcy4gJwogICAgICAgICAnVHlwaWNhbGx5IGl0IGlzIHByb2R1Y2VkIGJ5IGEgcGlwIGZyZWV6ZSBjb21tYW5kLiBNb3JlIGRldGFpbHM6ICcKICAgICAgICAgJ2h0dHBzOi8vcGlwLnB5cGEuaW8vZW4vbGF0ZXN0L3JlZmVyZW5jZS9waXBfZnJlZXplLmh0bWwuICcKICAgICAgICAgJ0lmIHVzZWQsIGFsbCB0aGUgcGFja2FnZXMgc3BlY2lmaWVkIHdpbGwgYmUgZG93bmxvYWRlZCwgJwogICAgICAgICAnY2FjaGVkICh1c2UgLS1yZXF1aXJlbWVudHNfY2FjaGUgdG8gY2hhbmdlIGRlZmF1bHQgbG9jYXRpb24pLCAnCiAgICAgICAgICdhbmQgdGhlbiBzdGFnZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBpbiAnCiAgICAgICAgICd3b3JrZXJzIGR1cmluZyBzdGFydHVwLiBUaGUgY2FjaGUgaXMgcmVmcmVzaGVkIGFzIG5lZWRlZCAnCiAgICAgICAgICdhdm9pZGluZyBleHRyYSBkb3dubG9hZHMgZm9yIGV4aXN0aW5nIHBhY2thZ2VzLiBUeXBpY2FsbHkgdGhlICcKICAgICAgICAgJ2ZpbGUgaXMgbmFtZWQgcmVxdWlyZW1lbnRzLnR4dC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVxdWlyZW1lbnRzX2NhY2hlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1BhdGggdG8gYSBmb2xkZXIgdG8gY2FjaGUgdGhlIHBhY2thZ2VzIHNwZWNpZmllZCBpbiAnCiAgICAgICAgICd0aGUgcmVxdWlyZW1lbnRzIGZpbGUgdXNpbmcgdGhlIC0tcmVxdWlyZW1lbnRzX2ZpbGUgb3B0aW9uLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZXR1cF9maWxlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1BhdGggdG8gYSBzZXR1cCBQeXRob24gZmlsZSBjb250YWluaW5nIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiBJZiAnCiAgICAgICAgICdzcGVjaWZpZWQsIHRoZSBmaWxlXCdzIGNvbnRhaW5pbmcgZm9sZGVyIGlzIGFzc3VtZWQgdG8gaGF2ZSB0aGUgJwogICAgICAgICAnc3RydWN0dXJlIHJlcXVpcmVkIGZvciBhIHNldHVwdG9vbHMgc2V0dXAgcGFja2FnZS4gVGhlIGZpbGUgbXVzdCBiZSAnCiAgICAgICAgICduYW1lZCBzZXR1cC5weS4gTW9yZSBkZXRhaWxzOiAnCiAgICAgICAgICdodHRwczovL3B5dGhvbmhvc3RlZC5vcmcvYW5fZXhhbXBsZV9weXBpX3Byb2plY3Qvc2V0dXB0b29scy5odG1sICcKICAgICAgICAgJ0R1cmluZyBqb2Igc3VibWlzc2lvbiBhIHNvdXJjZSBkaXN0cmlidXRpb24gd2lsbCBiZSBidWlsdCBhbmQgdGhlICcKICAgICAgICAgJ3dvcmtlciB3aWxsIGluc3RhbGwgdGhlIHJlc3VsdGluZyBwYWNrYWdlIGJlZm9yZSBydW5uaW5nIGFueSBjdXN0b20gJwogICAgICAgICAnY29kZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tYmVhbV9wbHVnaW4nLCAnLS1iZWFtX3BsdWdpbicsCiAgICAgICAgZGVzdD0nYmVhbV9wbHVnaW5zJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdCb290c3RyYXAgdGhlIHB5dGhvbiBwcm9jZXNzIGJlZm9yZSBleGVjdXRpbmcgYW55IGNvZGUgYnkgaW1wb3J0aW5nICcKICAgICAgICAgJ2FsbCB0aGUgcGx1Z2lucyB1c2VkIGluIHRoZSBwaXBlbGluZS4gUGxlYXNlIHBhc3MgYSBjb21tYSBzZXBhcmF0ZWQnCiAgICAgICAgICdsaXN0IG9mIGltcG9ydCBwYXRocyB0byBiZSBpbmNsdWRlZC4gVGhpcyBpcyBjdXJyZW50bHkgYW4gJwogICAgICAgICAnZXhwZXJpbWVudGFsIGZsYWcgYW5kIHByb3ZpZGVzIG5vIHN0YWJpbGl0eS4gTXVsdGlwbGUgJwogICAgICAgICAnLS1iZWFtX3BsdWdpbiBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgaWYgbW9yZSB0aGFuIG9uZSBwbHVnaW4gJwogICAgICAgICAnaXMgbmVlZGVkLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zYXZlX21haW5fc2Vzc2lvbicsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdTYXZlIHRoZSBtYWluIHNlc3Npb24gc3RhdGUgc28gdGhhdCBwaWNrbGVkIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyAnCiAgICAgICAgICdkZWZpbmVkIGluIF9fbWFpbl9fIChlLmcuIGludGVyYWN0aXZlIHNlc3Npb24pIGNhbiBiZSB1bnBpY2tsZWQuICcKICAgICAgICAgJ1NvbWUgd29ya2Zsb3dzIGRvIG5vdCBuZWVkIHRoZSBzZXNzaW9uIHN0YXRlIGlmIGZvciBpbnN0YW5jZSBhbGwgJwogICAgICAgICAndGhlaXIgZnVuY3Rpb25zL2NsYXNzZXMgYXJlIGRlZmluZWQgaW4gcHJvcGVyIG1vZHVsZXMgKG5vdCBfX21haW5fXyknCiAgICAgICAgICcgYW5kIHRoZSBtb2R1bGVzIGFyZSBpbXBvcnRhYmxlIGluIHRoZSB3b3JrZXIuICcpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZGtfbG9jYXRpb24nLAogICAgICAgIGRlZmF1bHQ9J2RlZmF1bHQnLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdPdmVycmlkZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBCZWFtIFNESyBpcyBkb3dubG9hZGVkLiAnCiAgICAgICAgICdJdCBjYW4gYmUgYSBVUkwsIGEgR0NTIHBhdGgsIG9yIGEgbG9jYWwgcGF0aCB0byBhbiBTREsgdGFyYmFsbC4gJwogICAgICAgICAnV29ya2Zsb3cgc3VibWlzc2lvbnMgd2lsbCBkb3dubG9hZCBvciBjb3B5IGFuIFNESyB0YXJiYWxsIGZyb20gaGVyZS4gJwogICAgICAgICAnSWYgc2V0IHRvIHRoZSBzdHJpbmcgImRlZmF1bHQiLCBhIHN0YW5kYXJkIFNESyBsb2NhdGlvbiBpcyB1c2VkLiBJZiAnCiAgICAgICAgICdlbXB0eSwgbm8gU0RLIGlzIGNvcGllZC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZXh0cmFfcGFja2FnZScsICctLWV4dHJhX3BhY2thZ2VzJywKICAgICAgICBkZXN0PSdleHRyYV9wYWNrYWdlcycsCiAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnTG9jYWwgcGF0aCB0byBhIFB5dGhvbiBwYWNrYWdlIGZpbGUuIFRoZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlICgxKSAnCiAgICAgICAgICdhIHBhY2thZ2UgdGFyYmFsbCAoIi50YXIiKSwgKDIpIGEgY29tcHJlc3NlZCBwYWNrYWdlIHRhcmJhbGwgJwogICAgICAgICAnKCIudGFyLmd6IiksICgzKSBhIFdoZWVsIGZpbGUgKCIud2hsIikgb3IgKDQpIGEgY29tcHJlc3NlZCBwYWNrYWdlICcKICAgICAgICAgJ3ppcCBmaWxlICgiLnppcCIpIHdoaWNoIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlICJwaXAgaW5zdGFsbCIgJwogICAgICAgICAnY29tbWFuZCAgb2YgdGhlIHN0YW5kYXJkIHBpcCBwYWNrYWdlLiBNdWx0aXBsZSAtLWV4dHJhX3BhY2thZ2UgJwogICAgICAgICAnb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGlmIG1vcmUgdGhhbiBvbmUgcGFja2FnZSBpcyBuZWVkZWQuIER1cmluZyAnCiAgICAgICAgICdqb2Igc3VibWlzc2lvbiwgdGhlIGZpbGVzIHdpbGwgYmUgc3RhZ2VkIGluIHRoZSBzdGFnaW5nIGFyZWEgJwogICAgICAgICAnKC0tc3RhZ2luZ19sb2NhdGlvbiBvcHRpb24pIGFuZCB0aGUgd29ya2VycyB3aWxsIGluc3RhbGwgdGhlbSBpbiAnCiAgICAgICAgICdzYW1lIG9yZGVyIHRoZXkgd2VyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4nKSkKCgpjbGFzcyBUZXN0T3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgICMgT3B0aW9ucyBmb3IgZTJlIHRlc3QgcGlwZWxpbmUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW9uX3N1Y2Nlc3NfbWF0Y2hlcicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KCdWZXJpZnkgc3RhdGUvb3V0cHV0IG9mIGUyZSB0ZXN0IHBpcGVsaW5lLiBUaGlzIGlzIHBpY2tsZWQgJwogICAgICAgICAgICAgICd2ZXJzaW9uIG9mIHRoZSBtYXRjaGVyIHdoaWNoIHNob3VsZCBleHRlbmRzICcKICAgICAgICAgICAgICAnaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRyeV9ydW4nLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0oJ1VzZWQgaW4gdW5pdCB0ZXN0aW5nIHJ1bm5lcnMgd2l0aG91dCBzdWJtaXR0aW5nIHRoZSAnCiAgICAgICAgICAgICAgJ2FjdHVhbCBqb2IuJykpCgogIGRlZiB2YWxpZGF0ZShzZWxmLCB2YWxpZGF0b3IpOgogICAgZXJyb3JzID0gW10KICAgIGlmIHNlbGYudmlld19hcyhUZXN0T3B0aW9ucykub25fc3VjY2Vzc19tYXRjaGVyOgogICAgICBlcnJvcnMuZXh0ZW5kKHZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXIoc2VsZiwgJ29uX3N1Y2Nlc3NfbWF0Y2hlcicpKQogICAgcmV0dXJuIGVycm9ycwoKIyBUT0RPKHNpbHZpdWMpOiBBZGQgLS1maWxlc190b19zdGFnZSBvcHRpb24uCiMgVGhpcyBjb3VsZCBwb3RlbnRpYWxseSByZXBsYWNlIHRoZSAtLXJlcXVpcmVtZW50c19maWxlIGFuZCAtLXNldHVwX2ZpbGUuCgojIFRPRE8oc2lsdml1Yyk6IE5vbi1zdGFuZGFyZCBvcHRpb25zLiBLZWVwIHRoZW0/IElmIHllcywgYWRkIGhlbHAgdG9vIQojIFJlbW90ZSBleGVjdXRpb24gbXVzdCBjaGVjayB0aGF0IHRoaXMgb3B0aW9uIGlzIG5vdCBOb25lLgoKCmNsYXNzIE9wdGlvbnNDb250ZXh0KG9iamVjdCk6CiAgIiIiU2V0IGRlZmF1bHQgcGlwZWxpbmUgb3B0aW9ucyBmb3IgcGlwZWxpbmVzIGNyZWF0ZWQgaW4gdGhpcyBibG9jay4KCiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBwaXBlbGluZXMgaW1wbGljaXRseSBjcmVhdGVkIHdpdGggdGhlCgogICAgICBbcHl0aG9uIGxpc3RdIHwgUFRyYW5zZm9ybQoKICBjb25zdHJ1Y3QuCgogIENhbiBhbHNvIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IuCiAgIiIiCiAgb3ZlcnJpZGVzID0gW10KCiAgZGVmIF9faW5pdF9fKHNlbGYsICoqb3B0aW9ucyk6CiAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICBzZWxmLm92ZXJyaWRlcy5hcHBlbmQoc2VsZi5vcHRpb25zKQoKICBkZWYgX19leGl0X18oc2VsZiwgKmV4bl9pbmZvKToKICAgIHNlbGYub3ZlcnJpZGVzLnBvcCgpCgogIGRlZiBfX2NhbGxfXyhzZWxmLCBmLCAqYXJncywgKiprd2FyZ3MpOgoKICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CiAgICAgIHdpdGggc2VsZjoKICAgICAgICBmKCphcmdzLCAqKmt3YXJncykKCiAgICByZXR1cm4gd3JhcHBlcgoKICBAY2xhc3NtZXRob2QKICBkZWYgYXVnbWVudF9vcHRpb25zKGNscywgb3B0aW9ucyk6CiAgICBmb3Igb3ZlcnJpZGUgaW4gY2xzLm92ZXJyaWRlczoKICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG92ZXJyaWRlLml0ZW1zKCk6CiAgICAgICAgc2V0YXR0cihvcHRpb25zLCBuYW1lLCB2YWx1ZSkKICAgIHJldHVybiBvcHRpb25zCn1xvihYGAAAAFBpcGVsaW5lT3B0aW9ucy5fX2luaXRfX1gDAAAAZGVmS4RLoIdYFwAAAFBpcGVsaW5lT3B0aW9ucy5fX3N0cl9fWAMAAABkZWZNAgFNBgGHWA0AAABEaXJlY3RPcHRpb25zWAUAAABjbGFzc00wAU08AYdYFwAAAE9wdGlvbnNDb250ZXh0Ll9fZXhpdF9fWAMAAABkZWZNkQJNkwKHWBIAAABHb29nbGVDbG91ZE9wdGlvbnNYBQAAAGNsYXNzTT4BTYkBh1gYAAAAT3B0aW9uc0NvbnRleHQuX19lbnRlcl9fWAMAAABkZWZNjgJNkAKHWBcAAABPcHRpb25zQ29udGV4dC5fX2NhbGxfX1gDAAAAZGVmTZQCTZsCh1gUAAAAVGVzdE9wdGlvbnMudmFsaWRhdGVYAwAAAGRlZk1xAk12AodYCwAAAFR5cGVPcHRpb25zWAUAAABjbGFzc00ZAU0uAYdYDwAAAFN0YW5kYXJkT3B0aW9uc1gFAAAAY2xhc3NNCAFNFwGHWB8AAABQaXBlbGluZU9wdGlvbnMuZnJvbV9kaWN0aW9uYXJ5WAMAAABkZWZLpku5h1gvAAAAX0JlYW1Bcmd1bWVudFBhcnNlci5hZGRfdmFsdWVfcHJvdmlkZXJfYXJndW1lbnRYAwAAAGRlZktIS2eHWCAAAABEaXJlY3RPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc1gDAAAAZGVmTTMBTTwBh1gXAAAAT3B0aW9uc0NvbnRleHQuX19pbml0X19YAwAAAGRlZk2LAk2NAodYHgAAAE9wdGlvbnNDb250ZXh0LmF1Z21lbnRfb3B0aW9uc1gDAAAAZGVmTZwCTaICh1geAAAAVGVzdE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNYgJNcAKHWCIAAABTdGFuZGFyZE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNDAFNFwGHWAsAAABUZXN0T3B0aW9uc1gFAAAAY2xhc3NNYAJNdgKHWBwAAABfc3RhdGljX3ZhbHVlX3Byb3ZpZGVyX29mLl9mWAMAAABkZWZLNEs3h1gcAAAAUGlwZWxpbmVPcHRpb25zLmRpc3BsYXlfZGF0YVgDAAAAZGVmS95L4IdYJAAAAFBpcGVsaW5lT3B0aW9ucy5fdmlzaWJsZV9vcHRpb25fbGlzdFgDAAAAZGVmS+ZL6YdYDAAAAERlYnVnT3B0aW9uc1gFAAAAY2xhc3NN6wFN+wGHWB8AAABPcHRpb25zQ29udGV4dC5fX2NhbGxfXy53cmFwcGVyWAMAAABkZWZNlgJNmQKHWB8AAABQaXBlbGluZU9wdGlvbnMuZ2V0X2FsbF9vcHRpb25zWAMAAABkZWZLukvdh1gbAAAAR29vZ2xlQ2xvdWRPcHRpb25zLnZhbGlkYXRlWAMAAABkZWZNegFNiQGHWCUAAABHb29nbGVDbG91ZE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNRgFNeQGHWBYAAABXb3JrZXJPcHRpb25zLnZhbGlkYXRlWAMAAABkZWZN4wFN6QGHWBsAAABQaXBlbGluZU9wdGlvbnMuX19zZXRhdHRyX19YAwAAAGRlZkv5TQEBh1gTAAAAX0JlYW1Bcmd1bWVudFBhcnNlclgFAAAAY2xhc3NLOktnh1gjAAAAUHJvZmlsaW5nT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk3/AU0KAodYIgAAAFBpcGVsaW5lT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZkuhS6WHWBcAAABQaXBlbGluZU9wdGlvbnMuX19kaXJfX1gDAAAAZGVmS+pL7YdYDwAAAFBpcGVsaW5lT3B0aW9uc1gFAAAAY2xhc3NLaU0GAYdYDQAAAFdvcmtlck9wdGlvbnNYBQAAAGNsYXNzTY0BTekBh1ggAAAAV29ya2VyT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk2QAU3iAYdYGwAAAFBpcGVsaW5lT3B0aW9ucy5fX2dldGF0dHJfX1gDAAAAZGVmS+5L+IdYHwAAAFNldHVwT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk0OAk1eAodYGQAAAF9zdGF0aWNfdmFsdWVfcHJvdmlkZXJfb2ZYAwAAAGRlZkspSziHWA4AAABPcHRpb25zQ29udGV4dFgFAAAAY2xhc3NNfgJNogKHWBcAAABQaXBlbGluZU9wdGlvbnMudmlld19hc1gDAAAAZGVmS+FL5YdYHwAAAERlYnVnT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk3tAU37AYdYHgAAAFR5cGVPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc1gDAAAAZGVmTRsBTS4Bh1gMAAAAU2V0dXBPcHRpb25zWAUAAABjbGFzc00MAk1eAodYEAAAAFByb2ZpbGluZ09wdGlvbnNYBQAAAGNsYXNzTf0BTQoCh3V9cb8oWA8AAABQaXBlbGluZU9wdGlvbnNYJAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc3HAWA0AAABXb3JrZXJPcHRpb25zaMBYFAAAAFRlc3RPcHRpb25zLnZhbGlkYXRlaMBYCwAAAFR5cGVPcHRpb25zaMBYDwAAAFN0YW5kYXJkT3B0aW9uc2jAWB8AAABQaXBlbGluZU9wdGlvbnMuZnJvbV9kaWN0aW9uYXJ5aMBYHwAAAFBpcGVsaW5lT3B0aW9ucy5nZXRfYWxsX29wdGlvbnNowFgNAAAARGlyZWN0T3B0aW9uc2jAWBsAAABHb29nbGVDbG91ZE9wdGlvbnMudmFsaWRhdGVowFgcAAAAUGlwZWxpbmVPcHRpb25zLmRpc3BsYXlfZGF0YWjAWBcAAABQaXBlbGluZU9wdGlvbnMudmlld19hc2jAWBYAAABXb3JrZXJPcHRpb25zLnZhbGlkYXRlaMBYDAAAAERlYnVnT3B0aW9uc2jAWAsAAABUZXN0T3B0aW9uc2jAWBIAAABHb29nbGVDbG91ZE9wdGlvbnNowFgMAAAAU2V0dXBPcHRpb25zaMBYEAAAAFByb2ZpbGluZ09wdGlvbnNowHVoilgkAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zccGFgXHCfXHDYnRxxFUaYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMoWPEfAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZpbGVTeXN0ZW1zIGludGVyZmFjZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBjb3JyZWN0IGZpbGVzeXN0ZW0iIiIKCmltcG9ydCByZQoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCiMgQWxsIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBzaG91bGQgYmUgYWRkZWQgaGVyZQojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVudXNlZC1pbXBvcnQKZnJvbSBhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtIGltcG9ydCBIYWRvb3BGaWxlU3lzdGVtCmZyb20gYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtIGltcG9ydCBMb2NhbEZpbGVTeXN0ZW0KCnRyeToKICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtIGltcG9ydCBHQ1NGaWxlU3lzdGVtCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bnVzZWQtaW1wb3J0CgpfX2FsbF9fID0gWydGaWxlU3lzdGVtcyddCgoKY2xhc3MgRmlsZVN5c3RlbXMob2JqZWN0KToKICAiIiJBIGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhIGZpbGVzeXN0ZW0uCiAgQWxsIG1ldGhvZHMgYXJlIHN0YXRpYyBhbmQgYWNjZXNzIHRoZSB1bmRlcmx5aW5nIHJlZ2lzdGVyZWQgZmlsZXN5c3RlbXMuCiAgIiIiCiAgVVJJX1NDSEVNQV9QQVRURVJOID0gcmUuY29tcGlsZSgnKD9QPHNjaGVtZT5bYS16QS1aXVstYS16QS1aMC05Ky5dKik6Ly8uKicpCgogIF9waXBlbGluZV9vcHRpb25zID0gTm9uZQoKICBAY2xhc3NtZXRob2QKICBkZWYgc2V0X29wdGlvbnMoY2xzLCBwaXBlbGluZV9vcHRpb25zKToKICAgICIiIlNldCBmaWxlc3lzdGVtIG9wdGlvbnMuCgogICAgQXJnczoKICAgICAgcGlwZWxpbmVfb3B0aW9uczogSW5zdGFuY2Ugb2YgYGBQaXBlbGluZU9wdGlvbnNgYC4KICAgICIiIgogICAgY2xzLl9vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9zY2hlbWUocGF0aCk6CiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5VUklfU0NIRU1BX1BBVFRFUk4ubWF0Y2gocGF0aC5zdHJpcCgpKQogICAgaWYgbWF0Y2hfcmVzdWx0IGlzIE5vbmU6CiAgICAgIHJldHVybiBOb25lCiAgICByZXR1cm4gbWF0Y2hfcmVzdWx0Lmdyb3VwZGljdCgpWydzY2hlbWUnXQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9maWxlc3lzdGVtKHBhdGgpOgogICAgIiIiR2V0IHRoZSBjb3JyZWN0IGZpbGVzeXN0ZW0gZm9yIHRoZSBzcGVjaWZpZWQgcGF0aAogICAgIiIiCiAgICB0cnk6CiAgICAgIHBhdGhfc2NoZW1lID0gRmlsZVN5c3RlbXMuZ2V0X3NjaGVtZShwYXRoKQogICAgICBzeXN0ZW1zID0gW2ZzIGZvciBmcyBpbiBGaWxlU3lzdGVtLmdldF9hbGxfc3ViY2xhc3NlcygpCiAgICAgICAgICAgICAgICAgaWYgZnMuc2NoZW1lKCkgPT0gcGF0aF9zY2hlbWVdCiAgICAgIGlmIGxlbihzeXN0ZW1zKSA9PSAwOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEZpbGVzeXN0ZW0gZm9yIHBhdGggJXMnICUgcGF0aCkKICAgICAgZWxpZiBsZW4oc3lzdGVtcykgPT0gMToKICAgICAgICByZXR1cm4gc3lzdGVtc1swXShwaXBlbGluZV9vcHRpb25zPUZpbGVTeXN0ZW1zLl9waXBlbGluZV9vcHRpb25zKQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZvdW5kIG1vcmUgdGhhbiBvbmUgZmlsZXN5c3RlbSBmb3IgcGF0aCAlcycgJSBwYXRoKQogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgIHJhaXNlCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdVbmFibGUgdG8gZ2V0IHRoZSBGaWxlc3lzdGVtJywge3BhdGg6IGV9KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGpvaW4oYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0oYmFzZXBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5qb2luKGJhc2VwYXRoLCAqcGF0aHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgc3BsaXQocGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBGb3IgZmlsZS1zeXN0ZW1zIG90aGVyIHRoYW4gdGhlIGxvY2FsIGZpbGUtc3lzdGVtLCBoZWFkIHNob3VsZCBpbmNsdWRlIHRoZQogICAgcHJlZml4LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdChwYXRoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1rZGlycyhwYXRoKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb3ZpZGVkIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZAoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvciBpZiBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5ta2RpcnMocGF0aCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBtYXRjaChwYXR0ZXJucywgbGltaXRzPU5vbmUpOgogICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgcGF0aHMgdG8gdGhlIHBhdHRlcm5zIHByb3ZpZGVkLgoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBwYXR0ZXJuIG1hdGNoIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBpZiBsZW4ocGF0dGVybnMpID09IDA6CiAgICAgIHJldHVybiBbXQogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdHRlcm5zWzBdKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0ubWF0Y2gocGF0dGVybnMsIGxpbWl0cykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBjcmVhdGUocGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHdyaXRlIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QuIFNlZQogICAgICAgIGBgQ29tcHJlc3Npb25UeXBlc2BgIGZvciBwb3NzaWJsZSB2YWx1ZXMuCgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGBgY2xvc2VgYCBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlLgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLmNyZWF0ZShwYXRoLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgb3BlbihwYXRoLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHJlYWQgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdC4gU2VlCiAgICAgICAgYGBDb21wcmVzc2lvblR5cGVzYGAgZm9yIHBvc3NpYmxlIHZhbHVlcy4KCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgYGBjbG9zZWBgIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UuCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0ub3BlbihwYXRoLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgY29weShzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIGxpc3QgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBsaXN0IG9mIHNvdXJjZSBmaWxlIG9iamVjdHMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogbGlzdCBvZiBkZXN0aW5hdGlvbiBvZiB0aGUgbmV3IG9iamVjdAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgY29weSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSAwOgogICAgICByZXR1cm4KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShzb3VyY2VfZmlsZV9uYW1lc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLmNvcHkoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcmVuYW1lKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlbmFtZSB0aGUgZmlsZXMgYXQgdGhlIHNvdXJjZSBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBsaXN0LgogICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUgc2l6ZS4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogTGlzdCBvZiBmaWxlIHBhdGhzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBMaXN0IG9mIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgZm9yIHRoZSBmaWxlcwoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgcmVuYW1lIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBpZiBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IDA6CiAgICAgIHJldHVybgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHNvdXJjZV9maWxlX25hbWVzWzBdKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0ucmVuYW1lKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGV4aXN0cyhwYXRoKToKICAgICIiIkNoZWNrIGlmIHRoZSBwcm92aWRlZCBwYXRoIGV4aXN0cyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgcGF0aCBleGlzdHMKICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5leGlzdHMocGF0aCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkZWxldGUocGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBpZiBsZW4ocGF0aHMpID09IDA6CiAgICAgIHJldHVybgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGhzWzBdKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uZGVsZXRlKHBhdGhzKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9jaHVua19zaXplKHBhdGgpOgogICAgIiIiR2V0IHRoZSBjb3JyZWN0IGNodW5rIHNpemUgZm9yIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZC4KCiAgICBSZXR1cm5zOiBpbnRlZ2VyIHNpemUgZm9yIHBhcmFsbGVsaXphdGlvbiBpbiB0aGUgRlMgb3BlcmF0aW9ucy4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5DSFVOS19TSVpFCn1xxShYCwAAAEZpbGVTeXN0ZW1zWAUAAABjbGFzc0snS/iHWBEAAABGaWxlU3lzdGVtcy5tYXRjaFgDAAAAZGVmS35Lj4dYEgAAAEZpbGVTeXN0ZW1zLmRlbGV0ZVgDAAAAZGVmS91L7IdYEgAAAEZpbGVTeXN0ZW1zLmV4aXN0c1gDAAAAZGVmS9FL3IdYEAAAAEZpbGVTeXN0ZW1zLmpvaW5YAwAAAGRlZktSS16HWBIAAABGaWxlU3lzdGVtcy5jcmVhdGVYAwAAAGRlZkuQS5+HWBoAAABGaWxlU3lzdGVtcy5nZXRfY2h1bmtfc2l6ZVgDAAAAZGVmS+1L+IdYEgAAAEZpbGVTeXN0ZW1zLnJlbmFtZVgDAAAAZGVmS8BL0IdYEQAAAEZpbGVTeXN0ZW1zLnNwbGl0WAMAAABkZWZLX0twh1gXAAAARmlsZVN5c3RlbXMuc2V0X29wdGlvbnNYAwAAAGRlZksvSzeHWBAAAABGaWxlU3lzdGVtcy5jb3B5WAMAAABkZWZLsEu/h1gSAAAARmlsZVN5c3RlbXMubWtkaXJzWAMAAABkZWZLcUt9h1gaAAAARmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW1YAwAAAGRlZks/S1GHWBAAAABGaWxlU3lzdGVtcy5vcGVuWAMAAABkZWZLoEuvh1gWAAAARmlsZVN5c3RlbXMuZ2V0X3NjaGVtZVgDAAAAZGVmSzhLPod1fXHGKFgLAAAARmlsZVN5c3RlbXNYGgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zccdYEQAAAEZpbGVTeXN0ZW1zLm1hdGNoaMdYEgAAAEZpbGVTeXN0ZW1zLmRlbGV0ZWjHWBIAAABGaWxlU3lzdGVtcy5leGlzdHNox1gQAAAARmlsZVN5c3RlbXMuam9pbmjHWBIAAABGaWxlU3lzdGVtcy5jcmVhdGVox1gaAAAARmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemVox1gSAAAARmlsZVN5c3RlbXMucmVuYW1laMdYEQAAAEZpbGVTeXN0ZW1zLnNwbGl0aMdYFwAAAEZpbGVTeXN0ZW1zLnNldF9vcHRpb25zaMdYEAAAAEZpbGVTeXN0ZW1zLmNvcHlox1gSAAAARmlsZVN5c3RlbXMubWtkaXJzaMdYGgAAAEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtaMdYEAAAAEZpbGVTeXN0ZW1zLm9wZW5ox1gWAAAARmlsZVN5c3RlbXMuZ2V0X3NjaGVtZWjHdWiKWBoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc3HIhYFxyX1xymJ0VTdhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlKFjrCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJDcmVhdGUgdHJhbnNmb3JtIGZvciBzdHJlYW1pbmcuIiIiCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgV2luZG93aW5nCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3dzCgoKY2xhc3MgU3RyZWFtaW5nQ3JlYXRlKFBUcmFuc2Zvcm0pOgogICIiIkEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIGBgQ3JlYXRlYGAgdHJhbnNmb3JtIGluIHN0cmVhbWluZyBtb2RlLgoKICBOb3RlOiBUaGVyZSBpcyBubyB1bmJvdW5kZWQgc291cmNlIEFQSSBpbiBweXRob24gdG8gd3JhcCB0aGUgQ3JlYXRlIHNvdXJjZSwKICBzbyB3ZSBtYXAgdGhpcyB0byBjb21wb3NpdGUgb2YgSW1wdWxzZSBwcmltaXRpdmUgYW5kIGFuIFNERi4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcywgY29kZXIpOgogICAgc2VsZi5jb2RlciA9IGNvZGVyCiAgICBzZWxmLmVuY29kZWRfdmFsdWVzID0gbWFwKGNvZGVyLmVuY29kZSwgdmFsdWVzKQoKICBjbGFzcyBEZWNvZGVBbmRFbWl0RG9GbihEb0ZuKToKICAgICIiIkEgRG9GbiB3aGljaCBzdG9yZXMgZW5jb2RlZCB2ZXJzaW9ucyBvZiBlbGVtZW50cy4KCiAgICBJdCBhbHNvIHN0b3JlcyBhIENvZGVyIHRvIGRlY29kZSBhbmQgZW1pdCB0aG9zZSBlbGVtZW50cy4KICAgIFRPRE86IEJFQU0tMjQyMiAtIE1ha2UgdGhpcyBhIFNwbGl0dGFibGVEb0ZuLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kZWRfdmFsdWVzLCBjb2Rlcik6CiAgICAgIHNlbGYuZW5jb2RlZF92YWx1ZXMgPSBlbmNvZGVkX3ZhbHVlcwogICAgICBzZWxmLmNvZGVyID0gY29kZXIKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCB1bnVzZWRfZWxlbWVudCk6CiAgICAgIGZvciBlbmNvZGVkX3ZhbHVlIGluIHNlbGYuZW5jb2RlZF92YWx1ZXM6CiAgICAgICAgeWllbGQgc2VsZi5jb2Rlci5kZWNvZGUoZW5jb2RlZF92YWx1ZSkKCiAgY2xhc3MgSW1wdWxzZShQVHJhbnNmb3JtKToKICAgICIiIlRoZSBEYXRhZmxvdyBzcGVjaWZpYyBvdmVycmlkZSBmb3IgdGhlIGltcHVsc2UgcHJpbWl0aXZlLiIiIgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKSwgKAogICAgICAgICAgJ0lucHV0IHRvIEltcHVsc2UgdHJhbnNmb3JtIG11c3QgYmUgYSBQQmVnaW4gYnV0IGZvdW5kICVzJyAlIHBiZWdpbikKICAgICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwYmVnaW4ucGlwZWxpbmUpCgogICAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgaW5wdXRzKToKICAgICAgcmV0dXJuIFdpbmRvd2luZyhHbG9iYWxXaW5kb3dzKCkpCgogICAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIHVudXNlZF9pbnB1dF90eXBlKToKICAgICAgcmV0dXJuIGJ5dGVzCgogIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgIHJldHVybiAocGJlZ2luCiAgICAgICAgICAgIHwgJ0ltcHVsc2UnID4+IHNlbGYuSW1wdWxzZSgpCiAgICAgICAgICAgIHwgJ0RlY29kZSBWYWx1ZXMnID4+IFBhckRvKAogICAgICAgICAgICAgICAgc2VsZi5EZWNvZGVBbmRFbWl0RG9GbihzZWxmLmVuY29kZWRfdmFsdWVzLCBzZWxmLmNvZGVyKSkpCn1xyyhYHgAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmV4cGFuZFgDAAAAZGVmSzlLPYdYDwAAAFN0cmVhbWluZ0NyZWF0ZVgFAAAAY2xhc3NLHEtJh1gqAAAAU3RyZWFtaW5nQ3JlYXRlLkRlY29kZUFuZEVtaXREb0ZuLl9faW5pdF9fWAMAAABkZWZLLksxh1glAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UuZ2V0X3dpbmRvd2luZ1gDAAAAZGVmSz5LQIdYKQAAAFN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9Gbi5wcm9jZXNzWAMAAABkZWZLMks1h1gXAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2VYBQAAAGNsYXNzSzZLQ4dYIQAAAFN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9GblgFAAAAY2xhc3NLJ0s1h1gYAAAAU3RyZWFtaW5nQ3JlYXRlLl9faW5pdF9fWAMAAABkZWZLI0smh1gpAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UuaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZktBS0OHWBYAAABTdHJlYW1pbmdDcmVhdGUuZXhwYW5kWAMAAABkZWZLREtJh3V9ccwoWB4AAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5leHBhbmRYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGVxzVgPAAAAU3RyZWFtaW5nQ3JlYXRlaM1YJQAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmdldF93aW5kb3dpbmdozVgpAAAAU3RyZWFtaW5nQ3JlYXRlLkRlY29kZUFuZEVtaXREb0ZuLnByb2Nlc3NozVgXAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2VozVghAAAAU3RyZWFtaW5nQ3JlYXRlLkRlY29kZUFuZEVtaXREb0ZuaM1YKQAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmluZmVyX291dHB1dF90eXBlaM1YFgAAAFN0cmVhbWluZ0NyZWF0ZS5leHBhbmRozXVoilg3AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZXHOhYFxz31x0GJ0cdFVHmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZXHSKFiHCwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKVGhlIGNsYXNzZXMgaW4gdGhpcyBmaWxlIGFyZSBpbnRlcmZhY2VzIGZvciBtZXRyaWNzLiBUaGV5IGFyZSBub3QgaW50ZW5kZWQKdG8gYmUgc3ViY2xhc3NlZCBvciBjcmVhdGVkIGRpcmVjdGx5IGJ5IHVzZXJzLiBUbyB3b3JrIHdpdGggYW5kIGFjY2VzcyBtZXRyaWNzLAp1c2VycyBzaG91bGQgdXNlIHRoZSBjbGFzc2VzIGFuZCBtZXRob2RzIGV4cG9zZWQgaW4gbWV0cmljLnB5LgoKQXZhaWxhYmxlIGNsYXNzZXM6CgotIE1ldHJpYyAtIEJhc2UgaW50ZXJmYWNlIG9mIGEgbWV0cmljcyBvYmplY3QuCi0gQ291bnRlciAtIENvdW50ZXIgbWV0cmljIGludGVyZmFjZS4gQWxsb3dzIGEgY291bnQgdG8gYmUgaW5jcmVtZW50ZWQgb3IKICAgIGRlY3JlbWVudGVkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCi0gRGlzdHJpYnV0aW9uIC0gRGlzdHJpYnV0aW9uIE1ldHJpYyBpbnRlcmZhY2UuIEFsbG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZQogICAgZGlzdHJpYnV0aW9uIG9mIGEgdmFyaWFibGUgdG8gYmUgY29sbGVjdGVkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCi0gTWV0cmljTmFtZSAtIE5hbWVzcGFjZSBhbmQgbmFtZSB1c2VkIHRvIHJlZmVyIHRvIGEgTWV0cmljLgoiIiIKCl9fYWxsX18gPSBbJ01ldHJpYycsICdDb3VudGVyJywgJ0Rpc3RyaWJ1dGlvbicsICdNZXRyaWNOYW1lJ10KCgpjbGFzcyBNZXRyaWNOYW1lKG9iamVjdCk6CiAgIiIiVGhlIG5hbWUgb2YgYSBtZXRyaWMuCgogIFRoZSBuYW1lIG9mIGEgbWV0cmljIGNvbnNpc3RzIG9mIGEgbmFtZXNwYWNlIGFuZCBhIG5hbWUuIFRoZSBuYW1lc3BhY2UKICBhbGxvd3MgZ3JvdXBpbmcgcmVsYXRlZCBtZXRyaWNzIHRvZ2V0aGVyIGFuZCBhbHNvIHByZXZlbnRzIGNvbGxpc2lvbnMKICBiZXR3ZWVuIG11bHRpcGxlIG1ldHJpY3Mgb2YgdGhlIHNhbWUgbmFtZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXNwYWNlLCBuYW1lKToKICAgICIiIkluaXRpYWxpemVzIGBgTWV0cmljTmFtZWBgLgoKICAgIEFyZ3M6CiAgICAgIG5hbWVzcGFjZTogQSBzdHJpbmcgd2l0aCB0aGUgbmFtZXNwYWNlIG9mIGEgbWV0cmljLgogICAgICBuYW1lOiBBIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIGEgbWV0cmljLgogICAgIiIiCiAgICBpZiBub3QgbmFtZXNwYWNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdNZXRyaWMgbmFtZXNwYWNlIG11c3QgYmUgbm9uLWVtcHR5JykKICAgIGlmIG5vdCBuYW1lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdNZXRyaWMgbmFtZSBtdXN0IGJlIG5vbi1lbXB0eScpCiAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5uYW1lID0gbmFtZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoc2VsZi5uYW1lc3BhY2UgPT0gb3RoZXIubmFtZXNwYWNlIGFuZAogICAgICAgICAgICBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSkKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJ01ldHJpY05hbWUobmFtZXNwYWNlPXt9LCBuYW1lPXt9KScuZm9ybWF0KAogICAgICAgIHNlbGYubmFtZXNwYWNlLCBzZWxmLm5hbWUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLm5hbWVzcGFjZSwgc2VsZi5uYW1lKSkKCgpjbGFzcyBNZXRyaWMob2JqZWN0KToKICAiIiJCYXNlIGludGVyZmFjZSBvZiBhIG1ldHJpYyBvYmplY3QuIiIiCiAgcGFzcwoKCmNsYXNzIENvdW50ZXIoTWV0cmljKToKICAiIiJDb3VudGVyIG1ldHJpYyBpbnRlcmZhY2UuIEFsbG93cyBhIGNvdW50IHRvIGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkCiAgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4iIiIKICBkZWYgaW5jKHNlbGYsIG49MSk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBkZWMoc2VsZiwgbj0xKToKICAgIHNlbGYuaW5jKC1uKQoKCmNsYXNzIERpc3RyaWJ1dGlvbihNZXRyaWMpOgogICIiIkRpc3RyaWJ1dGlvbiBNZXRyaWMgaW50ZXJmYWNlLiBBbGxvd3Mgc3RhdGlzdGljcyBhYm91dCB0aGUKICAgIGRpc3RyaWJ1dGlvbiBvZiBhIHZhcmlhYmxlIHRvIGJlIGNvbGxlY3RlZCBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgp9cdMoWAsAAABDb3VudGVyLmRlY1gDAAAAZGVmS1BLUodYBgAAAE1ldHJpY1gFAAAAY2xhc3NLRUtIh1gLAAAAQ291bnRlci5pbmNYAwAAAGRlZktNS0+HWBEAAABNZXRyaWNOYW1lLl9fZXFfX1gDAAAAZGVmSzlLPIdYEwAAAERpc3RyaWJ1dGlvbi51cGRhdGVYAwAAAGRlZktXS1mHWAoAAABNZXRyaWNOYW1lWAUAAABjbGFzc0skS0OHWBMAAABNZXRyaWNOYW1lLl9faW5pdF9fWAMAAABkZWZLK0s4h1gTAAAATWV0cmljTmFtZS5fX2hhc2hfX1gDAAAAZGVmS0FLQ4dYBwAAAENvdW50ZXJYBQAAAGNsYXNzS0pLUodYEgAAAE1ldHJpY05hbWUuX19zdHJfX1gDAAAAZGVmSz1LQIdYDAAAAERpc3RyaWJ1dGlvblgFAAAAY2xhc3NLVEtZh3V9cdQoWAcAAABDb3VudGVyWB4AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2Vx1VgGAAAATWV0cmljaNVYCwAAAENvdW50ZXIuaW5jaNVYEwAAAERpc3RyaWJ1dGlvbi51cGRhdGVo1VgKAAAATWV0cmljTmFtZWjVWAwAAABEaXN0cmlidXRpb25o1VgLAAAAQ291bnRlci5kZWNo1XVoilgeAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlcdaFgXHXfXHYYnRx2VUxYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcyhYLQgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUHRyYW5zZm9ybSBvdmVycmlkZXMgZm9yIERhdGFmbG93UnVubmVyLiIiIgoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IHR5cGVjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUFRyYW5zZm9ybU92ZXJyaWRlCgoKY2xhc3MgQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1PdmVycmlkZWBgIGZvciBgYENyZWF0ZWBgIGluIHN0cmVhbWluZyBtb2RlLiIiIgoKICBkZWYgZ2V0X21hdGNoZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5pc19zdHJlYW1pbmdfY3JlYXRlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgaXNfc3RyZWFtaW5nX2NyZWF0ZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBDcmVhdGUKICAgIGZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKCiAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIENyZWF0ZSk6CiAgICAgIHN0YW5kYXJkX29wdGlvbnMgPSAoYXBwbGllZF9wdHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgICAgLm91dHB1dHNbTm9uZV0KICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZWxpbmUuX29wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpKQogICAgICByZXR1cm4gc3RhbmRhcmRfb3B0aW9ucy5zdHJlYW1pbmcKICAgIGVsc2U6CiAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlIGltcG9ydCBcCiAgICAgIFN0cmVhbWluZ0NyZWF0ZQogICAgY29kZXIgPSB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihwdHJhbnNmb3JtLmdldF9vdXRwdXRfdHlwZSgpKQogICAgcmV0dXJuIFN0cmVhbWluZ0NyZWF0ZShwdHJhbnNmb3JtLnZhbHVlLCBjb2RlcikKfXHaKFgkAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9tYXRjaGVyWAMAAABkZWZLG0sdh1gYAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlWAUAAABjbGFzc0sYSzWHWCwAAABDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuaXNfc3RyZWFtaW5nX2NyZWF0ZVgDAAAAZGVmSx5LLYdYMgAAAENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWAMAAABkZWZLLks1h3V9cdsoWCQAAABDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X21hdGNoZXJYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXNx3FgyAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1o3FgsAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmlzX3N0cmVhbWluZ19jcmVhdGVo3FgYAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlaNx1aIpYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVycd2FgXHefXHfYnRx4FUeYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtKFhjEQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbS5weXguCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKaW1wb3J0IHN0cnVjdAoKCmNsYXNzIE91dHB1dFN0cmVhbShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBzdHJlYW0uT3V0cHV0U3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmRhdGEgPSBbXQoKICBkZWYgd3JpdGUoc2VsZiwgYiwgbmVzdGVkPUZhbHNlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGIsIHN0cikKICAgIGlmIG5lc3RlZDoKICAgICAgc2VsZi53cml0ZV92YXJfaW50NjQobGVuKGIpKQogICAgc2VsZi5kYXRhLmFwcGVuZChiKQoKICBkZWYgd3JpdGVfYnl0ZShzZWxmLCB2YWwpOgogICAgc2VsZi5kYXRhLmFwcGVuZChjaHIodmFsKSkKCiAgZGVmIHdyaXRlX3Zhcl9pbnQ2NChzZWxmLCB2KToKICAgIGlmIHYgPCAwOgogICAgICB2ICs9IDEgPDwgNjQKICAgICAgaWYgdiA8PSAwOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIHRvbyBsYXJnZSAobmVnYXRpdmUpLicpCiAgICB3aGlsZSBUcnVlOgogICAgICBiaXRzID0gdiAmIDB4N0YKICAgICAgdiA+Pj0gNwogICAgICBpZiB2OgogICAgICAgIGJpdHMgfD0gMHg4MAogICAgICBzZWxmLndyaXRlX2J5dGUoYml0cykKICAgICAgaWYgbm90IHY6CiAgICAgICAgYnJlYWsKCiAgZGVmIHdyaXRlX2JpZ2VuZGlhbl9pbnQ2NChzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5xJywgdikpCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5fdWludDY0KHNlbGYsIHYpOgogICAgc2VsZi53cml0ZShzdHJ1Y3QucGFjaygnPlEnLCB2KSkKCiAgZGVmIHdyaXRlX2JpZ2VuZGlhbl9pbnQzMihzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5pJywgdikpCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5fZG91YmxlKHNlbGYsIHYpOgogICAgc2VsZi53cml0ZShzdHJ1Y3QucGFjaygnPmQnLCB2KSkKCiAgZGVmIGdldChzZWxmKToKICAgIHJldHVybiAnJy5qb2luKHNlbGYuZGF0YSkKCiAgZGVmIHNpemUoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkKCgpjbGFzcyBCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0oT3V0cHV0U3RyZWFtKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGFueSBvZiB0aGUgZGF0YSBpbml0aWFsaXplZCBieSBvdXIgc3VwZXIuCiAgICBzdXBlcihCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuY291bnQgPSAwCgogIGRlZiB3cml0ZShzZWxmLCBieXRlX2FycmF5LCBuZXN0ZWQ9RmFsc2UpOgogICAgYmxlbiA9IGxlbihieXRlX2FycmF5KQogICAgaWYgbmVzdGVkOgogICAgICBzZWxmLndyaXRlX3Zhcl9pbnQ2NChibGVuKQogICAgc2VsZi5jb3VudCArPSBibGVuCgogIGRlZiB3cml0ZV9ieXRlKHNlbGYsIF8pOgogICAgc2VsZi5jb3VudCArPSAxCgogIGRlZiBnZXRfY291bnQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5jb3VudAoKICBkZWYgZ2V0KHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuY291bnQpCgoKY2xhc3MgSW5wdXRTdHJlYW0ob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtLklucHV0U3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICBzZWxmLnBvcyA9IDAKCiAgZGVmIHNpemUoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkgLSBzZWxmLnBvcwoKICBkZWYgcmVhZChzZWxmLCBzaXplKToKICAgIHNlbGYucG9zICs9IHNpemUKICAgIHJldHVybiBzZWxmLmRhdGFbc2VsZi5wb3MgLSBzaXplIDogc2VsZi5wb3NdCgogIGRlZiByZWFkX2FsbChzZWxmLCBuZXN0ZWQpOgogICAgcmV0dXJuIHNlbGYucmVhZChzZWxmLnJlYWRfdmFyX2ludDY0KCkgaWYgbmVzdGVkIGVsc2Ugc2VsZi5zaXplKCkpCgogIGRlZiByZWFkX2J5dGUoc2VsZik6CiAgICBzZWxmLnBvcyArPSAxCiAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtzZWxmLnBvcyAtIDFdKQoKICBkZWYgcmVhZF92YXJfaW50NjQoc2VsZik6CiAgICBzaGlmdCA9IDAKICAgIHJlc3VsdCA9IDAKICAgIHdoaWxlIFRydWU6CiAgICAgIGJ5dGUgPSBzZWxmLnJlYWRfYnl0ZSgpCiAgICAgIGlmIGJ5dGUgPCAwOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVmFyTG9uZyBub3QgdGVybWluYXRlZC4nKQoKICAgICAgYml0cyA9IGJ5dGUgJiAweDdGCiAgICAgIGlmIHNoaWZ0ID49IDY0IG9yIChzaGlmdCA+PSA2MyBhbmQgYml0cyA+IDEpOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVmFyTG9uZyB0b28gbG9uZy4nKQogICAgICByZXN1bHQgfD0gYml0cyA8PCBzaGlmdAogICAgICBzaGlmdCArPSA3CiAgICAgIGlmIG5vdCBieXRlICYgMHg4MDoKICAgICAgICBicmVhawogICAgaWYgcmVzdWx0ID49IDEgPDwgNjM6CiAgICAgIHJlc3VsdCAtPSAxIDw8IDY0CiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiByZWFkX2JpZ2VuZGlhbl9pbnQ2NChzZWxmKToKICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+cScsIHNlbGYucmVhZCg4KSlbMF0KCiAgZGVmIHJlYWRfYmlnZW5kaWFuX3VpbnQ2NChzZWxmKToKICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+UScsIHNlbGYucmVhZCg4KSlbMF0KCiAgZGVmIHJlYWRfYmlnZW5kaWFuX2ludDMyKHNlbGYpOgogICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5pJywgc2VsZi5yZWFkKDQpKVswXQoKICBkZWYgcmVhZF9iaWdlbmRpYW5fZG91YmxlKHNlbGYpOgogICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5yZWFkKDgpKVswXQoKCmRlZiBnZXRfdmFyaW50X3NpemUodik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBpbnRlZ2VyIHZhbHVlIHdoZW4gZW5jb2RlIGFzIGEgVmFySW50LiIiIgogIGlmIHYgPCAwOgogICAgdiArPSAxIDw8IDY0CiAgICBpZiB2IDw9IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIHRvbyBsYXJnZSAobmVnYXRpdmUpLicpCiAgdmFyaW50X3NpemUgPSAwCiAgd2hpbGUgVHJ1ZToKICAgIHZhcmludF9zaXplICs9IDEKICAgIHYgPj49IDcKICAgIGlmIG5vdCB2OgogICAgICBicmVhawogIHJldHVybiB2YXJpbnRfc2l6ZQp9ceEoWCIAAABPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2ludDMyWAMAAABkZWZLP0tBh1gQAAAASW5wdXRTdHJlYW0ucmVhZFgDAAAAZGVmS3VLeIdYIQAAAElucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2RvdWJsZVgDAAAAZGVmS5xLnodYIwAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fdWludDY0WAMAAABkZWZLPEs+h1gRAAAAT3V0cHV0U3RyZWFtLnNpemVYAwAAAGRlZktIS0qHWBQAAABJbnB1dFN0cmVhbS5fX2luaXRfX1gDAAAAZGVmS25LcYdYHAAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRYAwAAAGRlZktiS2SHWCEAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl91aW50NjRYAwAAAGRlZkuWS5iHWAsAAABJbnB1dFN0cmVhbVgFAAAAY2xhc3NLaUueh1gcAAAAT3V0cHV0U3RyZWFtLndyaXRlX3Zhcl9pbnQ2NFgDAAAAZGVmSytLOIdYIgAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50NjRYAwAAAGRlZks5SzuHWBQAAABJbnB1dFN0cmVhbS5yZWFkX2FsbFgDAAAAZGVmS3lLe4dYFQAAAElucHV0U3RyZWFtLnJlYWRfYnl0ZVgDAAAAZGVmS3xLf4dYFwAAAE91dHB1dFN0cmVhbS53cml0ZV9ieXRlWAMAAABkZWZLKEsqh1gPAAAAZ2V0X3ZhcmludF9zaXplWAMAAABkZWZLoEuvh1gYAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtWAUAAABjbGFzc0tMS2eHWCAAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQzMlgDAAAAZGVmS5lLm4dYDAAAAE91dHB1dFN0cmVhbVgFAAAAY2xhc3NLGktKh1gSAAAAT3V0cHV0U3RyZWFtLndyaXRlWAMAAABkZWZLIksnh1gjAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRlX2J5dGVYAwAAAGRlZktcS16HWCIAAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0X2NvdW50WAMAAABkZWZLX0thh1gQAAAASW5wdXRTdHJlYW0uc2l6ZVgDAAAAZGVmS3JLdIdYIwAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fZG91YmxlWAMAAABkZWZLQktEh1geAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRlWAMAAABkZWZLVktbh1gQAAAAT3V0cHV0U3RyZWFtLmdldFgDAAAAZGVmS0VLR4dYIAAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5fX3N0cl9fWAMAAABkZWZLZUtnh1ggAAAASW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50NjRYAwAAAGRlZkuTS5WHWCEAAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uX19pbml0X19YAwAAAGRlZktRS1WHWBoAAABJbnB1dFN0cmVhbS5yZWFkX3Zhcl9pbnQ2NFgDAAAAZGVmS4BLkodYFQAAAE91dHB1dFN0cmVhbS5fX2luaXRfX1gDAAAAZGVmSx9LIYd1fXHiKFgiAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQzMlgeAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtceNYEAAAAElucHV0U3RyZWFtLnJlYWRo41ghAAAASW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5fZG91YmxlaONYIwAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fdWludDY0aONYEQAAAE91dHB1dFN0cmVhbS5zaXplaONYHAAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRo41ghAAAASW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5fdWludDY0aONYCwAAAElucHV0U3RyZWFtaONYHAAAAE91dHB1dFN0cmVhbS53cml0ZV92YXJfaW50NjRo41giAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQ2NGjjWBQAAABJbnB1dFN0cmVhbS5yZWFkX2FsbGjjWBUAAABJbnB1dFN0cmVhbS5yZWFkX2J5dGVo41gXAAAAT3V0cHV0U3RyZWFtLndyaXRlX2J5dGVo41gPAAAAZ2V0X3ZhcmludF9zaXplaONYGAAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbWjjWCAAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQzMmjjWAwAAABPdXRwdXRTdHJlYW1o41gSAAAAT3V0cHV0U3RyZWFtLndyaXRlaONYIwAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS53cml0ZV9ieXRlaONYIgAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRfY291bnRo41gQAAAASW5wdXRTdHJlYW0uc2l6ZWjjWCMAAABPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2RvdWJsZWjjWB4AAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGVo41gQAAAAT3V0cHV0U3RyZWFtLmdldGjjWCAAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQ2NGjjWBoAAABJbnB1dFN0cmVhbS5yZWFkX3Zhcl9pbnQ2NGjjdWiKWB4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW1x5IWBceV9ceZidHHnVS5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlcegoWNsNAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZha2UgZGF0YXN0b3JlIHVzZWQgZm9yIHVuaXQgdGVzdGluZy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgppbXBvcnQgdXVpZAoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGRhdGFzdG9yZSBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGdvb2dsZS5jbG91ZC5wcm90by5kYXRhc3RvcmUudjEgaW1wb3J0IGRhdGFzdG9yZV9wYjIKICBmcm9tIGdvb2dsZS5jbG91ZC5wcm90by5kYXRhc3RvcmUudjEgaW1wb3J0IHF1ZXJ5X3BiMgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKZGVmIGNyZWF0ZV9ydW5fcXVlcnkoZW50aXRpZXMsIGJhdGNoX3NpemUpOgogICIiIkEgZmFrZSBkYXRhc3RvcmUgcnVuX3F1ZXJ5IG1ldGhvZCB0aGF0IHJldHVybnMgZW50aXRpZXMgaW4gYmF0Y2hlcy4KCiAgTm90ZTogdGhlIG91dGVyIG1ldGhvZCBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgYGVudGl0aWVzYCBhbmQgYGJhdGNoX3NpemVgCiAgYXZhaWxhYmxlIGluIHRoZSBzY29wZSBvZiBmYWtlX3J1bl9xdWVyeSBtZXRob2QuCgogIEFyZ3M6CiAgICBlbnRpdGllczogbGlzdCBvZiBlbnRpdGllcyBzdXBwb3NlZCB0byBiZSBjb250YWluZWQgaW4gdGhlIGRhdGFzdG9yZS4KICAgIGJhdGNoX3NpemU6IHRoZSBudW1iZXIgb2YgZW50aXRpZXMgdGhhdCBydW5fcXVlcnkgbWV0aG9kIHJldHVybnMgaW4gb25lCiAgICAgICAgICAgICAgICByZXF1ZXN0LgogICIiIgogIGRlZiBydW5fcXVlcnkocmVxKToKICAgIHN0YXJ0ID0gaW50KHJlcS5xdWVyeS5zdGFydF9jdXJzb3IpIGlmIHJlcS5xdWVyeS5zdGFydF9jdXJzb3IgZWxzZSAwCiAgICAjIGlmIHF1ZXJ5IGxpbWl0IGlzIGxlc3MgdGhhbiBiYXRjaF9zaXplLCB0aGVuIG9ubHkgcmV0dXJuIHRoYXQgbXVjaC4KICAgIGNvdW50ID0gbWluKGJhdGNoX3NpemUsIHJlcS5xdWVyeS5saW1pdC52YWx1ZSkKICAgICMgY2Fubm90IGdvIG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIGVudGl0aWVzIGNvbnRhaW5lZCBpbiBkYXRhc3RvcmUuCiAgICBlbmQgPSBtaW4obGVuKGVudGl0aWVzKSwgc3RhcnQgKyBjb3VudCkKICAgIGZpbmlzaCA9IEZhbHNlCiAgICAjIEZpbmlzaCByZWFkaW5nIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgZW50aXRpZXMgdG8gcmV0dXJuLAogICAgIyBvciByZXF1ZXN0IHF1ZXJ5IGxpbWl0IGhhcyBiZWVuIHNhdGlzZmllZC4KICAgIGlmIGVuZCA9PSBsZW4oZW50aXRpZXMpIG9yIGNvdW50ID09IHJlcS5xdWVyeS5saW1pdC52YWx1ZToKICAgICAgZmluaXNoID0gVHJ1ZQogICAgcmV0dXJuIGNyZWF0ZV9yZXNwb25zZShlbnRpdGllc1tzdGFydDplbmRdLCBzdHIoZW5kKSwgZmluaXNoKQogIHJldHVybiBydW5fcXVlcnkKCgpkZWYgY3JlYXRlX2NvbW1pdChtdXRhdGlvbnMpOgogICIiIkEgZmFrZSBEYXRhc3RvcmUgY29tbWl0IG1ldGhvZCB0aGF0IHdyaXRlcyB0aGUgbXV0YXRpb25zIHRvIGEgbGlzdC4KCiAgQXJnczoKICAgIG11dGF0aW9uczogQSBsaXN0IHRvIHdyaXRlIG11dGF0aW9ucyB0by4KCiAgUmV0dXJuczoKICAgIEEgZmFrZSBEYXRhc3RvcmUgY29tbWl0IG1ldGhvZAogICIiIgoKICBkZWYgY29tbWl0KHJlcSk6CiAgICBmb3IgbXV0YXRpb24gaW4gcmVxLm11dGF0aW9uczoKICAgICAgbXV0YXRpb25zLmFwcGVuZChtdXRhdGlvbikKCiAgcmV0dXJuIGNvbW1pdAoKCmRlZiBjcmVhdGVfcmVzcG9uc2UoZW50aXRpZXMsIGVuZF9jdXJzb3IsIGZpbmlzaCk6CiAgIiIiQ3JlYXRlcyBhIHF1ZXJ5IHJlc3BvbnNlIGZvciBhIGdpdmVuIGJhdGNoIG9mIHNjYXR0ZXIgZW50aXRpZXMuIiIiCiAgcmVzcCA9IGRhdGFzdG9yZV9wYjIuUnVuUXVlcnlSZXNwb25zZSgpCiAgaWYgZmluaXNoOgogICAgcmVzcC5iYXRjaC5tb3JlX3Jlc3VsdHMgPSBxdWVyeV9wYjIuUXVlcnlSZXN1bHRCYXRjaC5OT19NT1JFX1JFU1VMVFMKICBlbHNlOgogICAgcmVzcC5iYXRjaC5tb3JlX3Jlc3VsdHMgPSBxdWVyeV9wYjIuUXVlcnlSZXN1bHRCYXRjaC5OT1RfRklOSVNIRUQKCiAgcmVzcC5iYXRjaC5lbmRfY3Vyc29yID0gZW5kX2N1cnNvcgogIGZvciBlbnRpdHlfcmVzdWx0IGluIGVudGl0aWVzOgogICAgcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0cy5hZGQoKS5Db3B5RnJvbShlbnRpdHlfcmVzdWx0KQoKICByZXR1cm4gcmVzcAoKCmRlZiBjcmVhdGVfZW50aXRpZXMoY291bnQsIGlkX29yX25hbWU9RmFsc2UpOgogICIiIkNyZWF0ZXMgYSBsaXN0IG9mIGVudGl0aWVzIHdpdGggcmFuZG9tIGtleXMuIiIiCiAgZW50aXRpZXMgPSBbXQoKICBmb3IgXyBpbiByYW5nZShjb3VudCk6CiAgICBlbnRpdHlfcmVzdWx0ID0gcXVlcnlfcGIyLkVudGl0eVJlc3VsdCgpCiAgICBpZiBpZF9vcl9uYW1lOgogICAgICBlbnRpdHlfcmVzdWx0LmVudGl0eS5rZXkucGF0aC5hZGQoKS5pZCA9ICgKICAgICAgICAgIHV1aWQudXVpZDQoKS5pbnQgJiAoKDEgPDwgNjMpIC0gMSkpCiAgICBlbHNlOgogICAgICBlbnRpdHlfcmVzdWx0LmVudGl0eS5rZXkucGF0aC5hZGQoKS5uYW1lID0gc3RyKHV1aWQudXVpZDQoKSkKICAgIGVudGl0aWVzLmFwcGVuZChlbnRpdHlfcmVzdWx0KQoKICByZXR1cm4gZW50aXRpZXMKfXHpKFgaAAAAY3JlYXRlX3J1bl9xdWVyeS5ydW5fcXVlcnlYAwAAAGRlZksuSzqHWBQAAABjcmVhdGVfY29tbWl0LmNvbW1pdFgDAAAAZGVmS0dLSodYEAAAAGNyZWF0ZV9ydW5fcXVlcnlYAwAAAGRlZksjSzuHWA8AAABjcmVhdGVfZW50aXRpZXNYAwAAAGRlZktdS2uHWA0AAABjcmVhdGVfY29tbWl0WAMAAABkZWZLPUtMh1gPAAAAY3JlYXRlX3Jlc3BvbnNlWAMAAABkZWZLTktbh3V9ceooWA0AAABjcmVhdGVfY29tbWl0WC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlcetYEAAAAGNyZWF0ZV9ydW5fcXVlcnlo61gPAAAAY3JlYXRlX2VudGl0aWVzaOtYDwAAAGNyZWF0ZV9yZXNwb25zZWjrdWiKWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlceyFgXHtfXHuYnRx71UdYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGgoWCcSAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRhdGFmbG93IGNyZWRlbnRpYWxzIGFuZCBhdXRoZW50aWNhdGlvbi4iIiIKCmltcG9ydCBkYXRldGltZQppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHVybGxpYjIKCmZyb20gb2F1dGgyY2xpZW50LmNsaWVudCBpbXBvcnQgR29vZ2xlQ3JlZGVudGlhbHMKZnJvbSBvYXV0aDJjbGllbnQuY2xpZW50IGltcG9ydCBPQXV0aDJDcmVkZW50aWFscwoKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKCiMgV2hlbiB3ZSBhcmUgcnVubmluZyBpbiBHQ0UsIHdlIGNhbiBhdXRoZW50aWNhdGUgd2l0aCBWTSBjcmVkZW50aWFscy4KaXNfcnVubmluZ19pbl9nY2UgPSBGYWxzZQoKIyBXaGVuIHdlIGFyZSBydW5uaW5nIGluIEdDRSwgdGhpcyB2YWx1ZSBpcyBzZXQgYmFzZWQgb24gd29ya2VyIHN0YXJ0dXAKIyBpbmZvcm1hdGlvbi4KZXhlY3V0aW5nX3Byb2plY3QgPSBOb25lCgoKZGVmIHNldF9ydW5uaW5nX2luX2djZSh3b3JrZXJfZXhlY3V0aW5nX3Byb2plY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgSW5mb3JtcyB0aGUgYXV0aGVudGljYXRpb24gbGlicmFyeSB0aGF0IHdlIGFyZSBydW5uaW5nIGluIEdDRS4KCiAgV2hlbiB3ZSBhcmUgcnVubmluZyBpbiBHQ0UsIHdlIGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyB0aGUgVk0gbWV0YWRhdGEKICBjcmVkZW50aWFscyBmb3IgYXV0aGVudGljYXRpb24gdG8gR29vZ2xlIHNlcnZpY2VzLgoKICBBcmdzOgogICAgd29ya2VyX2V4ZWN1dGluZ19wcm9qZWN0OiBUaGUgcHJvamVjdCBydW5uaW5nIHRoZSB3b3JrZmxvdy4gVGhpcyBpbmZvcm1hdGlvbgogICAgICBjb21lcyBmcm9tIHdvcmtlciBzdGFydHVwIGluZm9ybWF0aW9uLgogICIiIgogIGdsb2JhbCBpc19ydW5uaW5nX2luX2djZQogIGdsb2JhbCBleGVjdXRpbmdfcHJvamVjdAogIGlzX3J1bm5pbmdfaW5fZ2NlID0gVHJ1ZQogIGV4ZWN1dGluZ19wcm9qZWN0ID0gd29ya2VyX2V4ZWN1dGluZ19wcm9qZWN0CgoKY2xhc3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24ocmV0cnkuUGVybWFuZW50RXhjZXB0aW9uKToKICBwYXNzCgoKY2xhc3MgX0dDRU1ldGFkYXRhQ3JlZGVudGlhbHMoT0F1dGgyQ3JlZGVudGlhbHMpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQ3JlZGVudGlhbCBvYmplY3QgaW5pdGlhbGl6ZWQgdXNpbmcgYWNjZXNzIHRva2VuIGZyb20gR0NFIFZNIG1ldGFkYXRhLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdXNlcl9hZ2VudD1Ob25lKToKICAgICIiIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHQ0VNZXRhZGF0YUNyZWRlbnRpYWxzLgoKICAgIFRoZXNlIGNyZWRlbnRpYWxzIGFyZSBnZW5lcmF0ZWQgYnkgY29udGFjdGluZyB0aGUgbWV0YWRhdGEgc2VydmVyIG9uIGEgR0NFCiAgICBWTSBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICB1c2VyX2FnZW50OiBzdHJpbmcsIFRoZSBIVFRQIFVzZXItQWdlbnQgdG8gcHJvdmlkZSBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KICAgICIiIgogICAgc3VwZXIoX0dDRU1ldGFkYXRhQ3JlZGVudGlhbHMsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIE5vbmUsICAjIGFjY2Vzc190b2tlbgogICAgICAgIE5vbmUsICAjIGNsaWVudF9pZAogICAgICAgIE5vbmUsICAjIGNsaWVudF9zZWNyZXQKICAgICAgICBOb25lLCAgIyByZWZyZXNoX3Rva2VuCiAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgMSwgMSksICAjIHRva2VuX2V4cGlyeSwgc2V0IHRvIHRpbWUgaW4gcGFzdC4KICAgICAgICBOb25lLCAgIyB0b2tlbl91cmkKICAgICAgICB1c2VyX2FnZW50KQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9yZWZyZXNoKHNlbGYsIGh0dHBfcmVxdWVzdCk6CiAgICByZWZyZXNoX3RpbWUgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQogICAgbWV0YWRhdGFfcm9vdCA9IG9zLmVudmlyb24uZ2V0KAogICAgICAgICdHQ0VfTUVUQURBVEFfUk9PVCcsICdtZXRhZGF0YS5nb29nbGUuaW50ZXJuYWwnKQogICAgdG9rZW5fdXJsID0gKCdodHRwOi8ve30vY29tcHV0ZU1ldGFkYXRhL3YxL2luc3RhbmNlL3NlcnZpY2UtYWNjb3VudHMvJwogICAgICAgICAgICAgICAgICdkZWZhdWx0L3Rva2VuJykuZm9ybWF0KG1ldGFkYXRhX3Jvb3QpCiAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodG9rZW5fdXJsLCBoZWFkZXJzPXsnTWV0YWRhdGEtRmxhdm9yJzogJ0dvb2dsZSd9KQogICAgdG9rZW5fZGF0YSA9IGpzb24ubG9hZHModXJsbGliMi51cmxvcGVuKHJlcSkucmVhZCgpKQogICAgc2VsZi5hY2Nlc3NfdG9rZW4gPSB0b2tlbl9kYXRhWydhY2Nlc3NfdG9rZW4nXQogICAgc2VsZi50b2tlbl9leHBpcnkgPSAocmVmcmVzaF90aW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPXRva2VuX2RhdGFbJ2V4cGlyZXNfaW4nXSkpCgoKZGVmIGdldF9zZXJ2aWNlX2NyZWRlbnRpYWxzKCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBHZXQgY3JlZGVudGlhbHMgdG8gYWNjZXNzIEdvb2dsZSBzZXJ2aWNlcy4iIiIKICB1c2VyX2FnZW50ID0gJ2JlYW0tcHl0aG9uLXNkay8xLjAnCiAgaWYgaXNfcnVubmluZ19pbl9nY2U6CiAgICAjIFdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhcyBhIEdDRSB0YXNrcnVubmVyIHdvcmtlci4KICAgICMKICAgICMgVE9ETyhjY3kpOiBJdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpZiB0aGVzZSBjcmVkZW50aWFscyBhcmUgdGhyZWFkLXNhZmUuCiAgICAjIElmIHNvLCB3ZSBjYW4gY2FjaGUgdGhlc2UgY3JlZGVudGlhbHMgdG8gc2F2ZSB0aGUgb3ZlcmhlYWQgb2YgY3JlYXRpbmcKICAgICMgdGhlbSBhZ2Fpbi4KICAgIHJldHVybiBfR0NFTWV0YWRhdGFDcmVkZW50aWFscyh1c2VyX2FnZW50PXVzZXJfYWdlbnQpCiAgZWxzZToKICAgIGNsaWVudF9zY29wZXMgPSBbCiAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvYmlncXVlcnknLAogICAgICAgICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2Nsb3VkLXBsYXRmb3JtJywKICAgICAgICAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9kZXZzdG9yYWdlLmZ1bGxfY29udHJvbCcsCiAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvdXNlcmluZm8uZW1haWwnLAogICAgICAgICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RhdGFzdG9yZScKICAgIF0KCiAgICB0cnk6CiAgICAgIGNyZWRlbnRpYWxzID0gR29vZ2xlQ3JlZGVudGlhbHMuZ2V0X2FwcGxpY2F0aW9uX2RlZmF1bHQoKQogICAgICBjcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmNyZWF0ZV9zY29wZWQoY2xpZW50X3Njb3BlcykKICAgICAgbG9nZ2luZy5kZWJ1ZygnQ29ubmVjdGluZyB1c2luZyBHb29nbGUgQXBwbGljYXRpb24gRGVmYXVsdCAnCiAgICAgICAgICAgICAgICAgICAgJ0NyZWRlbnRpYWxzLicpCiAgICAgIHJldHVybiBjcmVkZW50aWFscwogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgZGVmYXVsdCBjcmVkZW50aWFscyB0byB1c2U6ICVzXG4nCiAgICAgICAgICAnQ29ubmVjdGluZyBhbm9ueW1vdXNseS4nLCBlKQogICAgICByZXR1cm4gTm9uZQp9cfAoWBcAAABfR0NFTWV0YWRhdGFDcmVkZW50aWFsc1gFAAAAY2xhc3NLPUthh1gXAAAAZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHNYAwAAAGRlZktjS4OHWCAAAABfR0NFTWV0YWRhdGFDcmVkZW50aWFscy5fX2luaXRfX1gDAAAAZGVmS0JLU4dYFwAAAEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uWAUAAABjbGFzc0s5SzuHWBIAAABzZXRfcnVubmluZ19pbl9nY2VYAwAAAGRlZksnSzeHWCAAAABfR0NFTWV0YWRhdGFDcmVkZW50aWFscy5fcmVmcmVzaFgDAAAAZGVmS1RLYYd1fXHxKFgSAAAAc2V0X3J1bm5pbmdfaW5fZ2NlWB0AAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aHHyWBcAAABnZXRfc2VydmljZV9jcmVkZW50aWFsc2jyWBcAAABBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbnHzaPJ1aIpYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRocfSFgXH1fXH2YnRx91UcYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZShYkCgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKQ29uY2F0IFNvdXJjZSwgd2hpY2ggcmVhZHMgdGhlIHVuaW9uIG9mIHNldmVyYWwgb3RoZXIgc291cmNlcy4KIiIiCgppbXBvcnQgYmlzZWN0CmltcG9ydCB0aHJlYWRpbmcKCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQoKCmNsYXNzIENvbmNhdFNvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIGBgQm91bmRlZFNvdXJjZWBgIHRoYXQgY2FuIGdyb3VwIGEgc2V0IG9mIGBgQm91bmRlZFNvdXJjZXNgYC4KCiAgUHJpbWFyaWx5IGZvciBpbnRlcm5hbCB1c2UsIHVzZSB0aGUgYGBhcGFjaGVfYmVhbS5GbGF0dGVuYGAgdHJhbnNmb3JtCiAgdG8gY3JlYXRlIHRoZSB1bmlvbiBvZiBzZXZlcmFsIHJlYWRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlcyk6CiAgICBzZWxmLl9zb3VyY2VfYnVuZGxlcyA9IFtzb3VyY2UgaWYgaXNpbnN0YW5jZShzb3VyY2UsIGlvYmFzZS5Tb3VyY2VCdW5kbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlvYmFzZS5Tb3VyY2VCdW5kbGUoTm9uZSwgc291cmNlLCBOb25lLCBOb25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNvdXJjZSBpbiBzb3VyY2VzXQoKICBAcHJvcGVydHkKICBkZWYgc291cmNlcyhzZWxmKToKICAgIHJldHVybiBbcy5zb3VyY2UgZm9yIHMgaW4gc2VsZi5fc291cmNlX2J1bmRsZXNdCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgcmV0dXJuIHN1bShzLnNvdXJjZS5lc3RpbWF0ZV9zaXplKCkgZm9yIHMgaW4gc2VsZi5fc291cmNlX2J1bmRsZXMpCgogIGRlZiBzcGxpdCgKICAgICAgc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZT1Ob25lLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgaWYgc3RhcnRfcG9zaXRpb24gb3Igc3RvcF9wb3NpdGlvbjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNdWx0aS1sZXZlbCBpbml0aWFsIHNwbGl0dGluZyBpcyBub3Qgc3VwcG9ydGVkLiBFeHBlY3RlZCBzdGFydCBhbmQgJwogICAgICAgICAgJ3N0b3AgcG9zaXRpb25zIHRvIGJlIE5vbmUuIFJlY2VpdmVkICVyIGFuZCAlciByZXNwZWN0aXZlbHkuJyAlCiAgICAgICAgICAoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKQoKICAgIGZvciBzb3VyY2UgaW4gc2VsZi5fc291cmNlX2J1bmRsZXM6CiAgICAgICMgV2UgYXNzdW1lIGFsbCBzdWItc291cmNlcyB0byBwcm9kdWNlIGJ1bmRsZXMgdGhhdCBzcGVjaWZ5IHdlaWdodCB1c2luZwogICAgICAjIHRoZSBzYW1lIHVuaXQuIEZvciBleGFtcGxlLCBhbGwgc3ViLXNvdXJjZXMgbWF5IHNwZWNpZnkgdGhlIHNpemUgaW4KICAgICAgIyBieXRlcyBhcyB0aGVpciB3ZWlnaHQuCiAgICAgIGZvciBidW5kbGUgaW4gc291cmNlLnNvdXJjZS5zcGxpdCgKICAgICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemUsIHNvdXJjZS5zdGFydF9wb3NpdGlvbiwgc291cmNlLnN0b3BfcG9zaXRpb24pOgogICAgICAgIHlpZWxkIGJ1bmRsZQoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gKDAsIE5vbmUpCiAgICBpZiBzdG9wX3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0b3BfcG9zaXRpb24gPSAobGVuKHNlbGYuX3NvdXJjZV9idW5kbGVzKSwgTm9uZSkKICAgIHJldHVybiBDb25jYXRSYW5nZVRyYWNrZXIoCiAgICAgICAgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24sIHNlbGYuX3NvdXJjZV9idW5kbGVzKQoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgIHN0YXJ0X3NvdXJjZSwgXyA9IHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQogICAgc3RvcF9zb3VyY2UsIHN0b3BfcG9zID0gcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgIGlmIHN0b3BfcG9zIGlzIG5vdCBOb25lOgogICAgICBzdG9wX3NvdXJjZSArPSAxCiAgICBmb3Igc291cmNlX2l4IGluIHJhbmdlKHN0YXJ0X3NvdXJjZSwgc3RvcF9zb3VyY2UpOgogICAgICBpZiBub3QgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0oKHNvdXJjZV9peCwgTm9uZSkpOgogICAgICAgIGJyZWFrCiAgICAgIGZvciByZWNvcmQgaW4gc2VsZi5fc291cmNlX2J1bmRsZXNbc291cmNlX2l4XS5zb3VyY2UucmVhZCgKICAgICAgICAgIHJhbmdlX3RyYWNrZXIuc3ViX3JhbmdlX3RyYWNrZXIoc291cmNlX2l4KSk6CiAgICAgICAgeWllbGQgcmVjb3JkCgogIGRlZiBkZWZhdWx0X291dHB1dF9jb2RlcihzZWxmKToKICAgIGlmIHNlbGYuX3NvdXJjZV9idW5kbGVzOgogICAgICAjIEdldHRpbmcgY29kZXIgZnJvbSB0aGUgZmlyc3Qgc3ViLXNvdXJjZXMuIFRoaXMgYXNzdW1lcyBhbGwgc3ViLXNvdXJjZXMKICAgICAgIyB0byBwcm9kdWNlIHRoZSBzYW1lIGNvZGVyLgogICAgICByZXR1cm4gc2VsZi5fc291cmNlX2J1bmRsZXNbMF0uc291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKICAgIGVsc2U6CiAgICAgIHJldHVybiBzdXBlcihDb25jYXRTb3VyY2UsIHNlbGYpLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKCgpjbGFzcyBDb25jYXRSYW5nZVRyYWNrZXIoaW9iYXNlLlJhbmdlVHJhY2tlcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSYW5nZSB0cmFja2VyIGZvciBDb25jYXRTb3VyY2UiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBlbmQsIHNvdXJjZV9idW5kbGVzKToKICAgICIiIkluaXRpYWxpemVzIGBgQ29uY2F0UmFuZ2VUcmFja2VyYGAKCiAgICBBcmdzOgogICAgICBzdGFydDogc3RhcnQgcG9zaXRpb24sIGEgdHVwbGUgb2YgKHNvdXJjZV9pbmRleCwgc291cmNlX3Bvc2l0aW9uKQogICAgICBlbmQ6IGVuZCBwb3NpdGlvbiwgYSB0dXBsZSBvZiAoc291cmNlX2luZGV4LCBzb3VyY2VfcG9zaXRpb24pCiAgICAgIHNvdXJjZV9idW5kbGVzOiB0aGUgbGlzdCBvZiBzb3VyY2UgYnVuZGxlcyBpbiB0aGUgQ29uY2F0U291cmNlCiAgICAiIiIKICAgIHN1cGVyKENvbmNhdFJhbmdlVHJhY2tlciwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fc3RhcnQgPSBzdGFydAogICAgc2VsZi5fZW5kID0gZW5kCiAgICBzZWxmLl9zb3VyY2VfYnVuZGxlcyA9IHNvdXJjZV9idW5kbGVzCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKICAgICMgTGF6aWx5LWluaXRpYWxpemVkIGxpc3Qgb2YgUmFuZ2VUcmFja2VycyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggc291cmNlLgogICAgc2VsZi5fcmFuZ2VfdHJhY2tlcnMgPSBbTm9uZV0gKiBsZW4oc291cmNlX2J1bmRsZXMpCiAgICAjIFRoZSBjdXJyZW50bHktYmVpbmctaXRlcmF0ZWQtb3ZlciAoYW5kIGxhdGVzdCBjbGFpbWVkKSBzb3VyY2UuCiAgICBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peCA9IHNlbGYuX3N0YXJ0WzBdCiAgICAjIE5vdyBjb21wdXRlIGN1bXVsYXRpdmUgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgc291cmNlcyBmb3IgY29udmVydGluZwogICAgIyBiZXR3ZWVuIGdsb2JhbCBmcmFjdGlvbnMgYW5kIGZyYWN0aW9ucyB3aXRoaW4gc3BlY2lmaWMgc291cmNlcy4KICAgICMgVE9ETyhyb2JlcnR3Yik6IEltcGxlbWVudCBmcmFjdGlvbi1hdC1wb3NpdGlvbiB0byBwcm9wZXJseSBzY2FsZQogICAgIyBwYXJ0aWFsIHN0YXJ0IGFuZCBlbmQgc291cmNlcy4KICAgICMgTm90ZSwgaG93ZXZlciwgdGhhdCBpbiBwcmFjdGljZSBzcGxpdHMgYXJlIHR5cGljYWxseSBvbiBzb3VyY2UKICAgICMgYm91bmRhcmllcyBhbnl3YXlzLgogICAgbGFzdCA9IGVuZFswXSBpZiBlbmRbMV0gaXMgTm9uZSBlbHNlIGVuZFswXSArIDEKICAgIHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0cyA9ICgKICAgICAgICBbMF0gKiBzdGFydFswXQogICAgICAgICsgc2VsZi5fY29tcHV0ZV9jdW11bGF0aXZlX3dlaWdodHMoc291cmNlX2J1bmRsZXNbc3RhcnRbMF06bGFzdF0pCiAgICAgICAgKyBbMV0gKiAobGVuKHNvdXJjZV9idW5kbGVzKSAtIGxhc3QgLSBzdGFydFswXSkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2NvbXB1dGVfY3VtdWxhdGl2ZV93ZWlnaHRzKHNvdXJjZV9idW5kbGVzKToKICAgICMgVHdvIGFkamFjZW50IHNvdXJjZXMgbXVzdCBkaWZmZXIgc28gdGhhdCB0aGV5IGNhbiBiZSB1bmlxdWVseQogICAgIyBpZGVudGlmaWVkIGJ5IGEgc2luZ2xlIGdsb2JhbCBmcmFjdGlvbi4gIExldCBtaW5fZGlmZiBiZSB0aGUKICAgICMgc21hbGxlc3QgYWxsb3dhYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiBzb3VyY2VzLgogICAgbWluX2RpZmYgPSAxZS01CiAgICAjIEZvciB0aGUgY29tcHV0YXRpb24gYmVsb3csIHdlIG5lZWQgd2VpZ2h0cyBmb3IgYWxsIHNvdXJjZXMuCiAgICAjIFN1YnN0aXR1dGUgYXZlcmFnZSB3ZWlnaHRzIGZvciB0aG9zZSB3aG9zZSB3ZWlnaHRzIGFyZQogICAgIyB1bnNwZWNpZmllZCAob3IgMS4wIGZvciBldmVyeXRoaW5nIGlmIG5vbmUgYXJlIGtub3duKS4KICAgIGtub3duID0gW3Mud2VpZ2h0IGZvciBzIGluIHNvdXJjZV9idW5kbGVzIGlmIHMud2VpZ2h0IGlzIG5vdCBOb25lXQogICAgYXZnID0gc3VtKGtub3duKSAvIGxlbihrbm93bikgaWYga25vd24gZWxzZSAxLjAKICAgIHdlaWdodHMgPSBbcy53ZWlnaHQgb3IgYXZnIGZvciBzIGluIHNvdXJjZV9idW5kbGVzXQoKICAgICMgTm93IGNvbXB1dGUgcnVubmluZyB0b3RhbHMgb2YgdGhlIHBlcmNlbnQgZG9uZSB1cG9uIHJlYWNoaW5nCiAgICAjIGVhY2ggc291cmNlLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zLgogICAgIyBFLmcuIGlmIHRoZSB3ZWlnaHRzIHdlcmUgWzEwMCwgMjAsIDNdIHdlIHdvdWxkIHByb2R1Y2UKICAgICMgWzAuMCwgMTAwLzEyMywgMTIwLzEyMywgMS4wXQogICAgdG90YWwgPSBmbG9hdChzdW0od2VpZ2h0cykpCiAgICBydW5uaW5nX3RvdGFsID0gWzBdCiAgICBmb3IgdyBpbiB3ZWlnaHRzOgogICAgICBydW5uaW5nX3RvdGFsLmFwcGVuZCgKICAgICAgICAgIG1heChtaW5fZGlmZiwgbWluKDEsIHJ1bm5pbmdfdG90YWxbLTFdICsgdyAvIHRvdGFsKSkpCiAgICBydW5uaW5nX3RvdGFsWy0xXSA9IDEgICMgSW4gY2FzZSBvZiByb3VuZGluZyBlcnJvci4KICAgICMgVGhlcmUgYXJlIGlzc3VlcyBpZiwgZHVlIHRvIHJvdWRpbmcgZXJyb3Igb3IgZ3JlYXRseSBkaWZmZXJpbmcgc2l6ZXMsCiAgICAjIHR3byBhZGphY2VudCBydW5uaW5nIHRvdGFsIHdlaWdodHMgYXJlIGVxdWFsLiBOb3JtYWxpemUgdGhpcyB0aGluZ3Mgc28KICAgICMgdGhhdCB0aGlzIG5ldmVyIGhhcHBlbnMuCiAgICBmb3IgayBpbiByYW5nZSgxLCBsZW4ocnVubmluZ190b3RhbCkpOgogICAgICBpZiBydW5uaW5nX3RvdGFsW2tdID09IHJ1bm5pbmdfdG90YWxbayAtIDFdOgogICAgICAgIGZvciBqIGluIHJhbmdlKGspOgogICAgICAgICAgcnVubmluZ190b3RhbFtqXSAqPSAoMSAtIG1pbl9kaWZmKQogICAgcmV0dXJuIHJ1bm5pbmdfdG90YWwKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXJ0CgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2VuZAoKICBkZWYgdHJ5X2NsYWltKHNlbGYsIHBvcyk6CiAgICBzb3VyY2VfaXgsIHNvdXJjZV9wb3MgPSBwb3MKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc291cmNlX2l4ID4gc2VsZi5fZW5kWzBdOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbGlmIHNvdXJjZV9peCA9PSBzZWxmLl9lbmRbMF0gYW5kIHNlbGYuX2VuZFsxXSBpcyBOb25lOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbHNlOgogICAgICAgIGFzc2VydCBzb3VyY2VfaXggPj0gc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXgKICAgICAgICBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peCA9IHNvdXJjZV9peAogICAgICAgIGlmIHNvdXJjZV9wb3MgaXMgTm9uZToKICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgIHJldHVybiBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNvdXJjZV9peCkudHJ5X2NsYWltKHNvdXJjZV9wb3MpCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgcG9zKToKICAgIHNvdXJjZV9peCwgc291cmNlX3BvcyA9IHBvcwogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzb3VyY2VfaXggPCBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peDoKICAgICAgICAjIEFscmVhZHkgY2xhaW1lZC4KICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbGlmIHNvdXJjZV9peCA+IHNlbGYuX2VuZFswXToKICAgICAgICAjIEFmdGVyIGVuZC4KICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbGlmIHNvdXJjZV9peCA9PSBzZWxmLl9lbmRbMF0gYW5kIHNlbGYuX2VuZFsxXSBpcyBOb25lOgogICAgICAgICMgQXQvYWZ0ZXIgZW5kLgogICAgICAgIHJldHVybiBOb25lCiAgICAgIGVsc2U6CiAgICAgICAgaWYgc291cmNlX2l4ID4gc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXg6CiAgICAgICAgICAjIFByZWZlciB0byBzcGxpdCBvbiBldmVuIGJvdW5kYXJ5LgogICAgICAgICAgc3BsaXRfcG9zID0gTm9uZQogICAgICAgICAgcmF0aW8gPSBzZWxmLl9jdW11bGF0aXZlX3dlaWdodHNbc291cmNlX2l4XQogICAgICAgIGVsc2U6CiAgICAgICAgICAjIFNwbGl0IHRoZSBjdXJyZW50IHN1YnNvdXJjZS4KICAgICAgICAgIHNwbGl0ID0gc2VsZi5zdWJfcmFuZ2VfdHJhY2tlcihzb3VyY2VfaXgpLnRyeV9zcGxpdCgKICAgICAgICAgICAgICBzb3VyY2VfcG9zKQogICAgICAgICAgaWYgbm90IHNwbGl0OgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgc3BsaXRfcG9zLCBmcmFjID0gc3BsaXQKICAgICAgICAgIHJhdGlvID0gc2VsZi5sb2NhbF90b19nbG9iYWwoc291cmNlX2l4LCBmcmFjKQoKICAgICAgICBzZWxmLl9lbmQgPSBzb3VyY2VfaXgsIHNwbGl0X3BvcwogICAgICAgIHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0cyA9IFttaW4odyAvIHJhdGlvLCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl9jdW11bGF0aXZlX3dlaWdodHNdCiAgICAgICAgcmV0dXJuIChzb3VyY2VfaXgsIHNwbGl0X3BvcyksIHJhdGlvCgogIGRlZiBzZXRfY3VycmVudF9wb3NpdGlvbihzZWxmLCBwb3MpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHN1Yi10cmFja2VycycpCgogIGRlZiBwb3NpdGlvbl9hdF9mcmFjdGlvbihzZWxmLCBmcmFjdGlvbik6CiAgICBzb3VyY2VfaXgsIHNvdXJjZV9mcmFjID0gc2VsZi5nbG9iYWxfdG9fbG9jYWwoZnJhY3Rpb24pCiAgICBsYXN0ID0gc2VsZi5fZW5kWzBdIGlmIHNlbGYuX2VuZFsxXSBpcyBOb25lIGVsc2Ugc2VsZi5fZW5kWzBdICsgMQogICAgaWYgc291cmNlX2l4ID09IGxhc3Q6CiAgICAgIHJldHVybiAoc291cmNlX2l4LCBOb25lKQogICAgZWxzZToKICAgICAgcmV0dXJuIChzb3VyY2VfaXgsCiAgICAgICAgICAgICAgc2VsZi5zdWJfcmFuZ2VfdHJhY2tlcihzb3VyY2VfaXgpLnBvc2l0aW9uX2F0X2ZyYWN0aW9uKAogICAgICAgICAgICAgICAgICBzb3VyY2VfZnJhYykpCgogIGRlZiBmcmFjdGlvbl9jb25zdW1lZChzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYubG9jYWxfdG9fZ2xvYmFsKAogICAgICAgICAgc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXgsCiAgICAgICAgICBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNlbGYuX2NsYWltZWRfc291cmNlX2l4KQogICAgICAgICAgLmZyYWN0aW9uX2NvbnN1bWVkKCkpCgogIGRlZiBsb2NhbF90b19nbG9iYWwoc2VsZiwgc291cmNlX2l4LCBzb3VyY2VfZnJhYyk6CiAgICBjdyA9IHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0cwogICAgIyBUaGUgZ2xvYmFsIGZyYWN0aW9uIGlzIHRoZSBmcmFjdGlvbiB0byBzb3VyY2VfaXggcGx1cyBzb21lIHBvcnRpb24gb2YKICAgICMgdGhlIHdheSB0b3dhcmRzIHRoZSBuZXh0IHNvdXJjZS4KICAgIHJldHVybiBjd1tzb3VyY2VfaXhdICsgc291cmNlX2ZyYWMgKiAoY3dbc291cmNlX2l4ICsgMV0gLSBjd1tzb3VyY2VfaXhdKQoKICBkZWYgZ2xvYmFsX3RvX2xvY2FsKHNlbGYsIGZyYWMpOgogICAgaWYgZnJhYyA9PSAxOgogICAgICBsYXN0ID0gc2VsZi5fZW5kWzBdIGlmIHNlbGYuX2VuZFsxXSBpcyBOb25lIGVsc2Ugc2VsZi5fZW5kWzBdICsgMQogICAgICByZXR1cm4gKGxhc3QsIE5vbmUpCiAgICBlbHNlOgogICAgICBjdyA9IHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0cwogICAgICAjIEZpbmQgdGhlIGxhc3Qgc291cmNlIHRoYXQgc3RhcnRzIGF0IG9yIGJlZm9yZSBmcmFjLgogICAgICBzb3VyY2VfaXggPSBiaXNlY3QuYmlzZWN0KGN3LCBmcmFjKSAtIDEKICAgICAgIyBSZXR1cm4gdGhpcyBzb3VyY2UsIGNvbnZlcnRpbmcgd2hhdCdzIGxlZnQgb2YgZnJhYyBhZnRlciBzdGFydGluZwogICAgICAjIHRoaXMgc291cmNlIGludG8gYSB2YWx1ZSBpbiBbMC4wLCAxLjApIHJlcHJlc2VudGluZyBob3cgZmFyIHdlIGFyZQogICAgICAjIHRvd2FyZHMgdGhlIG5leHQgc291cmNlLgogICAgICByZXR1cm4gKHNvdXJjZV9peCwKICAgICAgICAgICAgICAoZnJhYyAtIGN3W3NvdXJjZV9peF0pIC8gKGN3W3NvdXJjZV9peCArIDFdIC0gY3dbc291cmNlX2l4XSkpCgogIGRlZiBzdWJfcmFuZ2VfdHJhY2tlcihzZWxmLCBzb3VyY2VfaXgpOgogICAgYXNzZXJ0IHNlbGYuX3N0YXJ0WzBdIDw9IHNvdXJjZV9peCA8PSBzZWxmLl9lbmRbMF0KICAgIGlmIHNlbGYuX3JhbmdlX3RyYWNrZXJzW3NvdXJjZV9peF0gaXMgTm9uZToKICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgIGlmIHNlbGYuX3JhbmdlX3RyYWNrZXJzW3NvdXJjZV9peF0gaXMgTm9uZToKICAgICAgICAgIHNvdXJjZSA9IHNlbGYuX3NvdXJjZV9idW5kbGVzW3NvdXJjZV9peF0KICAgICAgICAgIGlmIHNvdXJjZV9peCA9PSBzZWxmLl9zdGFydFswXSBhbmQgc2VsZi5fc3RhcnRbMV0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5fc3RhcnRbMV0KICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHN0YXJ0ID0gc291cmNlLnN0YXJ0X3Bvc2l0aW9uCiAgICAgICAgICBpZiBzb3VyY2VfaXggPT0gc2VsZi5fZW5kWzBdIGFuZCBzZWxmLl9lbmRbMV0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHN0b3AgPSBzZWxmLl9lbmRbMV0KICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHN0b3AgPSBzb3VyY2Uuc3RvcF9wb3NpdGlvbgogICAgICAgICAgc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XSA9IHNvdXJjZS5zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoCiAgICAgICAgICAgICAgc3RhcnQsIHN0b3ApCiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XQp9cfgoWBsAAABDb25jYXRSYW5nZVRyYWNrZXIuX19pbml0X19YAwAAAGRlZktkS4CHWCAAAABDb25jYXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvblgDAAAAZGVmS6RLpodYIQAAAENvbmNhdFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvblgDAAAAZGVmS6FLo4dYHgAAAENvbmNhdFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmS0JLSYdYFAAAAENvbmNhdFNvdXJjZS5zb3VyY2VzWAMAAABkZWZLK0suh1ghAAAAQ29uY2F0U291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyWAMAAABkZWZLVktdh1guAAAAQ29uY2F0UmFuZ2VUcmFja2VyLl9jb21wdXRlX2N1bXVsYXRpdmVfd2VpZ2h0c1gDAAAAZGVmS4FLoIdYIgAAAENvbmNhdFJhbmdlVHJhY2tlci5sb2NhbF90b19nbG9iYWxYAwAAAGRlZkvpS+6HWBUAAABDb25jYXRTb3VyY2UuX19pbml0X19YAwAAAGRlZksmSyqHWBwAAABDb25jYXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0WAMAAABkZWZLtkvUh1gkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnN1Yl9yYW5nZV90cmFja2VyWAMAAABkZWZL/U0OAYdYJwAAAENvbmNhdFJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvblgDAAAAZGVmS9hL4YdYHAAAAENvbmNhdFJhbmdlVHJhY2tlci50cnlfY2xhaW1YAwAAAGRlZkunS7WHWCIAAABDb25jYXRSYW5nZVRyYWNrZXIuZ2xvYmFsX3RvX2xvY2FsWAMAAABkZWZL70v8h1gSAAAAQ29uY2F0U291cmNlLnNwbGl0WAMAAABkZWZLMktBh1gnAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uWAMAAABkZWZL1UvXh1gkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkWAMAAABkZWZL4kvoh1gSAAAAQ29uY2F0UmFuZ2VUcmFja2VyWAUAAABjbGFzc0tfTQ4Bh1gaAAAAQ29uY2F0U291cmNlLmVzdGltYXRlX3NpemVYAwAAAGRlZksvSzGHWAwAAABDb25jYXRTb3VyY2VYBQAAAGNsYXNzSx1LXYdYEQAAAENvbmNhdFNvdXJjZS5yZWFkWAMAAABkZWZLSktVh3V9cfkoWCIAAABDb25jYXRSYW5nZVRyYWNrZXIuZ2xvYmFsX3RvX2xvY2FsWBwAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlcfpYIQAAAENvbmNhdFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmj6WB4AAABDb25jYXRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJo+lgMAAAAQ29uY2F0U291cmNlaPpYGgAAAENvbmNhdFNvdXJjZS5lc3RpbWF0ZV9zaXplaPpYIgAAAENvbmNhdFJhbmdlVHJhY2tlci5sb2NhbF90b19nbG9iYWxo+lgkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnN1Yl9yYW5nZV90cmFja2VyaPpYHAAAAENvbmNhdFJhbmdlVHJhY2tlci50cnlfc3BsaXRo+lgnAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uaPpYHAAAAENvbmNhdFJhbmdlVHJhY2tlci50cnlfY2xhaW1o+lgSAAAAQ29uY2F0U291cmNlLnNwbGl0aPpYJwAAAENvbmNhdFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbmj6WCQAAABDb25jYXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRo+lgSAAAAQ29uY2F0UmFuZ2VUcmFja2VyaPpYIQAAAENvbmNhdFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2Rlcmj6WCAAAABDb25jYXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmj6WBEAAABDb25jYXRTb3VyY2UucmVhZGj6dWiKWBwAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlcfuFgXH8fXH9YnRVLmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucXVlcnlfc3BsaXR0ZXJx/ihYNCUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiSW1wbGVtZW50cyBhIENsb3VkIERhdGFzdG9yZSBxdWVyeSBzcGxpdHRlci4iIiIKCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MSBpbXBvcnQgaGVscGVyCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgZGF0YXN0b3JlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZGF0YXN0b3JlX3BiMgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgcXVlcnlfcGIyCiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxLnF1ZXJ5X3BiMiBpbXBvcnQgUHJvcGVydHlGaWx0ZXIKICBmcm9tIGdvb2dsZS5jbG91ZC5wcm90by5kYXRhc3RvcmUudjEucXVlcnlfcGIyIGltcG9ydCBDb21wb3NpdGVGaWx0ZXIKICBmcm9tIGdvb2dsZWRhdGFzdG9yZSBpbXBvcnQgaGVscGVyIGFzIGRhdGFzdG9yZV9oZWxwZXIKICBVTlNVUFBPUlRFRF9PUEVSQVRPUlMgPSBbUHJvcGVydHlGaWx0ZXIuTEVTU19USEFOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUZpbHRlci5MRVNTX1RIQU5fT1JfRVFVQUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RmlsdGVyLkdSRUFURVJfVEhBTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlGaWx0ZXIuR1JFQVRFUl9USEFOX09SX0VRVUFMXQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgVU5TVVBQT1JURURfT1BFUkFUT1JTID0gTm9uZQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKX19hbGxfXyA9IFsKICAgICdnZXRfc3BsaXRzJywKXQoKU0NBVFRFUl9QUk9QRVJUWV9OQU1FID0gJ19fc2NhdHRlcl9fJwpLRVlfUFJPUEVSVFlfTkFNRSA9ICdfX2tleV9fJwojIFRoZSBudW1iZXIgb2Yga2V5cyB0byBzYW1wbGUgZm9yIGVhY2ggc3BsaXQuCktFWVNfUEVSX1NQTElUID0gMzIKCgpkZWYgZ2V0X3NwbGl0cyhkYXRhc3RvcmUsIHF1ZXJ5LCBudW1fc3BsaXRzLCBwYXJ0aXRpb249Tm9uZSk6CiAgIiIiUmV0dXJucyBhIGxpc3Qgb2Ygc2hhcmRlZCBxdWVyaWVzIGZvciB0aGUgZ2l2ZW4gQ2xvdWQgRGF0YXN0b3JlIHF1ZXJ5LgoKICBUaGlzIHdpbGwgY3JlYXRlIHVwIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzcGxpdHMsIGhvd2V2ZXIgaXQgbWF5IHJldHVybgogIGxlc3Mgc3BsaXRzIGlmIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzcGxpdHMgaXMgdW5hdmFpbGFibGUuIFRoaXMgd2lsbCBoYXBwZW4KICBpZiB0aGUgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBEYXRhc3RvcmUgaXMgbGVzcwogIHRoYW4gdGhlIGRlc2lyZWQgbnVtYmVyLCB3aGljaCB3aWxsIG9jY3VyIGlmIHRoZSBudW1iZXIgb2YgcmVzdWx0cyBmb3IgdGhlCiAgcXVlcnkgaXMgdG9vIHNtYWxsLgoKICBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBRdWVyeVNwbGl0dGVyIHVzZXMgdGhlIF9fc2NhdHRlcl9fIHByb3BlcnR5IHRvCiAgZ2F0aGVyIHJhbmRvbSBzcGxpdCBwb2ludHMgZm9yIGEgcXVlcnkuCgogIE5vdGU6IFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSBqYXZhIHF1ZXJ5IHNwbGl0dGVyIGluCiAgaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vZ29vZ2xlLWNsb3VkLWRhdGFzdG9yZS9ibG9iL21hc3Rlci9qYXZhL2RhdGFzdG9yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGF0YXN0b3JlL3YxL2NsaWVudC9RdWVyeVNwbGl0dGVySW1wbC5qYXZhCgogIEFyZ3M6CiAgICBkYXRhc3RvcmU6IHRoZSBkYXRhc3RvcmUgY2xpZW50LgogICAgcXVlcnk6IHRoZSBxdWVyeSB0byBzcGxpdC4KICAgIG51bV9zcGxpdHM6IHRoZSBkZXNpcmVkIG51bWJlciBvZiBzcGxpdHMuCiAgICBwYXJ0aXRpb246IHRoZSBwYXJ0aXRpb24gdGhlIHF1ZXJ5IGlzIHJ1bm5pbmcgaW4uCgogIFJldHVybnM6CiAgICBBIGxpc3Qgb2Ygc3BsaXQgcXVlcmllcywgb2YgYSBtYXggbGVuZ3RoIG9mIGBudW1fc3BsaXRzYAogICIiIgoKICAjIFZhbGlkYXRlIHRoYXQgdGhlIG51bWJlciBvZiBzcGxpdHMgaXMgbm90IG91dCBvZiBib3VuZHMuCiAgaWYgbnVtX3NwbGl0cyA8IDE6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgbnVtYmVyIG9mIHNwbGl0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLicpCgogIGlmIG51bV9zcGxpdHMgPT0gMToKICAgIHJldHVybiBbcXVlcnldCgogIF92YWxpZGF0ZV9xdWVyeShxdWVyeSkKCiAgc3BsaXRzID0gW10KICBzY2F0dGVyX2tleXMgPSBfZ2V0X3NjYXR0ZXJfa2V5cyhkYXRhc3RvcmUsIHF1ZXJ5LCBudW1fc3BsaXRzLCBwYXJ0aXRpb24pCiAgbGFzdF9rZXkgPSBOb25lCiAgZm9yIG5leHRfa2V5IGluIF9nZXRfc3BsaXRfa2V5KHNjYXR0ZXJfa2V5cywgbnVtX3NwbGl0cyk6CiAgICBzcGxpdHMuYXBwZW5kKF9jcmVhdGVfc3BsaXQobGFzdF9rZXksIG5leHRfa2V5LCBxdWVyeSkpCiAgICBsYXN0X2tleSA9IG5leHRfa2V5CgogIHNwbGl0cy5hcHBlbmQoX2NyZWF0ZV9zcGxpdChsYXN0X2tleSwgTm9uZSwgcXVlcnkpKQogIHJldHVybiBzcGxpdHMKCgpkZWYgX3ZhbGlkYXRlX3F1ZXJ5KHF1ZXJ5KToKICAiIiIgVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgY2FuIGJlIHByb3Blcmx5IHNjYXR0ZXJlZC4iIiIKCiAgaWYgbGVuKHF1ZXJ5LmtpbmQpICE9IDE6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdRdWVyeSBtdXN0IGhhdmUgZXhhY3RseSBvbmUga2luZC4nKQoKICBpZiBxdWVyeS5vcmRlcjoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1F1ZXJ5IGNhbm5vdCBoYXZlIGFueSBzb3J0IG9yZGVycy4nKQoKICBpZiBxdWVyeS5IYXNGaWVsZCgnbGltaXQnKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1F1ZXJ5IGNhbm5vdCBoYXZlIGEgbGltaXQgc2V0LicpCgogIGlmIHF1ZXJ5Lm9mZnNldCA+IDA6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdRdWVyeSBjYW5ub3QgaGF2ZSBhbiBvZmZzZXQgc2V0LicpCgogIF92YWxpZGF0ZV9maWx0ZXIocXVlcnkuZmlsdGVyKQoKCmRlZiBfdmFsaWRhdGVfZmlsdGVyKGZpbHRlcik6CiAgIiIiVmFsaWRhdGVzIHRoYXQgd2Ugb25seSBoYXZlIGFsbG93YWJsZSBmaWx0ZXJzLgoKICBOb3RlIHRoYXQgZXF1YWxpdHkgYW5kIGFuY2VzdG9yIGZpbHRlcnMgYXJlIGFsbG93ZWQsIGhvd2V2ZXIgdGhleSBtYXkgcmVzdWx0CiAgaW4gaW5lZmZpY2llbnQgc2hhcmRpbmcuCiAgIiIiCgogIGlmIGZpbHRlci5IYXNGaWVsZCgnY29tcG9zaXRlX2ZpbHRlcicpOgogICAgZm9yIHN1Yl9maWx0ZXIgaW4gZmlsdGVyLmNvbXBvc2l0ZV9maWx0ZXIuZmlsdGVyczoKICAgICAgX3ZhbGlkYXRlX2ZpbHRlcihzdWJfZmlsdGVyKQogIGVsaWYgZmlsdGVyLkhhc0ZpZWxkKCdwcm9wZXJ0eV9maWx0ZXInKToKICAgIGlmIGZpbHRlci5wcm9wZXJ0eV9maWx0ZXIub3AgaW4gVU5TVVBQT1JURURfT1BFUkFUT1JTOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdRdWVyeSBjYW5ub3QgaGF2ZSBhbnkgaW5lcXVhbGl0eSBmaWx0ZXJzLicpCiAgZWxzZToKICAgIHBhc3MKCgpkZWYgX2NyZWF0ZV9zY2F0dGVyX3F1ZXJ5KHF1ZXJ5LCBudW1fc3BsaXRzKToKICAiIiJDcmVhdGVzIGEgc2NhdHRlciBxdWVyeSBmcm9tIHRoZSBnaXZlbiB1c2VyIHF1ZXJ5LiIiIgoKICBzY2F0dGVyX3F1ZXJ5ID0gcXVlcnlfcGIyLlF1ZXJ5KCkKICBmb3Iga2luZCBpbiBxdWVyeS5raW5kOgogICAgc2NhdHRlcl9raW5kID0gc2NhdHRlcl9xdWVyeS5raW5kLmFkZCgpCiAgICBzY2F0dGVyX2tpbmQuQ29weUZyb20oa2luZCkKCiAgIyBhc2NlbmRpbmcgb3JkZXIKICBkYXRhc3RvcmVfaGVscGVyLmFkZF9wcm9wZXJ0eV9vcmRlcnMoc2NhdHRlcl9xdWVyeSwgU0NBVFRFUl9QUk9QRVJUWV9OQU1FKQoKICAjIFRoZXJlIGlzIGEgc3BsaXQgY29udGFpbmluZyBlbnRpdGllcyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggc2NhdHRlciBlbnRpdHk6CiAgIyB8fC0tLSotLS0tLS0qLS0tLS0tKi0tLS0tLSotLS0tLS0qLS0tLS0tKi0tLS0tLSotLS18fCAgKiA9IHNjYXR0ZXIgZW50aXR5CiAgIyBJZiB3ZSByZXByZXNlbnQgZWFjaCBzcGxpdCBhcyBhIHJlZ2lvbiBiZWZvcmUgYSBzY2F0dGVyIGVudGl0eSwgdGhlcmUgaXMgYW4KICAjIGV4dHJhIHJlZ2lvbiBmb2xsb3dpbmcgdGhlIGxhc3Qgc2NhdHRlciBwb2ludC4gVGh1cywgd2UgZG8gbm90IG5lZWQgdGhlCiAgIyBzY2F0dGVyIGVudGl0eSBmb3IgdGhlIGxhc3QgcmVnaW9uLgogIHNjYXR0ZXJfcXVlcnkubGltaXQudmFsdWUgPSAobnVtX3NwbGl0cyAtIDEpICogS0VZU19QRVJfU1BMSVQKICBkYXRhc3RvcmVfaGVscGVyLmFkZF9wcm9qZWN0aW9uKHNjYXR0ZXJfcXVlcnksIEtFWV9QUk9QRVJUWV9OQU1FKQoKICByZXR1cm4gc2NhdHRlcl9xdWVyeQoKCmRlZiBfZ2V0X3NjYXR0ZXJfa2V5cyhkYXRhc3RvcmUsIHF1ZXJ5LCBudW1fc3BsaXRzLCBwYXJ0aXRpb24pOgogICIiIkdldHMgYSBsaXN0IG9mIHNwbGl0IGtleXMgZ2l2ZW4gYSBkZXNpcmVkIG51bWJlciBvZiBzcGxpdHMuCgogIFRoaXMgbGlzdCB3aWxsIGNvbnRhaW4gbXVsdGlwbGUgc3BsaXQga2V5cyBmb3IgZWFjaCBzcGxpdC4gT25seSBhIHNpbmdsZSBzcGxpdAogIGtleSB3aWxsIGJlIGNob3NlbiBhcyB0aGUgc3BsaXQgcG9pbnQsIGhvd2V2ZXIgcHJvdmlkaW5nIG11bHRpcGxlIGtleXMgYWxsb3dzCiAgZm9yIG1vcmUgdW5pZm9ybSBzaGFyZGluZy4KCiAgQXJnczoKICAgIG51bVNwbGl0czogdGhlIG51bWJlciBvZiBkZXNpcmVkIHNwbGl0cy4KICAgIHF1ZXJ5OiB0aGUgdXNlciBxdWVyeS4KICAgIHBhcnRpdGlvbjogdGhlIHBhcnRpdGlvbiB0byBydW4gdGhlIHF1ZXJ5IGluLgogICAgZGF0YXN0b3JlOiB0aGUgY2xpZW50IHRvIGRhdGFzdG9yZSBjb250YWluaW5nIHRoZSBkYXRhLgoKICBSZXR1cm5zOgogICAgQSBsaXN0IG9mIHNjYXR0ZXIga2V5cyByZXR1cm5lZCBieSBEYXRhc3RvcmUuCiAgIiIiCiAgc2NhdHRlcl9wb2ludF9xdWVyeSA9IF9jcmVhdGVfc2NhdHRlcl9xdWVyeShxdWVyeSwgbnVtX3NwbGl0cykKCiAga2V5X3NwbGl0cyA9IFtdCiAgd2hpbGUgVHJ1ZToKICAgIHJlcSA9IGRhdGFzdG9yZV9wYjIuUnVuUXVlcnlSZXF1ZXN0KCkKICAgIGlmIHBhcnRpdGlvbjoKICAgICAgcmVxLnBhcnRpdGlvbl9pZC5Db3B5RnJvbShwYXJ0aXRpb24pCgogICAgcmVxLnF1ZXJ5LkNvcHlGcm9tKHNjYXR0ZXJfcG9pbnRfcXVlcnkpCgogICAgcmVzcCA9IGRhdGFzdG9yZS5ydW5fcXVlcnkocmVxKQogICAgZm9yIGVudGl0eV9yZXN1bHQgaW4gcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0czoKICAgICAga2V5X3NwbGl0cy5hcHBlbmQoZW50aXR5X3Jlc3VsdC5lbnRpdHkua2V5KQoKICAgIGlmIHJlc3AuYmF0Y2gubW9yZV9yZXN1bHRzICE9IHF1ZXJ5X3BiMi5RdWVyeVJlc3VsdEJhdGNoLk5PVF9GSU5JU0hFRDoKICAgICAgYnJlYWsKCiAgICBzY2F0dGVyX3BvaW50X3F1ZXJ5LnN0YXJ0X2N1cnNvciA9IHJlc3AuYmF0Y2guZW5kX2N1cnNvcgogICAgc2NhdHRlcl9wb2ludF9xdWVyeS5saW1pdC52YWx1ZSAtPSBsZW4ocmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0cykKCiAga2V5X3NwbGl0cy5zb3J0KGhlbHBlci5rZXlfY29tcGFyYXRvcikKICByZXR1cm4ga2V5X3NwbGl0cwoKCmRlZiBfZ2V0X3NwbGl0X2tleShrZXlzLCBudW1fc3BsaXRzKToKICAiIiJHaXZlbiBhIGxpc3Qgb2Yga2V5cyBhbmQgYSBudW1iZXIgb2Ygc3BsaXRzIGZpbmQgdGhlIGtleXMgdG8gc3BsaXQgb24uCgogIEFyZ3M6CiAgICBrZXlzOiB0aGUgbGlzdCBvZiBrZXlzLgogICAgbnVtX3NwbGl0czogdGhlIG51bWJlciBvZiBzcGxpdHMuCgogIFJldHVybnM6CiAgICBBIGxpc3Qgb2Yga2V5cyB0byBzcGxpdCBvbi4KCiAgIiIiCgogICMgSWYgdGhlIG51bWJlciBvZiBrZXlzIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHNwbGl0cywgd2UgYXJlIGxpbWl0ZWQKICAjIGluIHRoZSBudW1iZXIgb2Ygc3BsaXRzIHdlIGNhbiBtYWtlLgogIGlmIG5vdCBrZXlzIG9yIChsZW4oa2V5cykgPCAobnVtX3NwbGl0cyAtIDEpKToKICAgIHJldHVybiBrZXlzCgogICMgQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Yga2V5cyBwZXIgc3BsaXQuIFRoaXMgc2hvdWxkIGJlIEtFWVNfUEVSX1NQTElULAogICMgYnV0IG1heSBiZSBsZXNzIGlmIHRoZXJlIGFyZSBub3QgS0VZU19QRVJfU1BMSVQgKiAobnVtU3BsaXRzIC0gMSkgc2NhdHRlcgogICMgZW50aXRpZXMuCiAgIwogICMgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBkYXRhc2V0LCB3aGVyZSAtIHJlcHJlc2VudHMgYW4gZW50aXR5IGFuZAogICMgKiByZXByZXNlbnRzIGFuIGVudGl0eSB0aGF0IGlzIHJldHVybmVkIGFzIGEgc2NhdHRlciBlbnRpdHk6CiAgIyB8fC0tLSotLS0tLSotLS0tKi0tLS0tKi0tLS0tKi0tLS0tLSotLS0tKi0tLS18fAogICMgSWYgd2Ugd2FudCA0IHNwbGl0cyBpbiB0aGlzIGRhdGEsIHRoZSBvcHRpbWFsIHNwbGl0IHdvdWxkIGxvb2sgbGlrZToKICAjIHx8LS0tKi0tLS0tKi0tLS0qLS0tLS0qLS0tLS0qLS0tLS0tKi0tLS0qLS0tLXx8CiAgIyAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwKICAjIFRoZSBzY2F0dGVyIGtleXMgaW4gdGhlIGxhc3QgcmVnaW9uIGFyZSBub3QgdXNlZnVsIHRvIHVzLCBzbyB3ZSBuZXZlcgogICMgcmVxdWVzdCB0aGVtOgogICMgfHwtLS0qLS0tLS0qLS0tLSotLS0tLSotLS0tLSotLS0tLS0qLS0tLS0tLS0tfHwKICAjICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgfAogICMgV2l0aCA2IHNjYXR0ZXIga2V5cyB3ZSB3YW50IHRvIHNldCBzY2F0dGVyIHBvaW50cyBhdCBpbmRleGVzOiAxLCAzLCA1LgogICMKICAjIFdlIGtlZXAgdGhpcyBhcyBhIGZsb2F0IHNvIHRoYXQgYW55ICJmcmFjdGlvbmFsIiBrZXlzIHBlciBzcGxpdCBnZXQKICAjIGRpc3RyaWJ1dGVkIHRocm91Z2hvdXQgdGhlIHNwbGl0cyBhbmQgZG9uJ3QgbWFrZSB0aGUgbGFzdCBzcGxpdAogICMgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiB0aGUgcmVzdC4KCiAgbnVtX2tleXNfcGVyX3NwbGl0ID0gbWF4KDEuMCwgZmxvYXQobGVuKGtleXMpKSAvIChudW1fc3BsaXRzIC0gMSkpCgogIHNwbGl0X2tleXMgPSBbXQoKICAjIEdyYWIgdGhlIGxhc3Qgc2FtcGxlIGZvciBlYWNoIHNwbGl0LCBvdGhlcndpc2UgdGhlIGZpcnN0IHNwbGl0IHdpbGwgYmUgdG9vCiAgIyBzbWFsbC4KICBmb3IgaSBpbiByYW5nZSgxLCBudW1fc3BsaXRzKToKICAgIHNwbGl0X2luZGV4ID0gaW50KHJvdW5kKGkgKiBudW1fa2V5c19wZXJfc3BsaXQpIC0gMSkKICAgIHNwbGl0X2tleXMuYXBwZW5kKGtleXNbc3BsaXRfaW5kZXhdKQoKICByZXR1cm4gc3BsaXRfa2V5cwoKCmRlZiBfY3JlYXRlX3NwbGl0KGxhc3Rfa2V5LCBuZXh0X2tleSwgcXVlcnkpOgogICIiIkNyZWF0ZSBhIG5ldyB7QGxpbmsgUXVlcnl9IGdpdmVuIHRoZSBxdWVyeSBhbmQgcmFuZ2UuLgoKICBBcmdzOgogICAgbGFzdF9rZXk6IHRoZSBwcmV2aW91cyBrZXkuIElmIG51bGwgdGhlbiBhc3N1bWVkIHRvIGJlIHRoZSBiZWdpbm5pbmcuCiAgICBuZXh0X2tleTogdGhlIG5leHQga2V5LiBJZiBudWxsIHRoZW4gYXNzdW1lZCB0byBiZSB0aGUgZW5kLgogICAgcXVlcnk6IHRoZSBkZXNpcmVkIHF1ZXJ5LgoKICBSZXR1cm5zOgogICAgQSBzcGxpdCBxdWVyeSB3aXRoIGZldGNoZXMgZW50aXRpZXMgaW4gdGhlIHJhbmdlIFtsYXN0X2tleSwgbmV4dF9rZXkpCiAgIiIiCiAgaWYgbm90IChsYXN0X2tleSBvciBuZXh0X2tleSk6CiAgICByZXR1cm4gcXVlcnkKCiAgc3BsaXRfcXVlcnkgPSBxdWVyeV9wYjIuUXVlcnkoKQogIHNwbGl0X3F1ZXJ5LkNvcHlGcm9tKHF1ZXJ5KQogIGNvbXBvc2l0ZV9maWx0ZXIgPSBzcGxpdF9xdWVyeS5maWx0ZXIuY29tcG9zaXRlX2ZpbHRlcgogIGNvbXBvc2l0ZV9maWx0ZXIub3AgPSBDb21wb3NpdGVGaWx0ZXIuQU5ECgogIGlmIHF1ZXJ5Lkhhc0ZpZWxkKCdmaWx0ZXInKToKICAgIGNvbXBvc2l0ZV9maWx0ZXIuZmlsdGVycy5hZGQoKS5Db3B5RnJvbShxdWVyeS5maWx0ZXIpCgogIGlmIGxhc3Rfa2V5OgogICAgbG93ZXJfYm91bmQgPSBjb21wb3NpdGVfZmlsdGVyLmZpbHRlcnMuYWRkKCkKICAgIGxvd2VyX2JvdW5kLnByb3BlcnR5X2ZpbHRlci5wcm9wZXJ0eS5uYW1lID0gS0VZX1BST1BFUlRZX05BTUUKICAgIGxvd2VyX2JvdW5kLnByb3BlcnR5X2ZpbHRlci5vcCA9IFByb3BlcnR5RmlsdGVyLkdSRUFURVJfVEhBTl9PUl9FUVVBTAogICAgbG93ZXJfYm91bmQucHJvcGVydHlfZmlsdGVyLnZhbHVlLmtleV92YWx1ZS5Db3B5RnJvbShsYXN0X2tleSkKCiAgaWYgbmV4dF9rZXk6CiAgICB1cHBlcl9ib3VuZCA9IGNvbXBvc2l0ZV9maWx0ZXIuZmlsdGVycy5hZGQoKQogICAgdXBwZXJfYm91bmQucHJvcGVydHlfZmlsdGVyLnByb3BlcnR5Lm5hbWUgPSBLRVlfUFJPUEVSVFlfTkFNRQogICAgdXBwZXJfYm91bmQucHJvcGVydHlfZmlsdGVyLm9wID0gUHJvcGVydHlGaWx0ZXIuTEVTU19USEFOCiAgICB1cHBlcl9ib3VuZC5wcm9wZXJ0eV9maWx0ZXIudmFsdWUua2V5X3ZhbHVlLkNvcHlGcm9tKG5leHRfa2V5KQoKICByZXR1cm4gc3BsaXRfcXVlcnkKfXH/KFgPAAAAX3ZhbGlkYXRlX3F1ZXJ5WAMAAABkZWZLXktuh1gNAAAAX2NyZWF0ZV9zcGxpdFgDAAAAZGVmS/FNFAGHWBUAAABfY3JlYXRlX3NjYXR0ZXJfcXVlcnlYAwAAAGRlZkuBS5WHWBEAAABfZ2V0X3NjYXR0ZXJfa2V5c1gDAAAAZGVmS5dLvYdYCgAAAGdldF9zcGxpdHNYAwAAAGRlZksxS1yHWA4AAABfZ2V0X3NwbGl0X2tleVgDAAAAZGVmS79L74dYEAAAAF92YWxpZGF0ZV9maWx0ZXJYAwAAAGRlZktwS3+HdX1yAAEAAFgKAAAAZ2V0X3NwbGl0c1guAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlcnIBAQAAc2iKWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVycgIBAACFgXIDAQAAfXIEAQAAYnRyBQEAAFURYXBhY2hlX2JlYW0uZXJyb3IoWPkFAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlB5dGhvbiBEYXRhZmxvdyBlcnJvciBjbGFzc2VzLiIiIgoKCmNsYXNzIEJlYW1FcnJvcihFeGNlcHRpb24pOgogICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBCZWFtIGVycm9ycy4iIiIKCgpjbGFzcyBQaXBlbGluZUVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgaW4gdGhlIHBpcGVsaW5lIG9iamVjdCAoZS5nLiBhIFBWYWx1ZSBub3QgbGlua2VkIHRvIGl0KS4iIiIKCgpjbGFzcyBQVmFsdWVFcnJvcihCZWFtRXJyb3IpOgogICIiIkFuIGVycm9yIHJlbGF0ZWQgdG8gYSBQVmFsdWUgb2JqZWN0IChlLmcuIHZhbHVlIGlzIG5vdCBjb21wdXRlZCkuIiIiCgoKY2xhc3MgUnVubmVyRXJyb3IoQmVhbUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgUnVubmVyIG9iamVjdCAoZS5nLiBjYW5ub3QgZmluZCBhIHJ1bm5lciB0byBydW4pLiIiIgoKCmNsYXNzIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3IoUnVudGltZUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgVmFsdWVQcm92aWRlciBvYmplY3QgcmFpc2VkIGR1cmluZyBydW50aW1lLiIiIgoKCmNsYXNzIFNpZGVJbnB1dEVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgcmVsYXRlZCB0byBhIHNpZGUgaW5wdXQgdG8gYSBwYXJhbGxlbCBEbyBvcGVyYXRpb24uIiIiCgoKY2xhc3MgVHJhbnNmb3JtRXJyb3IoQmVhbUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgUFRyYW5zZm9ybSBvYmplY3QuIiIiCn1yBgEAAChYGQAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3JYBQAAAGNsYXNzSyVLJ4dYCwAAAFBWYWx1ZUVycm9yWAUAAABjbGFzc0sdSx+HWA0AAABQaXBlbGluZUVycm9yWAUAAABjbGFzc0sZSxuHWA4AAABUcmFuc2Zvcm1FcnJvclgFAAAAY2xhc3NLLUsvh1gLAAAAUnVubmVyRXJyb3JYBQAAAGNsYXNzSyFLI4dYCQAAAEJlYW1FcnJvclgFAAAAY2xhc3NLFUsXh1gOAAAAU2lkZUlucHV0RXJyb3JYBQAAAGNsYXNzSylLK4d1fXIHAQAAKFgZAAAAUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcnIIAQAAWBEAAABhcGFjaGVfYmVhbS5lcnJvcnIJAQAAWAsAAABQVmFsdWVFcnJvcnIKAQAAagkBAABYDQAAAFBpcGVsaW5lRXJyb3JyCwEAAGoJAQAAWA4AAABUcmFuc2Zvcm1FcnJvcnIMAQAAagkBAABYCwAAAFJ1bm5lckVycm9ycg0BAABqCQEAAFgJAAAAQmVhbUVycm9ycg4BAABqCQEAAFgOAAAAU2lkZUlucHV0RXJyb3JyDwEAAGoJAQAAdWiKWBEAAABhcGFjaGVfYmVhbS5lcnJvcnIQAQAAhYFyEQEAAH1yEgEAAGJ0chMBAABVHWFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zchQBAAAoWCgPAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRlcHJlY2F0ZWQgYW5kIGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9ucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCkFubm90YXRpb25zIGNvbWUgaW4gdHdvIGZsYXZvcnM6IGRlcHJlY2F0ZWQgYW5kIGV4cGVyaW1lbnRhbAoKVGhlICdkZXByZWNhdGVkJyBhbm5vdGF0aW9uIHJlcXVpcmVzIGEgJ3NpbmNlIiBwYXJhbWV0ZXIgdG8gc3BlY2lmeQp3aGF0IHZlcnNpb24gZGVwcmVjYXRlZCBpdC4KQm90aCAnZGVwcmVjYXRlZCcgYW5kICdleHBlcmltZW50YWwnIGFubm90YXRpb25zIGNhbiBzcGVjaWZ5IHRoZQpjdXJyZW50IHJlY29tbWVuZGVkIHZlcnNpb24gdG8gdXNlIGJ5IG1lYW5zIG9mIGEgJ2N1cnJlbnQnIHBhcmFtZXRlci4KClRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gYW5ub3RhdGUgY29leGlzdGluZyB2ZXJzaW9ucyBvZiB0aGUKc2FtZSBmdW5jdGlvbiAnbXVsdGlwbHknLjo6CgogIGRlZiBtdWx0aXBseShhcmcxLCBhcmcyKToKICAgIHByaW50IGFyZzEsICcqJywgYXJnMiwgJz0nLAogICAgcmV0dXJuIGFyZzEqYXJnMgoKIyBUaGlzIGFubm90YXRpb24gbWFya3MgJ29sZF9tdWx0aXBseScgYXMgZGVwcmVjYXRlZCBzaW5jZSAndi4xJyBhbmQgc3VnZ2VzdHMKIyB1c2luZyAnbXVsdGlwbHknIGluc3RlYWQuOjoKCiAgQGRlcHJlY2F0ZWQoc2luY2U9J3YuMScsIGN1cnJlbnQ9J211bHRpcGx5JykKICBkZWYgb2xkX211bHRpcGx5KGFyZzEsIGFyZzIpOgogICAgcmVzdWx0ID0gMAogICAgZm9yIGkgaW4geHJhbmdlKGFyZzEpOgogICAgICAgIHJlc3VsdCArPSBhcmcyCiAgICBwcmludCBhcmcxLCAnKicsIGFyZzIsICcodGhlIG9sZCB3YXkpPScsCiAgICByZXR1cm4gcmVzdWx0CgojIFRoaXMgYW5ub3RhdGlvbiBtYXJrcyAnZXhwX211bHRpcGx5JyBhcyBleHBlcmltZW50YWwgYW5kIHN1Z2dlc3RzCiMgdXNpbmcgJ211bHRpcGx5JyBpbnN0ZWFkLjo6CgogIEBleHBlcmltZW50YWwoc2luY2U9J3YuMScsIGN1cnJlbnQ9J211bHRpcGx5JykKICBkZWYgZXhwX211bHRpcGx5KGFyZzEsIGFyZzIpOgogICAgcHJpbnQgYXJnMSwgJyonLCBhcmcyLCAnKHRoZSBleHBlcmltZW50YWwgd2F5KT0nLAogICAgcmV0dXJuIChhcmcxKmFyZzIpKihhcmcxL2FyZzIpKihhcmcyL2FyZzEpCgojIFNldCBhIHdhcm5pbmcgZmlsdGVyIHRvIGNvbnRyb2wgaG93IG9mdGVuIHdhcm5pbmdzIGFyZSBwcm9kdWNlZC46OgoKICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCiAgcHJpbnQgbXVsdGlwbHkoNSwgNikKICBwcmludCBvbGRfbXVsdGlwbHkoNSw2KQogIHByaW50IGV4cF9tdWx0aXBseSg1LDYpCiIiIgoKaW1wb3J0IHdhcm5pbmdzCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwoKIyBQcm9kdWNlIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgbWF0Y2hpbmcgd2FybmluZ3MgcmVnYXJkbGVzcyBvZgojIGxvY2F0aW9uIHBlciBsaW5lIG9mIGV4ZWN1dGlvbi4gU2luY2UgdGhlIG51bWJlciBvZiBsaW5lcyBvZiBleGVjdXRpb24KIyBkZXBlbmRzIG9uIHRoZSBjb25jcmV0ZSBydW5uZXIsIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgcHJvZHVjZWQgd2lsbAojIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBydW5uZXIuCndhcm5pbmdzLnNpbXBsZWZpbHRlcigib25jZSIpCgoKZGVmIGFubm90YXRlKGxhYmVsLCBzaW5jZSwgY3VycmVudCwgZXh0cmFfbWVzc2FnZSk6CiAgIiIiRGVjb3JhdGVzIGEgZnVuY3Rpb24gd2l0aCBhIGRlcHJlY2F0ZWQgb3IgZXhwZXJpbWVudGFsIGFubm90YXRpb24uCgogIEFyZ3M6CiAgICBsYWJlbDogdGhlIGtpbmQgb2YgYW5ub3RhdGlvbiAoJ2RlcHJlY2F0ZWQnIG9yICdleHBlcmltZW50YWwnKS4KICAgIHNpbmNlOiB0aGUgdmVyc2lvbiB0aGF0IGNhdXNlcyB0aGUgYW5ub3RhdGlvbi4KICAgIGN1cnJlbnQ6IHRoZSBzdWdnZXN0ZWQgcmVwbGFjZW1lbnQgZnVuY3Rpb24uCiAgICBleHRyYV9tZXNzYWdlOiBhbiBvcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2UuCgogIFJldHVybnM6CiAgICBUaGUgZGVjb3JhdG9yIGZvciB0aGUgZnVuY3Rpb24uCiAgIiIiCiAgZGVmIF9hbm5vdGF0ZShmbmMpOgogICAgQHdyYXBzKGZuYykKICAgIGRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgogICAgICBpZiBsYWJlbCA9PSAnZGVwcmVjYXRlZCc6CiAgICAgICAgd2FybmluZ190eXBlID0gRGVwcmVjYXRpb25XYXJuaW5nCiAgICAgIGVsc2U6CiAgICAgICAgd2FybmluZ190eXBlID0gRnV0dXJlV2FybmluZwogICAgICBtZXNzYWdlID0gJyVzIGlzICVzJyAlIChmbmMuX19uYW1lX18sIGxhYmVsKQogICAgICBpZiBsYWJlbCA9PSAnZGVwcmVjYXRlZCc6CiAgICAgICAgbWVzc2FnZSArPSAnIHNpbmNlICVzJyAlIHNpbmNlCiAgICAgIG1lc3NhZ2UgKz0gJy4gVXNlICVzIGluc3RlYWQuJyAlIGN1cnJlbnQgaWYgY3VycmVudCBlbHNlICcuJwogICAgICBpZiBleHRyYV9tZXNzYWdlOgogICAgICAgIG1lc3NhZ2UgKz0gJy4gJyArIGV4dHJhX21lc3NhZ2UKICAgICAgd2FybmluZ3Mud2FybihtZXNzYWdlLCB3YXJuaW5nX3R5cGUpCiAgICAgIHJldHVybiBmbmMoKmFyZ3MsICoqa3dhcmdzKQogICAgcmV0dXJuIGlubmVyCiAgcmV0dXJuIF9hbm5vdGF0ZQoKCiMgVXNlIHBhcnRpYWwgYXBwbGljYXRpb24gdG8gY3VzdG9taXplIGVhY2ggYW5ub3RhdGlvbi4KIyAnY3VycmVudCcgd2lsbCBiZSBvcHRpb25hbCBpbiBib3RoIGRlcHJlY2F0ZWQgYW5kIGV4cGVyaW1lbnRhbAojIHdoaWxlICdzaW5jZScgd2lsbCBiZSBtYW5kYXRvcnkgZm9yIGRlcHJlY2F0ZWQuCmRlcHJlY2F0ZWQgPSBwYXJ0aWFsKGFubm90YXRlLCBsYWJlbD0nZGVwcmVjYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ9Tm9uZSwgZXh0cmFfbWVzc2FnZT1Ob25lKQpleHBlcmltZW50YWwgPSBwYXJ0aWFsKGFubm90YXRlLCBsYWJlbD0nZXhwZXJpbWVudGFsJywKICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50PU5vbmUsIHNpbmNlPU5vbmUsIGV4dHJhX21lc3NhZ2U9Tm9uZSkKfXIVAQAAKFgYAAAAYW5ub3RhdGUuX2Fubm90YXRlLmlubmVyWAMAAABkZWZLV0tlh1gSAAAAYW5ub3RhdGUuX2Fubm90YXRlWAMAAABkZWZLVktmh1gIAAAAYW5ub3RhdGVYAwAAAGRlZktKS2eHdX1yFgEAAFgIAAAAYW5ub3RhdGVYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zchcBAABzaIpYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zchgBAACFgXIZAQAAfXIaAQAAYnRyGwEAAFUuYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcnIcAQAAKFjtHwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQaXBlbGluZSBvcHRpb25zIHZhbGlkYXRvci4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCmltcG9ydCByZQoKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGVidWdPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFdvcmtlck9wdGlvbnMKCgpjbGFzcyBQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3Iob2JqZWN0KToKICAiIiJWYWxpZGF0ZXMgUGlwZWxpbmVPcHRpb25zLgoKICBHb2VzIHRocm91Z2ggYSBsaXN0IG9mIGtub3duIFBpcGVsaW5lT3B0aW9uIHN1YmNsYXNzZXNzIGFuZCBjYWxsczo6CgogICAgdmFsaWRhdGUodmFsaWRhdG9yKQoKICBpZiBvbmUgaXMgaW1wbGVtZW50ZWQuIEFnZ3JlZ2F0ZXMgYSBsaXN0IG9mIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gYWxsIGFuZAogIHJldHVybnMgYW4gYWdncmVnYXRlZCBsaXN0LgogICIiIgoKICAjIFZhbGlkYXRvciB3aWxsIGNhbGwgdmFsaWRhdGUgb24gdGhlc2Ugc3ViY2xhc3NlcyBvZiBQaXBlbGluZU9wdGlvbnMKICBPUFRJT05TID0gW0RlYnVnT3B0aW9ucywgR29vZ2xlQ2xvdWRPcHRpb25zLCBTZXR1cE9wdGlvbnMsIFN0YW5kYXJkT3B0aW9ucywKICAgICAgICAgICAgIFR5cGVPcHRpb25zLCBXb3JrZXJPcHRpb25zLCBUZXN0T3B0aW9uc10KCiAgIyBQb3NzaWJsZSB2YWxpZGF0aW9uIGVycm9ycy4KICBFUlJfTUlTU0lOR19PUFRJT04gPSAnTWlzc2luZyByZXF1aXJlZCBvcHRpb246ICVzLicKICBFUlJfTUlTU0lOR19HQ1NfUEFUSCA9ICdNaXNzaW5nIEdDUyBwYXRoIG9wdGlvbjogJXMuJwogIEVSUl9JTlZBTElEX0dDU19QQVRIID0gJ0ludmFsaWQgR0NTIHBhdGggKCVzKSwgZ2l2ZW4gZm9yIHRoZSBvcHRpb246ICVzLicKICBFUlJfSU5WQUxJRF9HQ1NfQlVDS0VUID0gKAogICAgICAnSW52YWxpZCBHQ1MgYnVja2V0ICglcyksIGdpdmVuIGZvciB0aGUgb3B0aW9uOiAlcy4gU2VlICcKICAgICAgJ2h0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3N0b3JhZ2UvZG9jcy9idWNrZXRuYW1pbmcgJwogICAgICAnZm9yIG1vcmUgZGV0YWlscy4nKQogIEVSUl9JTlZBTElEX0dDU19PQkpFQ1QgPSAnSW52YWxpZCBHQ1Mgb2JqZWN0ICglcyksIGdpdmVuIGZvciB0aGUgb3B0aW9uOiAlcy4nCiAgRVJSX0lOVkFMSURfSk9CX05BTUUgPSAoCiAgICAgICdJbnZhbGlkIGpvYl9uYW1lICglcyk7IHRoZSBuYW1lIG11c3QgY29uc2lzdCBvZiBvbmx5IHRoZSBjaGFyYWN0ZXJzICcKICAgICAgJ1stYS16MC05XSwgc3RhcnRpbmcgd2l0aCBhIGxldHRlciBhbmQgZW5kaW5nIHdpdGggYSBsZXR0ZXIgb3IgbnVtYmVyJykKICBFUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUiA9ICgKICAgICAgJ0ludmFsaWQgUHJvamVjdCBJRCAoJXMpLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBzcGVjaWZpZWQgdGhlIFByb2plY3QgSUQsICcKICAgICAgJ25vdCBwcm9qZWN0IG51bWJlci4nKQogIEVSUl9JTlZBTElEX1BST0pFQ1RfSUQgPSAoCiAgICAgICdJbnZhbGlkIFByb2plY3QgSUQgKCVzKS4gUGxlYXNlIG1ha2Ugc3VyZSB5b3Ugc3BlY2lmaWVkIHRoZSBQcm9qZWN0IElELCAnCiAgICAgICdub3QgcHJvamVjdCBkZXNjcmlwdGlvbi4nKQogIEVSUl9JTlZBTElEX05PVF9QT1NJVElWRSA9ICgnSW52YWxpZCB2YWx1ZSAoJXMpIGZvciBvcHRpb246ICVzLiBWYWx1ZSBuZWVkcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiZSBwb3NpdGl2ZS4nKQogIEVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9UWVBFID0gKAogICAgICAnSW52YWxpZCB2YWx1ZSAoJXMpIGZvciBvcHRpb246ICVzLiBQbGVhc2UgZXh0ZW5kIHlvdXIgbWF0Y2hlciBvYmplY3QgJwogICAgICAnZnJvbSBoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlci4nKQogIEVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9VTlBJQ0tMQUJMRSA9ICgKICAgICAgJ0ludmFsaWQgdmFsdWUgKCVzKSBmb3Igb3B0aW9uOiAlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgdGVzdCBtYXRjaGVyICcKICAgICAgJ2lzIHVucGlja2xhYmxlLicpCgogICMgR0NTIHBhdGggc3BlY2lmaWMgcGF0dGVybnMuCiAgR0NTX1VSSSA9ICcoP1A8U0NIRU1FPlteOl0rKTovLyg/UDxCVUNLRVQ+W14vXSspKC8oP1A8T0JKRUNUPi4qKSk/JwogIEdDU19CVUNLRVQgPSAnXlthLXowLTldWy1fYS16MC05Ll0rW2EtejAtOV0kJwogIEdDU19TQ0hFTUUgPSAnZ3MnCgogICMgR29vZ2xlQ2xvdWRPcHRpb25zIHNwZWNpZmljIHBhdHRlcm5zLgogIEpPQl9QQVRURVJOID0gJ1thLXpdKFstYS16MC05XSpbYS16MC05XSk/JwogIFBST0pFQ1RfSURfUEFUVEVSTiA9ICdbYS16XVstYS16MC05Oi5dK1thLXowLTldJwogIFBST0pFQ1RfTlVNQkVSX1BBVFRFUk4gPSAnWzAtOV0qJwogIEVORFBPSU5UX1BBVFRFUk4gPSByJ2h0dHBzOi8vW1xTXSpnb29nbGVhcGlzXC5jb21bL10/JwoKICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcnVubmVyKToKICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKICAgIHNlbGYucnVubmVyID0gcnVubmVyCgogIGRlZiB2YWxpZGF0ZShzZWxmKToKICAgICIiIkNhbGxzIHZhbGlkYXRlIG9uIHN1YmNsYXNzZXNzIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBlcnJvcnMuCgogICAgdmFsaWRhdGUgd2lsbCBjYWxsIHZhbGlkYXRlIG1ldGhvZCBvbiBzdWJjbGFzc2VzLCBhY2N1bXVsYXRlIHRoZSByZXR1cm5lZAogICAgbGlzdCBvZiBlcnJvcnMsIGFuZCByZXR1cm5zIHRoZSBhZ2dyZWdhdGUgbGlzdC4KCiAgICBSZXR1cm5zOgogICAgICBBZ2dyZWdhdGUgbGlzdCBvZiBlcnJvcnMgYWZ0ZXIgYWxsIGNhbGxpbmcgYWxsIHBvc3NpYmxlIHZhbGlkYXRlIG1ldGhvZHMuCiAgICAiIiIKICAgIGVycm9ycyA9IFtdCiAgICBmb3IgY2xzIGluIHNlbGYuT1BUSU9OUzoKICAgICAgaWYgJ3ZhbGlkYXRlJyBpbiBjbHMuX19kaWN0X186CiAgICAgICAgZXJyb3JzLmV4dGVuZChzZWxmLm9wdGlvbnMudmlld19hcyhjbHMpLnZhbGlkYXRlKHNlbGYpKQogICAgcmV0dXJuIGVycm9ycwoKICBkZWYgaXNfc2VydmljZV9ydW5uZXIoc2VsZik6CiAgICAiIiJUcnVlIGlmIHBpcGVsaW5lIHdpbGwgZXhlY3V0ZSBvbiB0aGUgR29vZ2xlIENsb3VkIERhdGFmbG93IHNlcnZpY2UuIiIiCiAgICBpc19zZXJ2aWNlX3J1bm5lciA9IChzZWxmLnJ1bm5lciBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoc2VsZi5ydW5uZXIpLl9fbmFtZV9fIGluIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGF0YWZsb3dSdW5uZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0RGF0YWZsb3dSdW5uZXInXSkKCiAgICBkYXRhZmxvd19lbmRwb2ludCA9ICgKICAgICAgICBzZWxmLm9wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLmRhdGFmbG93X2VuZHBvaW50KQogICAgaXNfc2VydmljZV9lbmRwb2ludCA9IChkYXRhZmxvd19lbmRwb2ludCBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pc19mdWxsX3N0cmluZ19tYXRjaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRU5EUE9JTlRfUEFUVEVSTiwgZGF0YWZsb3dfZW5kcG9pbnQpKQoKICAgIHJldHVybiBpc19zZXJ2aWNlX3J1bm5lciBhbmQgaXNfc2VydmljZV9lbmRwb2ludAoKICBkZWYgaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZiwgcGF0dGVybiwgc3RyaW5nKToKICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgcGF0dGVybiBtYXRjaGVzIHRoZSB3aG9sZSBzdHJpbmcuIiIiCiAgICBwYXR0ZXJuID0gJ14lcyQnICUgcGF0dGVybgogICAgcmV0dXJuIHJlLnNlYXJjaChwYXR0ZXJuLCBzdHJpbmcpIGlzIG5vdCBOb25lCgogIGRlZiBfdmFsaWRhdGVfZXJyb3Ioc2VsZiwgZXJyLCAqYXJncyk6CiAgICByZXR1cm4gW2VyciAlIGFyZ3NdCgogIGRlZiB2YWxpZGF0ZV9nY3NfcGF0aChzZWxmLCB2aWV3LCBhcmdfbmFtZSk6CiAgICAiIiJWYWxpZGF0ZXMgYSBHQ1MgcGF0aCBhZ2FpbnN0IGdzOi8vYnVja2V0L29iamVjdCBVUkkgZm9ybWF0LiIiIgogICAgYXJnID0gZ2V0YXR0cih2aWV3LCBhcmdfbmFtZSwgTm9uZSkKICAgIGlmIGFyZyBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfTUlTU0lOR19HQ1NfUEFUSCwgYXJnX25hbWUpCiAgICBtYXRjaCA9IHJlLm1hdGNoKHNlbGYuR0NTX1VSSSwgYXJnLCByZS5ET1RBTEwpCiAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9HQ1NfUEFUSCwgYXJnLCBhcmdfbmFtZSkKCiAgICBzY2hlbWUgPSBtYXRjaC5ncm91cCgnU0NIRU1FJykKICAgIGJ1Y2tldCA9IG1hdGNoLmdyb3VwKCdCVUNLRVQnKQogICAgZ2NzX29iamVjdCA9IG1hdGNoLmdyb3VwKCdPQkpFQ1QnKQoKICAgIGlmICgoc2NoZW1lIGlzIE5vbmUpIG9yIChzY2hlbWUubG93ZXIoKSAhPSBzZWxmLkdDU19TQ0hFTUUpIG9yCiAgICAgICAgKGJ1Y2tldCBpcyBOb25lKSk6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX0dDU19QQVRILCBhcmcsIGFyZ19uYW1lKQoKICAgIGlmIG5vdCBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKHNlbGYuR0NTX0JVQ0tFVCwgYnVja2V0KToKICAgICAgcmV0dXJuIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfR0NTX0JVQ0tFVCwgYXJnLCBhcmdfbmFtZSkKICAgIGlmIGdjc19vYmplY3QgaXMgTm9uZSBvciAnXG4nIGluIGdjc19vYmplY3Qgb3IgJ1xyJyBpbiBnY3Nfb2JqZWN0OgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9HQ1NfT0JKRUNULCBhcmcsIGFyZ19uYW1lKQoKICAgIHJldHVybiBbXQoKICBkZWYgdmFsaWRhdGVfY2xvdWRfb3B0aW9ucyhzZWxmLCB2aWV3KToKICAgICIiIlZhbGlkYXRlcyBqb2JfbmFtZSBhbmQgcHJvamVjdCBhcmd1bWVudHMuIiIiCiAgICBlcnJvcnMgPSBbXQogICAgaWYgKHZpZXcuam9iX25hbWUgYW5kCiAgICAgICAgbm90IHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5KT0JfUEFUVEVSTiwgdmlldy5qb2JfbmFtZSkpOgogICAgICBlcnJvcnMuZXh0ZW5kKHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfSk9CX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5qb2JfbmFtZSkpCiAgICBwcm9qZWN0ID0gdmlldy5wcm9qZWN0CiAgICBpZiBwcm9qZWN0IGlzIE5vbmU6CiAgICAgIGVycm9ycy5leHRlbmQoc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfTUlTU0lOR19PUFRJT04sICdwcm9qZWN0JykpCiAgICBlbHNlOgogICAgICBpZiBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKHNlbGYuUFJPSkVDVF9OVU1CRVJfUEFUVEVSTiwgcHJvamVjdCk6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUiwgcHJvamVjdCkpCiAgICAgIGVsaWYgbm90IHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5QUk9KRUNUX0lEX1BBVFRFUk4sIHByb2plY3QpOgogICAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfUFJPSkVDVF9JRCwgcHJvamVjdCkpCiAgICByZXR1cm4gZXJyb3JzCgogIGRlZiB2YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZShzZWxmLCB2aWV3LCBhcmdfbmFtZSk6CiAgICAiIiJWYWxpZGF0ZXMgdGhhdCBhbiBvcHRpb25hbCBhcmd1bWVudCAoaWYgc2V0KSBoYXMgYSBwb3NpdGl2ZSB2YWx1ZS4iIiIKICAgIGFyZyA9IGdldGF0dHIodmlldywgYXJnX25hbWUsIE5vbmUpCiAgICBpZiBhcmcgaXMgbm90IE5vbmUgYW5kIGludChhcmcpIDw9IDA6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX05PVF9QT1NJVElWRSwgYXJnLCBhcmdfbmFtZSkKICAgIHJldHVybiBbXQoKICBkZWYgdmFsaWRhdGVfdGVzdF9tYXRjaGVyKHNlbGYsIHZpZXcsIGFyZ19uYW1lKToKICAgICIiIlZhbGlkYXRlcyB0aGF0IG9uX3N1Y2Nlc3NfbWF0Y2hlciBhcmd1bWVudCBpZiBzZXQuCgogICAgVmFsaWRhdGVzIHRoYXQgb25fc3VjY2Vzc19tYXRjaGVyIGlzIHVucGlja2xhYmxlIGFuZCBpcyBpbnN0YW5jZQogICAgb2YgYGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyYC4KICAgICIiIgogICAgIyBUaGlzIGlzIGEgdGVzdCBvbmx5IG1ldGhvZCBhbmQgcmVxdWlyZXMgaGFtY3Jlc3QKICAgIGZyb20gaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIgaW1wb3J0IEJhc2VNYXRjaGVyCiAgICBwaWNrbGVkX21hdGNoZXIgPSB2aWV3Lm9uX3N1Y2Nlc3NfbWF0Y2hlcgogICAgZXJyb3JzID0gW10KICAgIHRyeToKICAgICAgbWF0Y2hlciA9IHBpY2tsZXIubG9hZHMocGlja2xlZF9tYXRjaGVyKQogICAgICBpZiBub3QgaXNpbnN0YW5jZShtYXRjaGVyLCBCYXNlTWF0Y2hlcik6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3IoCiAgICAgICAgICAgICAgICBzZWxmLkVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9UWVBFLCBtYXRjaGVyLCBhcmdfbmFtZSkpCiAgICBleGNlcHQ6ICAgIyBweWxpbnQ6IGRpc2FibGU9YmFyZS1leGNlcHQKICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKAogICAgICAgICAgICAgIHNlbGYuRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFLAogICAgICAgICAgICAgIHBpY2tsZWRfbWF0Y2hlciwKICAgICAgICAgICAgICBhcmdfbmFtZSkpCiAgICByZXR1cm4gZXJyb3JzCn1yHQEAAChYKAAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5fdmFsaWRhdGVfZXJyb3JYAwAAAGRlZkt+S4CHWDwAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmVYAwAAAGRlZkusS7KHWCoAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuaXNfc2VydmljZV9ydW5uZXJYAwAAAGRlZktqS3iHWC0AAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuaXNfZnVsbF9zdHJpbmdfbWF0Y2hYAwAAAGRlZkt5S32HWBgAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3JYBQAAAGNsYXNzSyJLyodYLgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXJYAwAAAGRlZkuzS8qHWCoAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfZ2NzX3BhdGhYAwAAAGRlZkuBS5iHWCEAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuX19pbml0X19YAwAAAGRlZktXS1qHWCEAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVYAwAAAGRlZktbS2mHWC8AAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfY2xvdWRfb3B0aW9uc1gDAAAAZGVmS5lLq4d1fXIeAQAAKFg8AAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZlWC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9ych8BAABYKgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lcmofAQAAWC0AAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuaXNfZnVsbF9zdHJpbmdfbWF0Y2hqHwEAAFgYAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yah8BAABYLgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXJqHwEAAFgqAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoah8BAABYIQAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZWofAQAAWC8AAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfY2xvdWRfb3B0aW9uc2ofAQAAdWiKWC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yciABAACFgXIhAQAAfXIiAQAAYnRyIwEAAFUUYXBhY2hlX2JlYW0ucGlwZWxpbmUoWAKDAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpcGVsaW5lLCB0aGUgdG9wLWxldmVsIEJlYW0gb2JqZWN0LgoKQSBwaXBlbGluZSBob2xkcyBhIERBRyBvZiBkYXRhIHRyYW5zZm9ybXMuIENvbmNlcHR1YWxseSB0aGUgbm9kZXMgb2YgdGhlIERBRwphcmUgdHJhbnNmb3JtcyAoOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIG9iamVjdHMpCmFuZCB0aGUgZWRnZXMgYXJlIHZhbHVlcyAobW9zdGx5IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAKb2JqZWN0cykuIFRoZSB0cmFuc2Zvcm1zIHRha2UgYXMgaW5wdXRzIG9uZSBvciBtb3JlIFBWYWx1ZXMgYW5kIG91dHB1dCBvbmUgb3IKbW9yZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzLgoKVGhlIHBpcGVsaW5lIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIHRyYXZlcnNlIHRoZSBncmFwaC4gIFRoZSBhY3R1YWwgb3BlcmF0aW9uCnRvIGJlIGV4ZWN1dGVkIGZvciBlYWNoIG5vZGUgdmlzaXRlZCBpcyBzcGVjaWZpZWQgdGhyb3VnaCBhIHJ1bm5lciBvYmplY3QuCgpUeXBpY2FsIHVzYWdlOjoKCiAgIyBDcmVhdGUgYSBwaXBlbGluZSBvYmplY3QgdXNpbmcgYSBsb2NhbCBydW5uZXIgZm9yIGV4ZWN1dGlvbi4KICB3aXRoIGJlYW0uUGlwZWxpbmUoJ0RpcmVjdFJ1bm5lcicpIGFzIHA6CgogICAgIyBBZGQgdG8gdGhlIHBpcGVsaW5lIGEgIkNyZWF0ZSIgdHJhbnNmb3JtLiBXaGVuIGV4ZWN1dGVkIHRoaXMKICAgICMgdHJhbnNmb3JtIHdpbGwgcHJvZHVjZSBhIFBDb2xsZWN0aW9uIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVzLgogICAgcGNvbGwgPSBwIHwgJ0NyZWF0ZScgPj4gYmVhbS5DcmVhdGUoWzEsIDIsIDNdKQoKICAgICMgQW5vdGhlciB0cmFuc2Zvcm0gY291bGQgYmUgYXBwbGllZCB0byBwY29sbCwgZS5nLiwgd3JpdGluZyB0byBhIHRleHQgZmlsZS4KICAgICMgRm9yIG90aGVyIHRyYW5zZm9ybXMsIHJlZmVyIHRvIHRyYW5zZm9ybXMvIGRpcmVjdG9yeS4KICAgIHBjb2xsIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9UZXh0KCcuL291dHB1dCcpCgogICAgIyBydW4oKSB3aWxsIGV4ZWN1dGUgdGhlIERBRyBzdG9yZWQgaW4gdGhlIHBpcGVsaW5lLiAgVGhlIGV4ZWN1dGlvbiBvZiB0aGUKICAgICMgbm9kZXMgdmlzaXRlZCBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9jYWwgcnVubmVyLgoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFiYwppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTZXR1cE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yIGltcG9ydCBQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IFBDb2xsZWN0aW9uCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgUGlwZWxpbmVSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBjcmVhdGVfcnVubmVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHlwZUNoZWNrRXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMgaW1wb3J0IGRlcHJlY2F0ZWQKCl9fYWxsX18gPSBbJ1BpcGVsaW5lJywgJ1BUcmFuc2Zvcm1PdmVycmlkZSddCgoKY2xhc3MgUGlwZWxpbmUob2JqZWN0KToKICAiIiJBIHBpcGVsaW5lIG9iamVjdCB0aGF0IG1hbmFnZXMgYSBEQUcgb2YKICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzIGFuZCB0aGVpcgogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBzLgoKICBDb25jZXB0dWFsbHkgdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIHMgYXJlIHRoZSBEQUcncyBub2RlcyBhbmQKICB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHMgY29tcHV0aW5nCiAgdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIHMgYXJlIHRoZSBlZGdlcy4KCiAgQWxsIHRoZSB0cmFuc2Zvcm1zIGFwcGxpZWQgdG8gdGhlIHBpcGVsaW5lIG11c3QgaGF2ZSBkaXN0aW5jdCBmdWxsIGxhYmVscy4KICBJZiBzYW1lIHRyYW5zZm9ybSBpbnN0YW5jZSBuZWVkcyB0byBiZSBhcHBsaWVkIHRoZW4gdGhlIHJpZ2h0IHNoaWZ0IG9wZXJhdG9yCiAgc2hvdWxkIGJlIHVzZWQgdG8gZGVzaWduYXRlIG5ldyBuYW1lcwogIChlLmcuIGBgaW5wdXQgfCAibGFiZWwiID4+IG15X3RyYW5mb3JtYGApLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcnVubmVyPU5vbmUsIG9wdGlvbnM9Tm9uZSwgYXJndj1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBwaXBlbGluZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcnVubmVyICh+YXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIpOiBBbiBvYmplY3Qgb2YKICAgICAgICB0eXBlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyYCB0aGF0IHdpbGwgYmUKICAgICAgICB1c2VkIHRvIGV4ZWN1dGUgdGhlIHBpcGVsaW5lLiBGb3IgcmVnaXN0ZXJlZCBydW5uZXJzLCB0aGUgcnVubmVyIG5hbWUKICAgICAgICBjYW4gYmUgc3BlY2lmaWVkLCBvdGhlcndpc2UgYSBydW5uZXIgb2JqZWN0IG11c3QgYmUgc3VwcGxpZWQuCiAgICAgIG9wdGlvbnMgKH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zKToKICAgICAgICBBIGNvbmZpZ3VyZWQKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBvYmplY3QKICAgICAgICBjb250YWluaW5nIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBydW5uaW5nIHRoZSBCZWFtIGpvYi4KICAgICAgYXJndiAoTGlzdFtzdHJdKTogYSBsaXN0IG9mIGFyZ3VtZW50cyAoc3VjaCBhcyA6ZGF0YTpgc3lzLmFyZ3ZgKQogICAgICAgIHRvIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBvYmplY3QuCiAgICAgICAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhcmd1bWVudCAqKm9wdGlvbnMqKiBpcyA6ZGF0YTpgTm9uZWAuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiBlaXRoZXIgdGhlIHJ1bm5lciBvciBvcHRpb25zIGFyZ3VtZW50IGlzIG5vdAogICAgICAgIG9mIHRoZSBleHBlY3RlZCB0eXBlLgogICAgIiIiCiAgICBpZiBvcHRpb25zIGlzIG5vdCBOb25lOgogICAgICBpZiBpc2luc3RhbmNlKG9wdGlvbnMsIFBpcGVsaW5lT3B0aW9ucyk6CiAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnUGFyYW1ldGVyIG9wdGlvbnMsIGlmIHNwZWNpZmllZCwgbXVzdCBiZSBvZiB0eXBlIFBpcGVsaW5lT3B0aW9ucy4gJwogICAgICAgICAgICAnUmVjZWl2ZWQgOiAlcicsIG9wdGlvbnMpCiAgICBlbGlmIGFyZ3YgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2UoYXJndiwgbGlzdCk6CiAgICAgICAgc2VsZi5fb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhhcmd2KQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgYXJndiwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIGEgbGlzdC4gUmVjZWl2ZWQgOiAlcicsIGFyZ3YpCiAgICBlbHNlOgogICAgICBzZWxmLl9vcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKFtdKQoKICAgIEZpbGVTeXN0ZW1zLnNldF9vcHRpb25zKHNlbGYuX29wdGlvbnMpCgogICAgaWYgcnVubmVyIGlzIE5vbmU6CiAgICAgIHJ1bm5lciA9IHNlbGYuX29wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnJ1bm5lcgogICAgICBpZiBydW5uZXIgaXMgTm9uZToKICAgICAgICBydW5uZXIgPSBTdGFuZGFyZE9wdGlvbnMuREVGQVVMVF9SVU5ORVIKICAgICAgICBsb2dnaW5nLmluZm8oKCdNaXNzaW5nIHBpcGVsaW5lIG9wdGlvbiAocnVubmVyKS4gRXhlY3V0aW5nIHBpcGVsaW5lICcKICAgICAgICAgICAgICAgICAgICAgICd1c2luZyB0aGUgZGVmYXVsdCBydW5uZXI6ICVzLicpLCBydW5uZXIpCgogICAgaWYgaXNpbnN0YW5jZShydW5uZXIsIHN0cik6CiAgICAgIHJ1bm5lciA9IGNyZWF0ZV9ydW5uZXIocnVubmVyKQogICAgZWxpZiBub3QgaXNpbnN0YW5jZShydW5uZXIsIFBpcGVsaW5lUnVubmVyKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdSdW5uZXIgbXVzdCBiZSBhIFBpcGVsaW5lUnVubmVyIG9iamVjdCBvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgJ25hbWUgb2YgYSByZWdpc3RlcmVkIHJ1bm5lci4nKQoKICAgICMgVmFsaWRhdGUgcGlwZWxpbmUgb3B0aW9ucwogICAgZXJyb3JzID0gUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yKHNlbGYuX29wdGlvbnMsIHJ1bm5lcikudmFsaWRhdGUoKQogICAgaWYgZXJyb3JzOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1BpcGVsaW5lIGhhcyB2YWxpZGF0aW9ucyBlcnJvcnM6IFxuJyArICdcbicuam9pbihlcnJvcnMpKQoKICAgICMgRGVmYXVsdCBydW5uZXIgdG8gYmUgdXNlZC4KICAgIHNlbGYucnVubmVyID0gcnVubmVyCiAgICAjIFN0YWNrIG9mIHRyYW5zZm9ybXMgZ2VuZXJhdGVkIGJ5IG5lc3RlZCBhcHBseSgpIGNhbGxzLiBUaGUgc3RhY2sgd2lsbAogICAgIyBjb250YWluIGEgcm9vdCBub2RlIGFzIGFuIGVuY2xvc2luZyAocGFyZW50KSBub2RlIGZvciB0b3AgdHJhbnNmb3Jtcy4KICAgIHNlbGYudHJhbnNmb3Jtc19zdGFjayA9IFtBcHBsaWVkUFRyYW5zZm9ybShOb25lLCBOb25lLCAnJywgTm9uZSldCiAgICAjIFNldCBvZiB0cmFuc2Zvcm0gbGFiZWxzIChmdWxsIGxhYmVscykgYXBwbGllZCB0byB0aGUgcGlwZWxpbmUuCiAgICAjIElmIGEgdHJhbnNmb3JtIGlzIGFwcGxpZWQgYW5kIHRoZSBmdWxsIGxhYmVsIGlzIGFscmVhZHkgaW4gdGhlIHNldAogICAgIyB0aGVuIHRoZSB0cmFuc2Zvcm0gd2lsbCBoYXZlIHRvIGJlIGNsb25lZCB3aXRoIGEgbmV3IGxhYmVsLgogICAgc2VsZi5hcHBsaWVkX2xhYmVscyA9IHNldCgpCgogIEBwcm9wZXJ0eQogIEBkZXByZWNhdGVkKHNpbmNlPSdGaXJzdCBzdGFibGUgcmVsZWFzZScsCiAgICAgICAgICAgICAgZXh0cmFfbWVzc2FnZT0nUmVmZXJlbmNlcyB0byA8cGlwZWxpbmU+Lm9wdGlvbnMnCiAgICAgICAgICAgICAgJyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQnKQogIGRlZiBvcHRpb25zKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKCiAgZGVmIF9jdXJyZW50X3RyYW5zZm9ybShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHRyYW5zZm9ybSBjdXJyZW50bHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suIiIiCiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm1zX3N0YWNrWy0xXQoKICBkZWYgX3Jvb3RfdHJhbnNmb3JtKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgcm9vdCB0cmFuc2Zvcm0gb2YgdGhlIHRyYW5zZm9ybSBzdGFjay4iIiIKICAgIHJldHVybiBzZWxmLnRyYW5zZm9ybXNfc3RhY2tbMF0KCiAgZGVmIF9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KHNlbGYsIGFwcGxpZWRfdHJhbnNmb3JtKToKICAgIGZvciBwYXJ0IGluIGFwcGxpZWRfdHJhbnNmb3JtLnBhcnRzOgogICAgICBpZiBwYXJ0LmZ1bGxfbGFiZWwgaW4gc2VsZi5hcHBsaWVkX2xhYmVsczoKICAgICAgICBzZWxmLmFwcGxpZWRfbGFiZWxzLnJlbW92ZShwYXJ0LmZ1bGxfbGFiZWwpCiAgICAgIGlmIHBhcnQucGFydHM6CiAgICAgICAgZm9yIHBhcnQyIGluIHBhcnQucGFydHM6CiAgICAgICAgICBzZWxmLl9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KHBhcnQyKQoKICBkZWYgX3JlcGxhY2Uoc2VsZiwgb3ZlcnJpZGUpOgoKICAgIGFzc2VydCBpc2luc3RhbmNlKG92ZXJyaWRlLCBQVHJhbnNmb3JtT3ZlcnJpZGUpCiAgICBtYXRjaGVyID0gb3ZlcnJpZGUuZ2V0X21hdGNoZXIoKQoKICAgIG91dHB1dF9tYXAgPSB7fQogICAgb3V0cHV0X3JlcGxhY2VtZW50cyA9IHt9CiAgICBpbnB1dF9yZXBsYWNlbWVudHMgPSB7fQoKICAgIGNsYXNzIFRyYW5zZm9ybVVwZGF0ZXIoUGlwZWxpbmVWaXNpdG9yKTogIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICAiIiIiQSB2aXNpdG9yIHRoYXQgcmVwbGFjZXMgdGhlIG1hdGNoaW5nIFBUcmFuc2Zvcm1zLiIiIgoKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lKToKICAgICAgICBzZWxmLnBpcGVsaW5lID0gcGlwZWxpbmUKCiAgICAgIGRlZiBfcmVwbGFjZV9pZl9uZWVkZWQoc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIG1hdGNoZXIodHJhbnNmb3JtX25vZGUpOgogICAgICAgICAgcmVwbGFjZW1lbnRfdHJhbnNmb3JtID0gb3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgKICAgICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0pCiAgICAgICAgICBpbnB1dHMgPSB0cmFuc2Zvcm1fbm9kZS5pbnB1dHMKICAgICAgICAgICMgVE9ETzogIFN1cHBvcnQgcmVwbGFjaW5nIFBUcmFuc2Zvcm1zIHdpdGggbXVsdGlwbGUgaW5wdXRzLgogICAgICAgICAgaWYgbGVuKGlucHV0cykgPiAxOgogICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgICAgICAgJ1BUcmFuc2Zvcm0gb3ZlcnJpZGluZyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgUFRyYW5zZm9ybXMgdGhhdCAnCiAgICAgICAgICAgICAgICAnaGF2ZSBhIHNpbmdsZSBpbnB1dC4gVHJpZWQgdG8gcmVwbGFjZSBpbnB1dCBvZiAnCiAgICAgICAgICAgICAgICAnQXBwbGllZFBUcmFuc2Zvcm0gJXIgdGhhdCBoYXMgJWQgaW5wdXRzJywKICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLCBsZW4oaW5wdXRzKSkKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSA9IHJlcGxhY2VtZW50X3RyYW5zZm9ybQogICAgICAgICAgc2VsZi5waXBlbGluZS50cmFuc2Zvcm1zX3N0YWNrLmFwcGVuZCh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgICAgICAjIEtlZXBpbmcgdGhlIHNhbWUgbGFiZWwgZm9yIHRoZSByZXBsYWNlZCBub2RlIGJ1dCByZWN1cnNpdmVseQogICAgICAgICAgIyByZW1vdmluZyBsYWJlbHMgb2YgY2hpbGQgdHJhbnNmb3JtcyBzaW5jZSB0aGV5IHdpbGwgYmUgcmVwbGFjZWQKICAgICAgICAgICMgZHVyaW5nIHRoZSBleHBhbmQgYmVsb3cuCiAgICAgICAgICBzZWxmLnBpcGVsaW5lLl9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KHRyYW5zZm9ybV9ub2RlKQoKICAgICAgICAgIG5ld19vdXRwdXQgPSByZXBsYWNlbWVudF90cmFuc2Zvcm0uZXhwYW5kKGlucHV0c1swXSkKICAgICAgICAgIGlmIG5ld19vdXRwdXQucHJvZHVjZXIgaXMgTm9uZToKICAgICAgICAgICAgIyBXaGVuIGN1cnJlbnQgdHJhbnNmb3JtIGlzIGEgcHJpbWl0aXZlLCB3ZSBzZXQgdGhlIHByb2R1Y2VyIGhlcmUuCiAgICAgICAgICAgIG5ld19vdXRwdXQucHJvZHVjZXIgPSB0cmFuc2Zvcm1fbm9kZQoKICAgICAgICAgICMgV2Ugb25seSBzdXBwb3J0IHJlcGxhY2luZyB0cmFuc2Zvcm1zIHdpdGggYSBzaW5nbGUgb3V0cHV0IHdpdGgKICAgICAgICAgICMgYW5vdGhlciB0cmFuc2Zvcm0gdGhhdCBwcm9kdWNlcyBhIHNpbmdsZSBvdXRwdXQuCiAgICAgICAgICAjIFRPRE86IFN1cHBvcnQgcmVwbGFjaW5nIFBUcmFuc2Zvcm1zIHdpdGggbXVsdGlwbGUgb3V0cHV0cy4KICAgICAgICAgIGlmIChsZW4odHJhbnNmb3JtX25vZGUub3V0cHV0cykgPiAxIG9yCiAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UodHJhbnNmb3JtX25vZGUub3V0cHV0c1tOb25lXSwgUENvbGxlY3Rpb24pIG9yCiAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UobmV3X291dHB1dCwgUENvbGxlY3Rpb24pKToKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgICAgICdQVHJhbnNmb3JtIG92ZXJyaWRpbmcgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFBUcmFuc2Zvcm1zIHRoYXQgJwogICAgICAgICAgICAgICAgJ2hhdmUgYSBzaW5nbGUgb3V0cHV0LiBUcmllZCB0byByZXBsYWNlIG91dHB1dCBvZiAnCiAgICAgICAgICAgICAgICAnQXBwbGllZFBUcmFuc2Zvcm0gJXIgd2l0aCAlci4nCiAgICAgICAgICAgICAgICAsIHRyYW5zZm9ybV9ub2RlLCBuZXdfb3V0cHV0KQoKICAgICAgICAgICMgUmVjb3JkaW5nIHVwZGF0ZWQgb3V0cHV0cy4gVGhpcyBjYW5ub3QgYmUgZG9uZSBpbiB0aGUgc2FtZSB2aXNpdG9yCiAgICAgICAgICAjIHNpbmNlIGlmIHdlIGR5bmFtaWNhbGx5IHVwZGF0ZSBvdXRwdXQgdHlwZSBoZXJlLCB3ZSdsbCBydW4gaW50bwogICAgICAgICAgIyBlcnJvcnMgd2hlbiB2aXNpdGluZyBjaGlsZCBub2Rlcy4KICAgICAgICAgIG91dHB1dF9tYXBbdHJhbnNmb3JtX25vZGUub3V0cHV0c1tOb25lXV0gPSBuZXdfb3V0cHV0CgogICAgICAgICAgc2VsZi5waXBlbGluZS50cmFuc2Zvcm1zX3N0YWNrLnBvcCgpCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi5fcmVwbGFjZV9pZl9uZWVkZWQodHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLl9yZXBsYWNlX2lmX25lZWRlZCh0cmFuc2Zvcm1fbm9kZSkKCiAgICBzZWxmLnZpc2l0KFRyYW5zZm9ybVVwZGF0ZXIoc2VsZikpCgogICAgIyBBZGp1c3RpbmcgaW5wdXRzIGFuZCBvdXRwdXRzCiAgICBjbGFzcyBJbnB1dE91dHB1dFVwZGF0ZXIoUGlwZWxpbmVWaXNpdG9yKTogIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICAiIiIiQSB2aXNpdG9yIHRoYXQgcmVjb3JkcyBpbnB1dCBhbmQgb3V0cHV0IHZhbHVlcyB0byBiZSByZXBsYWNlZC4KCiAgICAgIElucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQgYXJlIHJlY29yZGVkIGluIG1hcHMKICAgICAgaW5wdXRfcmVwbGFjZW1lbnRzIGFuZCBvdXRwdXRfcmVwbGFjZW1lbnRzIHJlc3BlY3RpdmVseS4KCiAgICAgIFdlIGNhbm5vdCB1cGRhdGUgaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMgd2hpbGUgdmlzaXRpbmcgc2luY2UgdGhhdCByZXN1bHRzCiAgICAgIGluIHZhbGlkYXRpb24gZXJyb3JzLgogICAgICAiIiIKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlbGluZSk6CiAgICAgICAgc2VsZi5waXBlbGluZSA9IHBpcGVsaW5lCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiAoTm9uZSBpbiB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzIGFuZAogICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdIGluIG91dHB1dF9tYXApOgogICAgICAgICAgb3V0cHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1fbm9kZV0gPSAoCiAgICAgICAgICAgICAgb3V0cHV0X21hcFt0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdXSkKCiAgICAgICAgcmVwbGFjZV9pbnB1dCA9IEZhbHNlCiAgICAgICAgZm9yIGlucHV0IGluIHRyYW5zZm9ybV9ub2RlLmlucHV0czoKICAgICAgICAgIGlmIGlucHV0IGluIG91dHB1dF9tYXA6CiAgICAgICAgICAgIHJlcGxhY2VfaW5wdXQgPSBUcnVlCiAgICAgICAgICAgIGJyZWFrCgogICAgICAgIGlmIHJlcGxhY2VfaW5wdXQ6CiAgICAgICAgICBuZXdfaW5wdXQgPSBbCiAgICAgICAgICAgICAgaW5wdXQgaWYgbm90IGlucHV0IGluIG91dHB1dF9tYXAgZWxzZSBvdXRwdXRfbWFwW2lucHV0XQogICAgICAgICAgICAgIGZvciBpbnB1dCBpbiB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNdCiAgICAgICAgICBpbnB1dF9yZXBsYWNlbWVudHNbdHJhbnNmb3JtX25vZGVdID0gbmV3X2lucHV0CgogICAgc2VsZi52aXNpdChJbnB1dE91dHB1dFVwZGF0ZXIoc2VsZikpCgogICAgZm9yIHRyYW5zZm9ybSBpbiBvdXRwdXRfcmVwbGFjZW1lbnRzOgogICAgICB0cmFuc2Zvcm0ucmVwbGFjZV9vdXRwdXQob3V0cHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1dKQoKICAgIGZvciB0cmFuc2Zvcm0gaW4gaW5wdXRfcmVwbGFjZW1lbnRzOgogICAgICB0cmFuc2Zvcm0uaW5wdXRzID0gaW5wdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV0KCiAgZGVmIF9jaGVja19yZXBsYWNlbWVudChzZWxmLCBvdmVycmlkZSk6CiAgICBtYXRjaGVyID0gb3ZlcnJpZGUuZ2V0X21hdGNoZXIoKQoKICAgIGNsYXNzIFJlcGxhY2VtZW50VmFsaWRhdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIG1hdGNoZXIodHJhbnNmb3JtX25vZGUpOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUcmFuc2Zvcm0gbm9kZSAlciB3YXMgbm90IHJlcGxhY2VkIGFzIGV4cGVjdGVkLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUpCgogICAgc2VsZi52aXNpdChSZXBsYWNlbWVudFZhbGlkYXRvcigpKQoKICBkZWYgcmVwbGFjZV9hbGwoc2VsZiwgcmVwbGFjZW1lbnRzKToKICAgICIiIiBEeW5hbWljYWxseSByZXBsYWNlcyBQVHJhbnNmb3JtcyBpbiB0aGUgY3VycmVudGx5IHBvcHVsYXRlZCBoaWVyYXJjaHkuCgogICAgQ3VycmVudGx5IHRoaXMgb25seSB3b3JrcyBmb3IgcmVwbGFjZW1lbnRzIHdoZXJlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMKICAgIGFyZSBleGFjdGx5IHRoZSBzYW1lLgoKICAgIFRPRE86IFVwZGF0ZSB0aGlzIHRvIGFsc28gd29yayBmb3IgdHJhbnNmb3JtIG92ZXJyaWRlcyB3aGVyZSBpbnB1dCBhbmQKICAgIG91dHB1dCB0eXBlcyBhcmUgZGlmZmVyZW50LgoKICAgIEFyZ3M6CiAgICAgIHJlcGxhY2VtZW50cyAoTGlzdFt+YXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlXSk6IGEgbGlzdCBvZgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZWAgb2JqZWN0cy4KICAgICIiIgogICAgZm9yIG92ZXJyaWRlIGluIHJlcGxhY2VtZW50czoKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3ZlcnJpZGUsIFBUcmFuc2Zvcm1PdmVycmlkZSkKICAgICAgc2VsZi5fcmVwbGFjZShvdmVycmlkZSkKCiAgICAjIENoZWNraW5nIGlmIHRoZSBQVHJhbnNmb3JtcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlcGxhY2VkLiBUaGlzIHdpbGwKICAgICMgcmVzdWx0IGluIGEgZmFpbHVyZSBpZiBhIFBUcmFuc2Zvcm0gdGhhdCB3YXMgcmVwbGFjZWQgaW4gYSBnaXZlbiBvdmVycmlkZQogICAgIyBnZXRzIHJlLWFkZGVkIGluIGEgc3Vic2VxdWVudCBvdmVycmlkZS4gVGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgb3JkZXJpbmcKICAgICMgb2YgUFRyYW5zZm9ybU92ZXJyaWRlIG9iamVjdHMgaW4gJ3JlcGxhY2VtZW50cycgaXMgaW1wb3J0YW50LgogICAgZm9yIG92ZXJyaWRlIGluIHJlcGxhY2VtZW50czoKICAgICAgc2VsZi5fY2hlY2tfcmVwbGFjZW1lbnQob3ZlcnJpZGUpCgogIGRlZiBydW4oc2VsZiwgdGVzdF9ydW5uZXJfYXBpPVRydWUpOgogICAgIiIiUnVucyB0aGUgcGlwZWxpbmUuIFJldHVybnMgd2hhdGV2ZXIgb3VyIHJ1bm5lciByZXR1cm5zIGFmdGVyIHJ1bm5pbmcuIiIiCgogICAgIyBXaGVuIHBvc3NpYmxlLCBpbnZva2UgYSByb3VuZCB0cmlwIHRocm91Z2ggdGhlIHJ1bm5lciBBUEkuCiAgICBpZiB0ZXN0X3J1bm5lcl9hcGkgYW5kIHNlbGYuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUoKToKICAgICAgcmV0dXJuIFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgIHNlbGYudG9fcnVubmVyX2FwaSgpLCBzZWxmLnJ1bm5lciwgc2VsZi5fb3B0aW9ucykucnVuKEZhbHNlKQoKICAgIGlmIHNlbGYuX29wdGlvbnMudmlld19hcyhTZXR1cE9wdGlvbnMpLnNhdmVfbWFpbl9zZXNzaW9uOgogICAgICAjIElmIHRoaXMgb3B0aW9uIGlzIGNob3NlbiwgdmVyaWZ5IHdlIGNhbiBwaWNrbGUgdGhlIG1haW4gc2Vzc2lvbiBlYXJseS4KICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgIHRyeToKICAgICAgICBwaWNrbGVyLmR1bXBfc2Vzc2lvbihvcy5wYXRoLmpvaW4odG1wZGlyLCAnbWFpbl9zZXNzaW9uLnBpY2tsZScpKQogICAgICBmaW5hbGx5OgogICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQogICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bl9waXBlbGluZShzZWxmKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgogICAgaWYgbm90IGV4Y190eXBlOgogICAgICBzZWxmLnJ1bigpLndhaXRfdW50aWxfZmluaXNoKCkKCiAgZGVmIHZpc2l0KHNlbGYsIHZpc2l0b3IpOgogICAgIiIiVmlzaXRzIGRlcHRoLWZpcnN0IGV2ZXJ5IG5vZGUgb2YgYSBwaXBlbGluZSdzIERBRy4KCiAgICBSdW5uZXItaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzCgogICAgQXJnczoKICAgICAgdmlzaXRvciAofmFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lVmlzaXRvcik6CiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmVWaXNpdG9yYCBvYmplY3Qgd2hvc2UgY2FsbGJhY2tzCiAgICAgICAgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggbm9kZSB2aXNpdGVkLiBTZWUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZVZpc2l0b3JgIGNvbW1lbnRzLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiBub2RlIGlzIHNwZWNpZmllZCBhbmQgaXMgbm90IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYC4KICAgICAgfmFwYWNoZV9iZWFtLmVycm9yLlBpcGVsaW5lRXJyb3I6IGlmIG5vZGUgaXMgc3BlY2lmaWVkIGFuZCBkb2VzIG5vdAogICAgICAgIGJlbG9uZyB0byB0aGlzIHBpcGVsaW5lIGluc3RhbmNlLgogICAgIiIiCgogICAgdmlzaXRlZCA9IHNldCgpCiAgICBzZWxmLl9yb290X3RyYW5zZm9ybSgpLnZpc2l0KHZpc2l0b3IsIHNlbGYsIHZpc2l0ZWQpCgogIGRlZiBhcHBseShzZWxmLCB0cmFuc2Zvcm0sIHB2YWx1ZWlzaD1Ob25lLCBsYWJlbD1Ob25lKToKICAgICIiIkFwcGxpZXMgYSBjdXN0b20gdHJhbnNmb3JtIHVzaW5nIHRoZSBwdmFsdWVpc2ggc3BlY2lmaWVkLgoKICAgIEFyZ3M6CiAgICAgIHRyYW5zZm9ybSAofmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtKTogdGhlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHRvIGFwcGx5LgogICAgICBwdmFsdWVpc2ggKH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOiB0aGUgaW5wdXQgZm9yIHRoZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCAodHlwaWNhbGx5IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gKS4KICAgICAgbGFiZWwgKHN0cik6IGxhYmVsIG9mIHRoZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIHRyYW5zZm9ybSBvYmplY3QgZXh0cmFjdGVkIGZyb20gdGhlCiAgICAgICAgYXJndW1lbnQgbGlzdCBpcyBub3QgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYC4KICAgICAgfmV4Y2VwdGlvbnMuUnVudGltZUVycm9yOiBpZiB0aGUgdHJhbnNmb3JtIG9iamVjdCB3YXMgYWxyZWFkeSBhcHBsaWVkIHRvCiAgICAgICAgdGhpcyBwaXBlbGluZSBhbmQgbmVlZHMgdG8gYmUgY2xvbmVkIGluIG9yZGVyIHRvIGFwcGx5IGFnYWluLgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgcHRyYW5zZm9ybS5fTmFtZWRQVHJhbnNmb3JtKToKICAgICAgcmV0dXJuIHNlbGYuYXBwbHkodHJhbnNmb3JtLnRyYW5zZm9ybSwgcHZhbHVlaXNoLAogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCBvciB0cmFuc2Zvcm0ubGFiZWwpCgogICAgaWYgbm90IGlzaW5zdGFuY2UodHJhbnNmb3JtLCBwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgICByYWlzZSBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgUFRyYW5zZm9ybSBvYmplY3QsIGdvdCAlcyIgJSB0cmFuc2Zvcm0pCgogICAgaWYgbGFiZWw6CiAgICAgICMgRml4IHNlbGYubGFiZWwgYXMgaXQgaXMgaW5zcGVjdGVkIGJ5IHNvbWUgUFRyYW5zZm9ybSBvcGVyYXRpb25zCiAgICAgICMgKGUuZy4gdG8gcHJvZHVjZSBlcnJvciBtZXNzYWdlcyBmb3IgdHlwZSBoaW50IHZpb2xhdGlvbnMpLgogICAgICB0cnk6CiAgICAgICAgb2xkX2xhYmVsLCB0cmFuc2Zvcm0ubGFiZWwgPSB0cmFuc2Zvcm0ubGFiZWwsIGxhYmVsCiAgICAgICAgcmV0dXJuIHNlbGYuYXBwbHkodHJhbnNmb3JtLCBwdmFsdWVpc2gpCiAgICAgIGZpbmFsbHk6CiAgICAgICAgdHJhbnNmb3JtLmxhYmVsID0gb2xkX2xhYmVsCgogICAgZnVsbF9sYWJlbCA9ICcvJy5qb2luKFtzZWxmLl9jdXJyZW50X3RyYW5zZm9ybSgpLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsIG9yIHRyYW5zZm9ybS5sYWJlbF0pLmxzdHJpcCgnLycpCiAgICBpZiBmdWxsX2xhYmVsIGluIHNlbGYuYXBwbGllZF9sYWJlbHM6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICdUcmFuc2Zvcm0gIiVzIiBkb2VzIG5vdCBoYXZlIGEgc3RhYmxlIHVuaXF1ZSBsYWJlbC4gJwogICAgICAgICAgJ1RoaXMgd2lsbCBwcmV2ZW50IHVwZGF0aW5nIG9mIHBpcGVsaW5lcy4gJwogICAgICAgICAgJ1RvIGFwcGx5IGEgdHJhbnNmb3JtIHdpdGggYSBzcGVjaWZpZWQgbGFiZWwgd3JpdGUgJwogICAgICAgICAgJ3B2YWx1ZSB8ICJsYWJlbCIgPj4gdHJhbnNmb3JtJwogICAgICAgICAgJSBmdWxsX2xhYmVsKQogICAgc2VsZi5hcHBsaWVkX2xhYmVscy5hZGQoZnVsbF9sYWJlbCkKCiAgICBwdmFsdWVpc2gsIGlucHV0cyA9IHRyYW5zZm9ybS5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzKHB2YWx1ZWlzaCkKICAgIHRyeToKICAgICAgaW5wdXRzID0gdHVwbGUoaW5wdXRzKQogICAgICBmb3IgbGVhZl9pbnB1dCBpbiBpbnB1dHM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGVhZl9pbnB1dCwgcHZhbHVlLlBWYWx1ZSk6CiAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnVW5hYmxlIHRvIGV4dHJhY3QgUFZhbHVlIGlucHV0cyBmcm9tICVzOyBlaXRoZXIgJXMgZG9lcyBub3QgYWNjZXB0ICcKICAgICAgICAgICdpbnB1dHMgb2YgdGhpcyBmb3JtYXQsIG9yIGl0IGRvZXMgbm90IHByb3Blcmx5IG92ZXJyaWRlICcKICAgICAgICAgICdfZXh0cmFjdF9pbnB1dF9wdmFsdWVzJyAlIChwdmFsdWVpc2gsIHRyYW5zZm9ybSkpCgogICAgY3VycmVudCA9IEFwcGxpZWRQVHJhbnNmb3JtKAogICAgICAgIHNlbGYuX2N1cnJlbnRfdHJhbnNmb3JtKCksIHRyYW5zZm9ybSwgZnVsbF9sYWJlbCwgaW5wdXRzKQogICAgc2VsZi5fY3VycmVudF90cmFuc2Zvcm0oKS5hZGRfcGFydChjdXJyZW50KQogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLmFwcGVuZChjdXJyZW50KQoKICAgIHR5cGVfb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMudmlld19hcyhUeXBlT3B0aW9ucykKICAgIGlmIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHMocHZhbHVlaXNoKQoKICAgIHB2YWx1ZWlzaF9yZXN1bHQgPSBzZWxmLnJ1bm5lci5hcHBseSh0cmFuc2Zvcm0sIHB2YWx1ZWlzaCkKCiAgICBpZiB0eXBlX29wdGlvbnMgaXMgbm90IE5vbmUgYW5kIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzKHB2YWx1ZWlzaF9yZXN1bHQpCgogICAgZm9yIHJlc3VsdCBpbiBwdHJhbnNmb3JtLmdldF9uZXN0ZWRfcHZhbHVlcyhwdmFsdWVpc2hfcmVzdWx0KToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSkKCiAgICAgICMgTWFrZSBzdXJlIHdlIHNldCB0aGUgcHJvZHVjZXIgb25seSBmb3IgYSBsZWFmIG5vZGUgaW4gdGhlIHRyYW5zZm9ybSBEQUcuCiAgICAgICMgVGhpcyB3YXkgd2UgcHJlc2VydmUgdGhlIGxhc3QgdHJhbnNmb3JtIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBhcwogICAgICAjIGJlaW5nIHRoZSByZWFsIHByb2R1Y2VyIG9mIHRoZSByZXN1bHQuCiAgICAgIGlmIHJlc3VsdC5wcm9kdWNlciBpcyBOb25lOgogICAgICAgIHJlc3VsdC5wcm9kdWNlciA9IGN1cnJlbnQKICAgICAgIyBUT0RPKHJvYmVydHdiKTogTXVsdGktaW5wdXQsIG11bHRpLW91dHB1dCBpbmZlcmVuY2UuCiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IElkZWFsbHkgd2UnZCBkbyBpbnRlcnNlY3Rpb24gaGVyZS4KICAgICAgaWYgKHR5cGVfb3B0aW9ucyBpcyBub3QgTm9uZSBhbmQgdHlwZV9vcHRpb25zLnBpcGVsaW5lX3R5cGVfY2hlY2sKICAgICAgICAgIGFuZCBpc2luc3RhbmNlKHJlc3VsdCwgcHZhbHVlLlBDb2xsZWN0aW9uKQogICAgICAgICAgYW5kIG5vdCByZXN1bHQuZWxlbWVudF90eXBlKToKICAgICAgICBpbnB1dF9lbGVtZW50X3R5cGUgPSAoCiAgICAgICAgICAgIGlucHV0c1swXS5lbGVtZW50X3R5cGUKICAgICAgICAgICAgaWYgbGVuKGlucHV0cykgPT0gMQogICAgICAgICAgICBlbHNlIHR5cGVoaW50cy5BbnkpCiAgICAgICAgdHlwZV9oaW50cyA9IHRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpCiAgICAgICAgZGVjbGFyZWRfb3V0cHV0X3R5cGUgPSB0eXBlX2hpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZSh0cmFuc2Zvcm0ubGFiZWwpCiAgICAgICAgaWYgZGVjbGFyZWRfb3V0cHV0X3R5cGU6CiAgICAgICAgICBpbnB1dF90eXBlcyA9IHR5cGVfaGludHMuaW5wdXRfdHlwZXMKICAgICAgICAgIGlmIGlucHV0X3R5cGVzIGFuZCBpbnB1dF90eXBlc1swXToKICAgICAgICAgICAgZGVjbGFyZWRfaW5wdXRfdHlwZSA9IGlucHV0X3R5cGVzWzBdWzBdCiAgICAgICAgICAgIHJlc3VsdC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuYmluZF90eXBlX3ZhcmlhYmxlcygKICAgICAgICAgICAgICAgIGRlY2xhcmVkX291dHB1dF90eXBlLAogICAgICAgICAgICAgICAgdHlwZWhpbnRzLm1hdGNoX3R5cGVfdmFyaWFibGVzKGRlY2xhcmVkX2lucHV0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZWxlbWVudF90eXBlKSkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlc3VsdC5lbGVtZW50X3R5cGUgPSBkZWNsYXJlZF9vdXRwdXRfdHlwZQogICAgICAgIGVsc2U6CiAgICAgICAgICByZXN1bHQuZWxlbWVudF90eXBlID0gdHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBlKGlucHV0X2VsZW1lbnRfdHlwZSkKCiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdC5wcm9kdWNlci5pbnB1dHMsIHR1cGxlKQogICAgICBjdXJyZW50LmFkZF9vdXRwdXQocmVzdWx0KQoKICAgIGlmICh0eXBlX29wdGlvbnMgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgdHlwZV9vcHRpb25zLnR5cGVfY2hlY2tfc3RyaWN0bmVzcyA9PSAnQUxMX1JFUVVJUkVEJyBhbmQKICAgICAgICB0cmFuc2Zvcm0uZ2V0X3R5cGVfaGludHMoKS5vdXRwdXRfdHlwZXMgaXMgTm9uZSk6CiAgICAgIHB0cmFuc2Zvcm1fbmFtZSA9ICclcyglcyknICUgKHRyYW5zZm9ybS5fX2NsYXNzX18uX19uYW1lX18sIGZ1bGxfbGFiZWwpCiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdQaXBlbGluZSB0eXBlIGNoZWNraW5nIGlzIGVuYWJsZWQsIGhvd2V2ZXIgbm8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0IHR5cGUtaGludCB3YXMgZm91bmQgZm9yIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQVHJhbnNmb3JtICVzJyAlIHB0cmFuc2Zvcm1fbmFtZSkKCiAgICBjdXJyZW50LnVwZGF0ZV9pbnB1dF9yZWZjb3VudHMoKQogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLnBvcCgpCiAgICByZXR1cm4gcHZhbHVlaXNoX3Jlc3VsdAoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICMgU29tZSB0cmFuc2Zvcm1zIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlaXIgZW5jbG9zaW5nIHBpcGVsaW5lLAogICAgIyB3aGljaCBpbiB0dXJuIHJlZmVyZW5jZSBhbGwgb3RoZXIgdHJhbnNmb3JtcyAocmVzdWx0aW5nIGluIHF1YWRyYXRpYwogICAgIyB0aW1lL3NwYWNlIHRvIHBpY2tsZSBlYWNoIHRyYW5zZm9ybSBpbmRpdmlkdWFsbHkpLiAgQXMgd2UgZG9uJ3QKICAgICMgcmVxdWlyZSBwaWNrbGVkIHBpcGVsaW5lcyB0byBiZSBleGVjdXRhYmxlLCBicmVhayB0aGUgY2hhaW4gaGVyZS4KICAgIHJldHVybiBzdHIsICgnUGlja2xlZCBwaXBlbGluZSBzdHViLicsKQoKICBkZWYgX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUoc2VsZik6CiAgICBpZiBzZWxmLl9vcHRpb25zLnZpZXdfYXMoVHlwZU9wdGlvbnMpLnJ1bnRpbWVfdHlwZV9jaGVjazoKICAgICAgIyBUaGlzIG9wdGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcnVubmVyIEFQSSBhcyBpdCByZXF1aXJlcwogICAgICAjIHRoZSBydW5uZXIgdG8gaW5zcGVjdCBub24tc2VyaWFsaXplZCBoaW50cyBvbiB0aGUgdHJhbnNmb3JtCiAgICAgICMgaXRzZWxmLgogICAgICByZXR1cm4gRmFsc2UKCiAgICBjbGFzcyBWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6ICAjIHB5bGludDogZGlzYWJsZT11c2VkLWJlZm9yZS1hc3NpZ25tZW50CiAgICAgIG9rID0gVHJ1ZSAgIyBSZWFsbHkgYSBub25sb2NhbC4KCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIHRyeToKICAgICAgICAgICMgVHJhbnNmb3JtcyBtdXN0IGJlIHBpY2tsYWJsZS4KICAgICAgICAgIHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX3RyYWNlPUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX3RyYWNlPUZhbHNlKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICBWaXNpdG9yLm9rID0gRmFsc2UKCiAgICAgIGRlZiB2aXNpdF92YWx1ZShzZWxmLCB2YWx1ZSwgXyk6CiAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgcHZhbHVlLlBEb25lKToKICAgICAgICAgIFZpc2l0b3Iub2sgPSBGYWxzZQoKICAgIHNlbGYudmlzaXQoVmlzaXRvcigpKQogICAgcmV0dXJuIFZpc2l0b3Iub2sKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgcmV0dXJuX2NvbnRleHQ9RmFsc2UpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBwaXBlbGluZV9jb250ZXh0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgogICAgY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KCkKICAgICMgTXV0YXRlcyBjb250ZXh0OyBwbGFjaW5nIGlubGluZSB3b3VsZCBmb3JjZSBkZXBlbmRlbmNlIG9uCiAgICAjIGFyZ3VtZW50IGV2YWx1YXRpb24gb3JkZXIuCiAgICByb290X3RyYW5zZm9ybV9pZCA9IGNvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQoc2VsZi5fcm9vdF90cmFuc2Zvcm0oKSkKICAgIHByb3RvID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZSgKICAgICAgICByb290X3RyYW5zZm9ybV9pZHM9W3Jvb3RfdHJhbnNmb3JtX2lkXSwKICAgICAgICBjb21wb25lbnRzPWNvbnRleHQudG9fcnVubmVyX2FwaSgpKQogICAgaWYgcmV0dXJuX2NvbnRleHQ6CiAgICAgIHJldHVybiBwcm90bywgY29udGV4dAogICAgZWxzZToKICAgICAgcmV0dXJuIHByb3RvCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBydW5uZXIsIG9wdGlvbnMsIHJldHVybl9jb250ZXh0PUZhbHNlKToKICAgICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKICAgIHAgPSBQaXBlbGluZShydW5uZXI9cnVubmVyLCBvcHRpb25zPW9wdGlvbnMpCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IHBpcGVsaW5lX2NvbnRleHQKICAgIGNvbnRleHQgPSBwaXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dChwcm90by5jb21wb25lbnRzKQogICAgcm9vdF90cmFuc2Zvcm1faWQsID0gcHJvdG8ucm9vdF90cmFuc2Zvcm1faWRzCiAgICBwLnRyYW5zZm9ybXNfc3RhY2sgPSBbCiAgICAgICAgY29udGV4dC50cmFuc2Zvcm1zLmdldF9ieV9pZChyb290X3RyYW5zZm9ybV9pZCldCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBUaGVzZSBhcmUgb25seSBuZWVkZWQgdG8gY29udGludWUgY29uc3RydWN0aW9uLiBPbWl0PwogICAgcC5hcHBsaWVkX2xhYmVscyA9IHNldChbCiAgICAgICAgdC51bmlxdWVfbmFtZSBmb3IgdCBpbiBwcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXMudmFsdWVzKCldKQogICAgZm9yIGlkIGluIHByb3RvLmNvbXBvbmVudHMucGNvbGxlY3Rpb25zOgogICAgICBwY29sbGVjdGlvbiA9IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkKICAgICAgcGNvbGxlY3Rpb24ucGlwZWxpbmUgPSBwCiAgICAgIGlmIG5vdCBwY29sbGVjdGlvbi5wcm9kdWNlcjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBwcm9kdWNlciBmb3IgJXMnICUgaWQpCgogICAgIyBJbmplY3QgUEJlZ2luIGlucHV0IHdoZXJlIG5lY2Vzc2FyeS4KICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ3JlYXRlCiAgICBoYXNfcGJlZ2luID0gW1JlYWQsIENyZWF0ZV0KICAgIGZvciBpZCBpbiBwcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXM6CiAgICAgIHRyYW5zZm9ybSA9IGNvbnRleHQudHJhbnNmb3Jtcy5nZXRfYnlfaWQoaWQpCiAgICAgIGlmIG5vdCB0cmFuc2Zvcm0uaW5wdXRzIGFuZCB0cmFuc2Zvcm0udHJhbnNmb3JtLl9fY2xhc3NfXyBpbiBoYXNfcGJlZ2luOgogICAgICAgIHRyYW5zZm9ybS5pbnB1dHMgPSAocHZhbHVlLlBCZWdpbihwKSwpCgogICAgaWYgcmV0dXJuX2NvbnRleHQ6CiAgICAgIHJldHVybiBwLCBjb250ZXh0CiAgICBlbHNlOgogICAgICByZXR1cm4gcAoKCmNsYXNzIFBpcGVsaW5lVmlzaXRvcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVmlzaXRvciBwYXR0ZXJuIGNsYXNzIHVzZWQgdG8gdHJhdmVyc2UgYSBEQUcgb2YgdHJhbnNmb3JtcwogICh1c2VkIGludGVybmFsbHkgYnkgUGlwZWxpbmUgZm9yIGJvb2tlZXBpbmcgcHVycG9zZXMpLgogICIiIgoKICBkZWYgdmlzaXRfdmFsdWUoc2VsZiwgdmFsdWUsIHByb2R1Y2VyX25vZGUpOgogICAgIiIiQ2FsbGJhY2sgZm9yIHZpc2l0aW5nIGEgUFZhbHVlIGluIHRoZSBwaXBlbGluZSBEQUcuCgogICAgQXJnczoKICAgICAgdmFsdWU6IFBWYWx1ZSB2aXNpdGVkICh0eXBpY2FsbHkgYSBQQ29sbGVjdGlvbiBpbnN0YW5jZSkuCiAgICAgIHByb2R1Y2VyX25vZGU6IEFwcGxpZWRQVHJhbnNmb3JtIG9iamVjdCB3aG9zZSB0cmFuc2Zvcm0gcHJvZHVjZWQgdGhlCiAgICAgICAgcHZhbHVlLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgIiIiQ2FsbGJhY2sgZm9yIHZpc2l0aW5nIGEgdHJhbnNmb3JtIGxlYWYgbm9kZSBpbiB0aGUgcGlwZWxpbmUgREFHLiIiIgogICAgcGFzcwoKICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAiIiJDYWxsYmFjayBmb3IgZW50ZXJpbmcgdHJhdmVyc2FsIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBub2RlLiIiIgogICAgcGFzcwoKICBkZWYgbGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAiIiJDYWxsYmFjayBmb3IgbGVhdmluZyB0cmF2ZXJzYWwgb2YgYSBjb21wb3NpdGUgdHJhbnNmb3JtIG5vZGUuIiIiCiAgICBwYXNzCgoKY2xhc3MgQXBwbGllZFBUcmFuc2Zvcm0ob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgdHJhbnNmb3JtIG5vZGUgcmVwcmVzZW50aW5nIGFuIGluc3RhbmNlIG9mIGFwcGx5aW5nIGEgUFRyYW5zZm9ybQogICh1c2VkIGludGVybmFsbHkgYnkgUGlwZWxpbmUgZm9yIGJvb2tlZXBpbmcgcHVycG9zZXMpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0cmFuc2Zvcm0sIGZ1bGxfbGFiZWwsIGlucHV0cyk6CiAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICMgTm90ZSB0aGF0IHdlIHdhbnQgdGhlIFBpcGVsaW5lVmlzaXRvciBjbGFzc2VzIHRvIHVzZSB0aGUgZnVsbF9sYWJlbCwKICAgICMgaW5wdXRzLCBzaWRlX2lucHV0cywgYW5kIG91dHB1dHMgZmllbGRzIGZyb20gdGhpcyBpbnN0YW5jZSBpbnN0ZWFkIG9mIHRoZQogICAgIyBvbmVzIG9mIHRoZSBQVHJhbnNmb3JtIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdC4gRG9pbmcgdGhpcyBwZXJtaXRzCiAgICAjIHJldXNpbmcgUFRyYW5zZm9ybSBpbnN0YW5jZXMgaW4gZGlmZmVyZW50IGNvbnRleHRzIChhcHBseSgpIGNhbGxzKSB3aXRob3V0CiAgICAjIGFueSBpbnRlcmZlcmVuY2UuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29tcG9zaXRlIHRyYW5zZm9ybXMuCiAgICBzZWxmLmZ1bGxfbGFiZWwgPSBmdWxsX2xhYmVsCiAgICBzZWxmLmlucHV0cyA9IGlucHV0cyBvciAoKQogICAgc2VsZi5zaWRlX2lucHV0cyA9ICgpIGlmIHRyYW5zZm9ybSBpcyBOb25lIGVsc2UgdHVwbGUodHJhbnNmb3JtLnNpZGVfaW5wdXRzKQogICAgc2VsZi5vdXRwdXRzID0ge30KICAgIHNlbGYucGFydHMgPSBbXQoKICAgICMgUGVyIHRhZyByZWZjb3VudCBkaWN0aW9uYXJ5IGZvciBQVmFsdWVzIGZvciB3aGljaCB0aGlzIG5vZGUgaXMgYQogICAgIyByb290IHByb2R1Y2VyLgogICAgc2VsZi5yZWZjb3VudHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChpbnQpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAiJXMoJXMsICVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuZnVsbF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShzZWxmLnRyYW5zZm9ybSkuX19uYW1lX18pCgogIGRlZiB1cGRhdGVfaW5wdXRfcmVmY291bnRzKHNlbGYpOgogICAgIiIiSW5jcmVtZW50IHJlZmNvdW50cyBmb3IgYWxsIHRyYW5zZm9ybXMgcHJvdmlkaW5nIGlucHV0cy4iIiIKCiAgICBkZWYgcmVhbF9wcm9kdWNlcihwdik6CiAgICAgIHJlYWwgPSBwdi5wcm9kdWNlcgogICAgICB3aGlsZSByZWFsLnBhcnRzOgogICAgICAgIHJlYWwgPSByZWFsLnBhcnRzWy0xXQogICAgICByZXR1cm4gcmVhbAoKICAgIGlmIG5vdCBzZWxmLmlzX2NvbXBvc2l0ZSgpOgogICAgICBmb3IgbWFpbl9pbnB1dCBpbiBzZWxmLmlucHV0czoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtYWluX2lucHV0LCBwdmFsdWUuUEJlZ2luKToKICAgICAgICAgIHJlYWxfcHJvZHVjZXIobWFpbl9pbnB1dCkucmVmY291bnRzW21haW5faW5wdXQudGFnXSArPSAxCiAgICAgIGZvciBzaWRlX2lucHV0IGluIHNlbGYuc2lkZV9pbnB1dHM6CiAgICAgICAgcmVhbF9wcm9kdWNlcihzaWRlX2lucHV0LnB2YWx1ZSkucmVmY291bnRzW3NpZGVfaW5wdXQucHZhbHVlLnRhZ10gKz0gMQoKICBkZWYgcmVwbGFjZV9vdXRwdXQoc2VsZiwgb3V0cHV0LCB0YWc9Tm9uZSk6CiAgICAiIiJSZXBsYWNlcyB0aGUgb3V0cHV0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHRhZyB3aXRoIHRoZSBnaXZlbiBvdXRwdXQuCgogICAgQXJnczoKICAgICAgb3V0cHV0OiByZXBsYWNlbWVudCBvdXRwdXQKICAgICAgdGFnOiB0YWcgb2YgdGhlIG91dHB1dCB0byBiZSByZXBsYWNlZC4KICAgICIiIgogICAgaWYgaXNpbnN0YW5jZShvdXRwdXQsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgIHNlbGYucmVwbGFjZV9vdXRwdXQob3V0cHV0W291dHB1dC5fbWFpbl90YWddKQogICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLlBWYWx1ZSk6CiAgICAgIHNlbGYub3V0cHV0c1t0YWddID0gb3V0cHV0CiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgb3V0cHV0IHR5cGU6ICVzIiAlIG91dHB1dCkKCiAgZGVmIGFkZF9vdXRwdXQoc2VsZiwgb3V0cHV0LCB0YWc9Tm9uZSk6CiAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgc2VsZi5hZGRfb3V0cHV0KG91dHB1dFtvdXRwdXQuX21haW5fdGFnXSkKICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXQsIHB2YWx1ZS5QVmFsdWUpOgogICAgICAjIFRPRE8oQkVBTS0xODMzKTogUmVxdWlyZSB0YWdzIHdoZW4gY2FsbGluZyB0aGlzIG1ldGhvZC4KICAgICAgaWYgdGFnIGlzIE5vbmUgYW5kIE5vbmUgaW4gc2VsZi5vdXRwdXRzOgogICAgICAgIHRhZyA9IGxlbihzZWxmLm91dHB1dHMpCiAgICAgIGFzc2VydCB0YWcgbm90IGluIHNlbGYub3V0cHV0cwogICAgICBzZWxmLm91dHB1dHNbdGFnXSA9IG91dHB1dAogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG91dHB1dCB0eXBlOiAlcyIgJSBvdXRwdXQpCgogIGRlZiBhZGRfcGFydChzZWxmLCBwYXJ0KToKICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcnQsIEFwcGxpZWRQVHJhbnNmb3JtKQogICAgc2VsZi5wYXJ0cy5hcHBlbmQocGFydCkKCiAgZGVmIGlzX2NvbXBvc2l0ZShzZWxmKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIGlzIGEgY29tcG9zaXRlIHRyYW5zZm9ybS4KCiAgICBBIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gaGFzIHBhcnRzIChpbm5lciB0cmFuc2Zvcm1zKSBvciBpc24ndCB0aGUKICAgIHByb2R1Y2VyIGZvciBhbnkgb2YgaXRzIG91dHB1dHMuIChBbiBleGFtcGxlIG9mIGEgdHJhbnNmb3JtIHRoYXQKICAgIGlzIG5vdCBhIHByb2R1Y2VyIGlzIG9uZSB0aGF0IHJldHVybnMgaXRzIGlucHV0cyBpbnN0ZWFkLikKICAgICIiIgogICAgcmV0dXJuIGJvb2woc2VsZi5wYXJ0cykgb3IgYWxsKAogICAgICAgIHB2YWwucHJvZHVjZXIgaXMgbm90IHNlbGYgZm9yIHB2YWwgaW4gc2VsZi5vdXRwdXRzLnZhbHVlcygpKQoKICBkZWYgdmlzaXQoc2VsZiwgdmlzaXRvciwgcGlwZWxpbmUsIHZpc2l0ZWQpOgogICAgIiIiVmlzaXRzIGFsbCBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBub2RlLiIiIgoKICAgIGZvciBwdmFsIGluIHNlbGYuaW5wdXRzOgogICAgICBpZiBwdmFsIG5vdCBpbiB2aXNpdGVkIGFuZCBub3QgaXNpbnN0YW5jZShwdmFsLCBwdmFsdWUuUEJlZ2luKToKICAgICAgICBhc3NlcnQgcHZhbC5wcm9kdWNlciBpcyBub3QgTm9uZQogICAgICAgIHB2YWwucHJvZHVjZXIudmlzaXQodmlzaXRvciwgcGlwZWxpbmUsIHZpc2l0ZWQpCiAgICAgICAgIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHZpc2l0ZWQgbm93IHNpbmNlIHdlIHZpc2l0IG91dHB1dHMgdG9vLgogICAgICAgIGFzc2VydCBwdmFsIGluIHZpc2l0ZWQsIHB2YWwKCiAgICAjIFZpc2l0IHNpZGUgaW5wdXRzLgogICAgZm9yIHB2YWwgaW4gc2VsZi5zaWRlX2lucHV0czoKICAgICAgaWYgaXNpbnN0YW5jZShwdmFsLCBwdmFsdWUuQXNTaWRlSW5wdXQpIGFuZCBwdmFsLnB2YWx1ZSBub3QgaW4gdmlzaXRlZDoKICAgICAgICBwdmFsID0gcHZhbC5wdmFsdWUgICMgVW5wYWNrIG1hcmtlci1vYmplY3Qtd3JhcHBlZCBwdmFsdWUuCiAgICAgICAgYXNzZXJ0IHB2YWwucHJvZHVjZXIgaXMgbm90IE5vbmUKICAgICAgICBwdmFsLnByb2R1Y2VyLnZpc2l0KHZpc2l0b3IsIHBpcGVsaW5lLCB2aXNpdGVkKQogICAgICAgICMgVGhlIHZhbHVlIHNob3VsZCBiZSB2aXNpdGVkIG5vdyBzaW5jZSB3ZSB2aXNpdCBvdXRwdXRzIHRvby4KICAgICAgICBhc3NlcnQgcHZhbCBpbiB2aXNpdGVkCiAgICAgICAgIyBUT0RPKHNpbHZpdWMpOiBJcyB0aGVyZSBhIHdheSB0byBzaWduYWwgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgYSBzaWRlCiAgICAgICAgIyB2YWx1ZT8gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIHNhbWUgUFZhbHVlIGNhbiBiZSByZWFjaGFibGUgdGhyb3VnaAogICAgICAgICMgbXVsdGlwbGUgcGF0aHMgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0IHRoZSB2YWx1ZQogICAgICAgICMgd2lsbCBiZSB2aXNpdGVkIGFzIGEgc2lkZSB2YWx1ZS4KCiAgICAjIFZpc2l0IGEgY29tcG9zaXRlIG9yIHByaW1pdGl2ZSB0cmFuc2Zvcm0uCiAgICBpZiBzZWxmLmlzX2NvbXBvc2l0ZSgpOgogICAgICB2aXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZikKICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0czoKICAgICAgICBwYXJ0LnZpc2l0KHZpc2l0b3IsIHBpcGVsaW5lLCB2aXNpdGVkKQogICAgICB2aXNpdG9yLmxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZikKICAgIGVsc2U6CiAgICAgIHZpc2l0b3IudmlzaXRfdHJhbnNmb3JtKHNlbGYpCgogICAgIyBWaXNpdCB0aGUgb3V0cHV0cyAob25lIG9yIG1vcmUpLiBJdCBpcyBlc3NlbnRpYWwgdG8gbWFyayBhcyB2aXNpdGVkIHRoZQogICAgIyB0YWdnZWQgUENvbGxlY3Rpb25zIG9mIHRoZSBEb091dHB1dHNUdXBsZSBvYmplY3QuIEEgdGFnZ2VkIFBDb2xsZWN0aW9uIGlzCiAgICAjIGNvbm5lY3RlZCBkaXJlY3RseSB3aXRoIGl0cyBwcm9kdWNlciAoYSBtdWx0aS1vdXRwdXQgUGFyRG8pLCBidXQgdGhlCiAgICAjIG91dHB1dCBvZiBzdWNoIGEgdHJhbnNmb3JtIGlzIHRoZSBjb250YWluaW5nIERvT3V0cHV0c1R1cGxlLCBub3QgdGhlCiAgICAjIFBDb2xsZWN0aW9uIGluc2lkZSBpdC4gV2l0aG91dCB0aGUgY29kZSBiZWxvdyBhIHRhZ2dlZCBQQ29sbGVjdGlvbiB3aWxsCiAgICAjIG5vdCBiZSBtYXJrZWQgYXMgdmlzaXRlZCB3aGlsZSB2aXNpdGluZyBpdHMgcHJvZHVjZXIuCiAgICBmb3IgcHZhbCBpbiBzZWxmLm91dHB1dHMudmFsdWVzKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgIGVsc2U6CiAgICAgICAgcHZhbHMgPSAocHZhbCwpCiAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgIGlmIHYgbm90IGluIHZpc2l0ZWQ6CiAgICAgICAgICB2aXNpdGVkLmFkZCh2KQogICAgICAgICAgdmlzaXRvci52aXNpdF92YWx1ZSh2LCBzZWxmKQoKICBkZWYgbmFtZWRfaW5wdXRzKHNlbGYpOgogICAgIyBUT0RPKEJFQU0tMTgzMyk6IFB1c2ggbmFtZXMgdXAgaW50byB0aGUgc2RrIGNvbnN0cnVjdGlvbi4KICAgIG1haW5faW5wdXRzID0ge3N0cihpeCk6IGlucHV0CiAgICAgICAgICAgICAgICAgICBmb3IgaXgsIGlucHV0IGluIGVudW1lcmF0ZShzZWxmLmlucHV0cykKICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5wdXQsIHB2YWx1ZS5QQ29sbGVjdGlvbil9CiAgICBzaWRlX2lucHV0cyA9IHsnc2lkZSVzJyAlIGl4OiBzaS5wdmFsdWUKICAgICAgICAgICAgICAgICAgIGZvciBpeCwgc2kgaW4gZW51bWVyYXRlKHNlbGYuc2lkZV9pbnB1dHMpfQogICAgcmV0dXJuIGRpY3QobWFpbl9pbnB1dHMsICoqc2lkZV9pbnB1dHMpCgogIGRlZiBuYW1lZF9vdXRwdXRzKHNlbGYpOgogICAgcmV0dXJuIHtzdHIodGFnKTogb3V0cHV0IGZvciB0YWcsIG91dHB1dCBpbiBzZWxmLm91dHB1dHMuaXRlbXMoKQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLlBDb2xsZWN0aW9uKX0KCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgoKICAgIGRlZiB0cmFuc2Zvcm1fdG9fcnVubmVyX2FwaSh0cmFuc2Zvcm0sIGNvbnRleHQpOgogICAgICBpZiB0cmFuc2Zvcm0gaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiB0cmFuc2Zvcm0udG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybSgKICAgICAgICB1bmlxdWVfbmFtZT1zZWxmLmZ1bGxfbGFiZWwsCiAgICAgICAgc3BlYz10cmFuc2Zvcm1fdG9fcnVubmVyX2FwaShzZWxmLnRyYW5zZm9ybSwgY29udGV4dCksCiAgICAgICAgc3VidHJhbnNmb3Jtcz1bY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZChwYXJ0LCBsYWJlbD1wYXJ0LmZ1bGxfbGFiZWwpCiAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0c10sCiAgICAgICAgaW5wdXRzPXt0YWc6IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9pZChwYykKICAgICAgICAgICAgICAgIGZvciB0YWcsIHBjIGluIHNlbGYubmFtZWRfaW5wdXRzKCkuaXRlbXMoKX0sCiAgICAgICAgb3V0cHV0cz17c3RyKHRhZyk6IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9pZChvdXQpCiAgICAgICAgICAgICAgICAgZm9yIHRhZywgb3V0IGluIHNlbGYubmFtZWRfb3V0cHV0cygpLml0ZW1zKCl9LAogICAgICAgICMgVE9ETyhCRUFNLTExNSk6IGRpc3BsYXlfZGF0YQogICAgICAgIGRpc3BsYXlfZGF0YT1Ob25lKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICBkZWYgaXNfc2lkZV9pbnB1dCh0YWcpOgogICAgICAjIEFzIHBlciBuYW1lZF9pbnB1dHMoKSBhYm92ZS4KICAgICAgcmV0dXJuIHRhZy5zdGFydHN3aXRoKCdzaWRlJykKICAgIG1haW5faW5wdXRzID0gW2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkKICAgICAgICAgICAgICAgICAgIGZvciB0YWcsIGlkIGluIHByb3RvLmlucHV0cy5pdGVtcygpCiAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNfc2lkZV9pbnB1dCh0YWcpXQogICAgIyBPcmRlcmluZyBpcyBpbXBvcnRhbnQgaGVyZS4KICAgIGluZGV4ZWRfc2lkZV9pbnB1dHMgPSBbKGludCh0YWdbNDpdKSwgY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2J5X2lkKGlkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRhZywgaWQgaW4gcHJvdG8uaW5wdXRzLml0ZW1zKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNfc2lkZV9pbnB1dCh0YWcpXQogICAgc2lkZV9pbnB1dHMgPSBbc2kgZm9yIF8sIHNpIGluIHNvcnRlZChpbmRleGVkX3NpZGVfaW5wdXRzKV0KICAgIHJlc3VsdCA9IEFwcGxpZWRQVHJhbnNmb3JtKAogICAgICAgIHBhcmVudD1Ob25lLAogICAgICAgIHRyYW5zZm9ybT1wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpKHByb3RvLnNwZWMsIGNvbnRleHQpLAogICAgICAgIGZ1bGxfbGFiZWw9cHJvdG8udW5pcXVlX25hbWUsCiAgICAgICAgaW5wdXRzPW1haW5faW5wdXRzKQogICAgaWYgcmVzdWx0LnRyYW5zZm9ybSBhbmQgcmVzdWx0LnRyYW5zZm9ybS5zaWRlX2lucHV0czoKICAgICAgZm9yIHNpLCBwY29sbCBpbiB6aXAocmVzdWx0LnRyYW5zZm9ybS5zaWRlX2lucHV0cywgc2lkZV9pbnB1dHMpOgogICAgICAgIHNpLnB2YWx1ZSA9IHBjb2xsCiAgICAgIHJlc3VsdC5zaWRlX2lucHV0cyA9IHR1cGxlKHJlc3VsdC50cmFuc2Zvcm0uc2lkZV9pbnB1dHMpCiAgICByZXN1bHQucGFydHMgPSBbCiAgICAgICAgY29udGV4dC50cmFuc2Zvcm1zLmdldF9ieV9pZChpZCkgZm9yIGlkIGluIHByb3RvLnN1YnRyYW5zZm9ybXNdCiAgICByZXN1bHQub3V0cHV0cyA9IHsKICAgICAgICBOb25lIGlmIHRhZyA9PSAnTm9uZScgZWxzZSB0YWc6IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkKICAgICAgICBmb3IgdGFnLCBpZCBpbiBwcm90by5vdXRwdXRzLml0ZW1zKCl9CiAgICAjIFRoaXMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCBieSBzb21lIHJ1bm5lcnMuCiAgICBpZiBwcm90by5zcGVjLnVybiA9PSB1cm5zLlBBUkRPX1RSQU5TRk9STToKICAgICAgcmVzdWx0LnRyYW5zZm9ybS5vdXRwdXRfdGFncyA9IHNldChwcm90by5vdXRwdXRzLmtleXMoKSkuZGlmZmVyZW5jZSgKICAgICAgICAgIHsnTm9uZSd9KQogICAgaWYgbm90IHJlc3VsdC5wYXJ0czoKICAgICAgZm9yIHRhZywgcGNvbGxfaWQgaW4gcHJvdG8ub3V0cHV0cy5pdGVtcygpOgogICAgICAgIGlmIHBjb2xsX2lkIG5vdCBpbiBwcm90by5pbnB1dHMudmFsdWVzKCk6CiAgICAgICAgICBwYyA9IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChwY29sbF9pZCkKICAgICAgICAgIHBjLnByb2R1Y2VyID0gcmVzdWx0CiAgICAgICAgICBwYy50YWcgPSBOb25lIGlmIHRhZyA9PSAnTm9uZScgZWxzZSB0YWcKICAgIHJlc3VsdC51cGRhdGVfaW5wdXRfcmVmY291bnRzKCkKICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBQVHJhbnNmb3JtT3ZlcnJpZGUob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEdpdmVzIGEgbWF0Y2hlciBhbmQgcmVwbGFjZW1lbnRzIGZvciBtYXRjaGluZyBQVHJhbnNmb3Jtcy4KCiAgVE9ETzogVXBkYXRlIHRoaXMgdG8gc3VwcG9ydCBjYXNlcyB3aGVyZSBpbnB1dCBhbmQvb3VyIG91dHB1dCB0eXBlcyBhcmUKICBkaWZmZXJlbnQuCiAgIiIiCiAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X21hdGNoZXIoc2VsZik6CiAgICAiIiJHaXZlcyBhIG1hdGNoZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdG8gcGVyZm9ybSB0aGlzIG92ZXJyaWRlLgoKICAgIFJldHVybnM6CiAgICAgIGEgY2FsbGFibGUgdGhhdCB0YWtlcyBhbiBBcHBsaWVkUFRyYW5zZm9ybSBhcyBhIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhCiAgICAgIGJvb2xlYW4gYXMgYSByZXN1bHQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHB0cmFuc2Zvcm0pOgogICAgIiIiUHJvdmlkZXMgYSBydW5uZXIgc3BlY2lmaWMgb3ZlcnJpZGUgZm9yIGEgZ2l2ZW4gUFRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBwdHJhbnNmb3JtOiBQVHJhbnNmb3JtIHRvIGJlIHJlcGxhY2VkLgogICAgUmV0dXJuczoKICAgICAgQSBQVHJhbnNmb3JtIHRoYXQgd2lsbCBiZSB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBQVHJhbnNmb3JtIGdpdmVuIGFzIGFuCiAgICAgIGFyZ3VtZW50LgogICAgIiIiCiAgICAjIFJldHVybnMgYSBQVHJhbnNmb3JtUmVwbGFjZW1lbnQKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXIkAQAAKFgfAAAAQXBwbGllZFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaVgDAAAAZGVmTfACTQMDh1gsAAAAUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZk1BA01NA4dYPgAAAFBpcGVsaW5lLl92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlLlZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZN/wFNBwKHWBsAAABQaXBlbGluZS5fY3VycmVudF90cmFuc2Zvcm1YAwAAAGRlZkumS6mHWCsAAABQaXBlbGluZS5fcmVwbGFjZS5UcmFuc2Zvcm1VcGRhdGVyLl9faW5pdF9fWAMAAABkZWZLwkvEh1gUAAAAUGlwZWxpbmUucmVwbGFjZV9hbGxYAwAAAGRlZk0vAU1GAYdYLgAAAFBpcGVsaW5lLl92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlLlZpc2l0b3JYBQAAAGNsYXNzTfkBTQsCh1gQAAAAUGlwZWxpbmUub3B0aW9uc1gDAAAAZGVmS59LpYdYMAAAAFBpcGVsaW5lLl9jaGVja19yZXBsYWNlbWVudC5SZXBsYWNlbWVudFZhbGlkYXRvclgFAAAAY2xhc3NNJwFNLAGHWDUAAABQaXBlbGluZS5fcmVwbGFjZS5UcmFuc2Zvcm1VcGRhdGVyLl9yZXBsYWNlX2lmX25lZWRlZFgDAAAAZGVmS8VL8IdYPAAAAFBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXIuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmS/FL84dYMgAAAFBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXIudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZL9Ev2h1g+AAAAUGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZk0HAU0JAYdYGAAAAFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTR8CTT4Ch1gXAAAAQXBwbGllZFBUcmFuc2Zvcm0udmlzaXRYAwAAAGRlZk2zAk3iAodYGwAAAFBpcGVsaW5lVmlzaXRvci52aXNpdF92YWx1ZVgDAAAAZGVmTUcCTVACh1goAAAAQXBwbGllZFBUcmFuc2Zvcm0udXBkYXRlX2lucHV0X3JlZmNvdW50c1gDAAAAZGVmTXsCTYoCh1gTAAAAUGlwZWxpbmUuX19yZWR1Y2VfX1gDAAAAZGVmTesBTfEBh1ghAAAAQXBwbGllZFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNBANNKwOHWA4AAABQaXBlbGluZS5hcHBseVgDAAAAZGVmTXQBTeoBh1giAAAAUGlwZWxpbmUuX3JlcGxhY2UuVHJhbnNmb3JtVXBkYXRlclgFAAAAY2xhc3NLv0v2h1hAAAAAUGlwZWxpbmUuX2NoZWNrX3JlcGxhY2VtZW50LlJlcGxhY2VtZW50VmFsaWRhdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTSgBTSwBh1gcAAAAQXBwbGllZFBUcmFuc2Zvcm0uYWRkX291dHB1dFgDAAAAZGVmTZkCTaQCh1g6AAAAUGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvci52aXNpdF92YWx1ZVgDAAAAZGVmTQgCTQsCh1gRAAAAUGlwZWxpbmUuX3JlcGxhY2VYAwAAAGRlZku2TSMBh1gRAAAAUGlwZWxpbmUuX19pbml0X19YAwAAAGRlZktbS56HWBgAAABQaXBlbGluZS5fcm9vdF90cmFuc2Zvcm1YAwAAAGRlZkuqS62HWBsAAABQaXBlbGluZS5fY2hlY2tfcmVwbGFjZW1lbnRYAwAAAGRlZk0kAU0uAYdYHwAAAFBpcGVsaW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZk1RAk1UAodYHgAAAEFwcGxpZWRQVHJhbnNmb3JtLm5hbWVkX2lucHV0c1gDAAAAZGVmTeMCTesCh1gpAAAAUGlwZWxpbmVWaXNpdG9yLmxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZk1ZAk1cAodYFgAAAFBpcGVsaW5lLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk0PAk0eAodYCAAAAFBpcGVsaW5lWAUAAABjbGFzc0tMTT4Ch1g3AAAAQXBwbGllZFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaS50cmFuc2Zvcm1fdG9fcnVubmVyX2FwaVgDAAAAZGVmTfMCTfgCh1hIAAAAUGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtWAMAAABkZWZN/AFN/gGHWCQAAABQaXBlbGluZS5fcmVwbGFjZS5JbnB1dE91dHB1dFVwZGF0ZXJYBQAAAGNsYXNzS/pNGwGHWC8AAABBcHBsaWVkUFRyYW5zZm9ybS5mcm9tX3J1bm5lcl9hcGkuaXNfc2lkZV9pbnB1dFgDAAAAZGVmTQYDTQkDh1g0AAAAUGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTQoBTRsBh1gPAAAAUGlwZWxpbmVWaXNpdG9yWAUAAABjbGFzc01AAk1cAodYGgAAAEFwcGxpZWRQVHJhbnNmb3JtLmFkZF9wYXJ0WAMAAABkZWZNpQJNqAKHWCMAAABQaXBlbGluZS5fcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseVgDAAAAZGVmS65LtYdYDgAAAFBpcGVsaW5lLnZpc2l0WAMAAABkZWZNXwFNcwGHWBoAAABBcHBsaWVkUFRyYW5zZm9ybS5fX3JlcHJfX1gDAAAAZGVmTXcCTXoCh1gSAAAAUGlwZWxpbmUuX19lbnRlcl9fWAMAAABkZWZNWAFNWgGHWBEAAABQaXBlbGluZS5fX2V4aXRfX1gDAAAAZGVmTVsBTV4Bh1gpAAAAUGlwZWxpbmVWaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZk1VAk1YAodYGgAAAEFwcGxpZWRQVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZNZQJNdgKHWB8AAABBcHBsaWVkUFRyYW5zZm9ybS5uYW1lZF9vdXRwdXRzWAMAAABkZWZN7AJN7wKHWB4AAABBcHBsaWVkUFRyYW5zZm9ybS5pc19jb21wb3NpdGVYAwAAAGRlZk2pAk2yAodYNgAAAEFwcGxpZWRQVHJhbnNmb3JtLnVwZGF0ZV9pbnB1dF9yZWZjb3VudHMucmVhbF9wcm9kdWNlclgDAAAAZGVmTX4CTYMCh1gmAAAAUGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGVYAwAAAGRlZk3yAU0OAodYEgAAAFBUcmFuc2Zvcm1PdmVycmlkZVgFAAAAY2xhc3NNLQNNTQOHWAwAAABQaXBlbGluZS5ydW5YAwAAAGRlZk1HAU1XAYdYEQAAAEFwcGxpZWRQVHJhbnNmb3JtWAUAAABjbGFzc01eAk0rA4dYLQAAAFBpcGVsaW5lLl9yZXBsYWNlLklucHV0T3V0cHV0VXBkYXRlci5fX2luaXRfX1gDAAAAZGVmTQQBTQYBh1geAAAAUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9tYXRjaGVyWAMAAABkZWZNNwNNQAOHWCAAAABBcHBsaWVkUFRyYW5zZm9ybS5yZXBsYWNlX291dHB1dFgDAAAAZGVmTYsCTZgCh3V9ciUBAAAoWBgAAABQaXBlbGluZS5mcm9tX3J1bm5lcl9hcGlYFAAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lciYBAABYLAAAAFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtaiYBAABYFgAAAFBpcGVsaW5lLnRvX3J1bm5lcl9hcGlqJgEAAFgOAAAAUGlwZWxpbmUuYXBwbHlqJgEAAFgIAAAAUGlwZWxpbmVqJgEAAFgSAAAAUFRyYW5zZm9ybU92ZXJyaWRlaiYBAABYDAAAAFBpcGVsaW5lLnJ1bmomAQAAWBQAAABQaXBlbGluZS5yZXBsYWNlX2FsbGomAQAAWA4AAABQaXBlbGluZS52aXNpdGomAQAAWB4AAABQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X21hdGNoZXJqJgEAAHVoilgUAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmVyJwEAAIWBcigBAAB9cikBAABidHIqAQAAVTFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyKFgRCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJXcmFwcGVyIG9mIEJlYW0gcnVubmVycyB0aGF0J3MgYnVpbHQgZm9yIHJ1bm5pbmcgYW5kIHZlcmlmeWluZyBlMmUgdGVzdHMuIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEdvb2dsZUNsb3VkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVGVzdE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lciBpbXBvcnQgRGF0YWZsb3dSdW5uZXIKCl9fYWxsX18gPSBbJ1Rlc3REYXRhZmxvd1J1bm5lciddCgoKY2xhc3MgVGVzdERhdGFmbG93UnVubmVyKERhdGFmbG93UnVubmVyKToKICBkZWYgcnVuKHNlbGYsIHBpcGVsaW5lKToKICAgICIiIkV4ZWN1dGUgdGVzdCBwaXBlbGluZSBhbmQgdmVyaWZ5IHRlc3QgbWF0Y2hlciIiIgogICAgb3B0aW9ucyA9IHBpcGVsaW5lLl9vcHRpb25zLnZpZXdfYXMoVGVzdE9wdGlvbnMpCiAgICBvbl9zdWNjZXNzX21hdGNoZXIgPSBvcHRpb25zLm9uX3N1Y2Nlc3NfbWF0Y2hlcgoKICAgICMgW0JFQU0tMTg4OV0gRG8gbm90IHNlbmQgdGhpcyB0byByZW1vdGUgd29ya2VycyBhbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAjIHNlbmQgdGhpcyBvcHRpb24gdG8gcmVtb3RlIGV4ZWN1dG9ycy4KICAgIG9wdGlvbnMub25fc3VjY2Vzc19tYXRjaGVyID0gTm9uZQoKICAgIHNlbGYucmVzdWx0ID0gc3VwZXIoVGVzdERhdGFmbG93UnVubmVyLCBzZWxmKS5ydW4ocGlwZWxpbmUpCiAgICBpZiBzZWxmLnJlc3VsdC5oYXNfam9iOgogICAgICBwcm9qZWN0ID0gcGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnByb2plY3QKICAgICAgcmVnaW9uX2lkID0gcGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnJlZ2lvbgogICAgICBqb2JfaWQgPSBzZWxmLnJlc3VsdC5qb2JfaWQoKQogICAgICAjIFRPRE8obWFya2ZseWhpZ2gpKEJFQU0tMTg5MCk6IFVzZSBwcmludCBzaW5jZSBOb3NlIGRvc2VuJ3Qgc2hvdyBsb2dzCiAgICAgICMgaW4gc29tZSBjYXNlcy4KICAgICAgcHJpbnQgKAogICAgICAgICAgJ0ZvdW5kOiBodHRwczovL2NvbnNvbGUuY2xvdWQuZ29vZ2xlLmNvbS9kYXRhZmxvdy9qb2JzRGV0YWlsJwogICAgICAgICAgJy9sb2NhdGlvbnMvJXMvam9icy8lcz9wcm9qZWN0PSVzJyAlIChyZWdpb25faWQsIGpvYl9pZCwgcHJvamVjdCkpCiAgICBzZWxmLnJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCgogICAgaWYgb25fc3VjY2Vzc19tYXRjaGVyOgogICAgICBmcm9tIGhhbWNyZXN0IGltcG9ydCBhc3NlcnRfdGhhdCBhcyBoY19hc3NlcnRfdGhhdAogICAgICBoY19hc3NlcnRfdGhhdChzZWxmLnJlc3VsdCwgcGlja2xlci5sb2Fkcyhvbl9zdWNjZXNzX21hdGNoZXIpKQoKICAgIHJldHVybiBzZWxmLnJlc3VsdAp9cisBAAAoWBYAAABUZXN0RGF0YWZsb3dSdW5uZXIucnVuWAMAAABkZWZLHks4h1gSAAAAVGVzdERhdGFmbG93UnVubmVyWAUAAABjbGFzc0sdSziHdX1yLAEAAChYFgAAAFRlc3REYXRhZmxvd1J1bm5lci5ydW5YMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJyLQEAAFgSAAAAVGVzdERhdGFmbG93UnVubmVyai0BAAB1aIpYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJyLgEAAIWBci8BAAB9cjABAABidHIxAQAAVSBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc3IyAQAAKFj0ZQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJIZWxwZXIgZnVuY3Rpb25zIGFuZCB0ZXN0IGhhcm5lc3NlcyBmb3Igc291cmNlIGltcGxlbWVudGF0aW9ucy4KClRoaXMgbW9kdWxlIGNvbnRhaW5zIGhlbHBlciBmdW5jdGlvbnMgYW5kIHRlc3QgaGFybmVzc2VzIGZvciBjaGVja2luZwpjb3JyZWN0bmVzcyBvZiBzb3VyY2UgKGEgc3ViY2xhc3Mgb2YgYGBpb2Jhc2UuQm91bmRlZFNvdXJjZWBgKSBhbmQgcmFuZ2UKdHJhY2tlciAoYSBzdWJjbGFzcyBvZmBgaW9iYXNlLlJhbmdlVHJhY2tlcmBgKSBpbXBsZW1lbnRhdGlvbnMuCgpDb250YWlucyBhIGZldyBsaWdodHdlaWdodCB1dGlsaXRpZXMgKGUuZy4gcmVhZGluZyBpdGVtcyBmcm9tIGEgc291cmNlIHN1Y2ggYXMKYGByZWFkRnJvbVNvdXJjZSgpYGAsIGFzIHdlbGwgYXMgaGVhdnl3ZWlnaHQgcHJvcGVydHkgdGVzdGluZyBhbmQgc3RyZXNzCnRlc3RpbmcgaGFybmVzc2VzIHRoYXQgaGVscCBnZXR0aW5nIGEgbGFyZ2UgYW1vdW50IG9mIHRlc3QgY292ZXJhZ2Ugd2l0aCBmZXcKY29kZS4KCk1vc3Qgbm90YWJsZSBvbmVzIGFyZToKKiBgYGFzc2VydFNvdXJjZXNFcXVhbFJlZmVyZW5jZVNvdXJjZSgpYGAgaGVscHMgdGVzdGluZyB0aGF0IHRoZSBkYXRhIHJlYWQgYnkKdGhlIHVuaW9uIG9mIHNvdXJjZXMgcHJvZHVjZWQgYnkgYGBCb3VuZGVkU291cmNlLnNwbGl0KClgYCBpcyB0aGUgc2FtZSBhcyBkYXRhCnJlYWQgYnkgdGhlIG9yaWdpbmFsIHNvdXJjZS4KKiBJZiB5b3VyIHNvdXJjZSBpbXBsZW1lbnRzIGR5bmFtaWMgd29yayByZWJhbGFuY2luZywgdXNlIHRoZQpgYGFzc2VydFNwbGl0QXRGcmFjdGlvbigpYGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyAtIHRoZXkgdGVzdCBiZWhhdmlvciBvZgpgYFJhbmdlVHJhY2tlci50cnlfc3BsaXQoKWBgLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IHZhcmlvdXMgY29uc2lzdGVuY3kKcHJvcGVydGllcyBhcmUgcmVzcGVjdGVkIGFuZCB0aGUgdG90YWwgc2V0IG9mIGRhdGEgcmVhZCBieSB0aGUgc291cmNlIGlzCnByZXNlcnZlZCB3aGVuIHNwbGl0cyBoYXBwZW4uIFVzZSBgYGFzc2VydFNwbGl0QXRGcmFjdGlvbkJlaGF2aW9yKClgYCB0byB0ZXN0CmluZGl2aWR1YWwgY2FzZXMgb2YgYGBSYW5nZVRyYWNrZXIudHJ5X3NwbGl0KClgYCBhbmQgdXNlCmBgYXNzZXJ0U3BsaXRBdEZyYWN0aW9uRXhoYXVzdGl2ZSgpYGAgYXMgYSBoZWF2eS13ZWlnaHQgc3RyZXNzIHRlc3QgaW5jbHVkaW5nCmNvbmN1cnJlbmN5LiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdG8gdXNlIGJvdGguCgpGb3IgZXhhbXBsZSB1c2FnZXMsIHNlZSB0aGUgdW5pdCB0ZXN0cyBvZiBtb2R1bGVzIHN1Y2ggYXMKICogYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHNfdGVzdC5weQogKiBhcGFjaGVfYmVhbS5pby5hdnJvaW9fdGVzdC5weQoiIiIKCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHdlYWtyZWYKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQpmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKCl9fYWxsX18gPSBbJ3JlYWRfZnJvbV9zb3VyY2UnLAogICAgICAgICAgICdhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlJywKICAgICAgICAgICAnYXNzZXJ0X3JlZW50cmFudF9yZWFkc19zdWNjZWVkJywKICAgICAgICAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yJywKICAgICAgICAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeScsCiAgICAgICAgICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9leGhhdXN0aXZlJywKICAgICAgICAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzJywKICAgICAgICAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50J10KCgpjbGFzcyBFeHBlY3RlZFNwbGl0T3V0Y29tZShvYmplY3QpOgogIE1VU1RfU1VDQ0VFRF9BTkRfQkVfQ09OU0lTVEVOVCA9IDEKICBNVVNUX0ZBSUwgPSAyCiAgTVVTVF9CRV9DT05TSVNURU5UX0lGX1NVQ0NFRURTID0gMwoKClNwbGl0QXRGcmFjdGlvblJlc3VsdCA9IG5hbWVkdHVwbGUoCiAgICAnU3BsaXRBdEZyYWN0aW9uUmVzdWx0JywgJ251bV9wcmltYXJ5X2l0ZW1zIG51bV9yZXNpZHVhbF9pdGVtcycpCgpTcGxpdEZyYWN0aW9uU3RhdGlzdGljcyA9IG5hbWVkdHVwbGUoCiAgICAnU3BsaXRGcmFjdGlvblN0YXRpc3RpY3MnLAogICAgJ3N1Y2Nlc3NmdWxfZnJhY3Rpb25zIG5vbl90cml2aWFsX2ZyYWN0aW9ucycpCgoKZGVmIHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICIiIlJlYWRzIGVsZW1lbnRzIGZyb20gdGhlIGdpdmVuIGBgYEJvdW5kZWRTb3VyY2VgYGAuCgogIE9ubHkgcmVhZHMgZWxlbWVudHMgd2l0aGluIHRoZSBnaXZlbiBwb3NpdGlvbiByYW5nZS4KICBBcmdzOgogICAgc291cmNlICh+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAgaW1wbGVtZW50YXRpb24uCiAgICBzdGFydF9wb3NpdGlvbiAoaW50KTogc3RhcnQgcG9zaXRpb24gZm9yIHJlYWRpbmcuCiAgICBzdG9wX3Bvc2l0aW9uIChpbnQpOiBzdG9wIHBvc2l0aW9uIGZvciByZWFkaW5nLgoKICBSZXR1cm5zOgogICAgTGlzdFtzdHJdOiB0aGUgc2V0IG9mIHZhbHVlcyByZWFkIGZyb20gdGhlIHNvdXJjZXMuCiAgIiIiCiAgdmFsdWVzID0gW10KICByYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogIGFzc2VydCBpc2luc3RhbmNlKHJhbmdlX3RyYWNrZXIsIGlvYmFzZS5SYW5nZVRyYWNrZXIpCiAgcmVhZGVyID0gc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICBmb3IgdmFsdWUgaW4gcmVhZGVyOgogICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKCiAgcmV0dXJuIHZhbHVlcwoKCmRlZiBfVGhyZWFkUG9vbCh0aHJlYWRzKToKICAjIFRocmVhZFBvb2wgY3Jhc2hlcyBpbiBvbGQgdmVyc2lvbnMgb2YgUHl0aG9uICg8IDIuNy41KSBpZiBjcmVhdGVkIGZyb20gYQogICMgY2hpbGQgdGhyZWFkLiAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwMDE1KQogIGlmIG5vdCBoYXNhdHRyKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCAnX2NoaWxkcmVuJyk6CiAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fY2hpbGRyZW4gPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKICByZXR1cm4gVGhyZWFkUG9vbCh0aHJlYWRzKQoKCmRlZiBhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlKHJlZmVyZW5jZV9zb3VyY2VfaW5mbywgc291cmNlc19pbmZvKToKICAiIiJUZXN0cyBpZiBhIHJlZmVyZW5jZSBzb3VyY2UgaXMgZXF1YWwgdG8gYSBnaXZlbiBzZXQgb2Ygc291cmNlcy4KCiAgR2l2ZW4gYSByZWZlcmVuY2Ugc291cmNlIChhIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYAogIGFuZCBhIHBvc2l0aW9uIHJhbmdlKSBhbmQgYSBsaXN0IG9mIHNvdXJjZXMsIGFzc2VydCB0aGF0IHRoZSB1bmlvbiBvZiB0aGUKICByZWNvcmRzIHJlYWQgZnJvbSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIGVxdWFsIHRvIHRoZSByZWNvcmRzIHJlYWQgZnJvbSB0aGUKICByZWZlcmVuY2Ugc291cmNlLgoKICBBcmdzOgogICAgcmVmZXJlbmNlX3NvdXJjZV9pbmZvXAogICAgICAgIChUdXBsZVt+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UsIGludCwgaW50XSk6CiAgICAgIGEgdGhyZWUtdHVwbGUgdGhhdCBnaXZlcyB0aGUgcmVmZXJlbmNlCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCwgcG9zaXRpb24gdG8gc3RhcnQKICAgICAgcmVhZGluZyBhdCwgYW5kIHBvc2l0aW9uIHRvIHN0b3AgcmVhZGluZyBhdC4KICAgIHNvdXJjZXNfaW5mb1wKICAgICAgICAoSXRlcmFibGVbVHVwbGVbfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLCBpbnQsIGludF1dKToKICAgICAgYSBzZXQgb2Ygc291cmNlcy4gRWFjaCBzb3VyY2UgaXMgYSB0aHJlZS10dXBsZSB0aGF0IGlzIG9mIHRoZSBzYW1lCiAgICAgIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIHRoZSBzZXQgb2YgZGF0YSBwcm9kdWNlZCBieSB0aGUgcmVmZXJlbmNlIHNvdXJjZQogICAgICBhbmQgdGhlIGdpdmVuIHNldCBvZiBzb3VyY2VzIGFyZSBub3QgZXF1aXZhbGVudC4KCiAgIiIiCgogIGlmIG5vdCAoaXNpbnN0YW5jZShyZWZlcmVuY2Vfc291cmNlX2luZm8sIHR1cGxlKSBhbmQKICAgICAgICAgIGxlbihyZWZlcmVuY2Vfc291cmNlX2luZm8pID09IDMgYW5kCiAgICAgICAgICBpc2luc3RhbmNlKHJlZmVyZW5jZV9zb3VyY2VfaW5mb1swXSwgaW9iYXNlLkJvdW5kZWRTb3VyY2UpKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3JlZmVyZW5jZV9zb3VyY2VfaW5mbyBtdXN0IGEgdGhyZWUtdHVwbGUgd2hlcmUgZmlyc3QnCiAgICAgICAgICAgICAgICAgICAgICdpdGVtIG9mIHRoZSB0dXBsZSBnaXZlcyBhICcKICAgICAgICAgICAgICAgICAgICAgJ2lvYmFzZS5Cb3VuZGVkU291cmNlLiBSZWNlaXZlZDogJXInCiAgICAgICAgICAgICAgICAgICAgICwgcmVmZXJlbmNlX3NvdXJjZV9pbmZvKQogIHJlZmVyZW5jZV9yZWNvcmRzID0gcmVhZF9mcm9tX3NvdXJjZSgKICAgICAgKnJlZmVyZW5jZV9zb3VyY2VfaW5mbykKCiAgc291cmNlX3JlY29yZHMgPSBbXQogIGZvciBzb3VyY2VfaW5mbyBpbiBzb3VyY2VzX2luZm86CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2VfaW5mbywgdHVwbGUpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9pbmZvKSA9PSAzCiAgICBpZiBub3QgKGlzaW5zdGFuY2Uoc291cmNlX2luZm8sIHR1cGxlKSBhbmQKICAgICAgICAgICAgbGVuKHNvdXJjZV9pbmZvKSA9PSAzIGFuZAogICAgICAgICAgICBpc2luc3RhbmNlKHNvdXJjZV9pbmZvWzBdLCBpb2Jhc2UuQm91bmRlZFNvdXJjZSkpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdzb3VyY2VfaW5mbyBtdXN0IGEgdGhyZWUgdHVwbGUgd2hlcmUgZmlyc3QnCiAgICAgICAgICAgICAgICAgICAgICAgJ2l0ZW0gb2YgdGhlIHR1cGxlIGdpdmVzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICdpb2Jhc2UuQm91bmRlZFNvdXJjZS4gUmVjZWl2ZWQ6ICVyJwogICAgICAgICAgICAgICAgICAgICAgICwgc291cmNlX2luZm8pCiAgICBpZiAodHlwZShyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0uZGVmYXVsdF9vdXRwdXRfY29kZXIoKSkgIT0KICAgICAgICB0eXBlKHNvdXJjZV9pbmZvWzBdLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkpKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdSZWZlcmVuY2Ugc291cmNlICVyIGFuZCB0aGUgc291cmNlICVyIG11c3QgdXNlIHRoZSBzYW1lIGNvZGVyLiAnCiAgICAgICAgICAnVGhleSBhcmUgdXNpbmcgJXIgYW5kICVyIHJlc3BlY3RpdmVseSBpbnN0ZWFkLicsCiAgICAgICAgICByZWZlcmVuY2Vfc291cmNlX2luZm9bMF0sIHNvdXJjZV9pbmZvWzBdLAogICAgICAgICAgdHlwZShyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0uZGVmYXVsdF9vdXRwdXRfY29kZXIoKSksCiAgICAgICAgICB0eXBlKHNvdXJjZV9pbmZvWzBdLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkpKQogICAgc291cmNlX3JlY29yZHMuZXh0ZW5kKHJlYWRfZnJvbV9zb3VyY2UoKnNvdXJjZV9pbmZvKSkKCiAgaWYgbGVuKHJlZmVyZW5jZV9yZWNvcmRzKSAhPSBsZW4oc291cmNlX3JlY29yZHMpOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUmVmZXJlbmNlIHNvdXJjZSBtdXN0IHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIHJlY29yZHMgYXMgdGhlICcKICAgICAgICAnbGlzdCBvZiBzb3VyY2VzLiBOdW1iZXIgb2YgcmVjb3JkcyB3ZXJlICVkIGFuZCAlZCBpbnN0ZWFkLicsCiAgICAgICAgbGVuKHJlZmVyZW5jZV9yZWNvcmRzKSwgbGVuKHNvdXJjZV9yZWNvcmRzKSkKCiAgaWYgc29ydGVkKHJlZmVyZW5jZV9yZWNvcmRzKSAhPSBzb3J0ZWQoc291cmNlX3JlY29yZHMpOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUmVmZXJlbmNlIHNvdXJjZSBhbmQgcHJvdmlkZWQgbGlzdCBvZiBzb3VyY2VzIG11c3QgcHJvZHVjZSB0aGUgJwogICAgICAgICdzYW1lIHNldCBvZiByZWNvcmRzLicpCgoKZGVmIGFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZChzb3VyY2VfaW5mbyk6CiAgIiIiVGVzdHMgaWYgYSBnaXZlbiBzb3VyY2UgY2FuIGJlIHJlYWQgaW4gYSByZWVudHJhbnQgbWFubmVyLgoKICBBc3N1bWUgdGhhdCBnaXZlbiBzb3VyY2UgcHJvZHVjZXMgdGhlIHNldCBvZiB2YWx1ZXMgYGB7djEsIHYyLCB2MywgLi4uIHZufWBgLgogIEZvciBgYGlgYCBpbiByYW5nZSBgYFsxLCBuLTFdYGAgdGhpcyBtZXRob2QgcGVyZm9ybXMgYSByZWVudHJhbnQgcmVhZCBhZnRlcgogIHJlYWRpbmcgYGBpYGAgZWxlbWVudHMgYW5kIHZlcmlmaWVzIHRoYXQgYm90aCB0aGUgb3JpZ2luYWwgYW5kIHJlZW50cmFudCByZWFkCiAgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgc2V0IG9mIHZhbHVlcy4KCiAgQXJnczoKICAgIHNvdXJjZV9pbmZvIChUdXBsZVt+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UsIGludCwgaW50XSk6CiAgICAgIGEgdGhyZWUtdHVwbGUgdGhhdCBnaXZlcyB0aGUgcmVmZXJlbmNlCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCwgcG9zaXRpb24gdG8gc3RhcnQgcmVhZGluZwogICAgICBhdCwgYW5kIGEgcG9zaXRpb24gdG8gc3RvcCByZWFkaW5nIGF0LgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiBzb3VyY2UgaXMgdG9vIHRyaXZpYWwgb3IgcmVlbnRyYW50IHJlYWQgcmVzdWx0CiAgICAgIGluIGFuIGluY29ycmVjdCByZWFkLgogICIiIgoKICBzb3VyY2UsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uID0gc291cmNlX2luZm8KICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2UsIGlvYmFzZS5Cb3VuZGVkU291cmNlKQoKICBleHBlY3RlZF92YWx1ZXMgPSBbdmFsIGZvciB2YWwgaW4gc291cmNlLnJlYWQoc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikpXQogIGlmIGxlbihleHBlY3RlZF92YWx1ZXMpIDwgMjoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NvdXJjZSBpcyB0b28gdHJpdmlhbCBzaW5jZSBpdCBwcm9kdWNlcyBvbmx5ICVkICcKICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlcy4gUGxlYXNlIGdpdmUgYSBzb3VyY2UgdGhhdCByZWFkcyBhdCBsZWFzdCAyICcKICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlcy4nLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKCiAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGV4cGVjdGVkX3ZhbHVlcykgLSAxKToKICAgIHJlYWRfaXRlciA9IHNvdXJjZS5yZWFkKHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcigKICAgICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikpCiAgICBvcmlnaW5hbF9yZWFkID0gW10KICAgIGZvciBfIGluIHJhbmdlKGkpOgogICAgICBvcmlnaW5hbF9yZWFkLmFwcGVuZChuZXh0KHJlYWRfaXRlcikpCgogICAgIyBSZWVudHJhbnQgcmVhZAogICAgcmVlbnRyYW50X3JlYWQgPSBbdmFsIGZvciB2YWwgaW4gc291cmNlLnJlYWQoCiAgICAgICAgc291cmNlLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKSldCgogICAgIyBDb250aW51aW5nIG9yaWdpbmFsIHJlYWQuCiAgICBmb3IgdmFsIGluIHJlYWRfaXRlcjoKICAgICAgb3JpZ2luYWxfcmVhZC5hcHBlbmQodmFsKQoKICAgIGlmIHNvcnRlZChvcmlnaW5hbF9yZWFkKSAhPSBzb3J0ZWQoZXhwZWN0ZWRfdmFsdWVzKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignU291cmNlIGRpZCBub3QgcHJvZHVjZSBleHBlY3RlZCB2YWx1ZXMgd2hlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3BlcmZvcm1pbmcgYSByZWVudHJhbnQgcmVhZCBhZnRlciByZWFkaW5nICVkIHZhbHVlcy4gJwogICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCAlciByZWNlaXZlZCAlci4nLAogICAgICAgICAgICAgICAgICAgICAgIGksIGV4cGVjdGVkX3ZhbHVlcywgb3JpZ2luYWxfcmVhZCkKCiAgICBpZiBzb3J0ZWQocmVlbnRyYW50X3JlYWQpICE9IHNvcnRlZChleHBlY3RlZF92YWx1ZXMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdBIHJlZW50cmFudCByZWFkIG9mIHNvdXJjZSBhZnRlciByZWFkaW5nICVkIHZhbHVlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgcHJvZHVjZSBleHBlY3RlZCB2YWx1ZXMuIEV4cGVjdGVkICVyICcKICAgICAgICAgICAgICAgICAgICAgICAncmVjZWl2ZWQgJXIuJywKICAgICAgICAgICAgICAgICAgICAgICBpLCBleHBlY3RlZF92YWx1ZXMsIHJlZW50cmFudF9yZWFkKQoKCmRlZiBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3Ioc291cmNlLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRfZnJhY3Rpb24sIGV4cGVjdGVkX291dGNvbWUpOgogICIiIlZlcmlmaWVzIHRoZSBiZWhhdmlvdXIgb2Ygc3BsaXR0aW5nIGEgc291cmNlIGF0IGEgZ2l2ZW4gZnJhY3Rpb24uCgogIEFzc2VydHMgdGhhdCBzcGxpdHRpbmcgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAgZWl0aGVyCiAgZmFpbHMgYWZ0ZXIgcmVhZGluZyAqKm51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCoqIGl0ZW1zLCBvciBzdWNjZWVkcyBpbgogIGEgd2F5IHRoYXQgaXMgY29uc2lzdGVudCBhY2NvcmRpbmcgdG8KICA6ZnVuYzpgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50KClgLgoKICBBcmdzOgogICAgc291cmNlICh+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UpOiB0aGUgc291cmNlIHRvIHBlcmZvcm0KICAgICAgZHluYW1pYyBzcGxpdHRpbmcgb24uCiAgICBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQgKGludCk6IG51bWJlciBvZiBpdGVtcyB0byByZWFkIGJlZm9yZQogICAgICBzcGxpdHRpbmcuCiAgICBzcGxpdF9mcmFjdGlvbiAoZmxvYXQpOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAgIGV4cGVjdGVkX291dGNvbWUgKGludCk6IGEgdmFsdWUgZnJvbQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5FeHBlY3RlZFNwbGl0T3V0Y29tZWAuCgogIFJldHVybnM6CiAgICBUdXBsZVtpbnQsIGludF06IGEgdHVwbGUgdGhhdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHByb2R1Y2VkIGJ5IHJlYWRpbmcKICAgIHRoZSB0d28gcmFuZ2VzIHByb2R1Y2VkIGFmdGVyIGR5bmFtaWMgc3BsaXR0aW5nLiBJZiBzcGxpdHRpbmcgZGlkIG5vdAogICAgb2NjdXIsIHRoZSBmaXJzdCB2YWx1ZSBvZiB0aGUgdHVwbGUgd2lsbCByZXByZXNlbnQgdGhlIGZ1bGwgc2V0IG9mIHJlY29yZHMKICAgIHJlYWQgYnkgdGhlIHNvdXJjZSB3aGlsZSB0aGUgc2Vjb25kIHZhbHVlIG9mIHRoZSB0dXBsZSB3aWxsIGJlIGBgLTFgYC4KICAiIiIKICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2UsIGlvYmFzZS5Cb3VuZGVkU291cmNlKQogIGV4cGVjdGVkX2l0ZW1zID0gcmVhZF9mcm9tX3NvdXJjZShzb3VyY2UsIE5vbmUsIE5vbmUpCiAgcmV0dXJuIF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoCiAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgc3BsaXRfZnJhY3Rpb24sCiAgICAgIGV4cGVjdGVkX291dGNvbWUpCgoKZGVmIF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoCiAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsCiAgICBzcGxpdF9mcmFjdGlvbiwgZXhwZWN0ZWRfb3V0Y29tZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKCiAgcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKICBhc3NlcnQgaXNpbnN0YW5jZShyYW5nZV90cmFja2VyLCBpb2Jhc2UuUmFuZ2VUcmFja2VyKQogIGN1cnJlbnRfaXRlbXMgPSBbXQogIHJlYWRlciA9IHNvdXJjZS5yZWFkKHJhbmdlX3RyYWNrZXIpCiAgIyBSZWFkaW5nICdudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQnIGl0ZW1zLgogIHJlYWRlcl9pdGVyID0gaXRlcihyZWFkZXIpCiAgZm9yIF8gaW4gcmFuZ2UobnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0KToKICAgIGN1cnJlbnRfaXRlbXMuYXBwZW5kKG5leHQocmVhZGVyX2l0ZXIpKQoKICBzdWdnZXN0ZWRfc3BsaXRfcG9zaXRpb24gPSByYW5nZV90cmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uKAogICAgICBzcGxpdF9mcmFjdGlvbikKCiAgc3RvcF9wb3NpdGlvbl9iZWZvcmVfc3BsaXQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogIHNwbGl0X3Jlc3VsdCA9IHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KHN1Z2dlc3RlZF9zcGxpdF9wb3NpdGlvbikKCiAgaWYgc3BsaXRfcmVzdWx0IGlzIG5vdCBOb25lOgogICAgaWYgbGVuKHNwbGl0X3Jlc3VsdCkgIT0gMjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3BsaXQgcmVzdWx0IG11c3QgYmUgYSB0dXBsZSB0aGF0IGNvbnRhaW5zIHNwbGl0ICcKICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24gYW5kIHNwbGl0IGZyYWN0aW9uLiBSZWNlaXZlZDogJXInICUKICAgICAgICAgICAgICAgICAgICAgICAoc3BsaXRfcmVzdWx0LCkpCgogICAgaWYgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkgIT0gc3BsaXRfcmVzdWx0WzBdOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdBZnRlciBhIHN1Y2Nlc3NmdWwgc3BsaXQsIHRoZSBzdG9wIHBvc2l0aW9uIG9mIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ1JhbmdlVHJhY2tlciBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSByZXR1cm5lZCBzcGxpdCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uLiBPYnNlcnZlZCAlciBhbmQgJXIgd2hpY2ggYXJlIGRpZmZlcmVudC4nLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpICUgKHNwbGl0X3Jlc3VsdFswXSwpKQoKICAgIGlmIHNwbGl0X2ZyYWN0aW9uIDwgMCBvciBzcGxpdF9mcmFjdGlvbiA+IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NwbGl0IGZyYWN0aW9uIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSBbMCwxXScsCiAgICAgICAgICAgICAgICAgICAgICAgJ09ic2VydmVkIHNwbGl0IGZyYWN0aW9uIHdhcyAlci4nICUgKHNwbGl0X3Jlc3VsdFsxXSwpKQoKICBzdG9wX3Bvc2l0aW9uX2FmdGVyX3NwbGl0ID0gcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICBpZiBzcGxpdF9yZXN1bHQgYW5kIHN0b3BfcG9zaXRpb25fYWZ0ZXJfc3BsaXQgPT0gc3RvcF9wb3NpdGlvbl9iZWZvcmVfc3BsaXQ6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdTdG9wIHBvc2l0aW9uICVyIGRpZCBub3QgY2hhbmdlIGFmdGVyIGEgc3VjY2Vzc2Z1bCAnCiAgICAgICAgICAgICAgICAgICAgICdzcGxpdCBvZiBzb3VyY2UgJXIgYXQgZnJhY3Rpb24gJXIuJyAlCiAgICAgICAgICAgICAgICAgICAgIChzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCwgc291cmNlLCBzcGxpdF9mcmFjdGlvbikpCgogIGlmIGV4cGVjdGVkX291dGNvbWUgPT0gRXhwZWN0ZWRTcGxpdE91dGNvbWUuTVVTVF9TVUNDRUVEX0FORF9CRV9DT05TSVNURU5UOgogICAgaWYgbm90IHNwbGl0X3Jlc3VsdDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgc3BsaXQgb2Ygc291cmNlICVyIGF0IGZyYWN0aW9uICVyIHRvIGJlICcKICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2Vzc2Z1bCBhZnRlciByZWFkaW5nICVkIGVsZW1lbnRzLiBCdXQgJwogICAgICAgICAgICAgICAgICAgICAgICd0aGUgc3BsaXQgZmFpbGVkLicgJQogICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIHNwbGl0X2ZyYWN0aW9uLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQpKQogIGVsaWYgZXhwZWN0ZWRfb3V0Y29tZSA9PSBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX0ZBSUw6CiAgICBpZiBzcGxpdF9yZXN1bHQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIHNwbGl0IG9mIHNvdXJjZSAlciBhdCBmcmFjdGlvbiAlciBhZnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWRpbmcgJWQgZWxlbWVudHMgdG8gZmFpbC4gQnV0IHNwbGl0dGluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2NlZWRlZCB3aXRoIHJlc3VsdCAlci4nICUKICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlLCBzcGxpdF9mcmFjdGlvbiwgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgICAgICAgICAgICAgICAgICBzcGxpdF9yZXN1bHQpKQoKICBlbGlmIChleHBlY3RlZF9vdXRjb21lICE9CiAgICAgICAgRXhwZWN0ZWRTcGxpdE91dGNvbWUuTVVTVF9CRV9DT05TSVNURU5UX0lGX1NVQ0NFRURTKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vua25vd24gdHlwZSBvZiBleHBlY3RlZCBvdXRjb21lOiAlciclCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dGNvbWUpCiAgY3VycmVudF9pdGVtcy5leHRlbmQoW3ZhbHVlIGZvciB2YWx1ZSBpbiByZWFkZXJfaXRlcl0pCgogIHJlc2lkdWFsX3JhbmdlID0gKAogICAgICBzcGxpdF9yZXN1bHRbMF0sIHN0b3BfcG9zaXRpb25fYmVmb3JlX3NwbGl0KSBpZiBzcGxpdF9yZXN1bHQgZWxzZSBOb25lCgogIHJldHVybiBfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHQoCiAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIGN1cnJlbnRfaXRlbXMsCiAgICAgIHNwbGl0X3Jlc3VsdCwKICAgICAgKHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpLAogICAgICByZXNpZHVhbF9yYW5nZSwgc3BsaXRfZnJhY3Rpb24pCgoKZGVmIF9yYW5nZV90b19zdHIoc3RhcnQsIHN0b3ApOgogIHJldHVybiAnWycgKyAoc3RyKHN0YXJ0KSArICcsJyArIHN0cihzdG9wKSArICcpJykKCgpkZWYgX3ZlcmlmeV9zaW5nbGVfc3BsaXRfZnJhY3Rpb25fcmVzdWx0KAogICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgY3VycmVudF9pdGVtcywgc3BsaXRfc3VjY2Vzc2Z1bCwgcHJpbWFyeV9yYW5nZSwKICAgIHJlc2lkdWFsX3JhbmdlLCBzcGxpdF9mcmFjdGlvbik6CgogIGFzc2VydCBwcmltYXJ5X3JhbmdlCiAgcHJpbWFyeV9pdGVtcyA9IHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCAqcHJpbWFyeV9yYW5nZSkKCiAgaWYgbm90IHNwbGl0X3N1Y2Nlc3NmdWw6CiAgICAjIEZvciB1bnN1Y2Nlc3NmdWwgc3BsaXRzLCByZXNpZHVhbF9yYW5nZSBzaG91bGQgYmUgTm9uZS4KICAgIGFzc2VydCBub3QgcmVzaWR1YWxfcmFuZ2UKCiAgcmVzaWR1YWxfaXRlbXMgPSAoCiAgICAgIHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCAqcmVzaWR1YWxfcmFuZ2UpCiAgICAgIGlmIHNwbGl0X3N1Y2Nlc3NmdWwgZWxzZSBbXSkKCiAgdG90YWxfaXRlbXMgPSBwcmltYXJ5X2l0ZW1zICsgcmVzaWR1YWxfaXRlbXMKCiAgaWYgY3VycmVudF9pdGVtcyAhPSBwcmltYXJ5X2l0ZW1zOgogICAgcmFpc2UgVmFsdWVFcnJvcignQ3VycmVudCBzb3VyY2UgJXIgYW5kIGEgc291cmNlIGNyZWF0ZWQgdXNpbmcgdGhlICcKICAgICAgICAgICAgICAgICAgICAgJ3JhbmdlIG9mIHRoZSBwcmltYXJ5IHNvdXJjZSAlciBkZXRlcm1pbmVkICcKICAgICAgICAgICAgICAgICAgICAgJ2J5IHBlcmZvcm1pbmcgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGZyYWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgJyVyIHByb2R1Y2VkIGRpZmZlcmVudCB2YWx1ZXMuIEV4cGVjdGVkICcKICAgICAgICAgICAgICAgICAgICAgJ3RoZXNlIHNvdXJjZXMgdG8gcHJvZHVjZSB0aGUgc2FtZSBsaXN0IG9mIHZhbHVlcy4nLAogICAgICAgICAgICAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgIF9yYW5nZV90b19zdHIoKnByaW1hcnlfcmFuZ2UpLAogICAgICAgICAgICAgICAgICAgICBzcGxpdF9mcmFjdGlvbgogICAgICAgICAgICAgICAgICAgICkKCiAgaWYgZXhwZWN0ZWRfaXRlbXMgIT0gdG90YWxfaXRlbXM6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdJdGVtcyBvYnRhaW5lZCBieSByZWFkaW5nIHRoZSBzb3VyY2UgJXIgZm9yIHByaW1hcnkgJwogICAgICAgICAgICAgICAgICAgICAnYW5kIHJlc2lkdWFsIHJhbmdlcyAlcyBhbmQgJXMgZGlkIG5vdCBwcm9kdWNlIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCBsaXN0IG9mIHZhbHVlcy4nLAogICAgICAgICAgICAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgIF9yYW5nZV90b19zdHIoKnByaW1hcnlfcmFuZ2UpLAogICAgICAgICAgICAgICAgICAgICBfcmFuZ2VfdG9fc3RyKCpyZXNpZHVhbF9yYW5nZSkpCgogIHJlc3VsdCA9IChsZW4ocHJpbWFyeV9pdGVtcyksCiAgICAgICAgICAgIGxlbihyZXNpZHVhbF9pdGVtcykgaWYgc3BsaXRfc3VjY2Vzc2Z1bCBlbHNlIC0xKQogIHJldHVybiByZXN1bHQKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50KAogICAgc291cmNlLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJWZXJpZmllcyBzb21lIGNvbnNpc3RlbmN5IHByb3BlcnRpZXMgb2YgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nLgoKICBFcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgcHNldWRvY29kZTo6OgoKICAgIG9yaWdpbmFsX3JhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0UmFuZ2VUcmFja2VyKE5vbmUsIE5vbmUpCiAgICBvcmlnaW5hbF9yZWFkZXIgPSBzb3VyY2UucmVhZChvcmlnaW5hbF9yYW5nZV90cmFja2VyKQogICAgaXRlbXNfYmVmb3JlX3NwbGl0ID0gcmVhZCBOIGl0ZW1zIGZyb20gb3JpZ2luYWxfcmVhZGVyCiAgICBzdWdnZXN0ZWRfc3BsaXRfcG9zaXRpb24gPSBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnBvc2l0aW9uX2Zvcl9mcmFjdGlvbigKICAgICAgc3BsaXRfZnJhY3Rpb24pCiAgICBvcmlnaW5hbF9zdG9wX3Bvc2l0aW9uIC0gb3JpZ2luYWxfcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgIHNwbGl0X3Jlc3VsdCA9IHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KCkKICAgIHNwbGl0X3Bvc2l0aW9uLCBzcGxpdF9mcmFjdGlvbiA9IHNwbGl0X3Jlc3VsdAogICAgcHJpbWFyeV9yYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCksIHNwbGl0X3Bvc2l0aW9uKQogICAgcmVzaWR1YWxfcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihzcGxpdF9wb3NpdGlvbiwKICAgICAgb3JpZ2luYWxfc3RvcF9wb3NpdGlvbikKCiAgICBhc3NlcnQgdGhhdDogaXRlbXMgd2hlbiByZWFkaW5nIHNvdXJjZS5yZWFkKHByaW1hcnlfcmFuZ2VfdHJhY2tlcikgPT0KICAgICAgaXRlbXNfYmVmb3JlX3NwbGl0ICsgaXRlbXMgZnJvbSBjb250aW51aW5nIHRvIHJlYWQgJ29yaWdpbmFsX3JlYWRlcicKICAgIGFzc2VydCB0aGF0OiBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQob3JpZ2luYWxfcmFuZ2VfdHJhY2tlcikgPQogICAgICBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQocHJpbWFyeV9yYW5nZV90cmFja2VyKSArIGl0ZW1zIHdoZW4gcmVhZGluZwogICAgc291cmNlLnJlYWQocmVzaWR1YWxfcmFuZ2VfdHJhY2tlcikKCiAgQXJnczoKCiAgICBzb3VyY2U6IHNvdXJjZSB0byBwZXJmb3JtIGR5bmFtaWMgd29yayByZWJhbGFuY2luZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfU1VDQ0VFRF9BTkRfQkVfQ09OU0lTVEVOVCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzKHNvdXJjZSwgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJBc3NlcnRzIHRoYXQgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGEgZ2l2ZW4gZnJhY3Rpb24gZmFpbHMuCgogIEFzc2VydHMgdGhhdCB0cnlpbmcgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBhZnRlciByZWFkaW5nCiAgJ251bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCcgaXRlbXMgZnJvbSB0aGUgc291cmNlIGZhaWxzLgoKICBBcmdzOgogICAgc291cmNlOiBzb3VyY2UgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfRkFJTCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgbGVmdF9mcmFjdGlvbiwKICAgIGxlZnRfcmVzdWx0LCByaWdodF9mcmFjdGlvbiwgcmlnaHRfcmVzdWx0LCBzdGF0cywgc3RhcnRfcG9zaXRpb249Tm9uZSwKICAgIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgIiIiUGVyZm9ybXMgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGZvciBmcmFjdGlvbnMgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UuCgogIEFzc2VydHMgdGhhdCBnaXZlbiBhIHN0YXJ0IHBvc2l0aW9uLCBhIHNvdXJjZSBjYW4gYmUgc3BsaXQgYXQgZXZlcnkKICBpbnRlcmVzdGluZyBmcmFjdGlvbiAoaGFsZndheSBiZXR3ZWVuIHR3byBmcmFjdGlvbnMgdGhhdCBkaWZmZXIgYnkgYXQKICBsZWFzdCBvbmUgaXRlbSkgYW5kIHRoZSByZXN1bHRzIGFyZSBjb25zaXN0ZW50IGlmIGEgc3BsaXQgc3VjY2VlZHMuCgogIEFyZ3M6CiAgICBzb3VyY2U6IHNvdXJjZSB0byBwZXJmb3JtIGR5bmFtaWMgc3BsaXR0aW5nIG9uLgogICAgZXhwZWN0ZWRfaXRlbXM6IHRvdGFsIHNldCBvZiBpdGVtcyBleHBlY3RlZCB3aGVuIHJlYWRpbmcgdGhlIHNvdXJjZS4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIGxlZnRfZnJhY3Rpb246IGxlZnQgZnJhY3Rpb24gZm9yIGJpbmFyeSBzcGxpdHRpbmcuCiAgICBsZWZ0X3Jlc3VsdDogcmVzdWx0IHJlY2VpdmVkIGJ5IHNwbGl0dGluZyBhdCBsZWZ0IGZyYWN0aW9uLgogICAgcmlnaHRfZnJhY3Rpb246IHJpZ2h0IGZyYWN0aW9uIGZvciBiaW5hcnkgc3BsaXR0aW5nLgogICAgcmlnaHRfcmVzdWx0OiByZXN1bHQgcmVjZWl2ZWQgYnkgc3BsaXR0aW5nIGF0IHJpZ2h0IGZyYWN0aW9uLgogICAgc3RhdHM6IGEgYGBTcGxpdEZyYWN0aW9uU3RhdGlzdGljc2BgIGZvciBzdG9yaW5nIHJlc3VsdHMuCiAgIiIiCiAgYXNzZXJ0IHJpZ2h0X2ZyYWN0aW9uID4gbGVmdF9mcmFjdGlvbgoKICBpZiByaWdodF9mcmFjdGlvbiAtIGxlZnRfZnJhY3Rpb24gPCAwLjAwMToKICAgICMgVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24uCiAgICByZXR1cm4KCiAgbWlkZGxlX2ZyYWN0aW9uID0gKGxlZnRfZnJhY3Rpb24gKyByaWdodF9mcmFjdGlvbikgLyAyCgogIGlmIGxlZnRfcmVzdWx0IGlzIE5vbmU6CiAgICBsZWZ0X3Jlc3VsdCA9IF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoCiAgICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBsZWZ0X2ZyYWN0aW9uLAogICAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUykKCiAgaWYgcmlnaHRfcmVzdWx0IGlzIE5vbmU6CiAgICByaWdodF9yZXN1bHQgPSBfYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgICByaWdodF9mcmFjdGlvbiwgRXhwZWN0ZWRTcGxpdE91dGNvbWUuTVVTVF9CRV9DT05TSVNURU5UX0lGX1NVQ0NFRURTKQoKICBtaWRkbGVfcmVzdWx0ID0gX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBtaWRkbGVfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUykKCiAgaWYgbWlkZGxlX3Jlc3VsdFsxXSAhPSAtMToKICAgIHN0YXRzLnN1Y2Nlc3NmdWxfZnJhY3Rpb25zLmFwcGVuZChtaWRkbGVfZnJhY3Rpb24pCiAgaWYgbWlkZGxlX3Jlc3VsdFsxXSA+IDA6CiAgICBzdGF0cy5ub25fdHJpdmlhbF9mcmFjdGlvbnMuYXBwZW5kKG1pZGRsZV9mcmFjdGlvbikKCiAgIyBUd28gc3BsaXQgcmVzdWx0cyBhcmUgZXF1aXZhbGVudCBpZiBwcmltYXJ5IGFuZCByZXNpZHVhbCByYW5nZXMgb2YgdGhlbQogICMgcHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgcmVjb3JkcyAoc2ltcGx5IGNoZWNraW5nIHRoZSBzaXplIG9mIHByaW1hcnkKICAjIGVub3VnaCBzaW5jZSB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgY29uc3RhbnQpLgoKICBpZiBsZWZ0X3Jlc3VsdFswXSAhPSBtaWRkbGVfcmVzdWx0WzBdOgogICAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIGxlZnRfZnJhY3Rpb24sCiAgICAgICAgbGVmdF9yZXN1bHQsIG1pZGRsZV9mcmFjdGlvbiwgbWlkZGxlX3Jlc3VsdCwgc3RhdHMpCgogICMgV2Ugc3BlY2lhbCBjYXNlIHJpZ2h0X2ZyYWN0aW9uPTEuMCBzaW5jZSB0aGF0IGNvdWxkIGZhaWwgZHVlIHRvIGJlaW5nIG91dAogICMgb2YgcmFuZ2UuIChldmVuIGlmIGEgZHluYW1pYyBzcGxpdCBmYWlscyBhdCAnbWlkZGxlX2ZyYWN0aW9uJyBhbmQgYXQKICAjIGZyYWN0aW9uIDEuMCwgdGhlcmUgbWlnaHQgYmUgZnJhY3Rpb25zIGluIHJhbmdlICgnbWlkZGxlX2ZyYWN0aW9uJywgMS4wKQogICMgd2hlcmUgZHluYW1pYyBzcGxpdHRpbmcgc3VjY2VlZHMpLgogIGlmIHJpZ2h0X2ZyYWN0aW9uID09IDEuMCBvciBtaWRkbGVfcmVzdWx0WzBdICE9IHJpZ2h0X3Jlc3VsdFswXToKICAgIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnkoCiAgICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgIG1pZGRsZV9mcmFjdGlvbiwgbWlkZGxlX3Jlc3VsdCwgcmlnaHRfZnJhY3Rpb24sIHJpZ2h0X3Jlc3VsdCwgc3RhdHMpCgoKTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19QRVJfSVRFTSA9IDEwMApNQVhfQ09OQ1VSUkVOVF9TUExJVFRJTkdfVFJJQUxTX1RPVEFMID0gMTAwMAoKCmRlZiBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZSgKICAgIHNvdXJjZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lLAogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0PVRydWUpOgogICIiIlBlcmZvcm1zIGFuZCB0ZXN0cyBkeW5hbWljIHdvcmsgcmViYWxhbmNpbmcgZXhoYXVzdGl2ZWx5LgoKICBBc3NlcnRzIHRoYXQgZm9yIGVhY2ggcG9zc2libGUgc3RhcnQgcG9zaXRpb24sIGEgc291cmNlIGNhbiBiZSBzcGxpdCBhdAogIGV2ZXJ5IGludGVyZXN0aW5nIGZyYWN0aW9uIChoYWxmd2F5IGJldHdlZW4gdHdvIGZyYWN0aW9ucyB0aGF0IGRpZmZlciBieSBhdAogIGxlYXN0IG9uZSBpdGVtKSBhbmQgdGhlIHJlc3VsdHMgYXJlIGNvbnNpc3RlbnQgaWYgYSBzcGxpdCBzdWNjZWVkcy4KICBWZXJpZmllcyBtdWx0aSB0aHJlYWRlZCBzcGxpdHRpbmcgYXMgd2VsbC4KCiAgQXJnczoKICAgIHNvdXJjZSAofmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlKTogdGhlIHNvdXJjZSB0byBwZXJmb3JtCiAgICAgIGR5bmFtaWMgc3BsaXR0aW5nIG9uLgogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0IChib29sKTogaWYgOmRhdGE6YFRydWVgIHBlcmZvcm1zIGEKICAgICAgbXVsdGktdGhyZWFkZWQgdGVzdCwgb3RoZXJ3aXNlIHRoaXMgdGVzdCBpcyBza2lwcGVkLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiB0aGUgZXhoYXVzdGl2ZSBzcGxpdHRpbmcgdGVzdCBmYWlscy4KICAiIiIKCiAgZXhwZWN0ZWRfaXRlbXMgPSByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgaWYgbm90IGV4cGVjdGVkX2l0ZW1zOgogICAgcmFpc2UgVmFsdWVFcnJvcignU291cmNlICVyIGlzIGVtcHR5LicsIHNvdXJjZSkKCiAgaWYgbGVuKGV4cGVjdGVkX2l0ZW1zKSA9PSAxOgogICAgcmFpc2UgVmFsdWVFcnJvcignU291cmNlICVyIG9ubHkgcmVhZHMgYSBzaW5nbGUgaXRlbS4nLCBzb3VyY2UpCgogIGFsbF9ub25fdHJpdmlhbF9mcmFjdGlvbnMgPSBbXQoKICBhbnlfc3VjY2Vzc2Z1bF9mcmFjdGlvbnMgPSBGYWxzZQogIGFueV9ub25fdHJpdmlhbF9mcmFjdGlvbnMgPSBGYWxzZQoKICBmb3IgaSBpbiByYW5nZShsZW4oZXhwZWN0ZWRfaXRlbXMpKToKICAgIHN0YXRzID0gU3BsaXRGcmFjdGlvblN0YXRpc3RpY3MoW10sIFtdKQoKICAgIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnkoCiAgICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgaSwgMC4wLCBOb25lLCAxLjAsIE5vbmUsIHN0YXRzKQoKICAgIGlmIHN0YXRzLnN1Y2Nlc3NmdWxfZnJhY3Rpb25zOgogICAgICBhbnlfc3VjY2Vzc2Z1bF9mcmFjdGlvbnMgPSBUcnVlCiAgICBpZiBzdGF0cy5ub25fdHJpdmlhbF9mcmFjdGlvbnM6CiAgICAgIGFueV9ub25fdHJpdmlhbF9mcmFjdGlvbnMgPSBUcnVlCgogICAgYWxsX25vbl90cml2aWFsX2ZyYWN0aW9ucy5hcHBlbmQoc3RhdHMubm9uX3RyaXZpYWxfZnJhY3Rpb25zKQoKICBpZiBub3QgYW55X3N1Y2Nlc3NmdWxfZnJhY3Rpb25zOgogICAgcmFpc2UgVmFsdWVFcnJvcignU3BsaXRBdEZyYWN0aW9uIHRlc3QgY29tcGxldGVkIHZhY3VvdXNseTogbm8gJwogICAgICAgICAgICAgICAgICAgICAnc3VjY2Vzc2Z1bCBzcGxpdCBmcmFjdGlvbnMgZm91bmQnKQoKICBpZiBub3QgYW55X25vbl90cml2aWFsX2ZyYWN0aW9uczoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1NwbGl0QXRGcmFjdGlvbiB0ZXN0IGNvbXBsZXRlZCB2YWN1b3VzbHk6IG5vIG5vbi10cml2aWFsIHNwbGl0ICcKICAgICAgICAnZnJhY3Rpb25zIGZvdW5kJykKCiAgaWYgbm90IHBlcmZvcm1fbXVsdGlfdGhyZWFkZWRfdGVzdDoKICAgIHJldHVybgoKICBudW1fdG90YWxfdHJpYWxzID0gMAogIGZvciBpIGluIHJhbmdlKGxlbihleHBlY3RlZF9pdGVtcykpOgogICAgbm9uX3RyaXZpYWxfZnJhY3Rpb25zID0gWzIuMF0gICMgMi4wIGlzIGxhcmdlciB0aGFuIGFueSB2YWxpZCBmcmFjdGlvbi4KICAgIG5vbl90cml2aWFsX2ZyYWN0aW9ucy5leHRlbmQoYWxsX25vbl90cml2aWFsX2ZyYWN0aW9uc1tpXSkKICAgIG1pbl9ub25fdHJpdmlhbF9mcmFjdGlvbiA9IG1pbihub25fdHJpdmlhbF9mcmFjdGlvbnMpCgogICAgaWYgbWluX25vbl90cml2aWFsX2ZyYWN0aW9uID09IDIuMDoKICAgICAgIyBUaGlzIHdpbGwgbm90IGhhcHBlbiBhbGwgdGhlIHRpbWUuIE90aGVyd2lzZSBwcmV2aW91cyB0ZXN0IHdpbGwgZmFpbAogICAgICAjIGR1ZSB0byB2YWN1b3VzbmVzcy4KICAgICAgY29udGludWUKCiAgICBudW1fdHJpYWxzID0gMAogICAgaGF2ZV9zdWNjZXNzID0gRmFsc2UKICAgIGhhdmVfZmFpbHVyZSA9IEZhbHNlCgogICAgdGhyZWFkX3Bvb2wgPSBfVGhyZWFkUG9vbCgyKQogICAgdHJ5OgogICAgICB3aGlsZSBUcnVlOgogICAgICAgIG51bV90cmlhbHMgKz0gMQogICAgICAgIGlmIChudW1fdHJpYWxzID4KICAgICAgICAgICAgTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19QRVJfSVRFTSk6CiAgICAgICAgICBsb2dnaW5nLndhcm4oCiAgICAgICAgICAgICAgJ0FmdGVyICVkIGNvbmN1cnJlbnQgc3BsaXR0aW5nIHRyaWFscyBhdCBpdGVtICMlZCwgb2JzZXJ2ZWQgJwogICAgICAgICAgICAgICdvbmx5ICVzLCBnaXZpbmcgdXAgb24gdGhpcyBpdGVtJywKICAgICAgICAgICAgICBudW1fdHJpYWxzLAogICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgJ3N1Y2Nlc3MnIGlmIGhhdmVfc3VjY2VzcyBlbHNlICdmYWlsdXJlJwogICAgICAgICAgKQogICAgICAgICAgYnJlYWsKCiAgICAgICAgaWYgX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50KAogICAgICAgICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBpLCBtaW5fbm9uX3RyaXZpYWxfZnJhY3Rpb24sIHRocmVhZF9wb29sKToKICAgICAgICAgIGhhdmVfc3VjY2VzcyA9IFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgaGF2ZV9mYWlsdXJlID0gVHJ1ZQoKICAgICAgICBpZiBoYXZlX3N1Y2Nlc3MgYW5kIGhhdmVfZmFpbHVyZToKICAgICAgICAgIGxvZ2dpbmcuaW5mbygnJWQgdHJpYWxzIHRvIG9ic2VydmUgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAnY29uY3VycmVudCBzcGxpdHRpbmcgYXQgaXRlbSAjJWQnLCBudW1fdHJpYWxzLCBpKQogICAgICAgICAgYnJlYWsKICAgIGZpbmFsbHk6CiAgICAgIHRocmVhZF9wb29sLmNsb3NlKCkKCiAgICBudW1fdG90YWxfdHJpYWxzICs9IG51bV90cmlhbHMKCiAgICBpZiBudW1fdG90YWxfdHJpYWxzID4gTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19UT1RBTDoKICAgICAgbG9nZ2luZy53YXJuKCdBZnRlciAlZCB0b3RhbCBjb25jdXJyZW50IHNwbGl0dGluZyB0cmlhbHMsIGNvbnNpZGVyZWQgJwogICAgICAgICAgICAgICAgICAgJ29ubHkgJWQgaXRlbXMsIGdpdmluZyB1cC4nLCBudW1fdG90YWxfdHJpYWxzLCBpKQogICAgICBicmVhawoKICBsb2dnaW5nLmluZm8oJyVkIHRvdGFsIGNvbmN1cnJlbnQgc3BsaXR0aW5nIHRyaWFscyBmb3IgJWQgaXRlbXMnLAogICAgICAgICAgICAgICBudW1fdG90YWxfdHJpYWxzLCBsZW4oZXhwZWN0ZWRfaXRlbXMpKQoKCmRlZiBfYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2NvbmN1cnJlbnQoCiAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXR0aW5nLAogICAgc3BsaXRfZnJhY3Rpb24sIHRocmVhZF9wb29sPU5vbmUpOgoKICByYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKE5vbmUsIE5vbmUpCiAgc3RvcF9wb3NpdGlvbl9iZWZvcmVfc3BsaXQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogIHJlYWRlciA9IHNvdXJjZS5yZWFkKHJhbmdlX3RyYWNrZXIpCiAgcmVhZGVyX2l0ZXIgPSBpdGVyKHJlYWRlcikKCiAgY3VycmVudF9pdGVtcyA9IFtdCiAgZm9yIF8gaW4gcmFuZ2UobnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0dGluZyk6CiAgICBjdXJyZW50X2l0ZW1zLmFwcGVuZChuZXh0KHJlYWRlcl9pdGVyKSkKCiAgZGVmIHJlYWRfb3Jfc3BsaXQodGVzdF9wYXJhbXMpOgogICAgaWYgdGVzdF9wYXJhbXNbMF06CiAgICAgIHJldHVybiBbdmFsIGZvciB2YWwgaW4gdGVzdF9wYXJhbXNbMV1dCiAgICBlbHNlOgogICAgICBwb3NpdGlvbiA9IHRlc3RfcGFyYW1zWzFdLnBvc2l0aW9uX2F0X2ZyYWN0aW9uKHRlc3RfcGFyYW1zWzJdKQogICAgICByZXN1bHQgPSB0ZXN0X3BhcmFtc1sxXS50cnlfc3BsaXQocG9zaXRpb24pCiAgICAgIHJldHVybiByZXN1bHQKCiAgaW5wdXRzID0gW10KICBwb29sID0gdGhyZWFkX3Bvb2wgaWYgdGhyZWFkX3Bvb2wgZWxzZSBfVGhyZWFkUG9vbCgyKQogIHRyeToKICAgIGlucHV0cy5hcHBlbmQoW1RydWUsIHJlYWRlcl9pdGVyXSkKICAgIGlucHV0cy5hcHBlbmQoW0ZhbHNlLCByYW5nZV90cmFja2VyLCBzcGxpdF9mcmFjdGlvbl0pCgogICAgcmVzdWx0cyA9IHBvb2wubWFwKHJlYWRfb3Jfc3BsaXQsIGlucHV0cykKICBmaW5hbGx5OgogICAgaWYgbm90IHRocmVhZF9wb29sOgogICAgICBwb29sLmNsb3NlKCkKCiAgY3VycmVudF9pdGVtcy5leHRlbmQocmVzdWx0c1swXSkKICBwcmltYXJ5X3JhbmdlID0gKAogICAgICByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCksIHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpKQoKICBzcGxpdF9yZXN1bHQgPSByZXN1bHRzWzFdCiAgcmVzaWR1YWxfcmFuZ2UgPSAoCiAgICAgIHNwbGl0X3Jlc3VsdFswXSwgc3RvcF9wb3NpdGlvbl9iZWZvcmVfc3BsaXQpIGlmIHNwbGl0X3Jlc3VsdCBlbHNlIE5vbmUKCiAgcmVzID0gX3ZlcmlmeV9zaW5nbGVfc3BsaXRfZnJhY3Rpb25fcmVzdWx0KAogICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBjdXJyZW50X2l0ZW1zLCBzcGxpdF9yZXN1bHQsCiAgICAgIHByaW1hcnlfcmFuZ2UsIHJlc2lkdWFsX3JhbmdlLCBzcGxpdF9mcmFjdGlvbikKCiAgcmV0dXJuIHJlc1sxXSA+IDAKfXIzAQAAKFgNAAAAX3JhbmdlX3RvX3N0clgDAAAAZGVmTVEBTVMBh1gLAAAAX1RocmVhZFBvb2xYAwAAAGRlZktmS2yHWDAAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnRYAwAAAGRlZk1+AU2hAYdYIgAAAF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JYAwAAAGRlZk0KAU1PAYdYHgAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlsc1gDAAAAZGVmTaMBTbMBh1gUAAAARXhwZWN0ZWRTcGxpdE91dGNvbWVYBQAAAGNsYXNzS0FLRYdYHgAAAGFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZFgDAAAAZGVmS7JL6YdYHwAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnlYAwAAAGRlZk21AU31AYdYJQAAAGFzc2VydF9zb3VyY2VzX2VxdWFsX3JlZmVyZW5jZV9zb3VyY2VYAwAAAGRlZktuS7CHWCEAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JYAwAAAGRlZkvrTQgBh1gyAAAAX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50LnJlYWRfb3Jfc3BsaXRYAwAAAGRlZk13Ak1+AodYIwAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9leGhhdXN0aXZlWAMAAABkZWZN+wFNaAKHWBAAAAByZWFkX2Zyb21fc291cmNlWAMAAABkZWZLT0tkh1gkAAAAX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50WAMAAABkZWZNagJNlwKHWCQAAABfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHRYAwAAAGRlZk1VAU18AYd1fXI0AQAAKFgwAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50WCAAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc3I1AQAAWB8AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmluYXJ5ajUBAABYHgAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlsc2o1AQAAWB4AAABhc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWRqNQEAAFglAAAAYXNzZXJ0X3NvdXJjZXNfZXF1YWxfcmVmZXJlbmNlX3NvdXJjZWo1AQAAWCEAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JqNQEAAFgjAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmVqNQEAAFgQAAAAcmVhZF9mcm9tX3NvdXJjZWo1AQAAdWiKWCAAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc3I2AQAAhYFyNwEAAH1yOAEAAGJ0cjkBAABVHmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnI6AQAAKFiFFgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaGlzIG1vZHVsZSBjb250YWlucyBTcGxpdHRhYmxlIERvRm4gbG9naWMgdGhhdCdzIGNvbW1vbiB0byBhbGwgcnVubmVycy4iIiIKCmltcG9ydCB1dWlkCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IHR5cGVjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUFRyYW5zZm9ybU92ZXJyaWRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5JbnZva2VyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCgoKY2xhc3MgU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUoUFRyYW5zZm9ybU92ZXJyaWRlKToKICAiIiJBIHRyYW5zZm9ybSBvdmVycmlkZSBmb3IgUGFyRG8gdHJhbnNmb3Jtc3Mgb2YgU3BsaXR0YWJsZURvRm5zLgoKICBSZXBsYWNlcyB0aGUgUGFyRG8gdHJhbnNmb3JtIHdpdGggYSBTcGxpdHRhYmxlUGFyRG8gdHJhbnNmb3JtIHRoYXQgcGVyZm9ybXMKICBTREYgc3BlY2lmaWMgbG9naWMuCiAgIiIiCgogIGRlZiBnZXRfbWF0Y2hlcihzZWxmKToKICAgIGRlZiBfbWF0Y2hlcihhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0sIEFwcGxpZWRQVHJhbnNmb3JtKQogICAgICB0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLCBQYXJEbyk6CiAgICAgICAgc2lnbmF0dXJlID0gRG9GblNpZ25hdHVyZSh0cmFuc2Zvcm0uZm4pCiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5pc19zcGxpdHRhYmxlX2RvZm4oKQoKICAgIHJldHVybiBfbWF0Y2hlcgoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHB0cmFuc2Zvcm0sIFBhckRvKQogICAgZG9fZm4gPSBwdHJhbnNmb3JtLmZuCiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKGRvX2ZuKQogICAgaWYgc2lnbmF0dXJlLmlzX3NwbGl0dGFibGVfZG9mbigpOgogICAgICByZXR1cm4gU3BsaXR0YWJsZVBhckRvKHB0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICByZXR1cm4gcHRyYW5zZm9ybQoKCmNsYXNzIFNwbGl0dGFibGVQYXJEbyhQVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHByb2Nlc3NlcyBhIFBDb2xsZWN0aW9uIHVzaW5nIGEgU3BsaXR0YWJsZSBEb0ZuLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwdHJhbnNmb3JtLCBQYXJEbykKICAgIHNlbGYuX3B0cmFuc2Zvcm0gPSBwdHJhbnNmb3JtCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2RmID0gc2VsZi5fcHRyYW5zZm9ybS5mbgogICAgc2lnbmF0dXJlID0gRG9GblNpZ25hdHVyZShzZGYpCiAgICBpbnZva2VyID0gRG9Gbkludm9rZXIuY3JlYXRlX2ludm9rZXIoc2lnbmF0dXJlLCBwcm9jZXNzX2ludm9jYXRpb249RmFsc2UpCgogICAgZWxlbWVudF9jb2RlciA9IHR5cGVjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHBjb2xsLmVsZW1lbnRfdHlwZSkKICAgIHJlc3RyaWN0aW9uX2NvZGVyID0gaW52b2tlci5pbnZva2VfcmVzdHJpY3Rpb25fY29kZXIoKQoKICAgIGtleWVkX2VsZW1lbnRzID0gKHBjb2xsCiAgICAgICAgICAgICAgICAgICAgICB8ICdwYWlyJyA+PiBQYXJEbyhQYWlyV2l0aFJlc3RyaWN0aW9uRm4oc2RmKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ3NwbGl0JyA+PiBQYXJEbyhTcGxpdFJlc3RyaWN0aW9uRm4oc2RmKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ2V4cGxvZGUnID4+IFBhckRvKEV4cGxvZGVXaW5kb3dzRm4oKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ3JhbmRvbScgPj4gUGFyRG8oUmFuZG9tVW5pcXVlS2V5Rm4oKSkpCgogICAgcmV0dXJuIGtleWVkX2VsZW1lbnRzIHwgUHJvY2Vzc0tleWVkRWxlbWVudHMoCiAgICAgICAgc2RmLCBlbGVtZW50X2NvZGVyLCByZXN0cmljdGlvbl9jb2RlciwKICAgICAgICBwY29sbC53aW5kb3dpbmcsIHNlbGYuX3B0cmFuc2Zvcm0uYXJncywgc2VsZi5fcHRyYW5zZm9ybS5rd2FyZ3MpCgoKY2xhc3MgRWxlbWVudEFuZFJlc3RyaWN0aW9uKG9iamVjdCk6CiAgIiIiQSBob2xkZXIgZm9yIGFuIGVsZW1lbnQgYW5kIGEgcmVzdHJpY3Rpb24uIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50LCByZXN0cmljdGlvbik6CiAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CiAgICBzZWxmLnJlc3RyaWN0aW9uID0gcmVzdHJpY3Rpb24KCgpjbGFzcyBQYWlyV2l0aFJlc3RyaWN0aW9uRm4oYmVhbS5Eb0ZuKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHBhaXJzIGVhY2ggZWxlbWVudCB3aXRoIGEgcmVzdHJpY3Rpb24uIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb19mbik6CiAgICBzZWxmLl9kb19mbiA9IGRvX2ZuCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHNlbGYuX2RvX2ZuKQogICAgc2VsZi5faW52b2tlciA9IERvRm5JbnZva2VyLmNyZWF0ZV9pbnZva2VyKAogICAgICAgIHNpZ25hdHVyZSwgcHJvY2Vzc19pbnZvY2F0aW9uPUZhbHNlKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtLCAqYXJncywgKiprd2FyZ3MpOgogICAgaW5pdGlhbF9yZXN0cmljdGlvbiA9IHNlbGYuX2ludm9rZXIuaW52b2tlX2luaXRpYWxfcmVzdHJpY3Rpb24oZWxlbWVudCkKICAgIHlpZWxkIEVsZW1lbnRBbmRSZXN0cmljdGlvbihlbGVtZW50LCBpbml0aWFsX3Jlc3RyaWN0aW9uKQoKCmNsYXNzIFNwbGl0UmVzdHJpY3Rpb25GbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgcGVyZm9ybSBpbml0aWFsIHNwbGl0dGluZyBvZiBTcGxpdHRhYmxlIERvRm4gaW5wdXRzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9fZm4pOgogICAgc2VsZi5fZG9fZm4gPSBkb19mbgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2lnbmF0dXJlID0gRG9GblNpZ25hdHVyZShzZWxmLl9kb19mbikKICAgIHNlbGYuX2ludm9rZXIgPSBEb0ZuSW52b2tlci5jcmVhdGVfaW52b2tlcigKICAgICAgICBzaWduYXR1cmUsIHByb2Nlc3NfaW52b2NhdGlvbj1GYWxzZSkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudF9hbmRfcmVzdHJpY3Rpb24sICphcmdzLCAqKmt3YXJncyk6CiAgICBlbGVtZW50ID0gZWxlbWVudF9hbmRfcmVzdHJpY3Rpb24uZWxlbWVudAogICAgcmVzdHJpY3Rpb24gPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5yZXN0cmljdGlvbgogICAgcmVzdHJpY3Rpb25fcGFydHMgPSBzZWxmLl9pbnZva2VyLmludm9rZV9zcGxpdCgKICAgICAgICBlbGVtZW50LAogICAgICAgIHJlc3RyaWN0aW9uKQogICAgZm9yIHBhcnQgaW4gcmVzdHJpY3Rpb25fcGFydHM6CiAgICAgIHlpZWxkIEVsZW1lbnRBbmRSZXN0cmljdGlvbihlbGVtZW50LCBwYXJ0KQoKCmNsYXNzIEV4cGxvZGVXaW5kb3dzRm4oYmVhbS5Eb0ZuKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IGZvcmNlcyB0aGUgcnVubmVyIHRvIGV4cGxvZGUgd2luZG93cy4KCiAgVGhpcyBpcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGF0IFNwbGl0dGFibGUgRG9GbiBwcm9jZXNlcyBhbiBlbGVtZW50IGZvciBlYWNoIG9mCiAgdGhlIHdpbmRvd3MgdGhhdCBlbGVtZW50IGJlbG9uZ3MgdG8uCiAgIiIiCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1iZWFtLkRvRm4uV2luZG93UGFyYW0sICphcmdzLCAqKmt3YXJncyk6CiAgICB5aWVsZCBlbGVtZW50CgoKY2xhc3MgUmFuZG9tVW5pcXVlS2V5Rm4oYmVhbS5Eb0ZuKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IGFzc2lnbnMgYSB1bmlxdWUga2V5IHRvIGVhY2ggZWxlbWVudC4iIiIKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICMgV2UgaWdub3JlIFVVSUQgY29sbGlzaW9ucyBoZXJlIHNpbmNlIHRoZXkgYXJlIGV4dHJlbWVseSByYXJlLgogICAgeWllbGQgKHV1aWQudXVpZDQoKS5ieXRlcywgZWxlbWVudCkKCgpjbGFzcyBQcm9jZXNzS2V5ZWRFbGVtZW50cyhQVHJhbnNmb3JtKToKICAiIiJBIHByaW1pdGl2ZSB0cmFuc2Zvcm0gdGhhdCBwZXJmb3JtcyBTcGxpdHRhYmxlRG9GbiBtYWdpYy4KCiAgSW5wdXQgdG8gdGhpcyB0cmFuc2Zvcm0gc2hvdWxkIGJlIGEgUENvbGxlY3Rpb24gb2Yga2V5ZWQgRWxlbWVudEFuZFJlc3RyaWN0aW9uCiAgb2JqZWN0cy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBzZGYsIGVsZW1lbnRfY29kZXIsIHJlc3RyaWN0aW9uX2NvZGVyLCB3aW5kb3dpbmdfc3RyYXRlZ3ksCiAgICAgIHB0cmFuc2Zvcm1fYXJncywgcHRyYW5zZm9ybV9rd2FyZ3MpOgogICAgc2VsZi5zZGYgPSBzZGYKICAgIHNlbGYuZWxlbWVudF9jb2RlciA9IGVsZW1lbnRfY29kZXIKICAgIHNlbGYucmVzdHJpY3Rpb25fY29kZXIgPSByZXN0cmljdGlvbl9jb2RlcgogICAgc2VsZi53aW5kb3dpbmdfc3RyYXRlZ3kgPSB3aW5kb3dpbmdfc3RyYXRlZ3kKICAgIHNlbGYucHRyYW5zZm9ybV9hcmdzID0gcHRyYW5zZm9ybV9hcmdzCiAgICBzZWxmLnB0cmFuc2Zvcm1fa3dhcmdzID0gcHRyYW5zZm9ybV9rd2FyZ3MKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQp9cjsBAAAoWCIAAABQYWlyV2l0aFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZLZEtoh1gQAAAARXhwbG9kZVdpbmRvd3NGblgFAAAAY2xhc3NLg0uMh1geAAAARWxlbWVudEFuZFJlc3RyaWN0aW9uLl9faW5pdF9fWAMAAABkZWZLWUtch1gYAAAAU3BsaXR0YWJsZVBhckRvLl9faW5pdF9fWAMAAABkZWZLP0tCh1gUAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNYBQAAAGNsYXNzS5ZLqYdYHwAAAFNwbGl0UmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGVYAwAAAGRlZkt0S3iHWDEAAABTcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWAMAAABkZWZLMks6h1gSAAAAU3BsaXRSZXN0cmljdGlvbkZuWAUAAABjbGFzc0tuS4GHWBEAAABSYW5kb21VbmlxdWVLZXlGblgFAAAAY2xhc3NLjkuUh1gVAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuWAUAAABjbGFzc0teS2yHWBsAAABTcGxpdFJlc3RyaWN0aW9uRm4uX19pbml0X19YAwAAAGRlZktxS3OHWBUAAABFbGVtZW50QW5kUmVzdHJpY3Rpb25YBQAAAGNsYXNzS1ZLXIdYFwAAAFNwbGl0dGFibGVQYXJEb092ZXJyaWRlWAUAAABjbGFzc0shSzqHWA8AAABTcGxpdHRhYmxlUGFyRG9YBQAAAGNsYXNzSzxLVIdYHQAAAFBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5wcm9jZXNzWAMAAABkZWZLaUtsh1gsAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X21hdGNoZXIuX21hdGNoZXJYAwAAAGRlZkspSy+HWBgAAABFeHBsb2RlV2luZG93c0ZuLnByb2Nlc3NYAwAAAGRlZkuKS4yHWBkAAABSYW5kb21VbmlxdWVLZXlGbi5wcm9jZXNzWAMAAABkZWZLkUuUh1geAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuLl9faW5pdF9fWAMAAABkZWZLYUtjh1gWAAAAU3BsaXR0YWJsZVBhckRvLmV4cGFuZFgDAAAAZGVmS0NLVIdYGwAAAFByb2Nlc3NLZXllZEVsZW1lbnRzLmV4cGFuZFgDAAAAZGVmS6dLqYdYGgAAAFNwbGl0UmVzdHJpY3Rpb25Gbi5wcm9jZXNzWAMAAABkZWZLeUuBh1gdAAAAUHJvY2Vzc0tleWVkRWxlbWVudHMuX19pbml0X19YAwAAAGRlZkudS6aHWCMAAABTcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5nZXRfbWF0Y2hlclgDAAAAZGVmSyhLMYd1fXI8AQAAKFgVAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuWB4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb25yPQEAAFgiAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuLnN0YXJ0X2J1bmRsZWo9AQAAWB8AAABTcGxpdFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlaj0BAABYGAAAAEV4cGxvZGVXaW5kb3dzRm4ucHJvY2Vzc2o9AQAAWBUAAABFbGVtZW50QW5kUmVzdHJpY3Rpb25qPQEAAFgxAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybWo9AQAAWBIAAABTcGxpdFJlc3RyaWN0aW9uRm5qPQEAAFgWAAAAU3BsaXR0YWJsZVBhckRvLmV4cGFuZGo9AQAAWA8AAABTcGxpdHRhYmxlUGFyRG9qPQEAAFgdAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuLnByb2Nlc3NqPQEAAFgbAAAAUHJvY2Vzc0tleWVkRWxlbWVudHMuZXhwYW5kaj0BAABYFwAAAFNwbGl0dGFibGVQYXJEb092ZXJyaWRlaj0BAABYEAAAAEV4cGxvZGVXaW5kb3dzRm5qPQEAAFgaAAAAU3BsaXRSZXN0cmljdGlvbkZuLnByb2Nlc3NqPQEAAFgjAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X21hdGNoZXJqPQEAAFgRAAAAUmFuZG9tVW5pcXVlS2V5Rm5qPQEAAFgZAAAAUmFuZG9tVW5pcXVlS2V5Rm4ucHJvY2Vzc2o9AQAAWBQAAABQcm9jZXNzS2V5ZWRFbGVtZW50c2o9AQAAdWiKWB4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb25yPgEAAIWBcj8BAAB9ckABAABidHJBAQAAVTlhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXJyQgEAAChY/w4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBydW5uZXIgaW1wbGVtZW50YXRpb24gdGhhdCBzdWJtaXRzIGEgam9iIGZvciByZW1vdGUgZXhlY3V0aW9uLgoiIiIKaW1wb3J0IHRpbWUKaW1wb3J0IHV1aWQKZnJvbSBjb25jdXJyZW50IGltcG9ydCBmdXR1cmVzCgppbXBvcnQgZ3JwYwoKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9qb2JfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9qb2JfYXBpX3BiMl9ncnBjCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lU3RhdGUKCl9PTkVfREFZX0lOX1NFQ09ORFMgPSA2MCAqIDYwICogMjQKCgpjbGFzcyBKb2JTZXJ2aWNlKGJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIpOgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmpvYnMgPSB7fQoKICBkZWYgcnVuKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgam9iX2lkID0gdXVpZC51dWlkNCgpLmdldF9oZXgoKQogICAgcGlwZWxpbmVfcmVzdWx0ID0gUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHJlcXVlc3QucGlwZWxpbmUsCiAgICAgICAgJ0RpcmVjdFJ1bm5lcicsCiAgICAgICAgUGlwZWxpbmVPcHRpb25zKCkpLnJ1bigpCiAgICBzZWxmLmpvYnNbam9iX2lkXSA9IHBpcGVsaW5lX3Jlc3VsdAogICAgcmV0dXJuIGJlYW1fam9iX2FwaV9wYjIuU3VibWl0Sm9iUmVzcG9uc2Uoam9iSWQ9am9iX2lkKQoKICBkZWYgZ2V0U3RhdGUoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICBwaXBlbGluZV9yZXN1bHQgPSBzZWxmLmpvYnNbcmVxdWVzdC5qb2JJZF0KICAgIHJldHVybiBiZWFtX2pvYl9hcGlfcGIyLkdldEpvYlN0YXRlUmVzcG9uc2UoCiAgICAgICAgc3RhdGU9c2VsZi5fbWFwX3N0YXRlX3RvX2pvYlN0YXRlKHBpcGVsaW5lX3Jlc3VsdC5zdGF0ZSkpCgogIGRlZiBjYW5jZWwoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICBwaXBlbGluZV9yZXN1bHQgPSBzZWxmLmpvYnNbcmVxdWVzdC5qb2JJZF0KICAgIHBpcGVsaW5lX3Jlc3VsdC5jYW5jZWwoKQogICAgcmV0dXJuIGJlYW1fam9iX2FwaV9wYjIuQ2FuY2VsSm9iUmVzcG9uc2UoCiAgICAgICAgc3RhdGU9c2VsZi5fbWFwX3N0YXRlX3RvX2pvYlN0YXRlKHBpcGVsaW5lX3Jlc3VsdC5zdGF0ZSkpCgogIGRlZiBnZXRNZXNzYWdlU3RyZWFtKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgcGlwZWxpbmVfcmVzdWx0ID0gc2VsZi5qb2JzW3JlcXVlc3Quam9iSWRdCiAgICBwaXBlbGluZV9yZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQogICAgeWllbGQgYmVhbV9qb2JfYXBpX3BiMi5Kb2JNZXNzYWdlc1Jlc3BvbnNlKAogICAgICAgIHN0YXRlUmVzcG9uc2U9YmVhbV9qb2JfYXBpX3BiMi5HZXRKb2JTdGF0ZVJlc3BvbnNlKAogICAgICAgICAgICBzdGF0ZT1zZWxmLl9tYXBfc3RhdGVfdG9fam9iU3RhdGUocGlwZWxpbmVfcmVzdWx0LnN0YXRlKSkpCgogIGRlZiBnZXRTdGF0ZVN0cmVhbShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ05vdCBJbXBsZW1lbnRlZCBmb3IgZGlyZWN0IHJ1bm5lciEnKQogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIHJldHVybgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9tYXBfc3RhdGVfdG9fam9iU3RhdGUoc3RhdGUpOgogICAgaWYgc3RhdGUgPT0gUGlwZWxpbmVTdGF0ZS5VTktOT1dOOgogICAgICByZXR1cm4gYmVhbV9qb2JfYXBpX3BiMi5Kb2JTdGF0ZS5VTlNQRUNJRklFRAogICAgZWxpZiBzdGF0ZSA9PSBQaXBlbGluZVN0YXRlLlNUT1BQRUQ6CiAgICAgIHJldHVybiBiZWFtX2pvYl9hcGlfcGIyLkpvYlN0YXRlLlNUT1BQRUQKICAgIGVsaWYgc3RhdGUgPT0gUGlwZWxpbmVTdGF0ZS5SVU5OSU5HOgogICAgICByZXR1cm4gYmVhbV9qb2JfYXBpX3BiMi5Kb2JTdGF0ZS5SVU5OSU5HCiAgICBlbGlmIHN0YXRlID09IFBpcGVsaW5lU3RhdGUuRE9ORToKICAgICAgcmV0dXJuIGJlYW1fam9iX2FwaV9wYjIuSm9iU3RhdGUuRE9ORQogICAgZWxpZiBzdGF0ZSA9PSBQaXBlbGluZVN0YXRlLkZBSUxFRDoKICAgICAgcmV0dXJuIGJlYW1fam9iX2FwaV9wYjIuSm9iU3RhdGUuRkFJTEVECiAgICBlbGlmIHN0YXRlID09IFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTEVEOgogICAgICByZXR1cm4gYmVhbV9qb2JfYXBpX3BiMi5Kb2JTdGF0ZS5DQU5DRUxMRUQKICAgIGVsaWYgc3RhdGUgPT0gUGlwZWxpbmVTdGF0ZS5VUERBVEVEOgogICAgICByZXR1cm4gYmVhbV9qb2JfYXBpX3BiMi5Kb2JTdGF0ZS5VUERBVEVECiAgICBlbGlmIHN0YXRlID09IFBpcGVsaW5lU3RhdGUuRFJBSU5JTkc6CiAgICAgIHJldHVybiBiZWFtX2pvYl9hcGlfcGIyLkpvYlN0YXRlLkRSQUlOSU5HCiAgICBlbGlmIHN0YXRlID09IFBpcGVsaW5lU3RhdGUuRFJBSU5FRDoKICAgICAgcmV0dXJuIGJlYW1fam9iX2FwaV9wYjIuSm9iU3RhdGUuRFJBSU5FRAogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biBwaXBlbGluZSBzdGF0ZScpCgoKZGVmIHNlcnZlKCk6CiAgc2VydmVyID0gZ3JwYy5zZXJ2ZXIoZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9MTApKQogIGJlYW1fam9iX2FwaV9wYjJfZ3JwYy5hZGRfSm9iU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcihKb2JTZXJ2aWNlKCksIHNlcnZlcikKCiAgc2VydmVyLmFkZF9pbnNlY3VyZV9wb3J0KCdbOjpdOjUwMDUxJykKICBzZXJ2ZXIuc3RhcnQoKQoKICB0cnk6CiAgICB3aGlsZSBUcnVlOgogICAgICB0aW1lLnNsZWVwKF9PTkVfREFZX0lOX1NFQ09ORFMpCiAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgc2VydmVyLnN0b3AoMCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHNlcnZlKCkKfXJDAQAAKFgTAAAASm9iU2VydmljZS5fX2luaXRfX1gDAAAAZGVmSyVLJ4dYBQAAAHNlcnZlWAMAAABkZWZLYEtsh1gRAAAASm9iU2VydmljZS5jYW5jZWxYAwAAAGRlZks2SzuHWCEAAABKb2JTZXJ2aWNlLl9tYXBfc3RhdGVfdG9fam9iU3RhdGVYAwAAAGRlZktIS16HWBkAAABKb2JTZXJ2aWNlLmdldFN0YXRlU3RyZWFtWAMAAABkZWZLQ0tHh1gbAAAASm9iU2VydmljZS5nZXRNZXNzYWdlU3RyZWFtWAMAAABkZWZLPEtCh1gKAAAASm9iU2VydmljZVgFAAAAY2xhc3NLI0teh1gOAAAASm9iU2VydmljZS5ydW5YAwAAAGRlZksoSzCHWBMAAABKb2JTZXJ2aWNlLmdldFN0YXRlWAMAAABkZWZLMUs1h3V9ckQBAAAoWAUAAABzZXJ2ZVg5AAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyckUBAABYEQAAAEpvYlNlcnZpY2UuY2FuY2VsakUBAABYGQAAAEpvYlNlcnZpY2UuZ2V0U3RhdGVTdHJlYW1qRQEAAFgbAAAASm9iU2VydmljZS5nZXRNZXNzYWdlU3RyZWFtakUBAABYCgAAAEpvYlNlcnZpY2VqRQEAAFgOAAAASm9iU2VydmljZS5ydW5qRQEAAFgTAAAASm9iU2VydmljZS5nZXRTdGF0ZWpFAQAAdWiKWDkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXJyRgEAAIWBckcBAAB9ckgBAABidHJJAQAAVRphcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcnJKAQAAKFhQEgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHByb2ZpbGVyIGNvbnRleHQgbWFuYWdlciBiYXNlZCBvbiBjUHJvZmlsZS5Qcm9maWxlIG9iamVjdHMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKaW1wb3J0IGNQcm9maWxlCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgcHN0YXRzCmltcG9ydCBTdHJpbmdJTwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRpbWUKaW1wb3J0IHdhcm5pbmdzCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaW1lcgoKCmNsYXNzIFByb2ZpbGUob2JqZWN0KToKICAiIiJjUHJvZmlsZSB3cmFwcGVyIGNvbnRleHQgZm9yIHNhdmluZyBhbmQgbG9nZ2luZyBwcm9maWxlciByZXN1bHRzLiIiIgoKICBTT1JUQlkgPSAnY3VtdWxhdGl2ZScKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2ZpbGVfaWQsIHByb2ZpbGVfbG9jYXRpb249Tm9uZSwgbG9nX3Jlc3VsdHM9RmFsc2UsCiAgICAgICAgICAgICAgIGZpbGVfY29weV9mbj1Ob25lKToKICAgIHNlbGYuc3RhdHMgPSBOb25lCiAgICBzZWxmLnByb2ZpbGVfaWQgPSBzdHIocHJvZmlsZV9pZCkKICAgIHNlbGYucHJvZmlsZV9sb2NhdGlvbiA9IHByb2ZpbGVfbG9jYXRpb24KICAgIHNlbGYubG9nX3Jlc3VsdHMgPSBsb2dfcmVzdWx0cwogICAgc2VsZi5maWxlX2NvcHlfZm4gPSBmaWxlX2NvcHlfZm4KCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIGxvZ2dpbmcuaW5mbygnU3RhcnQgcHJvZmlsaW5nOiAlcycsIHNlbGYucHJvZmlsZV9pZCkKICAgIHNlbGYucHJvZmlsZSA9IGNQcm9maWxlLlByb2ZpbGUoKQogICAgc2VsZi5wcm9maWxlLmVuYWJsZSgpCiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgogICAgc2VsZi5wcm9maWxlLmRpc2FibGUoKQogICAgbG9nZ2luZy5pbmZvKCdTdG9wIHByb2ZpbGluZzogJXMnLCBzZWxmLnByb2ZpbGVfaWQpCgogICAgaWYgc2VsZi5wcm9maWxlX2xvY2F0aW9uIGFuZCBzZWxmLmZpbGVfY29weV9mbjoKICAgICAgZHVtcF9sb2NhdGlvbiA9IG9zLnBhdGguam9pbigKICAgICAgICAgIHNlbGYucHJvZmlsZV9sb2NhdGlvbiwgJ3Byb2ZpbGUnLAogICAgICAgICAgKCclcy0lcycgJSAodGltZS5zdHJmdGltZSgnJVktJW0tJWRfJUhfJU1fJVMnKSwgc2VsZi5wcm9maWxlX2lkKSkpCiAgICAgIGZkLCBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQogICAgICBzZWxmLnByb2ZpbGUuZHVtcF9zdGF0cyhmaWxlbmFtZSkKICAgICAgbG9nZ2luZy5pbmZvKCdDb3B5aW5nIHByb2ZpbGVyIGRhdGEgdG86IFslc10nLCBkdW1wX2xvY2F0aW9uKQogICAgICBzZWxmLmZpbGVfY29weV9mbihmaWxlbmFtZSwgZHVtcF9sb2NhdGlvbikgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgb3MuY2xvc2UoZmQpCiAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKCiAgICBpZiBzZWxmLmxvZ19yZXN1bHRzOgogICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICBzZWxmLnN0YXRzID0gcHN0YXRzLlN0YXRzKAogICAgICAgICAgc2VsZi5wcm9maWxlLCBzdHJlYW09cykuc29ydF9zdGF0cyhQcm9maWxlLlNPUlRCWSkKICAgICAgc2VsZi5zdGF0cy5wcmludF9zdGF0cygpCiAgICAgIGxvZ2dpbmcuaW5mbygnUHJvZmlsZXIgZGF0YTogWyVzXScsIHMuZ2V0dmFsdWUoKSkKCgpjbGFzcyBNZW1vcnlSZXBvcnRlcihvYmplY3QpOgogICIiIkEgbWVtb3J5IHJlcG9ydGVyIHRoYXQgcmVwb3J0cyB0aGUgbWVtb3J5IHVzYWdlIGFuZCBoZWFwIHByb2ZpbGUuCiAgVXNhZ2U6OjoKCiAgICBtciA9IE1lbW9yeVJlcG9ydGVyKGludGVydmFsX3NlY29uZD0zMC4wKQogICAgbXIuc3RhcnQoKQogICAgd2hpbGUgLi4uCiAgICAgIDxkbyBzb21ldGhpbmc+CiAgICAgICMgdGhpcyB3aWxsIHJlcG9ydCBjb250aW51b3VzbHkgd2l0aCAzMCBzZWNvbmRzIGJldHdlZW4gcmVwb3J0cy4KICAgIG1yLnN0b3AoKQoKICBOT1RFOiBBIHJlcG9ydGVyIHdpdGggc3RhcnQoKSBzaG91bGQgYWx3YXlzIHN0b3AoKSwgb3IgdGhlIHBhcmVudCBwcm9jZXNzIGNhbgogIG5ldmVyIGZpbmlzaC4KCiAgT3Igc2ltcGx5IHRoZSBmb2xsb3dpbmcgd2hpY2ggZG9lcyBzdGFyKCkgYW5kIHN0b3AoKToKICAgIHdpdGggTWVtb3J5UmVwb3J0ZXIoaW50ZXJ2YWxfc2Vjb25kPTEwMCk6CiAgICAgIHdoaWxlIC4uLgogICAgICAgIDxkbyBzb21lIHRoaW5nPgoKICBBbHNvIGl0IGNvdWxkIHJlcG9ydCBvbiBkZW1hbmQgd2l0aG91dCBjb250aW51b3VzIHJlcG9ydGluZy46OgoKICAgIG1yID0gTWVtb3J5UmVwb3J0ZXIoKSAgIyBkZWZhdWx0IGludGVydmFsIDYwcyBidXQgbm90IHN0YXJ0ZWQuCiAgICA8ZG8gc29tZXRoaW5nPgogICAgbXIucmVwb3J0X29uY2UoKQogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaW50ZXJ2YWxfc2Vjb25kPTYwLjApOgogICAgIyBndXBweSBtaWdodCBub3QgaGF2ZSBpbnN0YWxsZWQuIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9ndXBweS8wLjEuMTAKICAgICMgVGhlIHJlcG9ydGVyIGNhbiBiZSBzZXQgdXAgb25seSB3aGVuIGd1cHB5IGlzIGluc3RhbGxlZCAoYW5kIGd1cHB5IGNhbm5vdAogICAgIyBiZSBhZGRlZCB0byB0aGUgcmVxdWlyZWQgcGFja2FnZXMgaW4gc2V0dXAucHksIHNpbmNlIGl0J3Mgbm90IGF2YWlsYWJsZQogICAgIyBpbiBhbGwgcGxhdGZvcm1zKS4KICAgIHRyeToKICAgICAgZnJvbSBndXBweSBpbXBvcnQgaHB5ICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKICAgICAgc2VsZi5faHB5ID0gaHB5CiAgICAgIHNlbGYuX2ludGVydmFsX3NlY29uZCA9IGludGVydmFsX3NlY29uZAogICAgICBzZWxmLl90aW1lciA9IE5vbmUKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgd2FybmluZ3Mud2FybignZ3VwcHkgaXMgbm90IGluc3RhbGxlZDsgTWVtb3J5UmVwb3J0ZXIgbm90IGF2YWlsYWJsZS4nKQogICAgICBzZWxmLl9ocHkgPSBOb25lCiAgICBzZWxmLl9lbmFibGVkID0gRmFsc2UKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHNlbGYuc3RhcnQoKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKICAgIHNlbGYuc3RvcCgpCgogIGRlZiBzdGFydChzZWxmKToKICAgIGlmIHNlbGYuX2VuYWJsZWQgb3Igbm90IHNlbGYuX2hweToKICAgICAgcmV0dXJuCiAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQoKICAgIGRlZiByZXBvcnRfd2l0aF9pbnRlcnZhbCgpOgogICAgICBpZiBub3Qgc2VsZi5fZW5hYmxlZDoKICAgICAgICByZXR1cm4KICAgICAgc2VsZi5yZXBvcnRfb25jZSgpCiAgICAgIHNlbGYuX3RpbWVyID0gVGltZXIoc2VsZi5faW50ZXJ2YWxfc2Vjb25kLCByZXBvcnRfd2l0aF9pbnRlcnZhbCkKICAgICAgc2VsZi5fdGltZXIuc3RhcnQoKQoKICAgIHNlbGYuX3RpbWVyID0gVGltZXIoc2VsZi5faW50ZXJ2YWxfc2Vjb25kLCByZXBvcnRfd2l0aF9pbnRlcnZhbCkKICAgIHNlbGYuX3RpbWVyLnN0YXJ0KCkKCiAgZGVmIHN0b3Aoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5fZW5hYmxlZDoKICAgICAgcmV0dXJuCiAgICBzZWxmLl90aW1lci5jYW5jZWwoKQogICAgc2VsZi5fZW5hYmxlZCA9IEZhbHNlCgogIGRlZiByZXBvcnRfb25jZShzZWxmKToKICAgIGlmIG5vdCBzZWxmLl9ocHk6CiAgICAgIHJldHVybgogICAgcmVwb3J0X3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgaGVhcF9wcm9maWxlID0gc2VsZi5faHB5KCkuaGVhcCgpCiAgICBsb2dnaW5nLmluZm8oJyoqKiBNZW1vcnlSZXBvcnQgSGVhcDpcbiAlc1xuIE1lbW9yeVJlcG9ydCB0b29rICUuMWYgc2Vjb25kcycsCiAgICAgICAgICAgICAgICAgaGVhcF9wcm9maWxlLCB0aW1lLnRpbWUoKSAtIHJlcG9ydF9zdGFydF90aW1lKQp9cksBAAAoWBAAAABQcm9maWxlLl9fZXhpdF9fWAMAAABkZWZLNUtKh1gXAAAATWVtb3J5UmVwb3J0ZXIuX19leGl0X19YAwAAAGRlZkt5S3uHWBgAAABNZW1vcnlSZXBvcnRlci5fX2VudGVyX19YAwAAAGRlZkt1S3iHWA4AAABNZW1vcnlSZXBvcnRlclgFAAAAY2xhc3NLTEuYh1gpAAAATWVtb3J5UmVwb3J0ZXIuc3RhcnQucmVwb3J0X3dpdGhfaW50ZXJ2YWxYAwAAAGRlZkuBS4eHWAcAAABQcm9maWxlWAUAAABjbGFzc0siS0qHWBAAAABQcm9maWxlLl9faW5pdF9fWAMAAABkZWZLJ0suh1gTAAAATWVtb3J5UmVwb3J0ZXIuc3RvcFgDAAAAZGVmS4tLkIdYGgAAAE1lbW9yeVJlcG9ydGVyLnJlcG9ydF9vbmNlWAMAAABkZWZLkUuYh1gRAAAAUHJvZmlsZS5fX2VudGVyX19YAwAAAGRlZksvSzSHWBcAAABNZW1vcnlSZXBvcnRlci5fX2luaXRfX1gDAAAAZGVmS2ZLdIdYFAAAAE1lbW9yeVJlcG9ydGVyLnN0YXJ0WAMAAABkZWZLfEuKh3V9ckwBAAAoWAcAAABQcm9maWxlWBoAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcnJNAQAAWBoAAABNZW1vcnlSZXBvcnRlci5yZXBvcnRfb25jZWpNAQAAWBMAAABNZW1vcnlSZXBvcnRlci5zdG9wak0BAABYDgAAAE1lbW9yeVJlcG9ydGVyak0BAABYFAAAAE1lbW9yeVJlcG9ydGVyLnN0YXJ0ak0BAAB1aIpYGgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyck4BAACFgXJPAQAAfXJQAQAAYnRyUQEAAFUnYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlclIBAAAoWKgzAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRyaXZpYWwgdHlwZSBpbmZlcmVuY2UgZm9yIHNpbXBsZSBmdW5jdGlvbnMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGRpcwppbXBvcnQgaW5zcGVjdAppbXBvcnQgcHByaW50CmltcG9ydCBzeXMKaW1wb3J0IHR5cGVzCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBBbnkKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgYnVpbHRpbnMKZnJvbSBzaXgubW92ZXMgaW1wb3J0IHppcAoKCmNsYXNzIFR5cGVJbmZlcmVuY2VFcnJvcihWYWx1ZUVycm9yKToKICAiIiJFcnJvciB0byByYWlzZSB3aGVuIHR5cGUgaW5mZXJlbmNlIGZhaWxlZC4iIiIKICBwYXNzCgoKZGVmIGluc3RhbmNlX3RvX3R5cGUobyk6CiAgIiIiR2l2ZW4gYSBQeXRob24gb2JqZWN0IG8sIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGhpbnQuCiAgIiIiCiAgdCA9IHR5cGUobykKICBpZiBvIGlzIE5vbmU6CiAgICByZXR1cm4gdHlwZShOb25lKQogIGVsaWYgdCBub3QgaW4gdHlwZWhpbnRzLkRJU0FMTE9XRURfUFJJTUlUSVZFX1RZUEVTOgogICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyIGFuZCB0ID09IHR5cGVzLkluc3RhbmNlVHlwZToKICAgICAgcmV0dXJuIG8uX19jbGFzc19fCiAgICBpZiB0ID09IEJvdW5kTWV0aG9kOgogICAgICByZXR1cm4gdHlwZXMuTWV0aG9kVHlwZQogICAgcmV0dXJuIHQKICBlbGlmIHQgPT0gdHVwbGU6CiAgICByZXR1cm4gdHlwZWhpbnRzLlR1cGxlW1tpbnN0YW5jZV90b190eXBlKGl0ZW0pIGZvciBpdGVtIGluIG9dXQogIGVsaWYgdCA9PSBsaXN0OgogICAgcmV0dXJuIHR5cGVoaW50cy5MaXN0WwogICAgICAgIHR5cGVoaW50cy5VbmlvbltbaW5zdGFuY2VfdG9fdHlwZShpdGVtKSBmb3IgaXRlbSBpbiBvXV0KICAgIF0KICBlbGlmIHQgPT0gc2V0OgogICAgcmV0dXJuIHR5cGVoaW50cy5TZXRbCiAgICAgICAgdHlwZWhpbnRzLlVuaW9uW1tpbnN0YW5jZV90b190eXBlKGl0ZW0pIGZvciBpdGVtIGluIG9dXQogICAgXQogIGVsaWYgdCA9PSBkaWN0OgogICAgcmV0dXJuIHR5cGVoaW50cy5EaWN0WwogICAgICAgIHR5cGVoaW50cy5VbmlvbltbaW5zdGFuY2VfdG9fdHlwZShrKSBmb3IgaywgdiBpbiBvLml0ZW1zKCldXSwKICAgICAgICB0eXBlaGludHMuVW5pb25bW2luc3RhbmNlX3RvX3R5cGUodikgZm9yIGssIHYgaW4gby5pdGVtcygpXV0sCiAgICBdCiAgZWxzZToKICAgIHJhaXNlIFR5cGVJbmZlcmVuY2VFcnJvcignVW5rbm93biBmb3JiaWRkZW4gdHlwZTogJXMnICUgdCkKCgpkZWYgdW5pb25fbGlzdCh4cywgeXMpOgogIGFzc2VydCBsZW4oeHMpID09IGxlbih5cykKICByZXR1cm4gW3VuaW9uKHgsIHkpIGZvciB4LCB5IGluIHppcCh4cywgeXMpXQoKCmNsYXNzIENvbnN0KG9iamVjdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgIHNlbGYudHlwZSA9IGluc3RhbmNlX3RvX3R5cGUodmFsdWUpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIENvbnN0KSBhbmQgc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnZhbHVlKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0NvbnN0WyVzXScgJSBzdHIoc2VsZi52YWx1ZSlbOjEwMF0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXAoeCk6CiAgICBpZiBpc2luc3RhbmNlKHgsIENvbnN0KToKICAgICAgcmV0dXJuIHgudHlwZQogICAgcmV0dXJuIHgKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXBfYWxsKHhzKToKICAgIHJldHVybiBbQ29uc3QudW53cmFwKHgpIGZvciB4IGluIHhzXQoKCmNsYXNzIEZyYW1lU3RhdGUob2JqZWN0KToKICAiIiJTdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBmcmFtZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgb2YgZXhlY3V0aW9uLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZiwgbG9jYWxfdmFycz1Ob25lLCBzdGFjaz0oKSk6CiAgICBzZWxmLmYgPSBmCiAgICBzZWxmLmNvID0gZi5fX2NvZGVfXwogICAgc2VsZi52YXJzID0gbGlzdChsb2NhbF92YXJzKQogICAgc2VsZi5zdGFjayA9IGxpc3Qoc3RhY2spCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIEZyYW1lU3RhdGUpIGFuZCBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fCgogIGRlZiBjb3B5KHNlbGYpOgogICAgcmV0dXJuIEZyYW1lU3RhdGUoc2VsZi5mLCBzZWxmLnZhcnMsIHNlbGYuc3RhY2spCgogIGRlZiBjb25zdF90eXBlKHNlbGYsIGkpOgogICAgcmV0dXJuIENvbnN0KHNlbGYuY28uY29fY29uc3RzW2ldKQoKICBkZWYgY2xvc3VyZV90eXBlKHNlbGYsIGkpOgogICAgbmNlbGx2YXJzID0gbGVuKHNlbGYuY28uY29fY2VsbHZhcnMpCiAgICBpZiBpIDwgbmNlbGx2YXJzOgogICAgICByZXR1cm4gQW55CiAgICByZXR1cm4gQ29uc3Qoc2VsZi5mLl9fY2xvc3VyZV9fW2kgLSBuY2VsbHZhcnNdLmNlbGxfY29udGVudHMpCgogIGRlZiBnZXRfZ2xvYmFsKHNlbGYsIGkpOgogICAgbmFtZSA9IHNlbGYuZ2V0X25hbWUoaSkKICAgIGlmIG5hbWUgaW4gc2VsZi5mLl9fZ2xvYmFsc19fOgogICAgICByZXR1cm4gQ29uc3Qoc2VsZi5mLl9fZ2xvYmFsc19fW25hbWVdKQogICAgaWYgbmFtZSBpbiBidWlsdGlucy5fX2RpY3RfXzoKICAgICAgcmV0dXJuIENvbnN0KGJ1aWx0aW5zLl9fZGljdF9fW25hbWVdKQogICAgcmV0dXJuIEFueQoKICBkZWYgZ2V0X25hbWUoc2VsZiwgaSk6CiAgICByZXR1cm4gc2VsZi5jby5jb19uYW1lc1tpXQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1N0YWNrOiAlcyBWYXJzOiAlcycgJSAoc2VsZi5zdGFjaywgc2VsZi52YXJzKQoKICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKICAgIGlmIHNlbGYgaXMgTm9uZToKICAgICAgcmV0dXJuIG90aGVyLmNvcHkoKQogICAgZWxpZiBvdGhlciBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5jb3B5KCkKICAgIHJldHVybiBGcmFtZVN0YXRlKHNlbGYuZiwgdW5pb25fbGlzdChzZWxmLnZhcnMsIG90aGVyLnZhcnMpLCB1bmlvbl9saXN0KAogICAgICAgIHNlbGYuc3RhY2ssIG90aGVyLnN0YWNrKSkKCiAgZGVmIF9fcm9yX18oc2VsZiwgbGVmdCk6CiAgICByZXR1cm4gc2VsZiB8IGxlZnQKCgpkZWYgdW5pb24oYSwgYik6CiAgIiIiUmV0dXJucyB0aGUgdW5pb24gb2YgdHdvIHR5cGVzIG9yIENvbnN0IHZhbHVlcy4KICAiIiIKICBpZiBhID09IGI6CiAgICByZXR1cm4gYQogIGVsaWYgbm90IGE6CiAgICByZXR1cm4gYgogIGVsaWYgbm90IGI6CiAgICByZXR1cm4gYQogIGEgPSBDb25zdC51bndyYXAoYSkKICBiID0gQ29uc3QudW53cmFwKGIpCiAgIyBUT0RPKHJvYmVydHdiKTogV29yayB0aGlzIGludG8gdGhlIFVuaW9uIGNvZGUgaW4gYSBtb3JlIGdlbmVyaWMgd2F5LgogIGlmIHR5cGUoYSkgPT0gdHlwZShiKSBhbmQgZWxlbWVudF90eXBlKGEpID09IHR5cGVoaW50cy5VbmlvblsoKV06CiAgICByZXR1cm4gYgogIGVsaWYgdHlwZShhKSA9PSB0eXBlKGIpIGFuZCBlbGVtZW50X3R5cGUoYikgPT0gdHlwZWhpbnRzLlVuaW9uWygpXToKICAgIHJldHVybiBhCiAgcmV0dXJuIHR5cGVoaW50cy5VbmlvblthLCBiXQoKCmRlZiBlbGVtZW50X3R5cGUoaGludCk6CiAgIiIiUmV0dXJucyB0aGUgZWxlbWVudCB0eXBlIG9mIGEgY29tcG9zaXRlIHR5cGUuCiAgIiIiCiAgaGludCA9IENvbnN0LnVud3JhcChoaW50KQogIGlmIGlzaW5zdGFuY2UoaGludCwgdHlwZWhpbnRzLlNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgogICAgcmV0dXJuIGhpbnQuaW5uZXJfdHlwZQogIGVsaWYgaXNpbnN0YW5jZShoaW50LCB0eXBlaGludHMuVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwZWhpbnRzLlVuaW9uW2hpbnQudHVwbGVfdHlwZXNdCiAgcmV0dXJuIEFueQoKCmRlZiBrZXlfdmFsdWVfdHlwZXMoa3ZfdHlwZSk6CiAgIiIiUmV0dXJucyB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlIG9mIGEgS1YgdHlwZS4KICAiIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBVbmlvbnMgb2YgdHVwbGVzLCBldGMuCiAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0PwogIGlmIChpc2luc3RhbmNlKGt2X3R5cGUsIHR5cGVoaW50cy5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KQogICAgICBhbmQgbGVuKGt2X3R5cGUudHVwbGVfdHlwZXMpID09IDIpOgogICAgcmV0dXJuIGt2X3R5cGUudHVwbGVfdHlwZXMKICByZXR1cm4gQW55LCBBbnkKCgprbm93bl9yZXR1cm5fdHlwZXMgPSB7bGVuOiBpbnQsIGhhc2g6IGludCx9CgoKY2xhc3MgQm91bmRNZXRob2Qob2JqZWN0KToKICAiIiJVc2VkIHRvIGNyZWF0ZSBhIGJvdW5kIG1ldGhvZCB3aGVuIHdlIG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgaW5zdGFuY2UuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCB0eXBlKToKICAgICIiIkluc3RhbnRpYXRlcyBhIGJvdW5kIG1ldGhvZCBvYmplY3QuCgogICAgQXJnczoKICAgICAgZnVuYyAodHlwZXMuRnVuY3Rpb25UeXBlKTogVGhlIG1ldGhvZCdzIHVuZGVybHlpbmcgZnVuY3Rpb24KICAgICAgdHlwZSAodHlwZSk6IFRoZSBjbGFzcyBvZiB0aGUgbWV0aG9kLgogICAgIiIiCiAgICBzZWxmLmZ1bmMgPSBmdW5jCiAgICBzZWxmLnR5cGUgPSB0eXBlCgoKZGVmIGhhc2hhYmxlKGMpOgogIHRyeToKICAgIGhhc2goYykKICAgIHJldHVybiBUcnVlCiAgZXhjZXB0IFR5cGVFcnJvcjoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBpbmZlcl9yZXR1cm5fdHlwZShjLCBpbnB1dF90eXBlcywgZGVidWc9RmFsc2UsIGRlcHRoPTUpOgogICIiIkFuYWx5c2VzIGEgY2FsbGFibGUgdG8gZGVkdWNlIGl0cyByZXR1cm4gdHlwZS4KCiAgQXJnczoKICAgIGM6IEEgUHl0aG9uIGNhbGxhYmxlIHRvIGluZmVyIHRoZSByZXR1cm4gdHlwZSBvZi4KICAgIGlucHV0X3R5cGVzOiBBIHNlcXVlbmNlIG9mIGlucHV0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCB0eXBlcy4KICAgIGRlYnVnOiBXaGV0aGVyIHRvIHByaW50IHZlcmJvc2UgZGVidWdnaW5nIGluZm9ybWF0aW9uLgogICAgZGVwdGg6IE1heGltdW0gaW5zcGVjdGlvbiBkZXB0aCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCgogIFJldHVybnM6CiAgICBBIFR5cGVDb25zdHJhaW50IHRoYXQgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCAobGlrZWx5KQogICAgc2F0aXNmeSBnaXZlbiB0aGUgc3BlY2lmaWVkIGlucHV0cy4KICAiIiIKICB0cnk6CiAgICBpZiBoYXNoYWJsZShjKSBhbmQgYyBpbiBrbm93bl9yZXR1cm5fdHlwZXM6CiAgICAgIHJldHVybiBrbm93bl9yZXR1cm5fdHlwZXNbY10KICAgIGVsaWYgaXNpbnN0YW5jZShjLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICByZXR1cm4gaW5mZXJfcmV0dXJuX3R5cGVfZnVuYyhjLCBpbnB1dF90eXBlcywgZGVidWcsIGRlcHRoKQogICAgZWxpZiBpc2luc3RhbmNlKGMsIHR5cGVzLk1ldGhvZFR5cGUpOgogICAgICBpZiBjLl9fc2VsZl9fIGlzIG5vdCBOb25lOgogICAgICAgIGlucHV0X3R5cGVzID0gW0NvbnN0KGMuX19zZWxmX18pXSArIGlucHV0X3R5cGVzCiAgICAgIHJldHVybiBpbmZlcl9yZXR1cm5fdHlwZV9mdW5jKGMuX19mdW5jX18sIGlucHV0X3R5cGVzLCBkZWJ1ZywgZGVwdGgpCiAgICBlbGlmIGlzaW5zdGFuY2UoYywgQm91bmRNZXRob2QpOgogICAgICBpbnB1dF90eXBlcyA9IFtjLnR5cGVdICsgaW5wdXRfdHlwZXMKICAgICAgcmV0dXJuIGluZmVyX3JldHVybl90eXBlX2Z1bmMoYy5mdW5jLCBpbnB1dF90eXBlcywgZGVidWcsIGRlcHRoKQogICAgZWxpZiBpbnNwZWN0LmlzY2xhc3MoYyk6CiAgICAgIGlmIGMgaW4gdHlwZWhpbnRzLkRJU0FMTE9XRURfUFJJTUlUSVZFX1RZUEVTOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxpc3Q6IHR5cGVoaW50cy5MaXN0W0FueV0sCiAgICAgICAgICAgIHNldDogdHlwZWhpbnRzLlNldFtBbnldLAogICAgICAgICAgICB0dXBsZTogdHlwZWhpbnRzLlR1cGxlW0FueSwgLi4uXSwKICAgICAgICAgICAgZGljdDogdHlwZWhpbnRzLkRpY3RbQW55LCBBbnldCiAgICAgICAgfVtjXQogICAgICByZXR1cm4gYwogICAgZWxzZToKICAgICAgcmV0dXJuIEFueQogIGV4Y2VwdCBUeXBlSW5mZXJlbmNlRXJyb3I6CiAgICByZXR1cm4gQW55CiAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgIGlmIGRlYnVnOgogICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgcmFpc2UKICAgIGVsc2U6CiAgICAgIHJldHVybiBBbnkKCgpkZWYgaW5mZXJfcmV0dXJuX3R5cGVfZnVuYyhmLCBpbnB1dF90eXBlcywgZGVidWc9RmFsc2UsIGRlcHRoPTApOgogICIiIkFuYWx5c2VzIGEgZnVuY3Rpb24gdG8gZGVkdWNlIGl0cyByZXR1cm4gdHlwZS4KCiAgQXJnczoKICAgIGY6IEEgUHl0aG9uIGZ1bmN0aW9uIG9iamVjdCB0byBpbmZlciB0aGUgcmV0dXJuIHR5cGUgb2YuCiAgICBpbnB1dF90eXBlczogQSBzZXF1ZW5jZSBvZiBpbnB1dHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgdHlwZXMuCiAgICBkZWJ1ZzogV2hldGhlciB0byBwcmludCB2ZXJib3NlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KICAgIGRlcHRoOiBNYXhpbXVtIGluc3BlY3Rpb24gZGVwdGggZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgoKICBSZXR1cm5zOgogICAgQSBUeXBlQ29uc3RyYWludCB0aGF0IHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgKGxpa2VseSkKICAgIHNhdGlzZnkgZ2l2ZW4gdGhlIHNwZWNpZmllZCBpbnB1dHMuCgogIFJhaXNlczoKICAgIFR5cGVJbmZlcmVuY2VFcnJvcjogaWYgbm8gdHlwZSBjYW4gYmUgaW5mZXJyZWQuCiAgIiIiCiAgaWYgZGVidWc6CiAgICBwcmludCgpCiAgICBwcmludChmLCBpZChmKSwgaW5wdXRfdHlwZXMpCiAgZnJvbSAuIGltcG9ydCBvcGNvZGVzCiAgc2ltcGxlX29wcyA9IGRpY3QoKGsudXBwZXIoKSwgdikgZm9yIGssIHYgaW4gb3Bjb2Rlcy5fX2RpY3RfXy5pdGVtcygpKQoKICBjbyA9IGYuX19jb2RlX18KICBjb2RlID0gY28uY29fY29kZQogIGVuZCA9IGxlbihjb2RlKQogIHBjID0gMAogIGV4dGVuZGVkX2FyZyA9IDAKICBmcmVlID0gTm9uZQoKICB5aWVsZHMgPSBzZXQoKQogIHJldHVybnMgPSBzZXQoKQogICMgVE9ETyhyb2JlcnR3Yik6IERlZmF1bHQgYXJncyB2aWEgaW5zcGVjdCBtb2R1bGUuCiAgbG9jYWxfdmFycyA9IGxpc3QoaW5wdXRfdHlwZXMpICsgW3R5cGVoaW50cy5VbmlvblsoKV1dICogKGxlbihjby5jb192YXJuYW1lcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBsZW4oaW5wdXRfdHlwZXMpKQogIHN0YXRlID0gRnJhbWVTdGF0ZShmLCBsb2NhbF92YXJzKQogIHN0YXRlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxhbWJkYTogTm9uZSkKICBqdW1wcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKCiAgbGFzdF9wYyA9IC0xCiAgd2hpbGUgcGMgPCBlbmQ6CiAgICBzdGFydCA9IHBjCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CiAgICAgIG9wID0gb3JkKGNvZGVbcGNdKQogICAgZWxzZToKICAgICAgb3AgPSBjb2RlW3BjXQogICAgaWYgZGVidWc6CiAgICAgIHByaW50KCctLT4nIGlmIHBjID09IGxhc3RfcGMgZWxzZSAnICAgICcsIGVuZD0nICcpCiAgICAgIHByaW50KHJlcHIocGMpLnJqdXN0KDQpLCBlbmQ9JyAnKQogICAgICBwcmludChkaXMub3BuYW1lW29wXS5sanVzdCgyMCksIGVuZD0nICcpCgogICAgcGMgKz0gMQogICAgaWYgb3AgPj0gZGlzLkhBVkVfQVJHVU1FTlQ6CiAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgICAgICBhcmcgPSBvcmQoY29kZVtwY10pICsgb3JkKGNvZGVbcGMgKyAxXSkgKiAyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgZWxpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy52ZXJzaW9uX2luZm9bMV0gPCA2OgogICAgICAgIGFyZyA9IGNvZGVbcGNdICsgY29kZVtwYyArIDFdICogMjU2ICsgZXh0ZW5kZWRfYXJnCiAgICAgIGVsc2U6CiAgICAgICAgcGFzcyAjIFRPRE8obHVrZS16aHUpOiBQeXRob24gMy42IGJ5dGVjb2RlIHRvIHdvcmRjb2RlIGNoYW5nZXMKICAgICAgZXh0ZW5kZWRfYXJnID0gMAogICAgICBwYyArPSAyCiAgICAgIGlmIG9wID09IGRpcy5FWFRFTkRFRF9BUkc6CiAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnICogNjU1MzYKICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoc3RyKGFyZykucmp1c3QoNSksIGVuZD0nICcpCiAgICAgICAgaWYgb3AgaW4gZGlzLmhhc2NvbnN0OgogICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbYXJnXSkgKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzbmFtZToKICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW2FyZ10gKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzanJlbDoKICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIocGMgKyBhcmcpICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2xvY2FsOgogICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbYXJnXSArICcpJywgZW5kPScgJykKICAgICAgICBlbGlmIG9wIGluIGRpcy5oYXNjb21wYXJlOgogICAgICAgICAgcHJpbnQoJygnICsgZGlzLmNtcF9vcFthcmddICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2ZyZWU6CiAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6CiAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgICAgICBwcmludCgnKCcgKyBmcmVlW2FyZ10gKyAnKScsIGVuZD0nICcpCgogICAgIyBBY3V0YWxseSBlbXVsYXRlIHRoZSBvcC4KICAgIGlmIHN0YXRlIGlzIE5vbmUgYW5kIHN0YXRlc1tzdGFydF0gaXMgTm9uZToKICAgICAgIyBObyBjb250cm9sIHJlYWNoZXMgaGVyZSAoeWV0KS4KICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoKQogICAgICBjb250aW51ZQogICAgc3RhdGUgfD0gc3RhdGVzW3N0YXJ0XQoKICAgIG9wbmFtZSA9IGRpcy5vcG5hbWVbb3BdCiAgICBqbXAgPSBqbXBfc3RhdGUgPSBOb25lCiAgICBpZiBvcG5hbWUuc3RhcnRzd2l0aCgnQ0FMTF9GVU5DVElPTicpOgogICAgICBzdGFuZGFyZF9hcmdzID0gKGFyZyAmIDB4RikgKyAoYXJnICYgMHhGMCkgLy8gOAogICAgICB2YXJfYXJncyA9ICdWQVInIGluIG9wbmFtZQogICAgICBrd19hcmdzID0gJ0tXJyBpbiBvcG5hbWUKICAgICAgcG9wX2NvdW50ID0gc3RhbmRhcmRfYXJncyArIHZhcl9hcmdzICsga3dfYXJncyArIDEKICAgICAgaWYgZGVwdGggPD0gMDoKICAgICAgICByZXR1cm5fdHlwZSA9IEFueQogICAgICBlbGlmIGFyZyAmIDB4RjA6CiAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogSGFuZGxlIHRoaXMgY2FzZS4KICAgICAgICByZXR1cm5fdHlwZSA9IEFueQogICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RhdGUuc3RhY2tbLXBvcF9jb3VudF0sIENvbnN0KToKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBIYW5kbGUgdGhpcyBiZXR0ZXIuCiAgICAgICAgaWYgdmFyX2FyZ3Mgb3Iga3dfYXJnczoKICAgICAgICAgIHN0YXRlLnN0YWNrWy0xXSA9IEFueQogICAgICAgICAgc3RhdGUuc3RhY2tbLXZhcl9hcmdzIC0ga3dfYXJnc10gPSBBbnkKICAgICAgICByZXR1cm5fdHlwZSA9IGluZmVyX3JldHVybl90eXBlKHN0YXRlLnN0YWNrWy1wb3BfY291bnRdLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3RhY2tbMSAtIHBvcF9jb3VudDpdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9ZGVidWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD1kZXB0aCAtIDEpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgc3RhdGUuc3RhY2tbLXBvcF9jb3VudDpdID0gW3JldHVybl90eXBlXQogICAgZWxpZiAob3BuYW1lID09ICdCSU5BUllfU1VCU0NSJwogICAgICAgICAgYW5kIGlzaW5zdGFuY2Uoc3RhdGUuc3RhY2tbMV0sIENvbnN0KQogICAgICAgICAgYW5kIGlzaW5zdGFuY2Uoc3RhdGUuc3RhY2tbMF0sIHR5cGVoaW50cy5JbmRleGFibGVUeXBlQ29uc3RyYWludCkpOgogICAgICBpZiBkZWJ1ZzoKICAgICAgICBwcmludCgiRXhlY3V0aW5nIHNwZWNpYWwgY2FzZSBiaW5hcnkgc3Vic2NyaXB0IikKICAgICAgaWR4ID0gc3RhdGUuc3RhY2sucG9wKCkKICAgICAgc3JjID0gc3RhdGUuc3RhY2sucG9wKCkKICAgICAgdHJ5OgogICAgICAgIHN0YXRlLnN0YWNrLmFwcGVuZChzcmMuX2NvbnN0cmFpbnRfZm9yX2luZGV4KGlkeC52YWx1ZSkpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBpZiBkZWJ1ZzoKICAgICAgICAgIHByaW50KCJFeGNlcHRpb24gezB9IGR1cmluZyBzcGVjaWFsIGNhc2UgaW5kZXhpbmciLmZvcm1hdChlKSkKICAgICAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQW55KQogICAgZWxpZiBvcG5hbWUgaW4gc2ltcGxlX29wczoKICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzaW1wbGUgb3AgIiArIG9wbmFtZSkKICAgICAgc2ltcGxlX29wc1tvcG5hbWVdKHN0YXRlLCBhcmcpCiAgICBlbGlmIG9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJzoKICAgICAgcmV0dXJucy5hZGQoc3RhdGUuc3RhY2tbLTFdKQogICAgICBzdGF0ZSA9IE5vbmUKICAgIGVsaWYgb3BuYW1lID09ICdZSUVMRF9WQUxVRSc6CiAgICAgIHlpZWxkcy5hZGQoc3RhdGUuc3RhY2tbLTFdKQogICAgZWxpZiBvcG5hbWUgPT0gJ0pVTVBfRk9SV0FSRCc6CiAgICAgIGptcCA9IHBjICsgYXJnCiAgICAgIGptcF9zdGF0ZSA9IHN0YXRlCiAgICAgIHN0YXRlID0gTm9uZQogICAgZWxpZiBvcG5hbWUgPT0gJ0pVTVBfQUJTT0xVVEUnOgogICAgICBqbXAgPSBhcmcKICAgICAgam1wX3N0YXRlID0gc3RhdGUKICAgICAgc3RhdGUgPSBOb25lCiAgICBlbGlmIG9wbmFtZSBpbiAoJ1BPUF9KVU1QX0lGX1RSVUUnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKICAgICAgc3RhdGUuc3RhY2sucG9wKCkKICAgICAgam1wID0gYXJnCiAgICAgIGptcF9zdGF0ZSA9IHN0YXRlLmNvcHkoKQogICAgZWxpZiBvcG5hbWUgaW4gKCdKVU1QX0lGX1RSVUVfT1JfUE9QJywgJ0pVTVBfSUZfRkFMU0VfT1JfUE9QJyk6CiAgICAgIGptcCA9IGFyZwogICAgICBqbXBfc3RhdGUgPSBzdGF0ZS5jb3B5KCkKICAgICAgc3RhdGUuc3RhY2sucG9wKCkKICAgIGVsaWYgb3BuYW1lID09ICdGT1JfSVRFUic6CiAgICAgIGptcCA9IHBjICsgYXJnCiAgICAgIGptcF9zdGF0ZSA9IHN0YXRlLmNvcHkoKQogICAgICBqbXBfc3RhdGUuc3RhY2sucG9wKCkKICAgICAgc3RhdGUuc3RhY2suYXBwZW5kKGVsZW1lbnRfdHlwZShzdGF0ZS5zdGFja1stMV0pKQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUluZmVyZW5jZUVycm9yKCd1bmFibGUgdG8gaGFuZGxlICVzJyAlIG9wbmFtZSkKCiAgICBpZiBqbXAgaXMgbm90IE5vbmU6CiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IElzIHRoaXMgZ3VlcmVudGVlZCB0byBjb252ZXJnZT8KICAgICAgbmV3X3N0YXRlID0gc3RhdGVzW2ptcF0gfCBqbXBfc3RhdGUKICAgICAgaWYgam1wIDwgcGMgYW5kIG5ld19zdGF0ZSAhPSBzdGF0ZXNbam1wXSBhbmQganVtcHNbcGNdIDwgNToKICAgICAgICBqdW1wc1twY10gKz0gMQogICAgICAgIHBjID0gam1wCiAgICAgIHN0YXRlc1tqbXBdID0gbmV3X3N0YXRlCgogICAgaWYgZGVidWc6CiAgICAgIHByaW50KCkKICAgICAgcHJpbnQoc3RhdGUpCiAgICAgIHBwcmludC5wcHJpbnQoZGljdChpdGVtIGZvciBpdGVtIGluIHN0YXRlcy5pdGVtcygpIGlmIGl0ZW1bMV0pKQoKICBpZiB5aWVsZHM6CiAgICByZXN1bHQgPSB0eXBlaGludHMuSXRlcmFibGVbcmVkdWNlKHVuaW9uLCBDb25zdC51bndyYXBfYWxsKHlpZWxkcykpXQogIGVsc2U6CiAgICByZXN1bHQgPSByZWR1Y2UodW5pb24sIENvbnN0LnVud3JhcF9hbGwocmV0dXJucykpCgogIGlmIGRlYnVnOgogICAgcHJpbnQoZiwgaWQoZiksIGlucHV0X3R5cGVzLCAnLT4nLCByZXN1bHQpCiAgcmV0dXJuIHJlc3VsdAp9clMBAAAoWBMAAABGcmFtZVN0YXRlLl9fcmVwcl9fWAMAAABkZWZLjkuQh1gIAAAAaGFzaGFibGVYAwAAAGRlZkvYS96HWAwAAABDb25zdC51bndyYXBYAwAAAGRlZktfS2SHWBIAAABGcmFtZVN0YXRlLl9fcm9yX19YAwAAAGRlZkuZS5uHWBMAAABGcmFtZVN0YXRlLmdldF9uYW1lWAMAAABkZWZLi0uNh1gKAAAAdW5pb25fbGlzdFgDAAAAZGVmS0tLTodYDgAAAENvbnN0Ll9faGFzaF9fWAMAAABkZWZLWUtbh1gSAAAAVHlwZUluZmVyZW5jZUVycm9yWAUAAABjbGFzc0snSyqHWAUAAABDb25zdFgFAAAAY2xhc3NLUEtoh1gXAAAARnJhbWVTdGF0ZS5jbG9zdXJlX3R5cGVYAwAAAGRlZkt9S4KHWAsAAABCb3VuZE1ldGhvZFgFAAAAY2xhc3NLyUvWh1gPAAAARnJhbWVTdGF0ZS5jb3B5WAMAAABkZWZLd0t5h1gMAAAAZWxlbWVudF90eXBlWAMAAABkZWZLsEu5h1gQAAAAaW5zdGFuY2VfdG9fdHlwZVgDAAAAZGVmSyxLSYdYEQAAAGluZmVyX3JldHVybl90eXBlWAMAAABkZWZL4E0MAYdYDwAAAGtleV92YWx1ZV90eXBlc1gDAAAAZGVmS7tLxIdYEAAAAENvbnN0LnVud3JhcF9hbGxYAwAAAGRlZktlS2iHWBYAAABpbmZlcl9yZXR1cm5fdHlwZV9mdW5jWAMAAABkZWZNDgFNwAGHWAwAAABDb25zdC5fX2VxX19YAwAAAGRlZktWS1iHWBEAAABGcmFtZVN0YXRlLl9fZXFfX1gDAAAAZGVmS3RLdodYFQAAAEZyYW1lU3RhdGUuZ2V0X2dsb2JhbFgDAAAAZGVmS4NLiodYCgAAAEZyYW1lU3RhdGVYBQAAAGNsYXNzS2pLm4dYBQAAAHVuaW9uWAMAAABkZWZLnUuuh1gTAAAARnJhbWVTdGF0ZS5fX2luaXRfX1gDAAAAZGVmS25Lc4dYEQAAAEZyYW1lU3RhdGUuX19vcl9fWAMAAABkZWZLkUuYh1gVAAAARnJhbWVTdGF0ZS5jb25zdF90eXBlWAMAAABkZWZLekt8h1gUAAAAQm91bmRNZXRob2QuX19pbml0X19YAwAAAGRlZkvNS9aHWA4AAABDb25zdC5fX3JlcHJfX1gDAAAAZGVmS1xLXodYDgAAAENvbnN0Ll9faW5pdF9fWAMAAABkZWZLUktVh3V9clQBAAAoWBUAAABGcmFtZVN0YXRlLmdldF9nbG9iYWxYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZXJVAQAAWBAAAABpbnN0YW5jZV90b190eXBlalUBAABYEQAAAGluZmVyX3JldHVybl90eXBlalUBAABYBQAAAHVuaW9ualUBAABYEgAAAFR5cGVJbmZlcmVuY2VFcnJvcnJWAQAAalUBAABYDwAAAGtleV92YWx1ZV90eXBlc2pVAQAAWAUAAABDb25zdGpVAQAAWBUAAABGcmFtZVN0YXRlLmNvbnN0X3R5cGVqVQEAAFgQAAAAQ29uc3QudW53cmFwX2FsbGpVAQAAWBcAAABGcmFtZVN0YXRlLmNsb3N1cmVfdHlwZWpVAQAAWBYAAABpbmZlcl9yZXR1cm5fdHlwZV9mdW5jalUBAABYDAAAAENvbnN0LnVud3JhcGpVAQAAWA8AAABGcmFtZVN0YXRlLmNvcHlqVQEAAFgLAAAAQm91bmRNZXRob2RqVQEAAFgTAAAARnJhbWVTdGF0ZS5nZXRfbmFtZWpVAQAAWAgAAABoYXNoYWJsZWpVAQAAWAwAAABlbGVtZW50X3R5cGVqVQEAAFgKAAAARnJhbWVTdGF0ZWpVAQAAWAoAAAB1bmlvbl9saXN0alUBAAB1aIpYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZXJXAQAAhYFyWAEAAH1yWQEAAGJ0cloBAABVGWFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHNyWwEAAChY9yYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiClRoaXMgZmlsZSBjb250YWlucyBtZXRyaWMgY2VsbCBjbGFzc2VzLiBBIG1ldHJpYyBjZWxsIGlzIHVzZWQgdG8gYWNjdW11bGF0ZQppbi1tZW1vcnkgY2hhbmdlcyB0byBhIG1ldHJpYy4gSXQgcmVwcmVzZW50cyBhIHNwZWNpZmljIG1ldHJpYyBpbiBhIHNpbmdsZQpjb250ZXh0LgoKQ2VsbHMgZGVwZW5kIG9uIGEgJ2RpcnR5LWJpdCcgaW4gdGhlIENlbGxDb21taXRTdGF0ZSBjbGFzcyB0aGF0IHRyYWNrcyB3aGV0aGVyCmEgY2VsbCdzIHVwZGF0ZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZC4KIiIiCgppbXBvcnQgdGhyZWFkaW5nCgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgQ291bnRlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKCl9fYWxsX18gPSBbJ0Rpc3RyaWJ1dGlvblJlc3VsdCddCgoKY2xhc3MgQ2VsbENvbW1pdFN0YXRlKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBdG9taWNhbGx5IHRyYWNrcyBhIGNlbGwncyBkaXJ0eS9jbGVhbiBjb21taXQgc3RhdHVzLgoKICBSZXBvcnRpbmcgYSBtZXRyaWMgdXBkYXRlIHdvcmtzIGluIGEgdHdvLXN0ZXAgcHJvY2VzczogRmlyc3QsIHVwZGF0ZXMgdG8gdGhlCiAgbWV0cmljIGFyZSByZWNlaXZlZCwgYW5kIHRoZSBtZXRyaWMgaXMgbWFya2VkIGFzICdkaXJ0eScuIExhdGVyLCB1cGRhdGVzIGFyZQogIGNvbW1pdHRlZCwgYW5kIHRoZW4gdGhlIGNlbGwgbWF5IGJlIG1hcmtlZCBhcyAnY2xlYW4nLgoKICBUaGUgdHJhY2tpbmcgb2YgYSBjZWxsJ3Mgc3RhdGUgaXMgZG9uZSBjb25zZXJ2YXRpdmVseTogQSBtZXRyaWMgbWF5IGJlCiAgcmVwb3J0ZWQgRElSVFkgZXZlbiBpZiB1cGRhdGVzIGhhdmUgbm90IG9jY3VycmVkLgoKICBUaGlzIGNsYXNzIGlzIHRocmVhZC1zYWZlLgogICIiIgoKICAjIEluZGljYXRlcyB0aGF0IHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIHRvIHRoZSBjZWxsIHNpbmNlIHRoZSBsYXN0IGNvbW1pdC4KICBESVJUWSA9IDAKICAjIEluZGljYXRlcyB0aGF0IHRoZXJlIGhhdmUgTk9UIGJlZW4gY2hhbmdlcyB0byB0aGUgY2VsbCBzaW5jZSBsYXN0IGNvbW1pdC4KICBDTEVBTiA9IDEKICAjIEluZGljYXRlcyB0aGF0IGEgY29tbWl0IG9mIHRoZSBjdXJyZW50IHZhbHVlIGlzIGluIHByb2dyZXNzLgogIENPTU1JVFRJTkcgPSAyCgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICIiIkluaXRpYWxpemVzIGBgQ2VsbENvbW1pdFN0YXRlYGAuCgogICAgQSBjZWxsIGlzIGluaXRpYWxpemVkIGFzIGRpcnR5LgogICAgIiIiCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fc3RhdGUgPSBDZWxsQ29tbWl0U3RhdGUuRElSVFkKCiAgQHByb3BlcnR5CiAgZGVmIHN0YXRlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fc3RhdGUKCiAgZGVmIGFmdGVyX21vZGlmaWNhdGlvbihzZWxmKToKICAgICIiIkluZGljYXRlIHRoYXQgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgbWV0cmljIGJlaW5nIHRyYWNrZWQuCgogICAgU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBtb2RpZmljYXRpb24gb2YgdGhlIG1ldHJpYyB2YWx1ZS4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl9zdGF0ZSA9IENlbGxDb21taXRTdGF0ZS5ESVJUWQoKICBkZWYgYWZ0ZXJfY29tbWl0KHNlbGYpOgogICAgIiIiTWFyayBjaGFuZ2VzIG1hZGUgdXAgdG8gdGhlIGxhc3QgY2FsbCB0byBgYGJlZm9yZV9jb21taXRgYCBhcyBjb21taXR0ZWQuCgogICAgVGhlIG5leHQgY2FsbCB0byBgYGJlZm9yZV9jb21taXRgYCB3aWxsIHJldHVybiBgYEZhbHNlYGAgdW5sZXNzIHRoZXJlIGhhdmUKICAgIGJlZW4gY2hhbmdlcyBtYWRlLgogICAgIiIiCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHNlbGYuX3N0YXRlID09IENlbGxDb21taXRTdGF0ZS5DT01NSVRUSU5HOgogICAgICAgIHNlbGYuX3N0YXRlID0gQ2VsbENvbW1pdFN0YXRlLkNMRUFOCgogIGRlZiBiZWZvcmVfY29tbWl0KHNlbGYpOgogICAgIiIiQ2hlY2sgdGhlIGRpcnR5IHN0YXRlLCBhbmQgbWFyayB0aGUgbWV0cmljIGFzIGNvbW1pdHRpbmcuCgogICAgQWZ0ZXIgdGhpcyBjYWxsLCB0aGUgc3RhdGUgaXMgZWl0aGVyIENMRUFOLCBvciBDT01NSVRUSU5HLiBJZiB0aGUgc3RhdGUKICAgIHdhcyBhbHJlYWR5IENMRUFOLCB0aGVuIHdlIHNpbXBseSByZXR1cm4uIElmIGl0IHdhcyBlaXRoZXIgRElSVFkgb3IKICAgIENPTU1JVFRJTkcsIHRoZW4gd2Ugc2V0IHRoZSBjZWxsIGFzIENPTU1JVFRJTkcgKGUuZy4gaW4gdGhlIG1pZGRsZSBvZgogICAgYSBjb21taXQpLgoKICAgIEFmdGVyIGEgY29tbWl0IGlzIHN1Y2Nlc3NmdWwsIGBgYWZ0ZXJfY29tbWl0YGAgc2hvdWxkIGJlIGNhbGxlZC4KCiAgICBSZXR1cm5zOgogICAgICBBIGJvb2xlYW4sIHdoaWNoIGlzIGZhbHNlIGlmIHRoZSBjZWxsIGlzIENMRUFOLCBhbmQgdHJ1ZSBvdGhlcndpc2UuCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gQ2VsbENvbW1pdFN0YXRlLkNMRUFOOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBzZWxmLl9zdGF0ZSA9IENlbGxDb21taXRTdGF0ZS5DT01NSVRUSU5HCiAgICAgIHJldHVybiBUcnVlCgoKY2xhc3MgTWV0cmljQ2VsbChvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQWNjdW11bGF0ZXMgaW4tbWVtb3J5IGNoYW5nZXMgdG8gYSBtZXRyaWMuCgogIEEgTWV0cmljQ2VsbCByZXByZXNlbnRzIGEgc3BlY2lmaWMgbWV0cmljIGluIGEgc2luZ2xlIGNvbnRleHQgYW5kIGJ1bmRsZS4KICBBbGwgc3ViY2xhc3NlcyBtdXN0IGJlIHRocmVhZCBzYWZlLCBhcyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUgcnVubmVycywKICBhbmQgbWF5IGJlIHN1YmplY3QgdG8gcGFyYWxsZWwvY29uY3VycmVudCB1cGRhdGVzLiBDZWxscyBzaG91bGQgb25seSBiZSB1c2VkCiAgZGlyZWN0bHkgd2l0aGluIGEgcnVubmVyLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYuY29tbWl0ID0gQ2VsbENvbW1pdFN0YXRlKCkKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogIGRlZiBnZXRfY3VtdWxhdGl2ZShzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBDb3VudGVyQ2VsbChDb3VudGVyLCBNZXRyaWNDZWxsKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRyYWNrcyB0aGUgY3VycmVudCB2YWx1ZSBhbmQgZGVsdGEgb2YgYSBjb3VudGVyIG1ldHJpYy4KCiAgRWFjaCBjZWxsIHRyYWNrcyB0aGUgc3RhdGUgb2YgYSBtZXRyaWMgaW5kZXBlbmRlbnRseSBwZXIgY29udGV4dCBwZXIgYnVuZGxlLgogIFRoZXJlZm9yZSwgZWFjaCBtZXRyaWMgaGFzIGEgZGlmZmVyZW50IGNlbGwgaW4gZWFjaCBidW5kbGUsIGNlbGxzIGFyZQogIGFnZ3JlZ2F0ZWQgYnkgdGhlIHJ1bm5lci4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgogICAgc3VwZXIoQ291bnRlckNlbGwsIHNlbGYpLl9faW5pdF9fKCphcmdzKQogICAgc2VsZi52YWx1ZSA9IDAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3RoZXIpOgogICAgcmVzdWx0ID0gQ291bnRlckNlbGwoKQogICAgcmVzdWx0LmluYyhzZWxmLnZhbHVlICsgb3RoZXIudmFsdWUpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBpbmMoc2VsZiwgbj0xKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi52YWx1ZSArPSBuCiAgICAgIHNlbGYuY29tbWl0LmFmdGVyX21vZGlmaWNhdGlvbigpCgogIGRlZiBnZXRfY3VtdWxhdGl2ZShzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYudmFsdWUKCgpjbGFzcyBEaXN0cmlidXRpb25DZWxsKERpc3RyaWJ1dGlvbiwgTWV0cmljQ2VsbCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBUcmFja3MgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGRlbHRhIGZvciBhIGRpc3RyaWJ1dGlvbiBtZXRyaWMuCgogIEVhY2ggY2VsbCB0cmFja3MgdGhlIHN0YXRlIG9mIGEgbWV0cmljIGluZGVwZW5kZW50bHkgcGVyIGNvbnRleHQgcGVyIGJ1bmRsZS4KICBUaGVyZWZvcmUsIGVhY2ggbWV0cmljIGhhcyBhIGRpZmZlcmVudCBjZWxsIGluIGVhY2ggYnVuZGxlLCB0aGF0IGlzIGxhdGVyCiAgYWdncmVnYXRlZC4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgogICAgc3VwZXIoRGlzdHJpYnV0aW9uQ2VsbCwgc2VsZikuX19pbml0X18oKmFyZ3MpCiAgICBzZWxmLmRhdGEgPSBEaXN0cmlidXRpb25EYXRhKDAsIDAsIE5vbmUsIE5vbmUpCgogIGRlZiBjb21iaW5lKHNlbGYsIG90aGVyKToKICAgIHJlc3VsdCA9IERpc3RyaWJ1dGlvbkNlbGwoKQogICAgcmVzdWx0LmRhdGEgPSBzZWxmLmRhdGEuY29tYmluZShvdGhlci5kYXRhKQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5jb21taXQuYWZ0ZXJfbW9kaWZpY2F0aW9uKCkKICAgICAgc2VsZi5fdXBkYXRlKHZhbHVlKQoKICBkZWYgX3VwZGF0ZShzZWxmLCB2YWx1ZSk6CiAgICB2YWx1ZSA9IGludCh2YWx1ZSkKICAgIHNlbGYuZGF0YS5jb3VudCArPSAxCiAgICBzZWxmLmRhdGEuc3VtICs9IHZhbHVlCiAgICBzZWxmLmRhdGEubWluID0gKHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGF0YS5taW4gaXMgTm9uZSBvciBzZWxmLmRhdGEubWluID4gdmFsdWUKICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLmRhdGEubWluKQogICAgc2VsZi5kYXRhLm1heCA9ICh2YWx1ZQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRhdGEubWF4IGlzIE5vbmUgb3Igc2VsZi5kYXRhLm1heCA8IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5kYXRhLm1heCkKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5kYXRhLmdldF9jdW11bGF0aXZlKCkKCgpjbGFzcyBEaXN0cmlidXRpb25SZXN1bHQob2JqZWN0KToKICAiIiJUaGUgcmVzdWx0IG9mIGEgRGlzdHJpYnV0aW9uIG1ldHJpYy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICBzZWxmLmRhdGEgPSBkYXRhCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBvdGhlci5kYXRhCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPERpc3RyaWJ1dGlvblJlc3VsdChzdW09e30sIGNvdW50PXt9LCBtaW49e30sIG1heD17fSk+Jy5mb3JtYXQoCiAgICAgICAgc2VsZi5zdW0sCiAgICAgICAgc2VsZi5jb3VudCwKICAgICAgICBzZWxmLm1pbiwKICAgICAgICBzZWxmLm1heCkKCiAgQHByb3BlcnR5CiAgZGVmIG1heChzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEubWF4CgogIEBwcm9wZXJ0eQogIGRlZiBtaW4oc2VsZik6CiAgICByZXR1cm4gc2VsZi5kYXRhLm1pbgoKICBAcHJvcGVydHkKICBkZWYgY291bnQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kYXRhLmNvdW50CgogIEBwcm9wZXJ0eQogIGRlZiBzdW0oc2VsZik6CiAgICByZXR1cm4gc2VsZi5kYXRhLnN1bQoKICBAcHJvcGVydHkKICBkZWYgbWVhbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGZsb2F0IG1lYW4gb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICBJZiB0aGUgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIG5vIGVsZW1lbnRzLCBpdCByZXR1cm5zIE5vbmUuCiAgICAiIiIKICAgIGlmIHNlbGYuZGF0YS5jb3VudCA9PSAwOgogICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIGZsb2F0KHNlbGYuZGF0YS5zdW0pL3NlbGYuZGF0YS5jb3VudAoKCmNsYXNzIERpc3RyaWJ1dGlvbkRhdGEob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGRhdGEgYWJvdXQgYSBkaXN0cmlidXRpb24gbWV0cmljLgoKICBEaXN0cmlidXRpb24gbWV0cmljcyBhcmUgcmVzdHJpY3RlZCB0byBkaXN0cmlidXRpb25zIG9mIGludGVnZXJzIG9ubHkuCgogIFRoaXMgb2JqZWN0IGlzIG5vdCB0aHJlYWQgc2FmZSwgc28gaXQncyBub3Qgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQKICBieSBvdGhlciB0aGFuIHRoZSBEaXN0cmlidXRpb25DZWxsIHRoYXQgY29udGFpbnMgaXQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN1bSwgY291bnQsIG1pbiwgbWF4KToKICAgIHNlbGYuc3VtID0gc3VtCiAgICBzZWxmLmNvdW50ID0gY291bnQKICAgIHNlbGYubWluID0gbWluCiAgICBzZWxmLm1heCA9IG1heAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoc2VsZi5zdW0gPT0gb3RoZXIuc3VtIGFuZAogICAgICAgICAgICBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50IGFuZAogICAgICAgICAgICBzZWxmLm1pbiA9PSBvdGhlci5taW4gYW5kCiAgICAgICAgICAgIHNlbGYubWF4ID09IG90aGVyLm1heCkKCiAgZGVmIF9fbmVxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8RGlzdHJpYnV0aW9uRGF0YShzdW09e30sIGNvdW50PXt9LCBtaW49e30sIG1heD17fSk+Jy5mb3JtYXQoCiAgICAgICAgc2VsZi5zdW0sCiAgICAgICAgc2VsZi5jb3VudCwKICAgICAgICBzZWxmLm1pbiwKICAgICAgICBzZWxmLm1heCkKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgcmV0dXJuIERpc3RyaWJ1dGlvbkRhdGEoc2VsZi5zdW0sIHNlbGYuY291bnQsIHNlbGYubWluLCBzZWxmLm1heCkKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3RoZXIpOgogICAgaWYgb3RoZXIgaXMgTm9uZToKICAgICAgcmV0dXJuIHNlbGYKCiAgICBuZXdfbWluID0gKE5vbmUgaWYgc2VsZi5taW4gaXMgTm9uZSBhbmQgb3RoZXIubWluIGlzIE5vbmUgZWxzZQogICAgICAgICAgICAgICBtaW4oeCBmb3IgeCBpbiAoc2VsZi5taW4sIG90aGVyLm1pbikgaWYgeCBpcyBub3QgTm9uZSkpCiAgICBuZXdfbWF4ID0gKE5vbmUgaWYgc2VsZi5tYXggaXMgTm9uZSBhbmQgb3RoZXIubWF4IGlzIE5vbmUgZWxzZQogICAgICAgICAgICAgICBtYXgoeCBmb3IgeCBpbiAoc2VsZi5tYXgsIG90aGVyLm1heCkgaWYgeCBpcyBub3QgTm9uZSkpCiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICBzZWxmLnN1bSArIG90aGVyLnN1bSwKICAgICAgICBzZWxmLmNvdW50ICsgb3RoZXIuY291bnQsCiAgICAgICAgbmV3X21pbiwKICAgICAgICBuZXdfbWF4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHNpbmdsZXRvbih2YWx1ZSk6CiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YSh2YWx1ZSwgMSwgdmFsdWUsIHZhbHVlKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmKToKICAgIHJldHVybiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkRpc3RyaWJ1dGlvbkRhdGEoCiAgICAgICAgY291bnQ9c2VsZi5jb3VudCwgc3VtPXNlbGYuc3VtLCBtaW49c2VsZi5taW4sIG1heD1zZWxmLm1heCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8pOgogICAgcmV0dXJuIERpc3RyaWJ1dGlvbkRhdGEocHJvdG8uc3VtLCBwcm90by5jb3VudCwgcHJvdG8ubWluLCBwcm90by5tYXgpCgoKY2xhc3MgTWV0cmljQWdncmVnYXRvcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQmFzZSBpbnRlcmZhY2UgZm9yIGFnZ3JlZ2F0aW5nIG1ldHJpYyBkYXRhIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uIiIiCiAgZGVmIHplcm8oc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjb21iaW5lKHNlbGYsIHVwZGF0ZXMpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcmVzdWx0KHNlbGYsIHgpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIENvdW50ZXJBZ2dyZWdhdG9yKE1ldHJpY0FnZ3JlZ2F0b3IpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQWdncmVnYXRvciBmb3IgQ291bnRlciBtZXRyaWMgZGF0YSBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgoKICBWYWx1ZXMgYWdncmVnYXRlZCBzaG91bGQgYmUgYGBpbnRgYCBvYmplY3RzLgogICIiIgogIGRlZiB6ZXJvKHNlbGYpOgogICAgcmV0dXJuIDAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgeCwgeSk6CiAgICByZXR1cm4gaW50KHgpICsgaW50KHkpCgogIGRlZiByZXN1bHQoc2VsZiwgeCk6CiAgICByZXR1cm4gaW50KHgpCgoKY2xhc3MgRGlzdHJpYnV0aW9uQWdncmVnYXRvcihNZXRyaWNBZ2dyZWdhdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFnZ3JlZ2F0b3IgZm9yIERpc3RyaWJ1dGlvbiBtZXRyaWMgZGF0YSBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgoKICBWYWx1ZXMgYWdncmVnYXRlZCBzaG91bGQgYmUgYGBEaXN0cmlidXRpb25EYXRhYGAgb2JqZWN0cy4KICAiIiIKICBkZWYgemVybyhzZWxmKToKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKDAsIDAsIE5vbmUsIE5vbmUpCgogIGRlZiBjb21iaW5lKHNlbGYsIHgsIHkpOgogICAgcmV0dXJuIHguY29tYmluZSh5KQoKICBkZWYgcmVzdWx0KHNlbGYsIHgpOgogICAgcmV0dXJuIERpc3RyaWJ1dGlvblJlc3VsdCh4LmdldF9jdW11bGF0aXZlKCkpCn1yXAEAAChYEQAAAENvdW50ZXJBZ2dyZWdhdG9yWAUAAABjbGFzc009AU1MAYdYGgAAAERpc3RyaWJ1dGlvbkRhdGEuc2luZ2xldG9uWAMAAABkZWZNIgFNJQGHWBYAAABEaXN0cmlidXRpb25SZXN1bHQubWF4WAMAAABkZWZL1kvZh1gYAAAATWV0cmljQWdncmVnYXRvci5jb21iaW5lWAMAAABkZWZNNgFNOAGHWBsAAABEaXN0cmlidXRpb25BZ2dyZWdhdG9yLnplcm9YAwAAAGRlZk1VAU1XAYdYGwAAAERpc3RyaWJ1dGlvblJlc3VsdC5fX3JlcHJfX1gDAAAAZGVmS89L1YdYFAAAAENvdW50ZXJDZWxsLl9faW5pdF9fWAMAAABkZWZLikuNh1gZAAAATWV0cmljQ2VsbC5nZXRfY3VtdWxhdGl2ZVgDAAAAZGVmS3tLfYdYCgAAAE1ldHJpY0NlbGxYBQAAAGNsYXNzS21LfYdYHwAAAERpc3RyaWJ1dGlvbkRhdGEuZ2V0X2N1bXVsYXRpdmVYAwAAAGRlZk0RAU0TAYdYGQAAAERpc3RyaWJ1dGlvbkRhdGEuX19pbml0X19YAwAAAGRlZkv7TQABh1gLAAAAQ291bnRlckNlbGxYBQAAAGNsYXNzS39Lm4dYGAAAAENvdW50ZXJBZ2dyZWdhdG9yLnJlc3VsdFgDAAAAZGVmTUoBTUwBh1gYAAAARGlzdHJpYnV0aW9uRGF0YS5jb21iaW5lWAMAAABkZWZNFAFNIQGHWBkAAABDb3VudGVyQWdncmVnYXRvci5jb21iaW5lWAMAAABkZWZNRwFNSQGHWB8AAABEaXN0cmlidXRpb25DZWxsLmdldF9jdW11bGF0aXZlWAMAAABkZWZLwUvEh1gbAAAARGlzdHJpYnV0aW9uUmVzdWx0Ll9faW5pdF9fWAMAAABkZWZLyUvLh1gWAAAARGlzdHJpYnV0aW9uQWdncmVnYXRvclgFAAAAY2xhc3NNTgFNXQGHWBUAAABDZWxsQ29tbWl0U3RhdGUuc3RhdGVYAwAAAGRlZktCS0aHWA8AAABDZWxsQ29tbWl0U3RhdGVYBQAAAGNsYXNzSyRLa4dYGQAAAERpc3RyaWJ1dGlvbkNlbGwuX19pbml0X19YAwAAAGRlZkuoS6uHWBAAAABEaXN0cmlidXRpb25EYXRhWAUAAABjbGFzc0vxTS0Bh1gcAAAAQ2VsbENvbW1pdFN0YXRlLmFmdGVyX2NvbW1pdFgDAAAAZGVmS09LWIdYIgAAAENlbGxDb21taXRTdGF0ZS5hZnRlcl9tb2RpZmljYXRpb25YAwAAAGRlZktHS06HWBgAAABEaXN0cmlidXRpb25SZXN1bHQuY291bnRYAwAAAGRlZkveS+GHWBYAAABEaXN0cmlidXRpb25SZXN1bHQuc3VtWAMAAABkZWZL4kvlh1gdAAAARGlzdHJpYnV0aW9uQWdncmVnYXRvci5yZXN1bHRYAwAAAGRlZk1bAU1dAYdYGAAAAERpc3RyaWJ1dGlvbkNlbGwuY29tYmluZVgDAAAAZGVmS6xLsIdYEgAAAERpc3RyaWJ1dGlvblJlc3VsdFgFAAAAY2xhc3NLxkvvh1gXAAAARGlzdHJpYnV0aW9uRGF0YS5fX2VxX19YAwAAAGRlZk0BAU0GAYdYFQAAAE1ldHJpY0FnZ3JlZ2F0b3IuemVyb1gDAAAAZGVmTTMBTTUBh1gPAAAAQ291bnRlckNlbGwuaW5jWAMAAABkZWZLk0uXh1ggAAAARGlzdHJpYnV0aW9uRGF0YS5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk0qAU0tAYdYEAAAAE1ldHJpY0FnZ3JlZ2F0b3JYBQAAAGNsYXNzTS8BTTsBh1gYAAAARGlzdHJpYnV0aW9uQ2VsbC5fdXBkYXRlWAMAAABkZWZLtkvAh1gQAAAARGlzdHJpYnV0aW9uQ2VsbFgFAAAAY2xhc3NLnUvEh1gWAAAARGlzdHJpYnV0aW9uUmVzdWx0Lm1pblgDAAAAZGVmS9pL3YdYEwAAAE1ldHJpY0NlbGwuX19pbml0X19YAwAAAGRlZkt3S3qHWBoAAABDb3VudGVyQ2VsbC5nZXRfY3VtdWxhdGl2ZVgDAAAAZGVmS5hLm4dYFwAAAERpc3RyaWJ1dGlvbkNlbGwudXBkYXRlWAMAAABkZWZLsUu1h1gXAAAATWV0cmljQWdncmVnYXRvci5yZXN1bHRYAwAAAGRlZk05AU07AYdYHgAAAERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IuY29tYmluZVgDAAAAZGVmTVgBTVoBh1gTAAAAQ291bnRlckNlbGwuY29tYmluZVgDAAAAZGVmS45LkodYFgAAAENvdW50ZXJBZ2dyZWdhdG9yLnplcm9YAwAAAGRlZk1EAU1GAYdYGQAAAERpc3RyaWJ1dGlvblJlc3VsdC5fX2VxX19YAwAAAGRlZkvMS86HWB0AAABDZWxsQ29tbWl0U3RhdGUuYmVmb3JlX2NvbW1pdFgDAAAAZGVmS1lLa4dYGQAAAERpc3RyaWJ1dGlvbkRhdGEuX19yZXByX19YAwAAAGRlZk0KAU0QAYdYHgAAAERpc3RyaWJ1dGlvbkRhdGEudG9fcnVubmVyX2FwaVgDAAAAZGVmTSYBTSkBh1gYAAAARGlzdHJpYnV0aW9uRGF0YS5fX25lcV9fWAMAAABkZWZNBwFNCQGHWBgAAABDZWxsQ29tbWl0U3RhdGUuX19pbml0X19YAwAAAGRlZks6S0GHWBcAAABEaXN0cmlidXRpb25SZXN1bHQubWVhblgDAAAAZGVmS+ZL74d1fXJdAQAAWBIAAABEaXN0cmlidXRpb25SZXN1bHRYGQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHNyXgEAAHNoilgZAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc3JfAQAAhYFyYAEAAH1yYQEAAGJ0cmIBAABVLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dChYuDEAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRXZhbHVhdGlvbkNvbnRleHQgdHJhY2tzIGdsb2JhbCBzdGF0ZSwgdHJpZ2dlcnMgYW5kIHdhdGVybWFya3MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCB0aHJlYWRpbmcKCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MgaW1wb3J0IERpcmVjdE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvciBpbXBvcnQgVHJhbnNmb3JtRXhlY3V0b3IKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlciBpbXBvcnQgV2F0ZXJtYXJrTWFuYWdlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHNpZGVpbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEluTWVtb3J5VW5tZXJnZWRTdGF0ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBjb3VudGVycwoKCmNsYXNzIF9FeGVjdXRpb25Db250ZXh0KG9iamVjdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRlcm1hcmtzLCBrZXllZF9zdGF0ZXMpOgogICAgc2VsZi53YXRlcm1hcmtzID0gd2F0ZXJtYXJrcwogICAgc2VsZi5rZXllZF9zdGF0ZXMgPSBrZXllZF9zdGF0ZXMKCiAgICBzZWxmLl9zdGVwX2NvbnRleHQgPSBOb25lCgogIGRlZiBnZXRfc3RlcF9jb250ZXh0KHNlbGYpOgogICAgaWYgbm90IHNlbGYuX3N0ZXBfY29udGV4dDoKICAgICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gRGlyZWN0U3RlcENvbnRleHQoc2VsZi5rZXllZF9zdGF0ZXMpCiAgICByZXR1cm4gc2VsZi5fc3RlcF9jb250ZXh0CgogIGRlZiByZXNldChzZWxmKToKICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IE5vbmUKCgpjbGFzcyBfU2lkZUlucHV0VmlldyhvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgdmlldyk6CiAgICBzZWxmLl92aWV3ID0gdmlldwogICAgc2VsZi5jYWxsYWJsZV9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKICAgIHNlbGYuZWxlbWVudHMgPSBbXQogICAgc2VsZi52YWx1ZSA9IE5vbmUKICAgIHNlbGYuaGFzX3Jlc3VsdCA9IEZhbHNlCgoKY2xhc3MgX1NpZGVJbnB1dHNDb250YWluZXIob2JqZWN0KToKICAiIiJBbiBpbi1wcm9jZXNzIGNvbnRhaW5lciBmb3Igc2lkZSBpbnB1dHMuCgogIEl0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGJsb2NraW5nIHVudGlsIGEgc2lkZS1pbnB1dCBpcyBhdmFpbGFibGUgYW5kIHdyaXRpbmcKICB0byBhIHNpZGUgaW5wdXQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB2aWV3cyk6CiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fdmlld3MgPSB7fQogICAgZm9yIHZpZXcgaW4gdmlld3M6CiAgICAgIHNlbGYuX3ZpZXdzW3ZpZXddID0gX1NpZGVJbnB1dFZpZXcodmlldykKCiAgZGVmIGdldF92YWx1ZV9vcl9zY2hlZHVsZV9hZnRlcl9vdXRwdXQoc2VsZiwgc2lkZV9pbnB1dCwgdGFzayk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHZpZXcgPSBzZWxmLl92aWV3c1tzaWRlX2lucHV0XQogICAgICBpZiBub3Qgdmlldy5oYXNfcmVzdWx0OgogICAgICAgIHZpZXcuY2FsbGFibGVfcXVldWUuYXBwZW5kKHRhc2spCiAgICAgICAgdGFzay5ibG9ja2VkID0gVHJ1ZQogICAgICByZXR1cm4gKHZpZXcuaGFzX3Jlc3VsdCwgdmlldy52YWx1ZSkKCiAgZGVmIGFkZF92YWx1ZXMoc2VsZiwgc2lkZV9pbnB1dCwgdmFsdWVzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgdmlldyA9IHNlbGYuX3ZpZXdzW3NpZGVfaW5wdXRdCiAgICAgIGFzc2VydCBub3Qgdmlldy5oYXNfcmVzdWx0CiAgICAgIHZpZXcuZWxlbWVudHMuZXh0ZW5kKHZhbHVlcykKCiAgZGVmIGZpbmFsaXplX3ZhbHVlX2FuZF9nZXRfdGFza3Moc2VsZiwgc2lkZV9pbnB1dCk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHZpZXcgPSBzZWxmLl92aWV3c1tzaWRlX2lucHV0XQogICAgICBhc3NlcnQgbm90IHZpZXcuaGFzX3Jlc3VsdAogICAgICBhc3NlcnQgdmlldy52YWx1ZSBpcyBOb25lCiAgICAgIGFzc2VydCB2aWV3LmNhbGxhYmxlX3F1ZXVlIGlzIG5vdCBOb25lCiAgICAgIHZpZXcudmFsdWUgPSBzZWxmLl9wdmFsdWVfdG9fdmFsdWUoc2lkZV9pbnB1dCwgdmlldy5lbGVtZW50cykKICAgICAgdmlldy5lbGVtZW50cyA9IE5vbmUKICAgICAgcmVzdWx0ID0gdHVwbGUodmlldy5jYWxsYWJsZV9xdWV1ZSkKICAgICAgZm9yIHRhc2sgaW4gcmVzdWx0OgogICAgICAgIHRhc2suYmxvY2tlZCA9IEZhbHNlCiAgICAgIHZpZXcuY2FsbGFibGVfcXVldWUgPSBOb25lCiAgICAgIHZpZXcuaGFzX3Jlc3VsdCA9IFRydWUKICAgICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgX3B2YWx1ZV90b192YWx1ZShzZWxmLCB2aWV3LCB2YWx1ZXMpOgogICAgIiIiR2l2ZW4gYSBzaWRlIGlucHV0IHZpZXcsIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaW4gcmVxdWVzdGVkIGZvcm0uCgogICAgQXJnczoKICAgICAgdmlldzogU2lkZUlucHV0IGZvciB0aGUgcmVxdWVzdGVkIHNpZGUgaW5wdXQuCiAgICAgIHZhbHVlczogSXRlcmFibGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2lkZSBpbnB1dC4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgc2lkZSBpbnB1dCBpbiBpdHMgcmVxdWVzdGVkIGZvcm0uCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBJZiB2YWx1ZXMgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIHRoZSByZXF1ZXN0ZWQgZm9ybS4KICAgICIiIgogICAgcmV0dXJuIHNpZGVpbnB1dHMuU2lkZUlucHV0TWFwKHR5cGUodmlldyksIHZpZXcuX3ZpZXdfb3B0aW9ucygpLCB2YWx1ZXMpCgoKY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQob2JqZWN0KToKICAiIiJFdmFsdWF0aW9uIGNvbnRleHQgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlIGluZm9ybWF0aW9uIG9mIHRoZSBwaXBlbGluZS4KCiAgVGhlIGV2YWx1YXRpb24gY29udGV4dCBmb3IgYSBzcGVjaWZpYyBwaXBlbGluZSBiZWluZyBleGVjdXRlZCBieSB0aGUKICBEaXJlY3RSdW5uZXIuIENvbnRhaW5zIHN0YXRlIHNoYXJlZCB3aXRoaW4gdGhlIGV4ZWN1dGlvbiBhY3Jvc3MgYWxsCiAgdHJhbnNmb3Jtcy4KCiAgRXZhbHVhdGlvbkNvbnRleHQgY29udGFpbnMgc2hhcmVkIHN0YXRlIGZvciBhbiBleGVjdXRpb24gb2YgdGhlCiAgRGlyZWN0UnVubmVyIHRoYXQgY2FuIGJlIHVzZWQgd2hpbGUgZXZhbHVhdGluZyBhIFBUcmFuc2Zvcm0uIFRoaXMKICBjb25zaXN0cyBvZiB2aWV3cyBpbnRvIHVuZGVybHlpbmcgc3RhdGUgYW5kIHdhdGVybWFyayBpbXBsZW1lbnRhdGlvbnMsIGFjY2VzcwogIHRvIHJlYWQgYW5kIHdyaXRlIHNpZGUgaW5wdXRzLCBhbmQgY29uc3RydWN0aW5nIGNvdW50ZXIgc2V0cyBhbmQKICBleGVjdXRpb24gY29udGV4dHMuIFRoaXMgaW5jbHVkZXMgZXhlY3V0aW5nIGNhbGxiYWNrcyBhc3luY2hyb25vdXNseSB3aGVuCiAgc3RhdGUgY2hhbmdlcyB0byB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgKGUuZy4gd2hlbiBhIHNpZGUgaW5wdXQgaXMKICByZXF1ZXN0ZWQgYW5kIGtub3duIHRvIGJlIGVtcHR5KS4KCiAgRXZhbHVhdGlvbkNvbnRleHQgYWxzbyBoYW5kbGVzIHJlc3VsdHMgYnkgY29tbWl0dGluZyBmaW5hbGl6aW5nCiAgYnVuZGxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCBnbG9iYWwgc3RhdGUgYW5kIHVwZGF0aW5nIHRoZSBnbG9iYWwgc3RhdGUKICBhcHByb3ByaWF0ZWx5LiBUaGlzIGluY2x1ZGVzIHVwZGF0aW5nIHRoZSBwZXItKHN0ZXAsa2V5KSBzdGF0ZSwgdXBkYXRpbmcKICBnbG9iYWwgd2F0ZXJtYXJrcywgYW5kIGV4ZWN1dGluZyBhbnkgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfb3B0aW9ucywgYnVuZGxlX2ZhY3RvcnksIHJvb3RfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgdmFsdWVfdG9fY29uc3VtZXJzLCBzdGVwX25hbWVzLCB2aWV3cywgY2xvY2spOgogICAgc2VsZi5waXBlbGluZV9vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucwogICAgc2VsZi5fYnVuZGxlX2ZhY3RvcnkgPSBidW5kbGVfZmFjdG9yeQogICAgc2VsZi5fcm9vdF90cmFuc2Zvcm1zID0gcm9vdF90cmFuc2Zvcm1zCiAgICBzZWxmLl92YWx1ZV90b19jb25zdW1lcnMgPSB2YWx1ZV90b19jb25zdW1lcnMKICAgIHNlbGYuX3N0ZXBfbmFtZXMgPSBzdGVwX25hbWVzCiAgICBzZWxmLnZpZXdzID0gdmlld3MKICAgIHNlbGYuX3Bjb2xsZWN0aW9uX3RvX3ZpZXdzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciB2aWV3IGluIHZpZXdzOgogICAgICBzZWxmLl9wY29sbGVjdGlvbl90b192aWV3c1t2aWV3LnB2YWx1ZV0uYXBwZW5kKHZpZXcpCiAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzID0gc2VsZi5faW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXMoCiAgICAgICAgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMpCiAgICBzZWxmLl93YXRlcm1hcmtfbWFuYWdlciA9IFdhdGVybWFya01hbmFnZXIoCiAgICAgICAgY2xvY2ssIHJvb3RfdHJhbnNmb3JtcywgdmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgIHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXMpCiAgICBzZWxmLl9zaWRlX2lucHV0c19jb250YWluZXIgPSBfU2lkZUlucHV0c0NvbnRhaW5lcih2aWV3cykKICAgIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzID0gW10KICAgIHNlbGYuX2NvdW50ZXJfZmFjdG9yeSA9IGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkKICAgIHNlbGYuX2NhY2hlID0gTm9uZQogICAgc2VsZi5fbWV0cmljcyA9IERpcmVjdE1ldHJpY3MoKQoKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogIGRlZiBfaW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXMoc2VsZiwgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMpOgogICAgdHJhbnNmb3JtX2tleWVkX3N0YXRlcyA9IHt9CiAgICBmb3IgdHJhbnNmb3JtIGluIHJvb3RfdHJhbnNmb3JtczoKICAgICAgdHJhbnNmb3JtX2tleWVkX3N0YXRlc1t0cmFuc2Zvcm1dID0ge30KICAgIGZvciBjb25zdW1lcnMgaW4gdmFsdWVfdG9fY29uc3VtZXJzLnZhbHVlcygpOgogICAgICBmb3IgY29uc3VtZXIgaW4gY29uc3VtZXJzOgogICAgICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXNbY29uc3VtZXJdID0ge30KICAgIHJldHVybiB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzCgogIGRlZiB1c2VfcHZhbHVlX2NhY2hlKHNlbGYsIGNhY2hlKToKICAgIGFzc2VydCBub3Qgc2VsZi5fY2FjaGUKICAgIHNlbGYuX2NhY2hlID0gY2FjaGUKCiAgZGVmIG1ldHJpY3Moc2VsZik6CiAgICAjIFRPRE8uIFNob3VsZCB0aGlzIGJlIG1hZGUgYSBAcHJvcGVydHk/CiAgICByZXR1cm4gc2VsZi5fbWV0cmljcwoKICBAcHJvcGVydHkKICBkZWYgaGFzX2NhY2hlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2NhY2hlIGlzIG5vdCBOb25lCgogIGRlZiBhcHBlbmRfdG9fY2FjaGUoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLCB0YWcsIGVsZW1lbnRzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgYXNzZXJ0IHNlbGYuX2NhY2hlCiAgICAgIHNlbGYuX2NhY2hlLmFwcGVuZChhcHBsaWVkX3B0cmFuc2Zvcm0sIHRhZywgZWxlbWVudHMpCgogIGRlZiBpc19yb290X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgcmV0dXJuIGFwcGxpZWRfcHRyYW5zZm9ybSBpbiBzZWxmLl9yb290X3RyYW5zZm9ybXMKCiAgZGVmIGhhbmRsZV9yZXN1bHQoCiAgICAgIHNlbGYsIGNvbXBsZXRlZF9idW5kbGUsIGNvbXBsZXRlZF90aW1lcnMsIHJlc3VsdCk6CiAgICAiIiJIYW5kbGUgdGhlIHByb3ZpZGVkIHJlc3VsdCBwcm9kdWNlZCBhZnRlciBldmFsdWF0aW5nIHRoZSBpbnB1dCBidW5kbGUuCgogICAgSGFuZGxlIHRoZSBwcm92aWRlZCBUcmFuc2Zvcm1SZXN1bHQsIHByb2R1Y2VkIGFmdGVyIGV2YWx1YXRpbmcKICAgIHRoZSBwcm92aWRlZCBjb21taXR0ZWQgYnVuZGxlIChwb3RlbnRpYWxseSBOb25lLCBpZiB0aGUgcmVzdWx0IG9mIGEgcm9vdAogICAgUFRyYW5zZm9ybSkuCgogICAgVGhlIHJlc3VsdCBpcyB0aGUgb3V0cHV0IG9mIHJ1bm5pbmcgdGhlIHRyYW5zZm9ybSBjb250YWluZWQgaW4gdGhlCiAgICBUcmFuc2Zvcm1SZXN1bHQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm92aWRlZCBidW5kbGUuCgogICAgQXJnczoKICAgICAgY29tcGxldGVkX2J1bmRsZTogdGhlIGJ1bmRsZSB0aGF0IHdhcyBwcm9jZXNzZWQgdG8gcHJvZHVjZSB0aGUgcmVzdWx0LgogICAgICBjb21wbGV0ZWRfdGltZXJzOiB0aGUgdGltZXJzIHRoYXQgd2VyZSBkZWxpdmVyZWQgdG8gcHJvZHVjZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX2J1bmRsZS4KICAgICAgcmVzdWx0OiB0aGUgVHJhbnNmb3JtUmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGlucHV0IGJ1bmRsZQoKICAgIFJldHVybnM6CiAgICAgIHRoZSBjb21taXR0ZWQgYnVuZGxlcyBjb250YWluZWQgd2l0aGluIHRoZSBoYW5kbGVkIHJlc3VsdC4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBjb21taXR0ZWRfYnVuZGxlcywgdW5wcm9jZXNzZWRfYnVuZGxlcyA9IHNlbGYuX2NvbW1pdF9idW5kbGVzKAogICAgICAgICAgcmVzdWx0LnVuY29tbWl0dGVkX291dHB1dF9idW5kbGVzLAogICAgICAgICAgcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXMpCiAgICAgIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzKAogICAgICAgICAgY29tcGxldGVkX2J1bmRsZSwgcmVzdWx0LnRyYW5zZm9ybSwgY29tcGxldGVkX3RpbWVycywKICAgICAgICAgIGNvbW1pdHRlZF9idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzLCByZXN1bHQua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzKQoKICAgICAgc2VsZi5fbWV0cmljcy5jb21taXRfbG9naWNhbChjb21wbGV0ZWRfYnVuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sb2dpY2FsX21ldHJpY191cGRhdGVzKQoKICAgICAgIyBJZiB0aGUgcmVzdWx0IGlzIGZvciBhIHZpZXcsIHVwZGF0ZSBzaWRlIGlucHV0cyBjb250YWluZXIuCiAgICAgIGlmIChyZXN1bHQudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMKICAgICAgICAgIGFuZCByZXN1bHQudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXNbMF0ucGNvbGxlY3Rpb24KICAgICAgICAgIGluIHNlbGYuX3Bjb2xsZWN0aW9uX3RvX3ZpZXdzKToKICAgICAgICBmb3IgdmlldyBpbiBzZWxmLl9wY29sbGVjdGlvbl90b192aWV3c1sKICAgICAgICAgICAgcmVzdWx0LnVuY29tbWl0dGVkX291dHB1dF9idW5kbGVzWzBdLnBjb2xsZWN0aW9uXToKICAgICAgICAgIGZvciBjb21taXR0ZWRfYnVuZGxlIGluIGNvbW1pdHRlZF9idW5kbGVzOgogICAgICAgICAgICAjIHNpZGVfaW5wdXQgbXVzdCBiZSBtYXRlcmlhbGl6ZWQuCiAgICAgICAgICAgIHNlbGYuX3NpZGVfaW5wdXRzX2NvbnRhaW5lci5hZGRfdmFsdWVzKAogICAgICAgICAgICAgICAgdmlldywKICAgICAgICAgICAgICAgIGNvbW1pdHRlZF9idW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKG1ha2VfY29weT1UcnVlKSkKICAgICAgICAgIGlmIChzZWxmLmdldF9leGVjdXRpb25fY29udGV4dChyZXN1bHQudHJhbnNmb3JtKQogICAgICAgICAgICAgIC53YXRlcm1hcmtzLmlucHV0X3dhdGVybWFyawogICAgICAgICAgICAgID09IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpOgogICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcy5leHRlbmQoCiAgICAgICAgICAgICAgICBzZWxmLl9zaWRlX2lucHV0c19jb250YWluZXIuZmluYWxpemVfdmFsdWVfYW5kX2dldF90YXNrcyh2aWV3KSkKCiAgICAgIGlmIHJlc3VsdC5jb3VudGVyczoKICAgICAgICBmb3IgY291bnRlciBpbiByZXN1bHQuY291bnRlcnM6CiAgICAgICAgICBtZXJnZWRfY291bnRlciA9IHNlbGYuX2NvdW50ZXJfZmFjdG9yeS5nZXRfY291bnRlcigKICAgICAgICAgICAgICBjb3VudGVyLm5hbWUsIGNvdW50ZXIuY29tYmluZV9mbikKICAgICAgICAgIG1lcmdlZF9jb3VudGVyLmFjY3VtdWxhdG9yLm1lcmdlKFtjb3VudGVyLmFjY3VtdWxhdG9yXSkKCiAgICAgICMgQ29tbWl0IHBhcnRpYWwgR0JLIHN0YXRlcwogICAgICBleGlzdGluZ19rZXllZF9zdGF0ZSA9IHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXNbcmVzdWx0LnRyYW5zZm9ybV0KICAgICAgZm9yIGssIHYgaW4gcmVzdWx0LnBhcnRpYWxfa2V5ZWRfc3RhdGUuaXRlcml0ZW1zKCk6CiAgICAgICAgZXhpc3Rpbmdfa2V5ZWRfc3RhdGVba10gPSB2CiAgICAgIHJldHVybiBjb21taXR0ZWRfYnVuZGxlcwoKICBkZWYgZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKHNlbGYsIGFnZ3JlZ2F0b3Jfb3JfbmFtZSk6CiAgICByZXR1cm4gc2VsZi5fY291bnRlcl9mYWN0b3J5LmdldF9hZ2dyZWdhdG9yX3ZhbHVlcyhhZ2dyZWdhdG9yX29yX25hbWUpCgogIGRlZiBzY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcyhzZWxmLCBleGVjdXRvcl9zZXJ2aWNlKToKICAgIGlmIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzOgogICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5fcGVuZGluZ191bmJsb2NrZWRfdGFza3M6CiAgICAgICAgICBleGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdCh0YXNrKQogICAgICAgIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzID0gW10KCiAgZGVmIF9jb21taXRfYnVuZGxlcyhzZWxmLCB1bmNvbW1pdHRlZF9idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzKToKICAgICIiIkNvbW1pdHMgYnVuZGxlcyBhbmQgcmV0dXJucyBhIGltbXV0YWJsZSBzZXQgb2YgY29tbWl0dGVkIGJ1bmRsZXMuIiIiCiAgICBmb3IgaW5fcHJvZ3Jlc3NfYnVuZGxlIGluIHVuY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIHByb2R1Y2luZ19hcHBsaWVkX3B0cmFuc2Zvcm0gPSBpbl9wcm9ncmVzc19idW5kbGUucGNvbGxlY3Rpb24ucHJvZHVjZXIKICAgICAgd2F0ZXJtYXJrcyA9IHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmdldF93YXRlcm1hcmtzKAogICAgICAgICAgcHJvZHVjaW5nX2FwcGxpZWRfcHRyYW5zZm9ybSkKICAgICAgaW5fcHJvZ3Jlc3NfYnVuZGxlLmNvbW1pdCh3YXRlcm1hcmtzLnN5bmNocm9uaXplZF9wcm9jZXNzaW5nX291dHB1dF90aW1lKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlLmNvbW1pdChOb25lKQogICAgcmV0dXJuIHR1cGxlKHVuY29tbWl0dGVkX2J1bmRsZXMpLCB0dXBsZSh1bnByb2Nlc3NlZF9idW5kbGVzKQoKICBkZWYgZ2V0X2V4ZWN1dGlvbl9jb250ZXh0KHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICByZXR1cm4gX0V4ZWN1dGlvbkNvbnRleHQoCiAgICAgICAgc2VsZi5fd2F0ZXJtYXJrX21hbmFnZXIuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKSwKICAgICAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2FwcGxpZWRfcHRyYW5zZm9ybV0pCgogIGRlZiBjcmVhdGVfYnVuZGxlKHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbik6CiAgICAiIiJDcmVhdGUgYW4gdW5jb21taXR0ZWQgYnVuZGxlIGZvciB0aGUgc3BlY2lmaWVkIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHNlbGYuX2J1bmRsZV9mYWN0b3J5LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoc2VsZiwgb3V0cHV0X3Bjb2xsZWN0aW9uKToKICAgICIiIkNyZWF0ZSBlbXB0eSBidW5kbGUgdXNlZnVsIGZvciB0cmlnZ2VyaW5nIGV2YWx1YXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fYnVuZGxlX2ZhY3RvcnkuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoCiAgICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgZXh0cmFjdF9hbGxfdGltZXJzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVycygpCgogIGRlZiBpc19kb25lKHNlbGYsIHRyYW5zZm9ybT1Ob25lKToKICAgICIiIkNoZWNrcyBjb21wbGV0aW9uIG9mIGEgc3RlcCBvciB0aGUgcGlwZWxpbmUuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtOiBBcHBsaWVkUFRyYW5zZm9ybSB0byBjaGVjayBmb3IgY29tcGxldGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHRoZSBzdGVwIHdpbGwgbm90IHByb2R1Y2UgYWRkaXRpb25hbCBvdXRwdXQuIElmIHRyYW5zZm9ybSBpcyBOb25lCiAgICAgIHJldHVybnMgdHJ1ZSBpZiBhbGwgc3RlcHMgYXJlIGRvbmUuCiAgICAiIiIKICAgIGlmIHRyYW5zZm9ybToKICAgICAgcmV0dXJuIHNlbGYuX2lzX3RyYW5zZm9ybV9kb25lKHRyYW5zZm9ybSkKCiAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtIGluIHNlbGYuX3N0ZXBfbmFtZXM6CiAgICAgIGlmIG5vdCBzZWxmLl9pc190cmFuc2Zvcm1fZG9uZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9pc190cmFuc2Zvcm1fZG9uZShzZWxmLCB0cmFuc2Zvcm0pOgogICAgdHcgPSBzZWxmLl93YXRlcm1hcmtfbWFuYWdlci5nZXRfd2F0ZXJtYXJrcyh0cmFuc2Zvcm0pCiAgICByZXR1cm4gdHcub3V0cHV0X3dhdGVybWFyayA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCgogIGRlZiBnZXRfdmFsdWVfb3Jfc2NoZWR1bGVfYWZ0ZXJfb3V0cHV0KHNlbGYsIHNpZGVfaW5wdXQsIHRhc2spOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFzaywgVHJhbnNmb3JtRXhlY3V0b3IpCiAgICByZXR1cm4gc2VsZi5fc2lkZV9pbnB1dHNfY29udGFpbmVyLmdldF92YWx1ZV9vcl9zY2hlZHVsZV9hZnRlcl9vdXRwdXQoCiAgICAgICAgc2lkZV9pbnB1dCwgdGFzaykKCgpjbGFzcyBEaXJlY3RVbm1lcmdlZFN0YXRlKEluTWVtb3J5VW5tZXJnZWRTdGF0ZSk6CiAgIiIiVW5tZXJnZWRTdGF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERpcmVjdFJ1bm5lci4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc3VwZXIoRGlyZWN0VW5tZXJnZWRTdGF0ZSwgc2VsZikuX19pbml0X18oZGVmZW5zaXZlX2NvcHk9RmFsc2UpCgoKY2xhc3MgRGlyZWN0U3RlcENvbnRleHQob2JqZWN0KToKICAiIiJDb250ZXh0IGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXhpc3Rpbmdfa2V5ZWRfc3RhdGUpOgogICAgc2VsZi5leGlzdGluZ19rZXllZF9zdGF0ZSA9IGV4aXN0aW5nX2tleWVkX3N0YXRlCiAgICAjIEluIG9yZGVyIHRvIGF2b2lkIHBhcnRpYWwgd3JpdGVzIG9mIGEgYnVuZGxlLCBldmVyeSB0aW1lCiAgICAjIGV4aXN0aW5nX2tleWVkX3N0YXRlIGlzIGFjY2Vzc2VkLCBhIGNvcHkgb2YgdGhlIHN0YXRlIGlzIG1hZGUKICAgICMgdG8gYmUgdHJhbnNmZXJyZWQgdG8gdGhlIGJ1bmRsZSBzdGF0ZSBvbmNlIHRoZSBidW5kbGUgaXMgY29tbWl0dGVkLgogICAgc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlID0ge30KCiAgZGVmIGdldF9rZXllZF9zdGF0ZShzZWxmLCBrZXkpOgogICAgaWYgbm90IHNlbGYuZXhpc3Rpbmdfa2V5ZWRfc3RhdGUuZ2V0KGtleSk6CiAgICAgIHNlbGYuZXhpc3Rpbmdfa2V5ZWRfc3RhdGVba2V5XSA9IERpcmVjdFVubWVyZ2VkU3RhdGUoKQogICAgaWYgbm90IHNlbGYucGFydGlhbF9rZXllZF9zdGF0ZS5nZXQoa2V5KToKICAgICAgc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlW2tleV0gPSBzZWxmLmV4aXN0aW5nX2tleWVkX3N0YXRlW2tleV0uY29weSgpCiAgICByZXR1cm4gc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlW2tleV0KfXJjAQAAKFgXAAAAX1NpZGVJbnB1dFZpZXcuX19pbml0X19YAwAAAGRlZks0SzqHWBMAAABEaXJlY3RVbm1lcmdlZFN0YXRlWAUAAABjbGFzc00/AU1EAYdYHwAAAF9TaWRlSW5wdXRzQ29udGFpbmVyLmFkZF92YWx1ZXNYAwAAAGRlZktRS1aHWBQAAABfU2lkZUlucHV0c0NvbnRhaW5lclgFAAAAY2xhc3NLPEt0h1g3AAAAX1NpZGVJbnB1dHNDb250YWluZXIuZ2V0X3ZhbHVlX29yX3NjaGVkdWxlX2FmdGVyX291dHB1dFgDAAAAZGVmS0lLUIdYHAAAAERpcmVjdFVubWVyZ2VkU3RhdGUuX19pbml0X19YAwAAAGRlZk1CAU1EAYdYMgAAAEV2YWx1YXRpb25Db250ZXh0LnNjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzWAMAAABkZWZL/00FAYdYLwAAAEV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlWAMAAABkZWZNGwFNHwGHWBoAAABEaXJlY3RTdGVwQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmTUkBTU8Bh1gnAAAARXZhbHVhdGlvbkNvbnRleHQuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzWAMAAABkZWZL/Ev+h1gxAAAAX1NpZGVJbnB1dHNDb250YWluZXIuZmluYWxpemVfdmFsdWVfYW5kX2dldF90YXNrc1gDAAAAZGVmS1dLZYdYEQAAAF9FeGVjdXRpb25Db250ZXh0WAUAAABjbGFzc0shSzCHWBcAAABfRXhlY3V0aW9uQ29udGV4dC5yZXNldFgDAAAAZGVmSy5LMIdYGQAAAEV2YWx1YXRpb25Db250ZXh0LmlzX2RvbmVYAwAAAGRlZk0jAU00AYdYIQAAAERpcmVjdFN0ZXBDb250ZXh0LmdldF9rZXllZF9zdGF0ZVgDAAAAZGVmTVABTVYBh1gkAAAARXZhbHVhdGlvbkNvbnRleHQuX2lzX3RyYW5zZm9ybV9kb25lWAMAAABkZWZNNQFNOAGHWA4AAABfU2lkZUlucHV0Vmlld1gFAAAAY2xhc3NLMks6h1gaAAAAX0V4ZWN1dGlvbkNvbnRleHQuX19pbml0X19YAwAAAGRlZksjSyiHWCQAAABFdmFsdWF0aW9uQ29udGV4dC5leHRyYWN0X2FsbF90aW1lcnNYAwAAAGRlZk0gAU0iAYdYIQAAAEV2YWx1YXRpb25Db250ZXh0Ll9jb21taXRfYnVuZGxlc1gDAAAAZGVmTQYBTREBh1giAAAAX0V4ZWN1dGlvbkNvbnRleHQuZ2V0X3N0ZXBfY29udGV4dFgDAAAAZGVmSylLLYdYNAAAAEV2YWx1YXRpb25Db250ZXh0LmdldF92YWx1ZV9vcl9zY2hlZHVsZV9hZnRlcl9vdXRwdXRYAwAAAGRlZk05AU09AYdYEQAAAERpcmVjdFN0ZXBDb250ZXh0WAUAAABjbGFzc01GAU1WAYdYJQAAAF9TaWRlSW5wdXRzQ29udGFpbmVyLl9wdmFsdWVfdG9fdmFsdWVYAwAAAGRlZktmS3SHWBEAAABFdmFsdWF0aW9uQ29udGV4dFgFAAAAY2xhc3NLdk09AYdYGQAAAEV2YWx1YXRpb25Db250ZXh0Lm1ldHJpY3NYAwAAAGRlZkuwS7OHWCEAAABFdmFsdWF0aW9uQ29udGV4dC5hcHBlbmRfdG9fY2FjaGVYAwAAAGRlZku4S7yHWBsAAABFdmFsdWF0aW9uQ29udGV4dC5oYXNfY2FjaGVYAwAAAGRlZku0S7eHWB8AAABFdmFsdWF0aW9uQ29udGV4dC5jcmVhdGVfYnVuZGxlWAMAAABkZWZNFwFNGgGHWB8AAABFdmFsdWF0aW9uQ29udGV4dC5oYW5kbGVfcmVzdWx0WAMAAABkZWZLwEv7h1gdAAAAX1NpZGVJbnB1dHNDb250YWluZXIuX19pbml0X19YAwAAAGRlZktDS0iHWCoAAABFdmFsdWF0aW9uQ29udGV4dC5faW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXNYAwAAAGRlZkujS6uHWCIAAABFdmFsdWF0aW9uQ29udGV4dC51c2VfcHZhbHVlX2NhY2hlWAMAAABkZWZLrEuvh1gaAAAARXZhbHVhdGlvbkNvbnRleHQuX19pbml0X19YAwAAAGRlZkuLS6KHWCMAAABFdmFsdWF0aW9uQ29udGV4dC5pc19yb290X3RyYW5zZm9ybVgDAAAAZGVmS71Lv4dYJwAAAEV2YWx1YXRpb25Db250ZXh0LmdldF9leGVjdXRpb25fY29udGV4dFgDAAAAZGVmTRIBTRYBh3V9cmQBAAAoWCcAAABFdmFsdWF0aW9uQ29udGV4dC5nZXRfYWdncmVnYXRvcl92YWx1ZXNYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHJlAQAAWBMAAABEaXJlY3RVbm1lcmdlZFN0YXRlamUBAABYNAAAAEV2YWx1YXRpb25Db250ZXh0LmdldF92YWx1ZV9vcl9zY2hlZHVsZV9hZnRlcl9vdXRwdXRqZQEAAFgRAAAARGlyZWN0U3RlcENvbnRleHRqZQEAAFgfAAAARXZhbHVhdGlvbkNvbnRleHQuaGFuZGxlX3Jlc3VsdGplAQAAWCIAAABFdmFsdWF0aW9uQ29udGV4dC51c2VfcHZhbHVlX2NhY2hlamUBAABYIQAAAERpcmVjdFN0ZXBDb250ZXh0LmdldF9rZXllZF9zdGF0ZWplAQAAWBkAAABFdmFsdWF0aW9uQ29udGV4dC5tZXRyaWNzamUBAABYEQAAAEV2YWx1YXRpb25Db250ZXh0amUBAABYIwAAAEV2YWx1YXRpb25Db250ZXh0LmlzX3Jvb3RfdHJhbnNmb3JtamUBAABYLwAAAEV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlamUBAABYMgAAAEV2YWx1YXRpb25Db250ZXh0LnNjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzamUBAABYJAAAAEV2YWx1YXRpb25Db250ZXh0LmV4dHJhY3RfYWxsX3RpbWVyc2plAQAAWCcAAABFdmFsdWF0aW9uQ29udGV4dC5nZXRfZXhlY3V0aW9uX2NvbnRleHRqZQEAAFghAAAARXZhbHVhdGlvbkNvbnRleHQuYXBwZW5kX3RvX2NhY2hlamUBAABYHwAAAEV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9idW5kbGVqZQEAAFgZAAAARXZhbHVhdGlvbkNvbnRleHQuaXNfZG9uZWplAQAAdWiKWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHRyZgEAAIWBcmcBAAB9cmgBAABidFUWYXBhY2hlX2JlYW0udXRpbHMudXJuc3JpAQAAKFhBFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgppbXBvcnQgYWJjCmltcG9ydCBpbnNwZWN0Cgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgd3JhcHBlcnNfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCgpQSUNLTEVEX1dJTkRPV19GTiA9ICJiZWFtOndpbmRvd2ZuOnBpY2tsZWRfcHl0aG9uOnYwLjEiCkdMT0JBTF9XSU5ET1dTX0ZOID0gImJlYW06d2luZG93Zm46Z2xvYmFsX3dpbmRvd3M6djAuMSIKRklYRURfV0lORE9XU19GTiA9ICJiZWFtOndpbmRvd2ZuOmZpeGVkX3dpbmRvd3M6djAuMSIKU0xJRElOR19XSU5ET1dTX0ZOID0gImJlYW06d2luZG93Zm46c2xpZGluZ193aW5kb3dzOnYwLjEiClNFU1NJT05fV0lORE9XU19GTiA9ICJiZWFtOndpbmRvd2ZuOnNlc3Npb25fd2luZG93czp2MC4xIgoKUElDS0xFRF9ET19GTiA9ICJiZWFtOmRvZm46cGlja2xlZF9weXRob246djAuMSIKUElDS0xFRF9ET19GTl9JTkZPID0gImJlYW06ZG9mbjpwaWNrbGVkX3B5dGhvbl9pbmZvOnYwLjEiClBJQ0tMRURfQ09NQklORV9GTiA9ICJiZWFtOmNvbWJpbmVmbjpwaWNrbGVkX3B5dGhvbjp2MC4xIgoKUElDS0xFRF9UUkFOU0ZPUk0gPSAiYmVhbTpwdHJhbnNmb3JtOnBpY2tsZWRfcHl0aG9uOnYwLjEiClBBUkRPX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06cGFyZG86djAuMSIKR1JPVVBfQllfS0VZX1RSQU5TRk9STSA9ICJ1cm46YmVhbTp0cmFuc2Zvcm06Z3JvdXBieWtleTp2MSIKR1JPVVBfQllfS0VZX09OTFlfVFJBTlNGT1JNID0gImJlYW06cHRyYW5zZm9ybTpncm91cF9ieV9rZXlfb25seTp2MC4xIgpHUk9VUF9BTFNPX0JZX1dJTkRPV19UUkFOU0ZPUk0gPSAiYmVhbTpwdHJhbnNmb3JtOmdyb3VwX2Fsc29fYnlfd2luZG93OnYwLjEiCkNPTUJJTkVfUEVSX0tFWV9UUkFOU0ZPUk0gPSAiYmVhbTpwdHJhbnNmb3JtOmNvbWJpbmVfcGVyX2tleTp2MC4xIgpDT01CSU5FX0dST1VQRURfVkFMVUVTX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06Y29tYmluZV9ncm91cGVkX3ZhbHVlczp2MC4xIgpQUkVDT01CSU5FX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06Y29tYmluZV9wcmU6djAuMSIKTUVSR0VfQUNDVU1VTEFUT1JTX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06Y29tYmluZV9tZXJnZV9hY2N1bXVsYXRvcnM6djAuMSIKRVhUUkFDVF9PVVRQVVRTX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06Y29tYmluZV9leHRyYWN0X291dHB1dHM6djAuMSIKRkxBVFRFTl9UUkFOU0ZPUk0gPSAiYmVhbTpwdHJhbnNmb3JtOmZsYXR0ZW46djAuMSIKUkVBRF9UUkFOU0ZPUk0gPSAiYmVhbTpwdHJhbnNmb3JtOnJlYWQ6djAuMSIKUkVTSFVGRkxFX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06cmVzaHVmZmxlOnYwLjEiCldJTkRPV19JTlRPX1RSQU5TRk9STSA9ICJiZWFtOnB0cmFuc2Zvcm06d2luZG93X2ludG86djAuMSIKClBJQ0tMRURfU09VUkNFID0gImJlYW06c291cmNlOnBpY2tsZWRfcHl0aG9uOnYwLjEiCgpQSUNLTEVEX0NPREVSID0gImJlYW06Y29kZXI6cGlja2xlZF9weXRob246djAuMSIKQllURVNfQ09ERVIgPSAidXJuOmJlYW06Y29kZXJzOmJ5dGVzOjAuMSIKVkFSX0lOVF9DT0RFUiA9ICJ1cm46YmVhbTpjb2RlcnM6dmFyaW50OjAuMSIKSU5URVJWQUxfV0lORE9XX0NPREVSID0gInVybjpiZWFtOmNvZGVyczppbnRlcnZhbF93aW5kb3c6MC4xIgpJVEVSQUJMRV9DT0RFUiA9ICJ1cm46YmVhbTpjb2RlcnM6c3RyZWFtOjAuMSIKS1ZfQ09ERVIgPSAidXJuOmJlYW06Y29kZXJzOmt2OjAuMSIKTEVOR1RIX1BSRUZJWF9DT0RFUiA9ICJ1cm46YmVhbTpjb2RlcnM6bGVuZ3RoX3ByZWZpeDowLjEiCkdMT0JBTF9XSU5ET1dfQ09ERVIgPSAidXJuOmJlYW06Y29kZXJzOmdsb2JhbF93aW5kb3c6MC4xIgpXSU5ET1dFRF9WQUxVRV9DT0RFUiA9ICJ1cm46YmVhbTpjb2RlcnM6d2luZG93ZWRfdmFsdWU6MC4xIgoKSVRFUkFCTEVfQUNDRVNTID0gInVybjpiZWFtOnNpZGVpbnB1dDppdGVyYWJsZSIKTVVMVElNQVBfQUNDRVNTID0gInVybjpiZWFtOnNpZGVpbnB1dDptdWx0aW1hcCIKUElDS0xFRF9QWVRIT05fVklFV0ZOID0gImJlYW06dmlld19mbjpwaWNrbGVkX3B5dGhvbl9kYXRhOnYwLjEiClBJQ0tMRURfV0lORE9XX01BUFBJTkdfRk4gPSAiYmVhbTp3aW5kb3dfbWFwcGluZ19mbjpwaWNrbGVkX3B5dGhvbjp2MC4xIgoKCmNsYXNzIFJ1bm5lckFwaUZuKG9iamVjdCk6CiAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIHVybiByZWdpc3RyYXRpb24gdXRpbGl0aWVzLgoKICBBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSB0aGlzIGNsYXNzIHdpbGwgZ2V0IGEgcmVnaXN0cmF0aW9uLWJhc2VkCiAgZnJvbV9ydW5uZXJfYXBpIGFuZCB0b19ydW5uZXJfYXBpIG1ldGhvZCB0aGF0IGNvbnZlcnQgdG8gYW5kIGZyb20KICBiZWFtX3J1bm5lcl9hcGlfcGIyLlNka0Z1bmN0aW9uU3BlYy4KCiAgQWRkaXRpb25hbGx5LCByZWdpc3Rlcl9waWNrbGVfdXJuIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgYm9keSBvZiBhIGNsYXNzCiAgdG8gcmVnaXN0ZXIgc2VyaWFsaXphdGlvbiB2aWEgcGlja2xpbmcuCiAgIiIiCgogICMgVE9ETyhCRUFNLTI2ODUpOiBJc3N1ZSB3aXRoIGRpbGwgKyBsb2NhbCBjbGFzc2VzICsgYWJjIG1ldGFjbGFzcwogICMgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCgogIF9rbm93bl91cm5zID0ge30KCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICAiIiJSZXR1cm5zIHRoZSB1cm4gYW5kIHBheWxvYWQgZm9yIHRoaXMgRm4uCgogICAgVGhlIHJldHVybmVkIHVybihzKSBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIGByZWdpc3Rlcl91cm5gLgogICAgIiIiCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLCB1cm4sIHBhcmFtZXRlcl90eXBlLCBmbj1Ob25lKToKICAgICIiIlJlZ2lzdGVycyBhIHVybiB3aXRoIGEgY29uc3RydWN0b3IuCgogICAgRm9yIGV4YW1wbGUsIGlmICdiZWFtOmZuOmZvbycgaGFkIHBhcmFtZXRlciB0eXBlIEZvb1BheWxvYWQsIG9uZSBjb3VsZAogICAgd3JpdGUgYFJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybignYmVhbjpmbjpmb28nLCBGb29QYXlsb2FkLCBmb29fZnJvbV9wcm90bylgCiAgICB3aGVyZSBmb29fZnJvbV9wcm90byB0b29rIGFzIGFyZ3VtZW50cyBhIEZvb1BheWxvYWQgYW5kIGEgUGlwZWxpbmVDb250ZXh0LgogICAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlCiAgICBjYWxsYWJsZSBpbiBhcyB0aGUgZmluYWwgcGFyYW1ldGVyLgoKICAgIEEgY29ycmVzcG9uZGluZyB0b19ydW5uZXJfYXBpX3BhcmFtZXRlciBtZXRob2Qgd291bGQgYmUgZXhwZWN0ZWQgdGhhdAogICAgcmV0dXJucyB0aGUgdHVwbGUgKCdiZWFtOmZuOmZvbycsIEZvb1BheWxvYWQpCiAgICAiIiIKICAgIGRlZiByZWdpc3Rlcihmbik6CiAgICAgIGNscy5fa25vd25fdXJuc1t1cm5dID0gcGFyYW1ldGVyX3R5cGUsIGZuCiAgICAgIHJldHVybiBzdGF0aWNtZXRob2QoZm4pCiAgICBpZiBmbjoKICAgICAgIyBVc2VkIGFzIGEgc3RhdGVtZW50LgogICAgICByZWdpc3RlcihmbikKICAgIGVsc2U6CiAgICAgICMgVXNlZCBhcyBhIGRlY29yYXRvci4KICAgICAgcmV0dXJuIHJlZ2lzdGVyCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl9waWNrbGVfdXJuKGNscywgcGlja2xlX3Vybik6CiAgICAiIiJSZWdpc3RlcnMgYW5kIGltcGxlbWVudHMgdGhlIGdpdmVuIHVybiB2aWEgcGlja2xpbmcuCiAgICAiIiIKICAgIGluc3BlY3QuY3VycmVudGZyYW1lKCkuZl9iYWNrLmZfbG9jYWxzWyd0b19ydW5uZXJfYXBpX3BhcmFtZXRlciddID0gKAogICAgICAgIGxhbWJkYSBzZWxmLCBjb250ZXh0OiAoCiAgICAgICAgICAgIHBpY2tsZV91cm4sIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlKHZhbHVlPXBpY2tsZXIuZHVtcHMoc2VsZikpKSkKICAgIGNscy5yZWdpc3Rlcl91cm4oCiAgICAgICAgcGlja2xlX3VybiwKICAgICAgICB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSwKICAgICAgICBsYW1iZGEgcHJvdG8sIHVudXNlZF9jb250ZXh0OiBwaWNrbGVyLmxvYWRzKHByb3RvLnZhbHVlKSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICAiIiJSZXR1cm5zIGFuIFNka0Z1bmN0aW9uU3BlYyBlbmNvZGluZyB0aGlzIEZuLgoKICAgIFByZWZlciBvdmVycmlkaW5nIHNlbGYudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIuCiAgICAiIiIKICAgIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgICB1cm4sIHR5cGVkX3BhcmFtID0gc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KQogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuU2RrRnVuY3Rpb25TcGVjKAogICAgICAgIHNwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgICAgIHVybj11cm4sCiAgICAgICAgICAgIHBheWxvYWQ9dHlwZWRfcGFyYW0uU2VyaWFsaXplVG9TdHJpbmcoKQogICAgICAgICAgICBpZiB0eXBlZF9wYXJhbSBpcyBub3QgTm9uZSBlbHNlIE5vbmUpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKGNscywgZm5fcHJvdG8sIGNvbnRleHQpOgogICAgIiIiQ29udmVydHMgZnJvbSBhbiBTZGtGdW5jdGlvblNwZWMgdG8gYSBGbiBvYmplY3QuCgogICAgUHJlZmVyIHJlZ2lzdGVyaW5nIGEgdXJuIHdpdGggaXRzIHBhcmFtZXRlciB0eXBlIGFuZCBjb25zdHJ1Y3Rvci4KICAgICIiIgogICAgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yID0gY2xzLl9rbm93bl91cm5zW2ZuX3Byb3RvLnNwZWMudXJuXQogICAgcmV0dXJuIGNvbnN0cnVjdG9yKAogICAgICAgIHByb3RvX3V0aWxzLnBhcnNlX0J5dGVzKGZuX3Byb3RvLnNwZWMucGF5bG9hZCwgcGFyYW1ldGVyX3R5cGUpLAogICAgICAgIGNvbnRleHQpCn1yagEAAChYGQAAAFJ1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGlYAwAAAGRlZkuCS46HWBgAAABSdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm5YAwAAAGRlZktfS3WHWB8AAABSdW5uZXJBcGlGbi5yZWdpc3Rlcl9waWNrbGVfdXJuWAMAAABkZWZLdkuBh1ghAAAAUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuLnJlZ2lzdGVyWAMAAABkZWZLbEtvh1gLAAAAUnVubmVyQXBpRm5YBQAAAGNsYXNzS0dLmYdYGwAAAFJ1bm5lckFwaUZuLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmS49LmYdYIwAAAFJ1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZLV0teh3V9aIpYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZXJrAQAAhYFybAEAAH1ybQEAAGJ0cm4BAABVGWFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJybwEAAChYjB8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJHb29nbGUgQ2xvdWQgUHViU3ViIHNvdXJjZXMgYW5kIHNpbmtzLgoKQ2xvdWQgUHViL1N1YiBzb3VyY2VzIGFuZCBzaW5rcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBvbmx5IGluIHN0cmVhbWluZwpwaXBlbGluZXMsIGR1cmluZyByZW1vdGUgZXhlY3V0aW9uLgoKVGhpcyBBUEkgaXMgY3VycmVudGx5IHVuZGVyIGRldmVsb3BtZW50IGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHJlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KCl9fYWxsX18gPSBbJ1JlYWRTdHJpbmdzRnJvbVB1YlN1YicsICdXcml0ZVN0cmluZ3NUb1B1YlN1YiddCgoKY2xhc3MgUmVhZFN0cmluZ3NGcm9tUHViU3ViKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgZm9yIHJlYWRpbmcgdXRmLTggc3RyaW5nIHBheWxvYWRzIGZyb20gQ2xvdWQgUHViL1N1Yi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcGljPU5vbmUsIHN1YnNjcmlwdGlvbj1Ob25lLCBpZF9sYWJlbD1Ob25lKToKICAgICIiIkluaXRpYWxpemVzIGBgUmVhZFN0cmluZ3NGcm9tUHViU3ViYGAuCgogICAgQXR0cmlidXRlczoKICAgICAgdG9waWM6IENsb3VkIFB1Yi9TdWIgdG9waWMgaW4gdGhlIGZvcm0gInByb2plY3RzLzxwcm9qZWN0Pi90b3BpY3MvCiAgICAgICAgPHRvcGljPiIuIElmIHByb3ZpZGVkLCBzdWJzY3JpcHRpb24gbXVzdCBiZSBOb25lLgogICAgICBzdWJzY3JpcHRpb246IEV4aXN0aW5nIENsb3VkIFB1Yi9TdWIgc3Vic2NyaXB0aW9uIHRvIHVzZSBpbiB0aGUKICAgICAgICBmb3JtICJwcm9qZWN0cy88cHJvamVjdD4vc3Vic2NyaXB0aW9ucy88c3Vic2NyaXB0aW9uPiIuIElmIG5vdAogICAgICAgIHNwZWNpZmllZCwgYSB0ZW1wb3Jhcnkgc3Vic2NyaXB0aW9uIHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBzcGVjaWZpZWQKICAgICAgICB0b3BpYy4gSWYgcHJvdmlkZWQsIHRvcGljIG11c3QgYmUgTm9uZS4KICAgICAgaWRfbGFiZWw6IFRoZSBhdHRyaWJ1dGUgb24gaW5jb21pbmcgUHViL1N1YiBtZXNzYWdlcyB0byB1c2UgYXMgYSB1bmlxdWUKICAgICAgICByZWNvcmQgaWRlbnRpZmllci4gIFdoZW4gc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgKHdoaWNoCiAgICAgICAgY2FuIGJlIGFueSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZWNvcmQpIHdpbGwgYmUgdXNlZCBmb3IKICAgICAgICBkZWR1cGxpY2F0aW9uIG9mIG1lc3NhZ2VzLiAgSWYgbm90IHByb3ZpZGVkLCB3ZSBjYW5ub3QgZ3VhcmFudGVlCiAgICAgICAgdGhhdCBubyBkdXBsaWNhdGUgZGF0YSB3aWxsIGJlIGRlbGl2ZXJlZCBvbiB0aGUgUHViL1N1YiBzdHJlYW0uIEluIHRoaXMKICAgICAgICBjYXNlLCBkZWR1cGxpY2F0aW9uIG9mIHRoZSBzdHJlYW0gd2lsbCBiZSBzdHJpY3RseSBiZXN0IGVmZm9ydC4KICAgICIiIgogICAgc3VwZXIoUmVhZFN0cmluZ3NGcm9tUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zb3VyY2UgPSBfUHViU3ViUGF5bG9hZFNvdXJjZSgKICAgICAgICB0b3BpYywKICAgICAgICBzdWJzY3JpcHRpb249c3Vic2NyaXB0aW9uLAogICAgICAgIGlkX2xhYmVsPWlkX2xhYmVsKQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCB1bnVzZWRfaW5wdXRzKToKICAgIHJldHVybiBjb3JlLldpbmRvd2luZyh3aW5kb3cuR2xvYmFsV2luZG93cygpKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICBwY29sbCA9IHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQogICAgcGNvbGwuZWxlbWVudF90eXBlID0gYnl0ZXMKICAgIHBjb2xsID0gcGNvbGwgfCAnRGVjb2RlU3RyaW5nJyA+PiBNYXAobGFtYmRhIGI6IGIuZGVjb2RlKCd1dGYtOCcpKQogICAgcGNvbGwuZWxlbWVudF90eXBlID0gdW5pY29kZQogICAgcmV0dXJuIHBjb2xsCgoKY2xhc3MgV3JpdGVTdHJpbmdzVG9QdWJTdWIoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3Igd3JpdGluZyB1dGYtOCBzdHJpbmcgcGF5bG9hZHMgdG8gQ2xvdWQgUHViL1N1Yi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcGljKToKICAgICIiIkluaXRpYWxpemVzIGBgV3JpdGVTdHJpbmdzVG9QdWJTdWJgYC4KCiAgICBBdHRyaWJ1dGVzOgogICAgICB0b3BpYzogQ2xvdWQgUHViL1N1YiB0b3BpYyBpbiB0aGUgZm9ybSAiL3RvcGljcy88cHJvamVjdD4vPHRvcGljPiIuCiAgICAiIiIKICAgIHN1cGVyKFdyaXRlU3RyaW5nc1RvUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zaW5rID0gX1B1YlN1YlBheWxvYWRTaW5rKHRvcGljKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHBjb2xsID0gcGNvbGwgfCAnRW5jb2RlU3RyaW5nJyA+PiBNYXAobGFtYmRhIHM6IHMuZW5jb2RlKCd1dGYtOCcpKQogICAgcGNvbGwuZWxlbWVudF90eXBlID0gYnl0ZXMKICAgIHJldHVybiBwY29sbCB8IFdyaXRlKHNlbGYuX3NpbmspCgoKUFJPSkVDVF9JRF9SRUdFWFAgPSAnW2Etel1bLWEtejAtOTouXXs0LDYxfVthLXowLTldJwpTVUJTQ1JJUFRJT05fUkVHRVhQID0gJ3Byb2plY3RzLyhbXi9dKykvc3Vic2NyaXB0aW9ucy8oLispJwpUT1BJQ19SRUdFWFAgPSAncHJvamVjdHMvKFteL10rKS90b3BpY3MvKC4rKScKCgpkZWYgcGFyc2VfdG9waWMoZnVsbF90b3BpYyk6CiAgbWF0Y2ggPSByZS5tYXRjaChUT1BJQ19SRUdFWFAsIGZ1bGxfdG9waWMpCiAgaWYgbm90IG1hdGNoOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUHViU3ViIHRvcGljIG11c3QgYmUgaW4gdGhlIGZvcm0gInByb2plY3RzLzxwcm9qZWN0Pi90b3BpY3MnCiAgICAgICAgJy88dG9waWM+IiAoZ290ICVyKS4nICUgZnVsbF90b3BpYykKICBwcm9qZWN0LCB0b3BpY19uYW1lID0gbWF0Y2guZ3JvdXAoMSksIG1hdGNoLmdyb3VwKDIpCiAgaWYgbm90IHJlLm1hdGNoKFBST0pFQ1RfSURfUkVHRVhQLCBwcm9qZWN0KToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgUHViU3ViIHByb2plY3QgbmFtZTogJXIuJyAlIHByb2plY3QpCiAgcmV0dXJuIHByb2plY3QsIHRvcGljX25hbWUKCgpkZWYgcGFyc2Vfc3Vic2NyaXB0aW9uKGZ1bGxfc3Vic2NyaXB0aW9uKToKICBtYXRjaCA9IHJlLm1hdGNoKFNVQlNDUklQVElPTl9SRUdFWFAsIGZ1bGxfc3Vic2NyaXB0aW9uKQogIGlmIG5vdCBtYXRjaDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1B1YlN1YiBzdWJzY3JpcHRpb24gbXVzdCBiZSBpbiB0aGUgZm9ybSAicHJvamVjdHMvPHByb2plY3Q+JwogICAgICAgICcvc3Vic2NyaXB0aW9ucy88c3Vic2NyaXB0aW9uPiIgKGdvdCAlcikuJyAlIGZ1bGxfc3Vic2NyaXB0aW9uKQogIHByb2plY3QsIHN1YnNjcmlwdGlvbl9uYW1lID0gbWF0Y2guZ3JvdXAoMSksIG1hdGNoLmdyb3VwKDIpCiAgaWYgbm90IHJlLm1hdGNoKFBST0pFQ1RfSURfUkVHRVhQLCBwcm9qZWN0KToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgUHViU3ViIHByb2plY3QgbmFtZTogJXIuJyAlIHByb2plY3QpCiAgcmV0dXJuIHByb2plY3QsIHN1YnNjcmlwdGlvbl9uYW1lCgoKY2xhc3MgX1B1YlN1YlBheWxvYWRTb3VyY2UoZGF0YWZsb3dfaW8uTmF0aXZlU291cmNlKToKICAiIiJTb3VyY2UgZm9yIHRoZSBwYXlsb2FkIG9mIGEgbWVzc2FnZSBhcyBieXRlcyBmcm9tIGEgQ2xvdWQgUHViL1N1YiB0b3BpYy4KCiAgQXR0cmlidXRlczoKICAgIHRvcGljOiBDbG91ZCBQdWIvU3ViIHRvcGljIGluIHRoZSBmb3JtICJwcm9qZWN0cy88cHJvamVjdD4vdG9waWNzLzx0b3BpYz4iLgogICAgICBJZiBwcm92aWRlZCwgc3Vic2NyaXB0aW9uIG11c3QgYmUgTm9uZS4KICAgIHN1YnNjcmlwdGlvbjogRXhpc3RpbmcgQ2xvdWQgUHViL1N1YiBzdWJzY3JpcHRpb24gdG8gdXNlIGluIHRoZQogICAgICBmb3JtICJwcm9qZWN0cy88cHJvamVjdD4vc3Vic2NyaXB0aW9ucy88c3Vic2NyaXB0aW9uPiIuIElmIG5vdCBzcGVjaWZpZWQsCiAgICAgIGEgdGVtcG9yYXJ5IHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkIHRvcGljLiBJZgogICAgICBwcm92aWRlZCwgdG9waWMgbXVzdCBiZSBOb25lLgogICAgaWRfbGFiZWw6IFRoZSBhdHRyaWJ1dGUgb24gaW5jb21pbmcgUHViL1N1YiBtZXNzYWdlcyB0byB1c2UgYXMgYSB1bmlxdWUKICAgICAgcmVjb3JkIGlkZW50aWZpZXIuICBXaGVuIHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlICh3aGljaCBjYW4KICAgICAgYmUgYW55IHN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlY29yZCkgd2lsbCBiZSB1c2VkIGZvcgogICAgICBkZWR1cGxpY2F0aW9uIG9mIG1lc3NhZ2VzLiAgSWYgbm90IHByb3ZpZGVkLCBEYXRhZmxvdyBjYW5ub3QgZ3VhcmFudGVlCiAgICAgIHRoYXQgbm8gZHVwbGljYXRlIGRhdGEgd2lsbCBiZSBkZWxpdmVyZWQgb24gdGhlIFB1Yi9TdWIgc3RyZWFtLiBJbiB0aGlzCiAgICAgIGNhc2UsIGRlZHVwbGljYXRpb24gb2YgdGhlIHN0cmVhbSB3aWxsIGJlIHN0cmljdGx5IGJlc3QgZWZmb3J0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdG9waWM9Tm9uZSwgc3Vic2NyaXB0aW9uPU5vbmUsIGlkX2xhYmVsPU5vbmUpOgogICAgIyBXZSBhcmUgdXNpbmcgdGhpcyBjb2RlciBleHBsaWNpdGx5IGZvciBwb3J0YWJpbGl0eSByZWFzb25zIG9mIFB1YnN1YklPCiAgICAjIGFjcm9zcyBpbXBsZW1lbnRhdGlvbnMgaW4gbGFuZ3VhZ2VzLgogICAgc2VsZi5jb2RlciA9IGNvZGVycy5CeXRlc0NvZGVyKCkKICAgIHNlbGYuZnVsbF90b3BpYyA9IHRvcGljCiAgICBzZWxmLmZ1bGxfc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uCiAgICBzZWxmLnRvcGljX25hbWUgPSBOb25lCiAgICBzZWxmLnN1YnNjcmlwdGlvbl9uYW1lID0gTm9uZQogICAgc2VsZi5pZF9sYWJlbCA9IGlkX2xhYmVsCgogICAgIyBQZXJmb3JtIHNvbWUgdmFsaWRhdGlvbiBvbiB0aGUgdG9waWMgYW5kIHN1YnNjcmlwdGlvbi4KICAgIGlmIG5vdCAodG9waWMgb3Igc3Vic2NyaXB0aW9uKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRWl0aGVyIGEgdG9waWMgb3Igc3Vic2NyaXB0aW9uIG11c3QgYmUgcHJvdmlkZWQuJykKICAgIGlmIHRvcGljIGFuZCBzdWJzY3JpcHRpb246CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ09ubHkgb25lIG9mIHRvcGljIG9yIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuJykKCiAgICBpZiB0b3BpYzoKICAgICAgc2VsZi5wcm9qZWN0LCBzZWxmLnRvcGljX25hbWUgPSBwYXJzZV90b3BpYyh0b3BpYykKICAgIGlmIHN1YnNjcmlwdGlvbjoKICAgICAgc2VsZi5wcm9qZWN0LCBzZWxmLnN1YnNjcmlwdGlvbl9uYW1lID0gcGFyc2Vfc3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNvdXJjZSBmb3JtYXQgbmFtZSByZXF1aXJlZCBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4iIiIKICAgIHJldHVybiAncHVic3ViJwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnaWRfbGFiZWwnOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5pZF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdJRCBMYWJlbCBBdHRyaWJ1dGUnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3RvcGljJzoKICAgICAgICAgICAgRGlzcGxheURhdGFJdGVtKHNlbGYuZnVsbF90b3BpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdQdWJzdWIgVG9waWMnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3N1YnNjcmlwdGlvbic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLmZ1bGxfc3Vic2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1B1YnN1YiBTdWJzY3JpcHRpb24nKS5kcm9wX2lmX25vbmUoKX0KCiAgZGVmIHJlYWRlcihzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1B1YlN1YlBheWxvYWRTb3VyY2UgaXMgbm90IHN1cHBvcnRlZCBpbiBsb2NhbCBleGVjdXRpb24uJykKCiAgZGVmIGlzX2JvdW5kZWQoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBfUHViU3ViUGF5bG9hZFNpbmsoZGF0YWZsb3dfaW8uTmF0aXZlU2luayk6CiAgIiIiU2luayBmb3IgdGhlIHBheWxvYWQgb2YgYSBtZXNzYWdlIGFzIGJ5dGVzIHRvIGEgQ2xvdWQgUHViL1N1YiB0b3BpYy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcGljKToKICAgICMgd2UgYXJlIHVzaW5nIHRoaXMgY29kZXIgZXhwbGljaXRseSBmb3IgcG9ydGFiaWxpdHkgcmVhc29ucyBvZiBQdWJzdWJJTwogICAgIyBhY3Jvc3MgaW1wbGVtZW50YXRpb25zIGluIGxhbmd1YWdlcy4KICAgIHNlbGYuY29kZXIgPSBjb2RlcnMuQnl0ZXNDb2RlcigpCiAgICBzZWxmLmZ1bGxfdG9waWMgPSB0b3BpYwoKICAgIHNlbGYucHJvamVjdCwgc2VsZi50b3BpY19uYW1lID0gcGFyc2VfdG9waWModG9waWMpCgogIEBwcm9wZXJ0eQogIGRlZiBmb3JtYXQoc2VsZik6CiAgICAiIiJTaW5rIGZvcm1hdCBuYW1lIHJlcXVpcmVkIGZvciByZW1vdGUgZXhlY3V0aW9uLiIiIgogICAgcmV0dXJuICdwdWJzdWInCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geyd0b3BpYyc6IERpc3BsYXlEYXRhSXRlbShzZWxmLmZ1bGxfdG9waWMsIGxhYmVsPSdQdWJzdWIgVG9waWMnKX0KCiAgZGVmIHdyaXRlcihzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1B1YlN1YlBheWxvYWRTaW5rIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbG9jYWwgZXhlY3V0aW9uLicpCn1ycAEAAChYFAAAAF9QdWJTdWJQYXlsb2FkU291cmNlWAUAAABjbGFzc0t+S7uHWB4AAABSZWFkU3RyaW5nc0Zyb21QdWJTdWIuX19pbml0X19YAwAAAGRlZkstS0OHWBsAAABXcml0ZVN0cmluZ3NUb1B1YlN1Yi5leHBhbmRYAwAAAGRlZktbS1+HWBwAAABSZWFkU3RyaW5nc0Zyb21QdWJTdWIuZXhwYW5kWAMAAABkZWZLR0tNh1gjAAAAUmVhZFN0cmluZ3NGcm9tUHViU3ViLmdldF93aW5kb3dpbmdYAwAAAGRlZktES0aHWBsAAABfUHViU3ViUGF5bG9hZFNpbmsuX19pbml0X19YAwAAAGRlZkvAS8eHWCEAAABfUHViU3ViUGF5bG9hZFNvdXJjZS5kaXNwbGF5X2RhdGFYAwAAAGRlZkuqS7SHWBkAAABfUHViU3ViUGF5bG9hZFNpbmsuZm9ybWF0WAMAAABkZWZLyEvMh1gSAAAAcGFyc2Vfc3Vic2NyaXB0aW9uWAMAAABkZWZLckt8h1gLAAAAcGFyc2VfdG9waWNYAwAAAGRlZktmS3CHWBkAAABfUHViU3ViUGF5bG9hZFNpbmsud3JpdGVyWAMAAABkZWZL0EvTh1gdAAAAX1B1YlN1YlBheWxvYWRTb3VyY2UuX19pbml0X19YAwAAAGRlZkuQS6SHWB8AAABfUHViU3ViUGF5bG9hZFNvdXJjZS5pc19ib3VuZGVkWAMAAABkZWZLuUu7h1gSAAAAX1B1YlN1YlBheWxvYWRTaW5rWAUAAABjbGFzc0u9S9OHWB8AAABfUHViU3ViUGF5bG9hZFNpbmsuZGlzcGxheV9kYXRhWAMAAABkZWZLzUvPh1gbAAAAX1B1YlN1YlBheWxvYWRTb3VyY2UuZm9ybWF0WAMAAABkZWZLpUuph1gUAAAAV3JpdGVTdHJpbmdzVG9QdWJTdWJYBQAAAGNsYXNzS09LX4dYFQAAAFJlYWRTdHJpbmdzRnJvbVB1YlN1YlgFAAAAY2xhc3NLKktNh1gbAAAAX1B1YlN1YlBheWxvYWRTb3VyY2UucmVhZGVyWAMAAABkZWZLtUu4h1gdAAAAV3JpdGVTdHJpbmdzVG9QdWJTdWIuX19pbml0X19YAwAAAGRlZktSS1qHdX1ycQEAAChYFAAAAFdyaXRlU3RyaW5nc1RvUHViU3ViWBkAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3VicnIBAABYGwAAAFdyaXRlU3RyaW5nc1RvUHViU3ViLmV4cGFuZGpyAQAAWBwAAABSZWFkU3RyaW5nc0Zyb21QdWJTdWIuZXhwYW5kanIBAABYIwAAAFJlYWRTdHJpbmdzRnJvbVB1YlN1Yi5nZXRfd2luZG93aW5nanIBAABYFQAAAFJlYWRTdHJpbmdzRnJvbVB1YlN1YmpyAQAAdWiKWBkAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3VicnMBAACFgXJ0AQAAfXJ1AQAAYnRydgEAAFUgYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW1ydwEAAChYiSgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJHQ1MgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBHQ1MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzZWRGaWxlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVNZXRhZGF0YQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBNYXRjaFJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgZ2NzaW8KCl9fYWxsX18gPSBbJ0dDU0ZpbGVTeXN0ZW0nXQoKCmNsYXNzIEdDU0ZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiQSBHQ1MgYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBHQ1MuCiAgIiIiCgogIENIVU5LX1NJWkUgPSBnY3Npby5NQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgICMgQ2h1Y2sgc2l6ZSBpbiBiYXRjaCBvcGVyYXRpb25zCiAgR0NTX1BSRUZJWCA9ICdnczovLycKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmV0dXJuICdncycKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICBpZiBub3QgYmFzZXBhdGguc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdCYXNlcGF0aCAlciBtdXN0IGJlIEdDUyBwYXRoLicsIGJhc2VwYXRoKQogICAgcGF0aCA9IGJhc2VwYXRoCiAgICBmb3IgcCBpbiBwYXRoczoKICAgICAgcGF0aCA9IHBhdGgucnN0cmlwKCcvJykgKyAnLycgKyBwLmxzdHJpcCgnLycpCiAgICByZXR1cm4gcGF0aAoKICBkZWYgc3BsaXQoc2VsZiwgcGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBIZWFkIHdpbGwgaW5jbHVkZSB0aGUgR0NTIHByZWZpeCAoJ2dzOi8vJykuCgogICAgQXJnczoKICAgICAgcGF0aDogcGF0aCBhcyBhIHN0cmluZwogICAgUmV0dXJuczoKICAgICAgYSBwYWlyIG9mIHBhdGggY29tcG9uZW50cyBhcyBzdHJpbmdzLgogICAgIiIiCiAgICBwYXRoID0gcGF0aC5zdHJpcCgpCiAgICBpZiBub3QgcGF0aC5zdGFydHN3aXRoKEdDU0ZpbGVTeXN0ZW0uR0NTX1BSRUZJWCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BhdGggJXIgbXVzdCBiZSBHQ1MgcGF0aC4nLCBwYXRoKQoKICAgIHByZWZpeF9sZW4gPSBsZW4oR0NTRmlsZVN5c3RlbS5HQ1NfUFJFRklYKQogICAgbGFzdF9zZXAgPSBwYXRoW3ByZWZpeF9sZW46XS5yZmluZCgnLycpCiAgICBpZiBsYXN0X3NlcCA+PSAwOgogICAgICBsYXN0X3NlcCArPSBwcmVmaXhfbGVuCgogICAgaWYgbGFzdF9zZXAgPiAwOgogICAgICByZXR1cm4gKHBhdGhbOmxhc3Rfc2VwXSwgcGF0aFtsYXN0X3NlcCArIDE6XSkKICAgIGVsaWYgbGFzdF9zZXAgPCAwOgogICAgICByZXR1cm4gKHBhdGgsICcnKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBwYXRoOiAlcycsIHBhdGgpCgogIGRlZiBta2RpcnMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZWN1cnNpdmVseSBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm92aWRlZCBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQKCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3IgaWYgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIG1hdGNoKHNlbGYsIHBhdHRlcm5zLCBsaW1pdHM9Tm9uZSk6CiAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBwYXRocyB0byB0aGUgcGF0dGVybiBwcm92aWRlZC4KCiAgICBBcmdzOgogICAgICBwYXR0ZXJuOiBzdHJpbmcgZm9yIHRoZSBmaWxlIHBhdGggcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0CiAgICAgIGxpbWl0OiBNYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMgdGhhdCBuZWVkIHRvIGJlIGZldGNoZWQKCiAgICBSZXR1cm5zOiBsaXN0IG9mIGBgTWF0Y2hSZXN1bHRgYCBvYmplY3RzLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgcGF0dGVybiBtYXRjaCBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGltaXRzIGlzIE5vbmU6CiAgICAgIGxpbWl0cyA9IFtOb25lXSAqIGxlbihwYXR0ZXJucykKICAgIGVsc2U6CiAgICAgIGVycl9tc2cgPSAiUGF0dGVybnMgYW5kIGxpbWl0cyBzaG91bGQgYmUgZXF1YWwgaW4gbGVuZ3RoIgogICAgICBhc3NlcnQgbGVuKHBhdHRlcm5zKSA9PSBsZW4obGltaXRzKSwgZXJyX21zZwoKICAgIGRlZiBfbWF0Y2gocGF0dGVybiwgbGltaXQpOgogICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBwYXRocyB0byB0aGUgcGF0dGVybiBwcm92aWRlZC4KICAgICAgIiIiCiAgICAgIGlmIHBhdHRlcm4uZW5kc3dpdGgoJy8nKToKICAgICAgICBwYXR0ZXJuICs9ICcqJwogICAgICBmaWxlX3NpemVzID0gZ2NzaW8uR2NzSU8oKS5zaXplX29mX2ZpbGVzX2luX2dsb2IocGF0dGVybiwgbGltaXQpCiAgICAgIG1ldGFkYXRhX2xpc3QgPSBbRmlsZU1ldGFkYXRhKHBhdGgsIHNpemUpCiAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGgsIHNpemUgaW4gZmlsZV9zaXplcy5pdGVyaXRlbXMoKV0KICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHBhdHRlcm4sIG1ldGFkYXRhX2xpc3QpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICByZXN1bHQgPSBbXQogICAgZm9yIHBhdHRlcm4sIGxpbWl0IGluIHppcChwYXR0ZXJucywgbGltaXRzKToKICAgICAgdHJ5OgogICAgICAgIHJlc3VsdC5hcHBlbmQoX21hdGNoKHBhdHRlcm4sIGxpbWl0KSkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1twYXR0ZXJuXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiTWF0Y2ggb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfcGF0aF9vcGVuKHNlbGYsIHBhdGgsIG1vZGUsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJIZWxwZXIgZnVuY3Rpb25zIHRvIG9wZW4gYSBmaWxlIGluIHRoZSBwcm92aWRlZCBtb2RlLgogICAgIiIiCiAgICBjb21wcmVzc2lvbl90eXBlID0gRmlsZVN5c3RlbS5fZ2V0X2NvbXByZXNzaW9uX3R5cGUocGF0aCwgY29tcHJlc3Npb25fdHlwZSkKICAgIG1pbWVfdHlwZSA9IENvbXByZXNzaW9uVHlwZXMubWltZV90eXBlKGNvbXByZXNzaW9uX3R5cGUsIG1pbWVfdHlwZSkKICAgIHJhd19maWxlID0gZ2NzaW8uR2NzSU8oKS5vcGVuKHBhdGgsIG1vZGUsIG1pbWVfdHlwZT1taW1lX3R5cGUpCiAgICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEOgogICAgICByZXR1cm4gcmF3X2ZpbGUKICAgIHJldHVybiBDb21wcmVzc2VkRmlsZShyYXdfZmlsZSwgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY3JlYXRlKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSB3cml0ZSBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BhdGhfb3BlbihwYXRoLCAnd2InLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBvcGVuKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJSZXR1cm5zIGEgcmVhZCBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BhdGhfb3BlbihwYXRoLCAncmInLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBjb3B5KHNlbGYsIHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IGxpc3Qgb2Ygc291cmNlIGZpbGUgb2JqZWN0cyB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBsaXN0IG9mIGRlc3RpbmF0aW9uIG9mIHRoZSBuZXcgb2JqZWN0CgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBjb3B5IG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBlcnJfbXNnID0gKCJzb3VyY2VfZmlsZV9uYW1lcyBhbmQgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBzaG91bGQgIgogICAgICAgICAgICAgICAiYmUgZXF1YWwgaW4gbGVuZ3RoIikKICAgIGFzc2VydCBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKSwgZXJyX21zZwoKICAgIGRlZiBfY29weV9wYXRoKHNvdXJjZSwgZGVzdGluYXRpb24pOgogICAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgogICAgICAiIiIKICAgICAgaWYgbm90IGRlc3RpbmF0aW9uLnN0YXJ0c3dpdGgoR0NTRmlsZVN5c3RlbS5HQ1NfUFJFRklYKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdEZXN0aW5hdGlvbiAlciBtdXN0IGJlIEdDUyBwYXRoLicsIGRlc3RpbmF0aW9uKQogICAgICAjIFVzZSBjb3B5X3RyZWUgaWYgdGhlIHBhdGggZW5kcyB3aXRoIC8gYXMgaXQgaXMgYSBkaXJlY3RvcnkKICAgICAgaWYgc291cmNlLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgZ2NzaW8uR2NzSU8oKS5jb3B5dHJlZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBlbHNlOgogICAgICAgIGdjc2lvLkdjc0lPKCkuY29weShzb3VyY2UsIGRlc3RpbmF0aW9uKQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIHNvdXJjZSwgZGVzdGluYXRpb24gaW4gemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgdHJ5OgogICAgICAgIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1soc291cmNlLCBkZXN0aW5hdGlvbildID0gZQoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJDb3B5IG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQoKICBkZWYgcmVuYW1lKHNlbGYsIHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlbmFtZSB0aGUgZmlsZXMgYXQgdGhlIHNvdXJjZSBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBsaXN0LgogICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUgc2l6ZS4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogTGlzdCBvZiBmaWxlIHBhdGhzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBMaXN0IG9mIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgZm9yIHRoZSBmaWxlcwoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgcmVuYW1lIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBlcnJfbXNnID0gKCJzb3VyY2VfZmlsZV9uYW1lcyBhbmQgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBzaG91bGQgIgogICAgICAgICAgICAgICAiYmUgZXF1YWwgaW4gbGVuZ3RoIikKICAgIGFzc2VydCBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKSwgZXJyX21zZwoKICAgIGdjc19iYXRjaGVzID0gW10KICAgIGdjc19jdXJyZW50X2JhdGNoID0gW10KICAgIGZvciBzcmMsIGRlc3QgaW4gemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgZ2NzX2N1cnJlbnRfYmF0Y2guYXBwZW5kKChzcmMsIGRlc3QpKQogICAgICBpZiBsZW4oZ2NzX2N1cnJlbnRfYmF0Y2gpID09IHNlbGYuQ0hVTktfU0laRToKICAgICAgICBnY3NfYmF0Y2hlcy5hcHBlbmQoZ2NzX2N1cnJlbnRfYmF0Y2gpCiAgICAgICAgZ2NzX2N1cnJlbnRfYmF0Y2ggPSBbXQogICAgaWYgZ2NzX2N1cnJlbnRfYmF0Y2g6CiAgICAgIGdjc19iYXRjaGVzLmFwcGVuZChnY3NfY3VycmVudF9iYXRjaCkKCiAgICAjIEV4ZWN1dGUgR0NTIHJlbmFtZXMgaWYgYW55IGFuZCByZXR1cm4gZXhjZXB0aW9ucy4KICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIGJhdGNoIGluIGdjc19iYXRjaGVzOgogICAgICBjb3B5X3N0YXR1c2VzID0gZ2NzaW8uR2NzSU8oKS5jb3B5X2JhdGNoKGJhdGNoKQogICAgICBjb3B5X3N1Y2NlZWRlZCA9IFtdCiAgICAgIGZvciBzcmMsIGRlc3QsIGV4Y2VwdGlvbiBpbiBjb3B5X3N0YXR1c2VzOgogICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgIGV4Y2VwdGlvbnNbKHNyYywgZGVzdCldID0gZXhjZXB0aW9uCiAgICAgICAgZWxzZToKICAgICAgICAgIGNvcHlfc3VjY2VlZGVkLmFwcGVuZCgoc3JjLCBkZXN0KSkKICAgICAgZGVsZXRlX2JhdGNoID0gW3NyYyBmb3Igc3JjLCBkZXN0IGluIGNvcHlfc3VjY2VlZGVkXQogICAgICBkZWxldGVfc3RhdHVzZXMgPSBnY3Npby5HY3NJTygpLmRlbGV0ZV9iYXRjaChkZWxldGVfYmF0Y2gpCiAgICAgIGZvciBpLCAoc3JjLCBleGNlcHRpb24pIGluIGVudW1lcmF0ZShkZWxldGVfc3RhdHVzZXMpOgogICAgICAgIGRlc3QgPSBjb3B5X3N1Y2NlZWRlZFtpXVsxXQogICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgIGV4Y2VwdGlvbnNbKHNyYywgZGVzdCldID0gZXhjZXB0aW9uCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIlJlbmFtZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIkNoZWNrIGlmIHRoZSBwcm92aWRlZCBwYXRoIGV4aXN0cyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgcGF0aCBleGlzdHMKICAgICIiIgogICAgcmV0dXJuIGdjc2lvLkdjc0lPKCkuZXhpc3RzKHBhdGgpCgogIGRlZiBkZWxldGUoc2VsZiwgcGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAogICAgIiIiCiAgICBkZWYgX2RlbGV0ZV9wYXRoKHBhdGgpOgogICAgICAiIiJSZWN1cnNpdmVseSBkZWxldGUgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IHRoZSBwcm92aWRlZCBwYXRoLgogICAgICAiIiIKICAgICAgaWYgcGF0aC5lbmRzd2l0aCgnLycpOgogICAgICAgIHBhdGhfdG9fdXNlID0gcGF0aCArICcqJwogICAgICBlbHNlOgogICAgICAgIHBhdGhfdG9fdXNlID0gcGF0aAogICAgICBtYXRjaF9yZXN1bHQgPSBzZWxmLm1hdGNoKFtwYXRoX3RvX3VzZV0pWzBdCiAgICAgIHN0YXR1c2VzID0gZ2NzaW8uR2NzSU8oKS5kZWxldGVfYmF0Y2goCiAgICAgICAgICBbbS5wYXRoIGZvciBtIGluIG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0XSkKICAgICAgZmFpbHVyZXMgPSBbZSBmb3IgKF8sIGUpIGluIHN0YXR1c2VzIGlmIGUgaXMgbm90IE5vbmVdCiAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgIHJhaXNlIGZhaWx1cmVzWzBdCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgdHJ5OgogICAgICAgIF9kZWxldGVfcGF0aChwYXRoKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zW3BhdGhdID0gZQoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJEZWxldGUgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCn1yeAEAAChYGgAAAEdDU0ZpbGVTeXN0ZW0ubWF0Y2guX21hdGNoWAMAAABkZWZLd0uAh1gSAAAAR0NTRmlsZVN5c3RlbS5qb2luWAMAAABkZWZLLUs8h1gUAAAAR0NTRmlsZVN5c3RlbS5ta2RpcnNYAwAAAGRlZktaS2SHWBQAAABHQ1NGaWxlU3lzdGVtLmRlbGV0ZVgDAAAAZGVmTQwBTSoBh1gUAAAAR0NTRmlsZVN5c3RlbS5jcmVhdGVYAwAAAGRlZkuYS6SHWBIAAABHQ1NGaWxlU3lzdGVtLmNvcHlYAwAAAGRlZkuyS9SHWA0AAABHQ1NGaWxlU3lzdGVtWAUAAABjbGFzc0sgTSoBh1gTAAAAR0NTRmlsZVN5c3RlbS5tYXRjaFgDAAAAZGVmS2VLjIdYFAAAAEdDU0ZpbGVTeXN0ZW0ucmVuYW1lWAMAAABkZWZL1U0BAYdYIQAAAEdDU0ZpbGVTeXN0ZW0uZGVsZXRlLl9kZWxldGVfcGF0aFgDAAAAZGVmTRMBTSABh1gSAAAAR0NTRmlsZVN5c3RlbS5vcGVuWAMAAABkZWZLpUuxh1gYAAAAR0NTRmlsZVN5c3RlbS5fcGF0aF9vcGVuWAMAAABkZWZLjUuXh1gUAAAAR0NTRmlsZVN5c3RlbS5leGlzdHNYAwAAAGRlZk0CAU0LAYdYFAAAAEdDU0ZpbGVTeXN0ZW0uc2NoZW1lWAMAAABkZWZLJ0ssh1gTAAAAR0NTRmlsZVN5c3RlbS5zcGxpdFgDAAAAZGVmSz1LWYdYHQAAAEdDU0ZpbGVTeXN0ZW0uY29weS5fY29weV9wYXRoWAMAAABkZWZLwEvKh3V9cnkBAAAoWBIAAABHQ1NGaWxlU3lzdGVtLmpvaW5YIAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtcnoBAABYFAAAAEdDU0ZpbGVTeXN0ZW0ubWtkaXJzanoBAABYFAAAAEdDU0ZpbGVTeXN0ZW0uZGVsZXRlanoBAABYEgAAAEdDU0ZpbGVTeXN0ZW0uY29weWp6AQAAWA0AAABHQ1NGaWxlU3lzdGVtanoBAABYEwAAAEdDU0ZpbGVTeXN0ZW0ubWF0Y2hqegEAAFgUAAAAR0NTRmlsZVN5c3RlbS5yZW5hbWVqegEAAFgSAAAAR0NTRmlsZVN5c3RlbS5vcGVuanoBAABYFAAAAEdDU0ZpbGVTeXN0ZW0uZXhpc3RzanoBAABYFAAAAEdDU0ZpbGVTeXN0ZW0uc2NoZW1lanoBAABYEwAAAEdDU0ZpbGVTeXN0ZW0uc3BsaXRqegEAAFgUAAAAR0NTRmlsZVN5c3RlbS5jcmVhdGVqegEAAHVoilggAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW1yewEAAIWBcnwBAAB9cn0BAABidHJ+AQAAVTFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjKFhJFgAAIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmltcG9ydCBncnBjCgppbXBvcnQgYmVhbV9qb2JfYXBpX3BiMiBhcyBiZWFtX19qb2JfX2FwaV9fcGIyCgoKY2xhc3MgSm9iU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJKb2IgU2VydmljZSBmb3IgcnVubmluZyBSdW5uZXJBUEkgcGlwZWxpbmVzCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLlByZXBhcmUgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvUHJlcGFyZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUHJlcGFyZUpvYlJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUHJlcGFyZUpvYlJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5SdW4gPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvUnVuJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5SdW5Kb2JSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlJ1bkpvYlJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5HZXRTdGF0ZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9HZXRTdGF0ZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkNhbmNlbCA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9DYW5jZWwnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkNhbmNlbEpvYlJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuQ2FuY2VsSm9iUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldFN0YXRlU3RyZWFtID0gY2hhbm5lbC51bmFyeV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9HZXRTdGF0ZVN0cmVhbScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldE1lc3NhZ2VTdHJlYW0gPSBjaGFubmVsLnVuYXJ5X3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0dldE1lc3NhZ2VTdHJlYW0nLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkpvYk1lc3NhZ2VzUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5Kb2JNZXNzYWdlc1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEpvYlNlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkpvYiBTZXJ2aWNlIGZvciBydW5uaW5nIFJ1bm5lckFQSSBwaXBlbGluZXMKICAiIiIKCiAgZGVmIFByZXBhcmUoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJQcmVwYXJlIGEgam9iIGZvciBleGVjdXRpb24uIFRoZSBqb2Igd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgYSBjYWxsIGlzIG1hZGUgdG8gcnVuIHdpdGggdGhlCiAgICByZXR1cm5lZCBwcmVwYXJhdGlvbklkLgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgUnVuKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiU3VibWl0IHRoZSBqb2IgZm9yIGV4ZWN1dGlvbgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgR2V0U3RhdGUoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgQ2FuY2VsKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiQ2FuY2VsIHRoZSBqb2IKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIEdldFN0YXRlU3RyZWFtKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiU3Vic2NyaWJlIHRvIGEgc3RyZWFtIG9mIHN0YXRlIGNoYW5nZXMgb2YgdGhlIGpvYiwgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGpvYiBhcyB0aGUgZmlyc3QgcmVzcG9uc2UuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRNZXNzYWdlU3RyZWFtKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiU3Vic2NyaWJlIHRvIGEgc3RyZWFtIG9mIHN0YXRlIGNoYW5nZXMgYW5kIG1lc3NhZ2VzIGZyb20gdGhlIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfSm9iU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnUHJlcGFyZSc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuUHJlcGFyZSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUHJlcGFyZUpvYlJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdSdW4nOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLlJ1biwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUnVuSm9iUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlJ1bkpvYlJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0U3RhdGUnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldFN0YXRlLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnQ2FuY2VsJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5DYW5jZWwsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkNhbmNlbEpvYlJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5DYW5jZWxKb2JSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ0dldFN0YXRlU3RyZWFtJzogZ3JwYy51bmFyeV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0U3RhdGVTdHJlYW0sCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdHZXRNZXNzYWdlU3RyZWFtJzogZ3JwYy51bmFyeV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0TWVzc2FnZVN0cmVhbSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQp9cn8BAAAoWBkAAABKb2JTZXJ2aWNlU2VydmljZXIuQ2FuY2VsWAMAAABkZWZLS0tRh1ghAAAASm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlU3RyZWFtWAMAAABkZWZLUktYh1gXAAAASm9iU2VydmljZVN0dWIuX19pbml0X19YAwAAAGRlZksLSy+HWBoAAABKb2JTZXJ2aWNlU2VydmljZXIuUHJlcGFyZVgDAAAAZGVmSzVLPIdYGwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZVgDAAAAZGVmS0RLSodYIwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRNZXNzYWdlU3RyZWFtWAMAAABkZWZLWUtfh1gSAAAASm9iU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0sxS1+HWA4AAABKb2JTZXJ2aWNlU3R1YlgFAAAAY2xhc3NLB0svh1gWAAAASm9iU2VydmljZVNlcnZpY2VyLlJ1blgDAAAAZGVmSz1LQ4dYIAAAAGFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLYUuFh3V9coABAAAoWBkAAABKb2JTZXJ2aWNlU2VydmljZXIuQ2FuY2VsWDEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjcoEBAABYIwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRNZXNzYWdlU3RyZWFtaoEBAABYGgAAAEpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJlaoEBAABYGwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZWqBAQAAWCEAAABKb2JTZXJ2aWNlU2VydmljZXIuR2V0U3RhdGVTdHJlYW1qgQEAAFgSAAAASm9iU2VydmljZVNlcnZpY2VyaoEBAABYDgAAAEpvYlNlcnZpY2VTdHViaoEBAABYFgAAAEpvYlNlcnZpY2VTZXJ2aWNlci5SdW5qgQEAAFggAAAAYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJqgQEAAHVoilgxAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY3KCAQAAhYFygwEAAH1yhAEAAGJ0coUBAABVH2FwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW1yhgEAAChYhiQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtYCBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nCkhhZG9vcCBEaXN0cmlidXRlZCBGaWxlIFN5c3RlbSBmaWxlcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcG9zaXhwYXRoCmltcG9ydCByZQoKZnJvbSBoZGZzMyBpbXBvcnQgSERGaWxlU3lzdGVtCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3NlZEZpbGUKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZU1ldGFkYXRhCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IE1hdGNoUmVzdWx0CgpfX2FsbF9fID0gWydIYWRvb3BGaWxlU3lzdGVtJ10KCl9IREZTX1BSRUZJWCA9ICdoZGZzOi8nCl9VUkxfUkUgPSByZS5jb21waWxlKHInXicgKyBfSERGU19QUkVGSVggKyByJygvLiopJykKX0NPUFlfQlVGRkVSX1NJWkUgPSAyICoqIDE2CgoKIyBUT0RPKHVkaW0pOiBBZGQgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZiB0byBzb21lIGZ1bmN0aW9ucywgbGlrZSBpbgojIGdjc2lvLnB5LgoKCmNsYXNzIEhhZG9vcEZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyBIREZTLgoKICBVUkwgYXJndW1lbnRzIHRvIG1ldGhvZHMgZXhwZWN0IHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCBgYGhkZnM6Ly9gYC4KCiAgVXNlcyBjbGllbnQgbGlicmFyeSA6Y2xhc3M6YGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtYC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBjb25uZWN0aW9uIHRvIEhERlMuCgogICAgQ29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGlzIGRvbmUgdXNpbmcgOmRvYzpgaGRmc2AuCiAgICAiIiIKICAgIHN1cGVyKEhhZG9vcEZpbGVTeXN0ZW0sIHNlbGYpLl9faW5pdF9fKHBpcGVsaW5lX29wdGlvbnMpCiAgICBzZWxmLl9oZGZzX2NsaWVudCA9IEhERmlsZVN5c3RlbSgpCgogIEBjbGFzc21ldGhvZAogIGRlZiBzY2hlbWUoY2xzKToKICAgIHJldHVybiAnaGRmcycKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfcGFyc2VfdXJsKHVybCk6CiAgICAiIiJWZXJpZmllcyB0aGF0IHVybCBiZWdpbnMgd2l0aCBoZGZzOi8vIHByZWZpeCwgc3RyaXBzIGl0IGFuZCBhZGRzIGEKICAgIGxlYWRpbmcgLy4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3IgaWYgdXJsIGRvZXNuJ3QgYmVnaW4gd2l0aCBoZGZzOi8vLgoKICAgIEFyZ3M6CiAgICAgIHVybDogQSBVUkwgaW4gdGhlIGZvcm0gaGRmczovL3BhdGgvLi4uCgogICAgUmV0dXJuczoKICAgICAgRm9yIGFuIGlucHV0IG9mICdoZGZzOi8vcGF0aC8uLi4nLCB3aWxsIHJldHVybiAnL3BhdGgvLi4uJy4KICAgICIiIgogICAgbSA9IF9VUkxfUkUubWF0Y2godXJsKQogICAgaWYgbSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgdXJsOiAlcycgJSB1cmwpCiAgICByZXR1cm4gbS5ncm91cCgxKQoKICBkZWYgam9pbihzZWxmLCBiYXNlX3VybCwgKnBhdGhzKToKICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cy4KCiAgICBBcmdzOgogICAgICBiYXNlX3VybDogc3RyaW5nIHBhdGggb2YgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aC4KICAgICAgICBNdXN0IHN0YXJ0IHdpdGggaGRmczovLy4KICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6CiAgICAgIEZ1bGwgdXJsIGFmdGVyIGNvbWJpbmluZyBhbGwgdGhlIHBhc3NlZCBjb21wb25lbnRzLgogICAgIiIiCiAgICBiYXNlcGF0aCA9IHNlbGYuX3BhcnNlX3VybChiYXNlX3VybCkKICAgIHJldHVybiBfSERGU19QUkVGSVggKyBzZWxmLl9qb2luKGJhc2VwYXRoLCAqcGF0aHMpCgogIGRlZiBfam9pbihzZWxmLCBiYXNlcGF0aCwgKnBhdGhzKToKICAgIHJldHVybiBwb3NpeHBhdGguam9pbihiYXNlcGF0aCwgKnBhdGhzKQoKICBkZWYgc3BsaXQoc2VsZiwgdXJsKToKICAgIHJlbF9wYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIGhlYWQsIHRhaWwgPSBwb3NpeHBhdGguc3BsaXQocmVsX3BhdGgpCiAgICByZXR1cm4gX0hERlNfUFJFRklYICsgaGVhZCwgdGFpbAoKICBkZWYgbWtkaXJzKHNlbGYsIHVybCk6CiAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIGlmIHNlbGYuX2V4aXN0cyhwYXRoKToKICAgICAgcmFpc2UgSU9FcnJvcignUGF0aCBhbHJlYWR5IGV4aXN0czogJXMnICUgcGF0aCkKICAgIHJldHVybiBzZWxmLl9ta2RpcnMocGF0aCkKCiAgZGVmIF9ta2RpcnMoc2VsZiwgcGF0aCk6CiAgICBzZWxmLl9oZGZzX2NsaWVudC5tYWtlZGlycyhwYXRoKQoKICBkZWYgbWF0Y2goc2VsZiwgdXJsX3BhdHRlcm5zLCBsaW1pdHM9Tm9uZSk6CiAgICBpZiBsaW1pdHMgaXMgTm9uZToKICAgICAgbGltaXRzID0gW05vbmVdICogbGVuKHVybF9wYXR0ZXJucykKCiAgICBpZiBsZW4odXJsX3BhdHRlcm5zKSAhPSBsZW4obGltaXRzKToKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoCiAgICAgICAgICAnUGF0dGVybnMgYW5kIGxpbWl0cyBzaG91bGQgYmUgZXF1YWwgaW4gbGVuZ3RoOiAlZCAhPSAlZCcgJSAoCiAgICAgICAgICAgICAgbGVuKHVybF9wYXR0ZXJucyksIGxlbihsaW1pdHMpKSkKCiAgICAjIFRPRE8odWRpbSk6IFVwZGF0ZSBjbGllbnQgdG8gYWxsb3cgYmF0Y2hlZCByZXN1bHRzLgogICAgZGVmIF9tYXRjaChwYXRoX3BhdHRlcm4sIGxpbWl0KToKICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgcGF0aHMgdG8gdGhlIHBhdHRlcm4gcHJvdmlkZWQuIiIiCiAgICAgIGZpbGVfaW5mb3MgPSBzZWxmLl9oZGZzX2NsaWVudC5scyhwYXRoX3BhdHRlcm4sIGRldGFpbD1UcnVlKVs6bGltaXRdCiAgICAgIG1ldGFkYXRhX2xpc3QgPSBbRmlsZU1ldGFkYXRhKGZpbGVfaW5mb1snbmFtZSddLCBmaWxlX2luZm9bJ3NpemUnXSkKICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZV9pbmZvIGluIGZpbGVfaW5mb3NdCiAgICAgIHJldHVybiBNYXRjaFJlc3VsdChwYXRoX3BhdHRlcm4sIG1ldGFkYXRhX2xpc3QpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICByZXN1bHQgPSBbXQogICAgZm9yIHVybF9wYXR0ZXJuLCBsaW1pdCBpbiB6aXAodXJsX3BhdHRlcm5zLCBsaW1pdHMpOgogICAgICB0cnk6CiAgICAgICAgcGF0aF9wYXR0ZXJuID0gc2VsZi5fcGFyc2VfdXJsKHVybF9wYXR0ZXJuKQogICAgICAgIHJlc3VsdC5hcHBlbmQoX21hdGNoKHBhdGhfcGF0dGVybiwgbGltaXQpKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zW3VybF9wYXR0ZXJuXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignTWF0Y2ggb3BlcmF0aW9uIGZhaWxlZCcsIGV4Y2VwdGlvbnMpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfb3Blbl9oZGZzKHNlbGYsIHBhdGgsIG1vZGUsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSk6CiAgICBpZiBtaW1lX3R5cGUgIT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc6CiAgICAgIGxvZ2dpbmcud2FybmluZygnTWltZSB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZC4gR290IG5vbi1kZWZhdWx0IG1pbWVfdHlwZTonCiAgICAgICAgICAgICAgICAgICAgICAnICVzJywgbWltZV90eXBlKQogICAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkFVVE86CiAgICAgIGNvbXByZXNzaW9uX3R5cGUgPSBDb21wcmVzc2lvblR5cGVzLmRldGVjdF9jb21wcmVzc2lvbl90eXBlKHBhdGgpCiAgICByZXMgPSBzZWxmLl9oZGZzX2NsaWVudC5vcGVuKHBhdGgsIG1vZGUpCiAgICBpZiBjb21wcmVzc2lvbl90eXBlICE9IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEOgogICAgICByZXMgPSBDb21wcmVzc2VkRmlsZShyZXMpCiAgICByZXR1cm4gcmVzCgogIGRlZiBjcmVhdGUoc2VsZiwgdXJsLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiIKICAgIFJldHVybnM6CiAgICAgICpoZGZzMy5jb3JlLkhERmlsZSo6IEFuIFB5dGhvbiBGaWxlLWxpa2Ugb2JqZWN0LgogICAgIiIiCiAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIHJldHVybiBzZWxmLl9jcmVhdGUocGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgX2NyZWF0ZShzZWxmLCBwYXRoLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgcmV0dXJuIHNlbGYuX29wZW5faGRmcyhwYXRoLCAnd2InLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBvcGVuKHNlbGYsIHVybCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIgogICAgUmV0dXJuczoKICAgICAgKmhkZnMzLmNvcmUuSERGaWxlKjogQW4gUHl0aG9uIEZpbGUtbGlrZSBvYmplY3QuCiAgICAiIiIKICAgIHBhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgcmV0dXJuIHNlbGYuX29wZW4ocGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgX29wZW4oc2VsZiwgcGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICByZXR1cm4gc2VsZi5fb3Blbl9oZGZzKHBhdGgsICdyYicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGNvcHkoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiCiAgICBXaWxsIG92ZXJ3cml0ZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gZGVzdGluYXRpb25fZmlsZV9uYW1lcy4KCiAgICBSYWlzZXMgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBlcnJvciBvY2N1cnJlZC4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogaXRlcmFibGUgb2YgVVJMcy4KICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogaXRlcmFibGUgb2YgVVJMcy4KICAgICIiIgogICAgaWYgbGVuKHNvdXJjZV9maWxlX25hbWVzKSAhPSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKAogICAgICAgICAgJ3NvdXJjZV9maWxlX25hbWVzIGFuZCBkZXN0aW5hdGlvbl9maWxlX25hbWVzIHNob3VsZCAnCiAgICAgICAgICAnYmUgZXF1YWwgaW4gbGVuZ3RoOiAlZCAhPSAlZCcgJSAoCiAgICAgICAgICAgICAgbGVuKHNvdXJjZV9maWxlX25hbWVzKSwgbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpKSkKCiAgICBkZWYgX2NvcHlfZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgd2l0aCBzZWxmLl9vcGVuKHNvdXJjZSkgYXMgZjE6CiAgICAgICAgd2l0aCBzZWxmLl9jcmVhdGUoZGVzdGluYXRpb24pIGFzIGYyOgogICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgYnVmID0gZjEucmVhZChfQ09QWV9CVUZGRVJfU0laRSkKICAgICAgICAgICAgaWYgbm90IGJ1ZjoKICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmMi53cml0ZShidWYpCgogICAgZGVmIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbik6CiAgICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiIiIgogICAgICBpZiBub3Qgc2VsZi5faGRmc19jbGllbnQuaXNkaXIoc291cmNlKToKICAgICAgICBfY29weV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgICAgcmV0dXJuCgogICAgICBmb3IgcGF0aCwgZGlycywgZmlsZXMgaW4gc2VsZi5faGRmc19jbGllbnQud2Fsayhzb3VyY2UpOgogICAgICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgIG5ld19kaXIgPSBzZWxmLl9qb2luKGRlc3RpbmF0aW9uLCBkaXIpCiAgICAgICAgICBpZiBub3Qgc2VsZi5fZXhpc3RzKG5ld19kaXIpOgogICAgICAgICAgICBzZWxmLl9ta2RpcnMobmV3X2RpcikKCiAgICAgICAgcmVsX3BhdGggPSBwb3NpeHBhdGgucmVscGF0aChwYXRoLCBzb3VyY2UpCiAgICAgICAgaWYgcmVsX3BhdGggPT0gJy4nOgogICAgICAgICAgcmVsX3BhdGggPSAnJwogICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgX2NvcHlfZmlsZShzZWxmLl9qb2luKHBhdGgsIGZpbGUpLAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9qb2luKGRlc3RpbmF0aW9uLCByZWxfcGF0aCwgZmlsZSkpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIF9jb3B5X3BhdGgocmVsX3NvdXJjZSwgcmVsX2Rlc3RpbmF0aW9uKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ0NvcHkgb3BlcmF0aW9uIGZhaWxlZCcsIGV4Y2VwdGlvbnMpCgogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIGlmIG5vdCBzZWxmLl9oZGZzX2NsaWVudC5tdihyZWxfc291cmNlLCByZWxfZGVzdGluYXRpb24pOgogICAgICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoCiAgICAgICAgICAgICAgJ2xpYmhkZnMgZXJyb3IgaW4gcmVuYW1pbmcgJXMgdG8gJXMnICUgKHNvdXJjZSwgZGVzdGluYXRpb24pKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ1JlbmFtZSBvcGVyYXRpb24gZmFpbGVkJywgZXhjZXB0aW9ucykKCiAgZGVmIGV4aXN0cyhzZWxmLCB1cmwpOgogICAgIiIiQ2hlY2tzIGV4aXN0ZW5jZSBvZiB1cmwgaW4gSERGUy4KCiAgICBBcmdzOgogICAgICB1cmw6IFN0cmluZyBpbiB0aGUgZm9ybSBoZGZzOi8vLi4uCgogICAgUmV0dXJuczoKICAgICAgVHJ1ZSBpZiB1cmwgZXhpc3RzIGFzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gSERGUy4KICAgICIiIgogICAgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICByZXR1cm4gc2VsZi5fZXhpc3RzKHBhdGgpCgogIGRlZiBfZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyBUcnVlIGlmIHBhdGggZXhpc3RzIGFzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gSERGUy4KCiAgICBBcmdzOgogICAgICBwYXRoOiBTdHJpbmcgaW4gdGhlIGZvcm0gLy4uLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5faGRmc19jbGllbnQuZXhpc3RzKHBhdGgpCgogIGRlZiBkZWxldGUoc2VsZiwgdXJscyk6CiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciB1cmwgaW4gdXJsczoKICAgICAgdHJ5OgogICAgICAgIHBhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgICAgIHNlbGYuX2hkZnNfY2xpZW50LnJtKHBhdGgsIHJlY3Vyc2l2ZT1UcnVlKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zW3VybF0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkRlbGV0ZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKfXKHAQAAKFgWAAAASGFkb29wRmlsZVN5c3RlbS5tYXRjaFgDAAAAZGVmS3VLkodYGwAAAEhhZG9vcEZpbGVTeXN0ZW0uX29wZW5faGRmc1gDAAAAZGVmS5NLnYdYFgAAAEhhZG9vcEZpbGVTeXN0ZW0uc3BsaXRYAwAAAGRlZktnS2uHWBkAAABIYWRvb3BGaWxlU3lzdGVtLl9faW5pdF9fWAMAAABkZWZLN0s+h1gXAAAASGFkb29wRmlsZVN5c3RlbS5zY2hlbWVYAwAAAGRlZks/S0KHWBUAAABIYWRvb3BGaWxlU3lzdGVtLmNvcHlYAwAAAGRlZku4S++HWBcAAABIYWRvb3BGaWxlU3lzdGVtLmRlbGV0ZVgDAAAAZGVmTRMBTR4Bh1gYAAAASGFkb29wRmlsZVN5c3RlbS5fbWtkaXJzWAMAAABkZWZLckt0h1gdAAAASGFkb29wRmlsZVN5c3RlbS5tYXRjaC5fbWF0Y2hYAwAAAGRlZkt/S4WHWBcAAABIYWRvb3BGaWxlU3lzdGVtLmV4aXN0c1gDAAAAZGVmS/9NCgGHWBcAAABIYWRvb3BGaWxlU3lzdGVtLnJlbmFtZVgDAAAAZGVmS/BL/odYFwAAAEhhZG9vcEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZLbEtxh1ggAAAASGFkb29wRmlsZVN5c3RlbS5jb3B5Ll9jb3B5X3BhdGhYAwAAAGRlZkvRS+OHWBsAAABIYWRvb3BGaWxlU3lzdGVtLl9wYXJzZV91cmxYAwAAAGRlZktDS1WHWBYAAABIYWRvb3BGaWxlU3lzdGVtLl9qb2luWAMAAABkZWZLZEtmh1gXAAAASGFkb29wRmlsZVN5c3RlbS5jcmVhdGVYAwAAAGRlZkueS6aHWBgAAABIYWRvb3BGaWxlU3lzdGVtLl9jcmVhdGVYAwAAAGRlZkunS6qHWBUAAABIYWRvb3BGaWxlU3lzdGVtLm9wZW5YAwAAAGRlZkurS7OHWBYAAABIYWRvb3BGaWxlU3lzdGVtLl9vcGVuWAMAAABkZWZLtEu3h1gVAAAASGFkb29wRmlsZVN5c3RlbS5qb2luWAMAAABkZWZLVktjh1ggAAAASGFkb29wRmlsZVN5c3RlbS5jb3B5Ll9jb3B5X2ZpbGVYAwAAAGRlZkvIS9CHWBgAAABIYWRvb3BGaWxlU3lzdGVtLl9leGlzdHNYAwAAAGRlZk0LAU0SAYdYEAAAAEhhZG9vcEZpbGVTeXN0ZW1YBQAAAGNsYXNzSy9NHgGHdX1yiAEAAChYFwAAAEhhZG9vcEZpbGVTeXN0ZW0uZGVsZXRlWB8AAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtcokBAABYFgAAAEhhZG9vcEZpbGVTeXN0ZW0ubWF0Y2hqiQEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5jcmVhdGVqiQEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5zY2hlbWVqiQEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5leGlzdHNqiQEAAFgWAAAASGFkb29wRmlsZVN5c3RlbS5zcGxpdGqJAQAAWBUAAABIYWRvb3BGaWxlU3lzdGVtLmpvaW5qiQEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5yZW5hbWVqiQEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5ta2RpcnNqiQEAAFgVAAAASGFkb29wRmlsZVN5c3RlbS5vcGVuaokBAABYEAAAAEhhZG9vcEZpbGVTeXN0ZW1qiQEAAFgVAAAASGFkb29wRmlsZVN5c3RlbS5jb3B5aokBAAB1aIpYHwAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW1yigEAAIWBcosBAAB9cowBAABidHKNAQAAVSFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm1yjgEAAChYg2cAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUFRyYW5zZm9ybSBhbmQgZGVzY2VuZGFudHMuCgpBIFBUcmFuc2Zvcm0gaXMgYW4gb2JqZWN0IGRlc2NyaWJpbmcgKG5vdCBleGVjdXRpbmcpIGEgY29tcHV0YXRpb24uIFRoZSBhY3R1YWwKZXhlY3V0aW9uIHNlbWFudGljcyBmb3IgYSB0cmFuc2Zvcm0gaXMgY2FwdHVyZWQgYnkgYSBydW5uZXIgb2JqZWN0LiBBIHRyYW5zZm9ybQpvYmplY3QgYWx3YXlzIGJlbG9uZ3MgdG8gYSBwaXBlbGluZSBvYmplY3QuCgpBIFBUcmFuc2Zvcm0gZGVyaXZlZCBjbGFzcyBuZWVkcyB0byBkZWZpbmUgdGhlIGV4cGFuZCgpIG1ldGhvZCB0aGF0IGRlc2NyaWJlcwpob3cgb25lIG9yIG1vcmUgUFZhbHVlcyBhcmUgY3JlYXRlZCBieSB0aGUgdHJhbnNmb3JtLgoKVGhlIG1vZHVsZSBkZWZpbmVzIGEgZmV3IHN0YW5kYXJkIHRyYW5zZm9ybXM6IEZsYXRNYXAgKHBhcmFsbGVsIGRvKSwKR3JvdXBCeUtleSAoZ3JvdXAgYnkga2V5KSwgZXRjLiBOb3RlIHRoYXQgdGhlIGV4cGFuZCgpIG1ldGhvZHMgZm9yIHRoZXNlCmNsYXNzZXMgY29udGFpbiBjb2RlIHRoYXQgd2lsbCBhZGQgbm9kZXMgdG8gdGhlIHByb2Nlc3NpbmcgZ3JhcGggYXNzb2NpYXRlZAp3aXRoIGEgcGlwZWxpbmUuCgpBcyBzdXBwb3J0IGZvciB0aGUgRmxhdE1hcCB0cmFuc2Zvcm0sIHRoZSBtb2R1bGUgYWxzbyBkZWZpbmVzIGEgRG9GbgpjbGFzcyBhbmQgd3JhcHBlciBjbGFzcyB0aGF0IGFsbG93cyBsYW1iZGEgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYXMKRmxhdE1hcCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvcHkKaW1wb3J0IGluc3BlY3QKaW1wb3J0IG9wZXJhdG9yCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB3cmFwcGVyc19wYjIKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGVycm9yCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgSGFzRGlzcGxheURhdGEKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBUeXBlQ2hlY2tFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBXaXRoVHlwZUhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldGNhbGxhcmdzX2ZvcmhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBpbnN0YW5jZV90b190eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0KZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcHJvdG9fdXRpbHMKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgdXJucwoKX19hbGxfXyA9IFsKICAgICdQVHJhbnNmb3JtJywKICAgICdwdHJhbnNmb3JtX2ZuJywKICAgICdsYWJlbF9mcm9tX2NhbGxhYmxlJywKICAgIF0KCgpjbGFzcyBfUFZhbHVlaXNoVHJhbnNmb3JtKG9iamVjdCk6CiAgIiIiVmlzaXRvciBmb3IgUFZhbHVlaXNoIG9iamVjdHMuCgogIEEgUFZhbHVlaXNoIGlzIGEgUFZhbHVlLCBvciBsaXN0LCB0dXBsZSwgZGljdCBvZiBQVmFsdWVzaXNoIG9iamVjdHMuCgogIFRoaXMgdmlzaXRzIGEgUFZhbHVlaXNoLCBjb250c3RydWN0aW5nIGEgKHBvc3NpYmx5IG11dGF0ZWQpIGNvcHkuCiAgIiIiCiAgZGVmIHZpc2l0X25lc3RlZChzZWxmLCBub2RlLCAqYXJncyk6CiAgICBpZiBpc2luc3RhbmNlKG5vZGUsICh0dXBsZSwgbGlzdCkpOgogICAgICBhcmdzID0gW3NlbGYudmlzaXQoeCwgKmFyZ3MpIGZvciB4IGluIG5vZGVdCiAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgdHVwbGUpIGFuZCBoYXNhdHRyKG5vZGUuX19jbGFzc19fLCAnX21ha2UnKToKICAgICAgICAjIG5hbWVkdHVwbGVzIHJlcXVpcmUgdW5wYWNrZWQgYXJndW1lbnRzIGluIHRoZWlyIGNvbnN0cnVjdG9yCiAgICAgICAgcmV0dXJuIG5vZGUuX19jbGFzc19fKCphcmdzKQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBub2RlLl9fY2xhc3NfXyhhcmdzKQogICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGRpY3QpOgogICAgICByZXR1cm4gbm9kZS5fX2NsYXNzX18oCiAgICAgICAgICB7a2V5OiBzZWxmLnZpc2l0KHZhbHVlLCAqYXJncykgZm9yIChrZXksIHZhbHVlKSBpbiBub2RlLml0ZW1zKCl9KQogICAgZWxzZToKICAgICAgcmV0dXJuIG5vZGUKCgpjbGFzcyBfU2V0SW5wdXRQVmFsdWVzKF9QVmFsdWVpc2hUcmFuc2Zvcm0pOgogIGRlZiB2aXNpdChzZWxmLCBub2RlLCByZXBsYWNlbWVudHMpOgogICAgaWYgaWQobm9kZSkgaW4gcmVwbGFjZW1lbnRzOgogICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2lkKG5vZGUpXQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUsIHJlcGxhY2VtZW50cykKCgpjbGFzcyBfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUocHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICBkZWYgX19pbml0X18oc2VsZiwgZGVmZXJyZWQsIHB2YWx1ZV9jYWNoZSk6CiAgICBzdXBlcihfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIE5vbmUsIE5vbmUsIGRlZmVycmVkLl90YWdzLCBkZWZlcnJlZC5fbWFpbl90YWcpCiAgICBzZWxmLl9kZWZlcnJlZCA9IGRlZmVycmVkCiAgICBzZWxmLl9wdmFsdWVfY2FjaGUgPSBwdmFsdWVfY2FjaGUKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHRhZyk6CiAgICAjIFNpbXBseSBhY2Nlc3NpbmcgdGhlIHZhbHVlIHNob3VsZCBub3QgdXNlIGl0IHVwLgogICAgcmV0dXJuIHNlbGYuX3B2YWx1ZV9jYWNoZS5nZXRfdW53aW5kb3dlZF9wdmFsdWUoCiAgICAgICAgc2VsZi5fZGVmZXJyZWRbdGFnXSwgZGVjcmVmPUZhbHNlKQoKCmNsYXNzIF9NYXRlcmlhbGl6ZVBWYWx1ZXMoX1BWYWx1ZWlzaFRyYW5zZm9ybSk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHB2YWx1ZV9jYWNoZSk6CiAgICBzZWxmLl9wdmFsdWVfY2FjaGUgPSBwdmFsdWVfY2FjaGUKCiAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCBwdmFsdWUuUFZhbHVlKToKICAgICAgIyBTaW1wbHkgYWNjZXNzaW5nIHRoZSB2YWx1ZSBzaG91bGQgbm90IHVzZSBpdCB1cC4KICAgICAgcmV0dXJuIHNlbGYuX3B2YWx1ZV9jYWNoZS5nZXRfdW53aW5kb3dlZF9wdmFsdWUobm9kZSwgZGVjcmVmPUZhbHNlKQogICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgIHJldHVybiBfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUobm9kZSwgc2VsZi5fcHZhbHVlX2NhY2hlKQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUpCgoKY2xhc3MgX0dldFBWYWx1ZXMoX1BWYWx1ZWlzaFRyYW5zZm9ybSk6CiAgZGVmIHZpc2l0KHNlbGYsIG5vZGUsIHB2YWx1ZXMpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSk6CiAgICAgIHB2YWx1ZXMuYXBwZW5kKG5vZGUpCiAgICBlbHNlOgogICAgICBzZWxmLnZpc2l0X25lc3RlZChub2RlLCBwdmFsdWVzKQoKCmRlZiBnZXRfbmVzdGVkX3B2YWx1ZXMocHZhbHVlaXNoKToKICBwdmFsdWVzID0gW10KICBfR2V0UFZhbHVlcygpLnZpc2l0KHB2YWx1ZWlzaCwgcHZhbHVlcykKICByZXR1cm4gcHZhbHVlcwoKCmNsYXNzIF9aaXBQVmFsdWVzKG9iamVjdCk6CiAgIiIiUGFpcnMgZWFjaCBQVmFsdWUgaW4gYSBwdmFsdWVpc2ggd2l0aCBhIHZhbHVlIGluIGEgcGFyYWxsZWwgb3V0IHNpYmxpbmcuCgogIFNpYmxpbmcgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmVzdGVkIHN0cnVjdHVyZSBhcyBwdmFsdWVpc2guICBMZWF2ZXMgaW4KICBzaWJsaW5nIGFyZSBleHBhbmRlZCBhY3Jvc3MgbmVzdGVkIHB2YWx1ZWlzaCBsaXN0cywgdHVwbGVzLCBhbmQgZGljdHMuCiAgRm9yIGV4YW1wbGUKCiAgICAgIFppcFBWYWx1ZXMoKS52aXNpdCh7J2EnOiBwYzEsICdiJzogKHBjMiwgcGMzKX0sCiAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAnQScsICdiJywgJ0InfSkKCiAgd2lsbCByZXR1cm4KCiAgICAgIFsoJ2EnLCBwYzEsICdBJyksICgnYicsIHBjMiwgJ0InKSwgKCdiJywgcGMzLCAnQicpXQogICIiIgoKICBkZWYgdmlzaXQoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycz1Ob25lLCBjb250ZXh0PU5vbmUpOgogICAgaWYgcGFpcnMgaXMgTm9uZToKICAgICAgcGFpcnMgPSBbXQogICAgICBzZWxmLnZpc2l0KHB2YWx1ZWlzaCwgc2libGluZywgcGFpcnMsIGNvbnRleHQpCiAgICAgIHJldHVybiBwYWlycwogICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgKHB2YWx1ZS5QVmFsdWUsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSkpOgogICAgICBwYWlycy5hcHBlbmQoKGNvbnRleHQsIHB2YWx1ZWlzaCwgc2libGluZykpCiAgICBlbGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCAobGlzdCwgdHVwbGUpKToKICAgICAgc2VsZi52aXNpdF9zZXF1ZW5jZShwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQogICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICAgIHNlbGYudmlzaXRfZGljdChwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQoKICBkZWYgdmlzaXRfc2VxdWVuY2Uoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCk6CiAgICBpZiBpc2luc3RhbmNlKHNpYmxpbmcsIChsaXN0LCB0dXBsZSkpOgogICAgICBmb3IgaXgsIChwLCBzKSBpbiBlbnVtZXJhdGUoemlwKAogICAgICAgICAgcHZhbHVlaXNoLCBsaXN0KHNpYmxpbmcpICsgW05vbmVdICogbGVuKHB2YWx1ZWlzaCkpKToKICAgICAgICBzZWxmLnZpc2l0KHAsIHMsIHBhaXJzLCAncG9zaXRpb24gJXMnICUgaXgpCiAgICBlbHNlOgogICAgICBmb3IgcCBpbiBwdmFsdWVpc2g6CiAgICAgICAgc2VsZi52aXNpdChwLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCkKCiAgZGVmIHZpc2l0X2RpY3Qoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCk6CiAgICBpZiBpc2luc3RhbmNlKHNpYmxpbmcsIGRpY3QpOgogICAgICBmb3Iga2V5LCBwIGluIHB2YWx1ZWlzaC5pdGVtcygpOgogICAgICAgIHNlbGYudmlzaXQocCwgc2libGluZy5nZXQoa2V5KSwgcGFpcnMsIGtleSkKICAgIGVsc2U6CiAgICAgIGZvciBwIGluIHB2YWx1ZWlzaC52YWx1ZXMoKToKICAgICAgICBzZWxmLnZpc2l0KHAsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQoKCmNsYXNzIFBUcmFuc2Zvcm0oV2l0aFR5cGVIaW50cywgSGFzRGlzcGxheURhdGEpOgogICIiIkEgdHJhbnNmb3JtIG9iamVjdCB1c2VkIHRvIG1vZGlmeSBvbmUgb3IgbW9yZSBQQ29sbGVjdGlvbnMuCgogIFN1YmNsYXNzZXMgbXVzdCBkZWZpbmUgYW4gZXhwYW5kKCkgbWV0aG9kIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIHRyYW5zZm9ybQogIGlzIGFwcGxpZWQgdG8gc29tZSBhcmd1bWVudHMuIFR5cGljYWwgdXNhZ2UgcGF0dGVybiB3aWxsIGJlOgoKICAgIGlucHV0IHwgQ3VzdG9tVHJhbnNmb3JtKC4uLikKCiAgVGhlIGV4cGFuZCgpIG1ldGhvZCBvZiB0aGUgQ3VzdG9tVHJhbnNmb3JtIG9iamVjdCBwYXNzZWQgaW4gd2lsbCBiZSBjYWxsZWQKICB3aXRoIGlucHV0IGFzIGFuIGFyZ3VtZW50LgogICIiIgogICMgQnkgZGVmYXVsdCwgdHJhbnNmb3JtcyBkb24ndCBoYXZlIGFueSBzaWRlIGlucHV0cy4KICBzaWRlX2lucHV0cyA9ICgpCgogICMgVXNlZCBmb3IgbnVsbGFyeSB0cmFuc2Zvcm1zLgogIHBpcGVsaW5lID0gTm9uZQoKICAjIERlZmF1bHQgaXMgdW5zZXQuCiAgX3VzZXJfbGFiZWwgPSBOb25lCgogIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbD1Ob25lKToKICAgIHN1cGVyKFBUcmFuc2Zvcm0sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYubGFiZWwgPSBsYWJlbAoKICBAcHJvcGVydHkKICBkZWYgbGFiZWwoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fdXNlcl9sYWJlbCBvciBzZWxmLmRlZmF1bHRfbGFiZWwoKQoKICBAbGFiZWwuc2V0dGVyCiAgZGVmIGxhYmVsKHNlbGYsIHZhbHVlKToKICAgIHNlbGYuX3VzZXJfbGFiZWwgPSB2YWx1ZQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwoKICBkZWYgd2l0aF9pbnB1dF90eXBlcyhzZWxmLCBpbnB1dF90eXBlX2hpbnQpOgogICAgIiIiQW5ub3RhdGVzIHRoZSBpbnB1dCB0eXBlIG9mIGEgOmNsYXNzOmBQVHJhbnNmb3JtYCB3aXRoIGEgdHlwZS1oaW50LgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X3R5cGVfaGludCAodHlwZSk6IEFuIGluc3RhbmNlIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20KICAgICAgICBjbGFzcywgb3IgYW4gaW5zdGFuY2Ugb2YgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiAqKmlucHV0X3R5cGVfaGludCoqIGlzIG5vdCBhIHZhbGlkIHR5cGUtaGludC4KICAgICAgICBTZWUKICAgICAgICA6b2JqOmBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKClgCiAgICAgICAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KCiAgICBSZXR1cm5zOgogICAgICBQVHJhbnNmb3JtOiBBIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyCiAgICAgIDpjbGFzczpgUFRyYW5zZm9ybWAgb2JqZWN0LiBUaGlzIGFsbG93cyBjaGFpbmluZyB0eXBlLWhpbnRpbmcgcmVsYXRlZAogICAgICBtZXRob2RzLgogICAgIiIiCiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbShpbnB1dF90eXBlX2hpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVHlwZSBoaW50cyBmb3IgYSBQVHJhbnNmb3JtJykKICAgIHJldHVybiBzdXBlcihQVHJhbnNmb3JtLCBzZWxmKS53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGVfaGludCkKCiAgZGVmIHdpdGhfb3V0cHV0X3R5cGVzKHNlbGYsIHR5cGVfaGludCk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIG91dHB1dCB0eXBlIG9mIGEgOmNsYXNzOmBQVHJhbnNmb3JtYCB3aXRoIGEgdHlwZS1oaW50LgoKICAgIEFyZ3M6CiAgICAgIHR5cGVfaGludCAodHlwZSk6IEFuIGluc3RhbmNlIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsCiAgICAgICAgb3IgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogSWYgKip0eXBlX2hpbnQqKiBpcyBub3QgYSB2YWxpZCB0eXBlLWhpbnQuIFNlZQogICAgICAgIDpvYmo6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKClgCiAgICAgICAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KCiAgICBSZXR1cm5zOgogICAgICBQVHJhbnNmb3JtOiBBIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyCiAgICAgIDpjbGFzczpgUFRyYW5zZm9ybWAgb2JqZWN0LiBUaGlzIGFsbG93cyBjaGFpbmluZyB0eXBlLWhpbnRpbmcgcmVsYXRlZAogICAgICBtZXRob2RzLgogICAgIiIiCiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSh0eXBlX2hpbnQsICdUeXBlIGhpbnRzIGZvciBhIFBUcmFuc2Zvcm0nKQogICAgcmV0dXJuIHN1cGVyKFBUcmFuc2Zvcm0sIHNlbGYpLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVfaGludCkKCiAgZGVmIHR5cGVfY2hlY2tfaW5wdXRzKHNlbGYsIHB2YWx1ZWlzaCk6CiAgICBzZWxmLnR5cGVfY2hlY2tfaW5wdXRzX29yX291dHB1dHMocHZhbHVlaXNoLCAnaW5wdXQnKQoKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgdW51c2VkX2lucHV0X3R5cGUpOgogICAgcmV0dXJuIHNlbGYuZ2V0X3R5cGVfaGludHMoKS5zaW1wbGVfb3V0cHV0X3R5cGUoc2VsZi5sYWJlbCkgb3IgdHlwZWhpbnRzLkFueQoKICBkZWYgdHlwZV9jaGVja19vdXRwdXRzKHNlbGYsIHB2YWx1ZWlzaCk6CiAgICBzZWxmLnR5cGVfY2hlY2tfaW5wdXRzX29yX291dHB1dHMocHZhbHVlaXNoLCAnb3V0cHV0JykKCiAgZGVmIHR5cGVfY2hlY2tfaW5wdXRzX29yX291dHB1dHMoc2VsZiwgcHZhbHVlaXNoLCBpbnB1dF9vcl9vdXRwdXQpOgogICAgaGludHMgPSBnZXRhdHRyKHNlbGYuZ2V0X3R5cGVfaGludHMoKSwgaW5wdXRfb3Jfb3V0cHV0ICsgJ190eXBlcycpCiAgICBpZiBub3QgaGludHM6CiAgICAgIHJldHVybgogICAgYXJnX2hpbnRzLCBrd2FyZ19oaW50cyA9IGhpbnRzCiAgICBpZiBhcmdfaGludHMgYW5kIGt3YXJnX2hpbnRzOgogICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICdQVHJhbnNmb3JtIGNhbm5vdCBoYXZlIGJvdGggcG9zaXRpb25hbCBhbmQga2V5d29yZCB0eXBlIGhpbnRzICcKICAgICAgICAgICd3aXRob3V0IG92ZXJyaWRpbmcgJXMuX3R5cGVfY2hlY2tfJXMoKScgJSAoCiAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18sIGlucHV0X29yX291dHB1dCkpCiAgICByb290X2hpbnQgPSAoCiAgICAgICAgYXJnX2hpbnRzWzBdIGlmIGxlbihhcmdfaGludHMpID09IDEgZWxzZSBhcmdfaGludHMgb3Iga3dhcmdfaGludHMpCiAgICBmb3IgY29udGV4dCwgcHZhbHVlXywgaGludCBpbiBfWmlwUFZhbHVlcygpLnZpc2l0KHB2YWx1ZWlzaCwgcm9vdF9oaW50KToKICAgICAgaWYgcHZhbHVlXy5lbGVtZW50X3R5cGUgaXMgTm9uZToKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBJdCdzIGEgYnVnIHRoYXQgd2UgZXZlciBnZXQgaGVyZS4gKHR5cGVjaGVjaykKICAgICAgICBjb250aW51ZQogICAgICBpZiBoaW50IGFuZCBub3QgdHlwZWhpbnRzLmlzX2NvbnNpc3RlbnRfd2l0aChwdmFsdWVfLmVsZW1lbnRfdHlwZSwgaGludCk6CiAgICAgICAgYXRfY29udGV4dCA9ICcgJXMgJXMnICUgKGlucHV0X29yX291dHB1dCwgY29udGV4dCkgaWYgY29udGV4dCBlbHNlICcnCiAgICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoCiAgICAgICAgICAgICclcyB0eXBlIGhpbnQgdmlvbGF0aW9uIGF0ICVzJXM6IGV4cGVjdGVkICVzLCBnb3QgJXMnICUgKAogICAgICAgICAgICAgICAgaW5wdXRfb3Jfb3V0cHV0LnRpdGxlKCksIHNlbGYubGFiZWwsIGF0X2NvbnRleHQsIGhpbnQsCiAgICAgICAgICAgICAgICBwdmFsdWVfLmVsZW1lbnRfdHlwZSkpCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIGlucHV0X3R5cGU9Tm9uZSwgaW5wdXRfY29kZXI9Tm9uZSk6CiAgICAiIiJSZXR1cm5zIHRoZSBvdXRwdXQgY29kZXIgdG8gdXNlIGZvciBvdXRwdXQgb2YgdGhpcyB0cmFuc2Zvcm0uCgogICAgTm90ZTogdGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZTsgcGxlYXNlIGRvIG5vdCByZWx5CiAgICBvbiBiZWhhdmlvciBpbmR1Y2VkIGJ5IHRoaXMgbWV0aG9kLgoKICAgIFRoZSBDb2RlciByZXR1cm5lZCBoZXJlIHNob3VsZCBub3QgYmUgd3JhcHBlZCBpbiBhIFdpbmRvd2VkVmFsdWVDb2RlcgogICAgd3JhcHBlci4KCiAgICBBcmdzOgogICAgICBpbnB1dF90eXBlOiBBbiBpbnN0YW5jZSBvZiBhbiBhbGxvd2VkIGJ1aWx0LWluIHR5cGUsIGEgY3VzdG9tIGNsYXNzLCBvciBhCiAgICAgICAgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50IGZvciB0aGUgaW5wdXQgdHlwZSwgb3IgTm9uZSBpZiBub3QgYXZhaWxhYmxlLgogICAgICBpbnB1dF9jb2RlcjogQ29kZXIgb2JqZWN0IGZvciBlbmNvZGluZyBpbnB1dCB0byB0aGlzIFBUcmFuc2Zvcm0sIG9yIE5vbmUKICAgICAgICBpZiBub3QgYXZhaWxhYmxlLgoKICAgIFJldHVybnM6CiAgICAgIENvZGVyIG9iamVjdCBmb3IgZW5jb2Rpbmcgb3V0cHV0IG9mIHRoaXMgUFRyYW5zZm9ybSBvciBOb25lIGlmIHVua25vd24uCiAgICAiIiIKICAgICMgVE9ETyhjY3kpOiBmdXJ0aGVyIHJlZmluZSB0aGlzIEFQSS4KICAgIHJldHVybiBOb25lCgogIGRlZiBfY2xvbmUoc2VsZiwgbmV3X2xhYmVsKToKICAgICIiIkNsb25lcyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gaW5zdGFuY2UgdW5kZXIgYSBuZXcgbGFiZWwuIiIiCiAgICB0cmFuc2Zvcm0gPSBjb3B5LmNvcHkoc2VsZikKICAgIHRyYW5zZm9ybS5sYWJlbCA9IG5ld19sYWJlbAogICAgcmV0dXJuIHRyYW5zZm9ybQoKICBkZWYgZXhwYW5kKHNlbGYsIGlucHV0X29yX2lucHV0cyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXM+JyAlIHNlbGYuX3N0cl9pbnRlcm5hbCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzIGF0ICVzPicgJSAoc2VsZi5fc3RyX2ludGVybmFsKCksIGhleChpZChzZWxmKSkpCgogIGRlZiBfc3RyX2ludGVybmFsKHNlbGYpOgogICAgcmV0dXJuICclcyhQVHJhbnNmb3JtKSVzJXMlcycgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgJyBsYWJlbD1bJXNdJyAlIHNlbGYubGFiZWwgaWYgKGhhc2F0dHIoc2VsZiwgJ2xhYmVsJykgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWwpIGVsc2UgJycsCiAgICAgICAgJyBpbnB1dHM9JXMnICUgc3RyKHNlbGYuaW5wdXRzKSBpZiAoaGFzYXR0cihzZWxmLCAnaW5wdXRzJykgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dHMpIGVsc2UgJycsCiAgICAgICAgJyBzaWRlX2lucHV0cz0lcycgJSBzdHIoc2VsZi5zaWRlX2lucHV0cykgaWYgc2VsZi5zaWRlX2lucHV0cyBlbHNlICcnKQoKICBkZWYgX2NoZWNrX3Bjb2xsZWN0aW9uKHNlbGYsIHBjb2xsKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHBjb2xsLCBwdmFsdWUuUENvbGxlY3Rpb24pOgogICAgICByYWlzZSBlcnJvci5UcmFuc2Zvcm1FcnJvcignRXhwZWN0aW5nIGEgUENvbGxlY3Rpb24gYXJndW1lbnQuJykKICAgIGlmIG5vdCBwY29sbC5waXBlbGluZToKICAgICAgcmFpc2UgZXJyb3IuVHJhbnNmb3JtRXJyb3IoJ1BDb2xsZWN0aW9uIG5vdCBwYXJ0IG9mIGEgcGlwZWxpbmUuJykKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgaW5wdXRzKToKICAgICIiIlJldHVybnMgdGhlIHdpbmRvdyBmdW5jdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdHJhbnNmb3JtJ3Mgb3V0cHV0LgoKICAgIEJ5IGRlZmF1bHQgbW9zdCB0cmFuc2Zvcm1zIGp1c3QgcmV0dXJuIHRoZSB3aW5kb3dpbmcgZnVuY3Rpb24gYXNzb2NpYXRlZAogICAgd2l0aCB0aGUgaW5wdXQgUENvbGxlY3Rpb24gKG9yIHRoZSBmaXJzdCBpbnB1dCBpZiBzZXZlcmFsKS4KICAgICIiIgogICAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0IGFsbCBpbnB1dCBXaW5kb3dGbnMgY29tcGF0aWJsZS4KICAgIHJldHVybiBpbnB1dHNbMF0ud2luZG93aW5nCgogIGRlZiBfX3Jyc2hpZnRfXyhzZWxmLCBsYWJlbCk6CiAgICByZXR1cm4gX05hbWVkUFRyYW5zZm9ybShzZWxmLCBsYWJlbCkKCiAgZGVmIF9fb3JfXyhzZWxmLCByaWdodCk6CiAgICAiIiJVc2VkIHRvIGNvbXBvc2UgUFRyYW5zZm9ybXMsIGUuZy4sIHB0cmFuc2Zvcm0xIHwgcHRyYW5zZm9ybTIuIiIiCiAgICBpZiBpc2luc3RhbmNlKHJpZ2h0LCBQVHJhbnNmb3JtKToKICAgICAgcmV0dXJuIF9DaGFpbmVkUFRyYW5zZm9ybShzZWxmLCByaWdodCkKICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICBkZWYgX19yb3JfXyhzZWxmLCBsZWZ0LCBsYWJlbD1Ob25lKToKICAgICIiIlVzZWQgdG8gYXBwbHkgdGhpcyBQVHJhbnNmb3JtIHRvIG5vbi1QVmFsdWVzLCBlLmcuLCBhIHR1cGxlLiIiIgogICAgcHZhbHVlaXNoLCBwdmFsdWVzID0gc2VsZi5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzKGxlZnQpCiAgICBwaXBlbGluZXMgPSBbdi5waXBlbGluZSBmb3IgdiBpbiBwdmFsdWVzIGlmIGlzaW5zdGFuY2UodiwgcHZhbHVlLlBWYWx1ZSldCiAgICBpZiBwdmFsdWVzIGFuZCBub3QgcGlwZWxpbmVzOgogICAgICBkZWZlcnJlZCA9IEZhbHNlCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHBpcGVsaW5lCiAgICAgIGZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKICAgICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBwID0gcGlwZWxpbmUuUGlwZWxpbmUoCiAgICAgICAgICAnRGlyZWN0UnVubmVyJywgUGlwZWxpbmVPcHRpb25zKHN5cy5hcmd2KSkKICAgIGVsc2U6CiAgICAgIGlmIG5vdCBwaXBlbGluZXM6CiAgICAgICAgaWYgc2VsZi5waXBlbGluZSBpcyBub3QgTm9uZToKICAgICAgICAgIHAgPSBzZWxmLnBpcGVsaW5lCiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyIlcyIgcmVxdWlyZXMgYSBwaXBlbGluZSB0byBiZSBzcGVjaWZpZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgdGhlcmUgYXJlIG5vIGRlZmVycmVkIGlucHV0cy4nJSBzZWxmLmxhYmVsKQogICAgICBlbHNlOgogICAgICAgIHAgPSBzZWxmLnBpcGVsaW5lIG9yIHBpcGVsaW5lc1swXQogICAgICAgIGZvciBwcCBpbiBwaXBlbGluZXM6CiAgICAgICAgICBpZiBwICE9IHBwOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgJ01peGluZyB2YWx1ZSBmcm9tIGRpZmZlcmVudCBwaXBlbGluZXMgbm90IGFsbG93ZWQuJykKICAgICAgZGVmZXJyZWQgPSBub3QgZ2V0YXR0cihwLnJ1bm5lciwgJ2lzX2VhZ2VyJywgRmFsc2UpCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENyZWF0ZQogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgcmVwbGFjZW1lbnRzID0ge2lkKHYpOiBwIHwgJ0NyZWF0ZVBJbnB1dCVzJyAlIGl4ID4+IENyZWF0ZSh2KQogICAgICAgICAgICAgICAgICAgIGZvciBpeCwgdiBpbiBlbnVtZXJhdGUocHZhbHVlcykKICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBwdmFsdWUuUFZhbHVlKSBhbmQgdiBpcyBub3QgTm9uZX0KICAgIHB2YWx1ZWlzaCA9IF9TZXRJbnB1dFBWYWx1ZXMoKS52aXNpdChwdmFsdWVpc2gsIHJlcGxhY2VtZW50cykKICAgIHNlbGYucGlwZWxpbmUgPSBwCiAgICByZXN1bHQgPSBwLmFwcGx5KHNlbGYsIHB2YWx1ZWlzaCwgbGFiZWwpCiAgICBpZiBkZWZlcnJlZDoKICAgICAgcmV0dXJuIHJlc3VsdAogICAgIyBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHJ1bm5lcnMgaW50ZXJuYWwgY2FjaGUsIG90aGVyd2lzZSBydW5uZXIgbWF5CiAgICAjIGNsZWFuIGl0IGFmdGVyIHJ1bi4KICAgIGNhY2hlID0gcC5ydW5uZXIuY2FjaGUKICAgIHAucnVuKCkud2FpdF91bnRpbF9maW5pc2goKQogICAgcmV0dXJuIF9NYXRlcmlhbGl6ZVBWYWx1ZXMoY2FjaGUpLnZpc2l0KHJlc3VsdCkKCiAgZGVmIF9leHRyYWN0X2lucHV0X3B2YWx1ZXMoc2VsZiwgcHZhbHVlaXNoKToKICAgICIiIkV4dHJhY3QgYWxsIHRoZSBwdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgaW5wdXQgcHZhbHVlaXNoLgoKICAgIFJldHVybnMgcHZhbHVlaXNoIGFzIHdlbGwgYXMgdGhlIGZsYXQgaW5wdXRzIGxpc3QgYXMgdGhlIGlucHV0IG1heSBoYXZlIHRvCiAgICBiZSBjb3BpZWQgYXMgaW5zcGVjdGlvbiBtYXkgYmUgZGVzdHJ1Y3RpdmUuCgogICAgQnkgZGVmYXVsdCwgcmVjdXJzaXZlbHkgZXh0cmFjdHMgdHVwbGUgY29tcG9uZW50cyBhbmQgZGljdCB2YWx1ZXMuCgogICAgR2VuZXJhbGx5IG9ubHkgbmVlZHMgdG8gYmUgb3ZlcnJpZGVuIGZvciBtdWx0aS1pbnB1dCBQVHJhbnNmb3Jtcy4KICAgICIiIgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwaXBlbGluZQogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIKICAgIGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCBwaXBlbGluZS5QaXBlbGluZSk6CiAgICAgIHB2YWx1ZWlzaCA9IHB2YWx1ZS5QQmVnaW4ocHZhbHVlaXNoKQoKICAgIGRlZiBfZGljdF90dXBsZV9sZWF2ZXMocHZhbHVlaXNoKToKICAgICAgaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIHR1cGxlKToKICAgICAgICBmb3IgYSBpbiBwdmFsdWVpc2g6CiAgICAgICAgICBmb3IgcCBpbiBfZGljdF90dXBsZV9sZWF2ZXMoYSk6CiAgICAgICAgICAgIHlpZWxkIHAKICAgICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICAgICAgZm9yIGEgaW4gcHZhbHVlaXNoLnZhbHVlcygpOgogICAgICAgICAgZm9yIHAgaW4gX2RpY3RfdHVwbGVfbGVhdmVzKGEpOgogICAgICAgICAgICB5aWVsZCBwCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgcHZhbHVlaXNoCiAgICByZXR1cm4gcHZhbHVlaXNoLCB0dXBsZShfZGljdF90dXBsZV9sZWF2ZXMocHZhbHVlaXNoKSkKCiAgX2tub3duX3VybnMgPSB7fQoKICBAY2xhc3NtZXRob2QKICBkZWYgcmVnaXN0ZXJfdXJuKGNscywgdXJuLCBwYXJhbWV0ZXJfdHlwZSwgY29uc3RydWN0b3I9Tm9uZSk6CiAgICBkZWYgcmVnaXN0ZXIoY29uc3RydWN0b3IpOgogICAgICBjbHMuX2tub3duX3VybnNbdXJuXSA9IHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3RvcgogICAgICByZXR1cm4gc3RhdGljbWV0aG9kKGNvbnN0cnVjdG9yKQogICAgaWYgY29uc3RydWN0b3I6CiAgICAgICMgVXNlZCBhcyBhIHN0YXRlbWVudC4KICAgICAgcmVnaXN0ZXIoY29uc3RydWN0b3IpCiAgICBlbHNlOgogICAgICAjIFVzZWQgYXMgYSBkZWNvcmF0b3IuCiAgICAgIHJldHVybiByZWdpc3RlcgoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgICB1cm4sIHR5cGVkX3BhcmFtID0gc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KQogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgIHVybj11cm4sCiAgICAgICAgcGF5bG9hZD10eXBlZF9wYXJhbS5TZXJpYWxpemVUb1N0cmluZygpCiAgICAgICAgaWYgdHlwZWRfcGFyYW0gaXMgbm90IE5vbmUgZWxzZSBOb25lKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKGNscywgcHJvdG8sIGNvbnRleHQpOgogICAgaWYgcHJvdG8gaXMgTm9uZSBvciBub3QgcHJvdG8udXJuOgogICAgICByZXR1cm4gTm9uZQogICAgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yID0gY2xzLl9rbm93bl91cm5zW3Byb3RvLnVybl0KICAgIHJldHVybiBjb25zdHJ1Y3RvcigKICAgICAgICBwcm90b191dGlscy5wYXJzZV9CeXRlcyhwcm90by5wYXlsb2FkLCBwYXJhbWV0ZXJfdHlwZSksCiAgICAgICAgY29udGV4dCkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICh1cm5zLlBJQ0tMRURfVFJBTlNGT1JNLAogICAgICAgICAgICB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSh2YWx1ZT1waWNrbGVyLmR1bXBzKHNlbGYpKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNwZWNfcGFyYW1ldGVyLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gcGlja2xlci5sb2FkcyhzcGVjX3BhcmFtZXRlci52YWx1ZSkKCgpQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigKICAgIHVybnMuUElDS0xFRF9UUkFOU0ZPUk0sCiAgICB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSwKICAgIFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKCgpjbGFzcyBfQ2hhaW5lZFBUcmFuc2Zvcm0oUFRyYW5zZm9ybSk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCAqcGFydHMpOgogICAgc3VwZXIoX0NoYWluZWRQVHJhbnNmb3JtLCBzZWxmKS5fX2luaXRfXyhsYWJlbD1zZWxmLl9jaGFpbl9sYWJlbChwYXJ0cykpCiAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCgogIGRlZiBfY2hhaW5fbGFiZWwoc2VsZiwgcGFydHMpOgogICAgcmV0dXJuICd8Jy5qb2luKHAubGFiZWwgZm9yIHAgaW4gcGFydHMpCgogIGRlZiBfX29yX18oc2VsZiwgcmlnaHQpOgogICAgaWYgaXNpbnN0YW5jZShyaWdodCwgUFRyYW5zZm9ybSk6CiAgICAgICMgQ3JlYXRlIGEgZmxhdCBsaXN0IHJhdGhlciB0aGFuIGEgbmVzdGVkIHRyZWUgb2YgY29tcG9zaXRlCiAgICAgICMgdHJhbnNmb3JtcyBmb3IgYmV0dGVyIG1vbml0b3JpbmcsIGV0Yy4KICAgICAgcmV0dXJuIF9DaGFpbmVkUFRyYW5zZm9ybSgqKHNlbGYuX3BhcnRzICsgKHJpZ2h0LCkpKQogICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbCk6CiAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLm9yXywgc2VsZi5fcGFydHMsIHB2YWwpCgoKY2xhc3MgUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzKFBUcmFuc2Zvcm0pOgogICIiIkEgc3VwZXJjbGFzcyBmb3IgYW55IDpjbGFzczpgUFRyYW5zZm9ybWAgKGUuZy4KICA6ZnVuYzpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0TWFwYCBvcgogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm5gKQogIGludm9raW5nIHVzZXIgY29kZS4KCiAgOmNsYXNzOmBQVHJhbnNmb3JtYCBzIGxpa2UgOmZ1bmM6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdE1hcGAKICBpbnZva2UgdXNlci1zdXBwbGllZCBjb2RlIGluIHNvbWUga2luZCBvZiBwYWNrYWdlIChlLmcuIGEKICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbmApIGFuZCBvcHRpb25hbGx5IHByb3ZpZGUgYXJndW1lbnRzCiAgYW5kIHNpZGUgaW5wdXRzIHRvIHRoYXQgY29kZS4gVGhpcyBpbnRlcm5hbC11c2Utb25seSBjbGFzcyBjb250YWlucyBjb21tb24KICBmdW5jdGlvbmFsaXR5IGZvciA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHMgdGhhdCBmaXQgdGhpcyBtb2RlbC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgaXNpbnN0YW5jZShmbiwgdHlwZSkgYW5kIGlzc3ViY2xhc3MoZm4sIFdpdGhUeXBlSGludHMpOgogICAgICAjIERvbid0IHRyZWF0IEZuIGNsYXNzIG9iamVjdHMgYXMgY2FsbGFibGVzLgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVc2UgJXMoKSBub3QgJXMuJyAlIChmbi5fX25hbWVfXywgZm4uX19uYW1lX18pKQogICAgc2VsZi5mbiA9IHNlbGYubWFrZV9mbihmbikKICAgICMgTm93IHRoYXQgd2UgZmlndXJlIG91dCB0aGUgbGFiZWwsIGluaXRpYWxpemUgdGhlIHN1cGVyLWNsYXNzLgogICAgc3VwZXIoUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLCBzZWxmKS5fX2luaXRfXygpCgogICAgaWYgKGFueShbaXNpbnN0YW5jZSh2LCBwdmFsdWUuUENvbGxlY3Rpb24pIGZvciB2IGluIGFyZ3NdKSBvcgogICAgICAgIGFueShbaXNpbnN0YW5jZSh2LCBwdmFsdWUuUENvbGxlY3Rpb24pIGZvciB2IGluIGt3YXJncy5pdGVydmFsdWVzKCldKSk6CiAgICAgIHJhaXNlIGVycm9yLlNpZGVJbnB1dEVycm9yKAogICAgICAgICAgJ1BDb2xsZWN0aW9uIHVzZWQgZGlyZWN0bHkgYXMgc2lkZSBpbnB1dCBhcmd1bWVudC4gU3BlY2lmeSAnCiAgICAgICAgICAnQXNJdGVyKHBjb2xsZWN0aW9uKSBvciBBc1NpbmdsZXRvbihwY29sbGVjdGlvbikgdG8gaW5kaWNhdGUgaG93IHRoZSAnCiAgICAgICAgICAnUENvbGxlY3Rpb24gaXMgdG8gYmUgdXNlZC4nKQogICAgc2VsZi5hcmdzLCBzZWxmLmt3YXJncywgc2VsZi5zaWRlX2lucHV0cyA9IHV0aWwucmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzKAogICAgICAgIGFyZ3MsIGt3YXJncywgcHZhbHVlLkFzU2lkZUlucHV0KQogICAgc2VsZi5yYXdfc2lkZV9pbnB1dHMgPSBhcmdzLCBrd2FyZ3MKCiAgICAjIFByZXZlbnQgbmFtZSBjb2xsaXNpb25zIHdpdGggZm5zIG9mIHRoZSBmb3JtICc8ZnVuY3Rpb24gPGxhbWJkYT4gYXQgLi4uPicKICAgIHNlbGYuX2NhY2hlZF9mbiA9IHNlbGYuZm4KCiAgICAjIEVuc3VyZSBmbiBhbmQgc2lkZSBpbnB1dHMgYXJlIHBpY2tsYWJsZSBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4KICAgIHNlbGYuZm4gPSBwaWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHMoc2VsZi5mbikpCiAgICBzZWxmLmFyZ3MgPSBwaWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHMoc2VsZi5hcmdzKSkKICAgIHNlbGYua3dhcmdzID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYua3dhcmdzKSkKCiAgICAjIEZvciB0eXBlIGhpbnRzLCBiZWNhdXNlIGxvYWRzKGR1bXBzKGNsYXNzKSkgIT0gY2xhc3MuCiAgICBzZWxmLmZuID0gc2VsZi5fY2FjaGVkX2ZuCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKAogICAgICBzZWxmLCBpbnB1dF90eXBlX2hpbnQsICpzaWRlX2lucHV0c19hcmdfaGludHMsICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50cyk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIHR5cGVzIG9mIG1haW4gaW5wdXRzIGFuZCBzaWRlIGlucHV0cyBmb3IgdGhlIFBUcmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgaW5wdXRfdHlwZV9oaW50OiBBbiBpbnN0YW5jZSBvZiBhbiBhbGxvd2VkIGJ1aWx0LWluIHR5cGUsIGEgY3VzdG9tIGNsYXNzLAogICAgICAgIG9yIGFuIGluc3RhbmNlIG9mIGEgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50LgogICAgICAqc2lkZV9pbnB1dHNfYXJnX2hpbnRzOiBBIHZhcmlhYmxlIGxlbmd0aCBhcmd1bWVudCBjb21wb3NlZCBvZgogICAgICAgIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsIG9yIGEKICAgICAgICB0eXBlaGludHMuVHlwZUNvbnN0cmFpbnQuCiAgICAgICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50czogQSBkaWN0aW9uYXJ5IGFyZ3VtZW50IGNvbXBvc2VkIG9mCiAgICAgICAgb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbSBjbGFzcywgb3IgYQogICAgICAgIHR5cGVoaW50cy5UeXBlQ29uc3RyYWludC4KCiAgICBFeGFtcGxlIG9mIGFubm90YXRpbmcgdGhlIHR5cGVzIG9mIHNpZGUtaW5wdXRzOjoKCiAgICAgIEZsYXRNYXAoKS53aXRoX2lucHV0X3R5cGVzKGludCwgaW50LCBib29sKQoKICAgIFJhaXNlczoKICAgICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5UeXBlRXJyb3JgOiBJZiAqKnR5cGVfaGludCoqIGlzIG5vdCBhIHZhbGlkIHR5cGUtaGludC4KICAgICAgICBTZWUKICAgICAgICA6ZnVuYzpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW1gCiAgICAgICAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KCiAgICBSZXR1cm5zOgogICAgICA6Y2xhc3M6YFBUcmFuc2Zvcm1gOiBBIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyCiAgICAgIDpjbGFzczpgUFRyYW5zZm9ybWAgb2JqZWN0LiBUaGlzIGFsbG93cyBjaGFpbmluZyB0eXBlLWhpbnRpbmcgcmVsYXRlZAogICAgICBtZXRob2RzLgogICAgIiIiCiAgICBzdXBlcihQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMsIHNlbGYpLndpdGhfaW5wdXRfdHlwZXMoaW5wdXRfdHlwZV9oaW50KQoKICAgIGZvciBzaSBpbiBzaWRlX2lucHV0c19hcmdfaGludHM6CiAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHNpLCAnVHlwZSBoaW50cyBmb3IgYSBQVHJhbnNmb3JtJykKICAgIGZvciBzaSBpbiBzaWRlX2lucHV0X2t3YXJnX2hpbnRzLnZhbHVlcygpOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbShzaSwgJ1R5cGUgaGludHMgZm9yIGEgUFRyYW5zZm9ybScpCgogICAgc2VsZi5zaWRlX2lucHV0c190eXBlcyA9IHNpZGVfaW5wdXRzX2FyZ19oaW50cwogICAgcmV0dXJuIFdpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlcygKICAgICAgICBzZWxmLCBpbnB1dF90eXBlX2hpbnQsICpzaWRlX2lucHV0c19hcmdfaGludHMsICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50cykKCiAgZGVmIHR5cGVfY2hlY2tfaW5wdXRzKHNlbGYsIHB2YWx1ZWlzaCk6CiAgICB0eXBlX2hpbnRzID0gc2VsZi5nZXRfdHlwZV9oaW50cygpLmlucHV0X3R5cGVzCiAgICBpZiB0eXBlX2hpbnRzOgogICAgICBhcmdzLCBrd2FyZ3MgPSBzZWxmLnJhd19zaWRlX2lucHV0cwoKICAgICAgZGVmIGVsZW1lbnRfdHlwZShzaWRlX2lucHV0KToKICAgICAgICBpZiBpc2luc3RhbmNlKHNpZGVfaW5wdXQsIHB2YWx1ZS5Bc1NpZGVJbnB1dCk6CiAgICAgICAgICByZXR1cm4gc2lkZV9pbnB1dC5lbGVtZW50X3R5cGUKICAgICAgICByZXR1cm4gaW5zdGFuY2VfdG9fdHlwZShzaWRlX2lucHV0KQoKICAgICAgYXJnX3R5cGVzID0gW3B2YWx1ZWlzaC5lbGVtZW50X3R5cGVdICsgW2VsZW1lbnRfdHlwZSh2KSBmb3IgdiBpbiBhcmdzXQogICAgICBrd2FyZ3NfdHlwZXMgPSB7azogZWxlbWVudF90eXBlKHYpIGZvciAoaywgdikgaW4ga3dhcmdzLml0ZW1zKCl9CiAgICAgIGFyZ3NwZWNfZm4gPSBzZWxmLl9wcm9jZXNzX2FyZ3NwZWNfZm4oKQogICAgICBiaW5kaW5ncyA9IGdldGNhbGxhcmdzX2ZvcmhpbnRzKGFyZ3NwZWNfZm4sICphcmdfdHlwZXMsICoqa3dhcmdzX3R5cGVzKQogICAgICBoaW50cyA9IGdldGNhbGxhcmdzX2ZvcmhpbnRzKGFyZ3NwZWNfZm4sICp0eXBlX2hpbnRzWzBdLCAqKnR5cGVfaGludHNbMV0pCiAgICAgIGZvciBhcmcsIGhpbnQgaW4gaGludHMuaXRlbXMoKToKICAgICAgICBpZiBhcmcuc3RhcnRzd2l0aCgnJXVua25vd24lJyk6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGhpbnQgaXMgTm9uZToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgbm90IHR5cGVoaW50cy5pc19jb25zaXN0ZW50X3dpdGgoCiAgICAgICAgICAgIGJpbmRpbmdzLmdldChhcmcsIHR5cGVoaW50cy5BbnkpLCBoaW50KToKICAgICAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgICAgICdUeXBlIGhpbnQgdmlvbGF0aW9uIGZvciBcJyVzXCc6IHJlcXVpcmVzICVzIGJ1dCBnb3QgJXMgZm9yICVzJwogICAgICAgICAgICAgICUgKHNlbGYubGFiZWwsIGhpbnQsIGJpbmRpbmdzW2FyZ10sIGFyZykpCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgIiIiUmV0dXJucyBhbiBhcmdzcGVjIG9mIHRoZSBmdW5jdGlvbiBhY3R1YWxseSBjb25zdW1pbmcgdGhlIGRhdGEuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4pOgogICAgIyBUT0RPKHNpbHZpdWMpOiBBZGQgY29tbWVudCBkZXNjcmliaW5nIHRoYXQgdGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZW4KICAgICMgYnkgbWV0aG9kcyBkZXRlY3RpbmcgY2FsbGFibGVzIGFuZCB3cmFwcGluZyB0aGVtIGluIERvRm5zLgogICAgcmV0dXJuIGZuCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuICclcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZuLmRlZmF1bHRfbGFiZWwoKSkKCgpjbGFzcyBfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKICAiIiJBIGNsYXNzIHdyYXBwZXIgZm9yIGEgZnVuY3Rpb24tYmFzZWQgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBzdXBlcihfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZm4gPSBmbgogICAgc2VsZi5fYXJncyA9IGFyZ3MKICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzID0geydmbic6IChzZWxmLl9mbi5fX25hbWVfXwogICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2ZuLCAnX19uYW1lX18nKQogICAgICAgICAgICAgICAgICBlbHNlIHNlbGYuX2ZuLl9fY2xhc3NfXyksCiAgICAgICAgICAgJ2FyZ3MnOiBEaXNwbGF5RGF0YUl0ZW0oc3RyKHNlbGYuX2FyZ3MpKS5kcm9wX2lmX2RlZmF1bHQoJygpJyksCiAgICAgICAgICAgJ2t3YXJncyc6IERpc3BsYXlEYXRhSXRlbShzdHIoc2VsZi5fa3dhcmdzKSkuZHJvcF9pZl9kZWZhdWx0KCd7fScpfQogICAgcmV0dXJuIHJlcwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgU2luY2UgdGhlIFBUcmFuc2Zvcm0gd2lsbCBiZSBpbXBsZW1lbnRlZCBlbnRpcmVseSBhcyBhIGZ1bmN0aW9uCiAgICAjIChvbmNlIGNhbGxlZCksIHdlIG5lZWQgdG8gcGFzcyB0aHJvdWdoIGFueSB0eXBlLWhpbnRpbmcgaW5mb3JtYXRpb24gdGhhdAogICAgIyBtYXkgaGF2ZSBiZWVuIGFubm90YXRlZCB2aWEgdGhlIC53aXRoX2lucHV0X3R5cGVzKCkgYW5kCiAgICAjIC53aXRoX291dHB1dF90eXBlcygpIG1ldGhvZHMuCiAgICBrd2FyZ3MgPSBkaWN0KHNlbGYuX2t3YXJncykKICAgIGFyZ3MgPSB0dXBsZShzZWxmLl9hcmdzKQogICAgdHJ5OgogICAgICBpZiAndHlwZV9oaW50cycgaW4gaW5zcGVjdC5nZXRhcmdzcGVjKHNlbGYuX2ZuKS5hcmdzOgogICAgICAgIGFyZ3MgPSAoc2VsZi5nZXRfdHlwZV9oaW50cygpLCkgKyBhcmdzCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAjIE1pZ2h0IG5vdCBiZSBhIGZ1bmN0aW9uLgogICAgICBwYXNzCiAgICByZXR1cm4gc2VsZi5fZm4ocGNvbGwsICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICBpZiBzZWxmLl9hcmdzOgogICAgICByZXR1cm4gJyVzKCVzKScgJSAoCiAgICAgICAgICBsYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuX2ZuKSwgbGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLl9hcmdzWzBdKSkKICAgIHJldHVybiBsYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuX2ZuKQoKCmRlZiBwdHJhbnNmb3JtX2ZuKGZuKToKICAiIiJBIGRlY29yYXRvciBmb3IgYSBmdW5jdGlvbi1iYXNlZCBQVHJhbnNmb3JtLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFyZ3M6CiAgICBmbjogQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgYSBjdXN0b20gUFRyYW5zZm9ybS4KCiAgUmV0dXJuczoKICAgIEEgQ2FsbGFibGVQVHJhbnNmb3JtIGluc3RhbmNlIHdyYXBwaW5nIHRoZSBmdW5jdGlvbi1iYXNlZCBQVHJhbnNmb3JtLgoKICBUaGlzIHdyYXBwZXIgcHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUsIHNpbXBsZXIgd2F5IHRvIGRlZmluZSBhIFBUcmFuc2Zvcm0uCiAgVGhlIHN0YW5kYXJkIG1ldGhvZCBpcyB0byBzdWJjbGFzcyBmcm9tIFBUcmFuc2Zvcm0gYW5kIG92ZXJyaWRlIHRoZSBleHBhbmQoKQogIG1ldGhvZC4gQW4gZXF1aXZhbGVudCBlZmZlY3QgY2FuIGJlIG9idGFpbmVkIGJ5IGRlZmluaW5nIGEgZnVuY3Rpb24gdGhhdAogIGFuIGlucHV0IFBDb2xsZWN0aW9uIGFuZCBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhCiAgcmVzdWx0aW5nIFBDb2xsZWN0aW9uLiBGb3IgZXhhbXBsZTo6CgogICAgQHB0cmFuc2Zvcm1fZm4KICAgIGRlZiBDdXN0b21NYXBwZXIocGNvbGwsIG1hcGZuKToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8obWFwZm4pCgogIFRoZSBlcXVpdmFsZW50IGFwcHJvYWNoIHVzaW5nIFBUcmFuc2Zvcm0gc3ViY2xhc3Npbmc6OgoKICAgIGNsYXNzIEN1c3RvbU1hcHBlcihQVHJhbnNmb3JtKToKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBmbik6CiAgICAgICAgc3VwZXIoQ3VzdG9tTWFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5tYXBmbiA9IG1hcGZuCgogICAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgICByZXR1cm4gcGNvbGwgfCBQYXJEbyhzZWxmLm1hcGZuKQoKICBXaXRoIGVpdGhlciBtZXRob2QgdGhlIGN1c3RvbSBQVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGluIHBpcGVsaW5lcyBhcyBpZgogIGl0IHdlcmUgb25lIG9mIHRoZSAibmF0aXZlIiBQVHJhbnNmb3Jtczo6CgogICAgcmVzdWx0X3Bjb2xsID0gaW5wdXRfcGNvbGwgfCAnTGFiZWwnID4+IEN1c3RvbU1hcHBlcihzb21lZm4pCgogIE5vdGUgdGhhdCBmb3IgYm90aCBzb2x1dGlvbnMgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUKICBvcGVyYXRvciAoaS5lLiwgYHxgKSB3aWxsIGluamVjdCB0aGUgcGNvbGwgYXJndW1lbnQgaW4gaXRzIHByb3BlciBwbGFjZQogIChmaXJzdCBhcmd1bWVudCBpZiBubyBsYWJlbCB3YXMgc3BlY2lmaWVkIGFuZCBzZWNvbmQgYXJndW1lbnQgb3RoZXJ3aXNlKS4KICAiIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBDb25zaWRlciByZW1vdmluZyBzdGF0aWNtZXRob2QgdG8gYWxsb3cgZm9yIHNlbGYgcGFyYW1ldGVyLgoKICBkZWYgY2FsbGFibGVfcHRyYW5zZm9ybV9mYWN0b3J5KCphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0oZm4sICphcmdzLCAqKmt3YXJncykKICByZXR1cm4gY2FsbGFibGVfcHRyYW5zZm9ybV9mYWN0b3J5CgoKZGVmIGxhYmVsX2Zyb21fY2FsbGFibGUoZm4pOgogIGlmIGhhc2F0dHIoZm4sICdkZWZhdWx0X2xhYmVsJyk6CiAgICByZXR1cm4gZm4uZGVmYXVsdF9sYWJlbCgpCiAgZWxpZiBoYXNhdHRyKGZuLCAnX19uYW1lX18nKToKICAgIGlmIGZuLl9fbmFtZV9fID09ICc8bGFtYmRhPic6CiAgICAgIHJldHVybiAnPGxhbWJkYSBhdCAlczolcz4nICUgKAogICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShmbi5fX2NvZGVfXy5jb19maWxlbmFtZSksCiAgICAgICAgICBmbi5fX2NvZGVfXy5jb19maXJzdGxpbmVubykKICAgIHJldHVybiBmbi5fX25hbWVfXwogIHJldHVybiBzdHIoZm4pCgoKY2xhc3MgX05hbWVkUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zZm9ybSwgbGFiZWwpOgogICAgc3VwZXIoX05hbWVkUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18obGFiZWwpCiAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQoKICBkZWYgX19yb3JfXyhzZWxmLCBwdmFsdWVpc2gsIF91bnVzZWQ9Tm9uZSk6CiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm0uX19yb3JfXyhwdmFsdWVpc2gsIHNlbGYubGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU2hvdWxkIG5ldmVyIGJlIGV4cGFuZGVkIGRpcmVjdGx5LiIpCn1yjwEAAChYIQAAAFBUcmFuc2Zvcm0uX2V4dHJhY3RfaW5wdXRfcHZhbHVlc1gDAAAAZGVmTZgBTbQBh1gmAAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLmRlZmF1bHRfbGFiZWxYAwAAAGRlZk1tAk1vAodYEwAAAFBUcmFuc2Zvcm0uX19yZXByX19YAwAAAGRlZk1JAU1LAYdYCwAAAF9HZXRQVmFsdWVzWAUAAABjbGFzc0t/S4WHWBwAAABfTWF0ZXJpYWxpemVQVmFsdWVzLl9faW5pdF9fWAMAAABkZWZLckt0h1gkAAAAUFRyYW5zZm9ybS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZN2AFN2wGHWBIAAABQVHJhbnNmb3JtLl9fc3RyX19YAwAAAGRlZk1GAU1IAYdYHwAAAF9DaGFpbmVkUFRyYW5zZm9ybS5fY2hhaW5fbGFiZWxYAwAAAGRlZk3pAU3rAYdYGgAAAFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNywFN0wGHWB0AAABQVHJhbnNmb3JtLl9jaGVja19wY29sbGVjdGlvblgDAAAAZGVmTVUBTVoBh1gYAAAAX05hbWVkUFRyYW5zZm9ybS5fX3Jvcl9fWAMAAABkZWZN2gJN3AKHWCEAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMuX19pbml0X19YAwAAAGRlZk0EAk0gAodYEQAAAF9aaXBQVmFsdWVzLnZpc2l0WAMAAABkZWZLnEunh1gWAAAAUFRyYW5zZm9ybS5fX3Jyc2hpZnRfX1gDAAAAZGVmTWQBTWYBh1gkAAAAX01hdGVyaWFsaXplZERvT3V0cHV0c1R1cGxlLl9faW5pdF9fWAMAAABkZWZLZUtqh1gSAAAAZ2V0X25lc3RlZF9wdmFsdWVzWAMAAABkZWZLh0uLh1gbAAAAX01hdGVyaWFsaXplZERvT3V0cHV0c1R1cGxlWAUAAABjbGFzc0tkS2+HWCAAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMubWFrZV9mblgDAAAAZGVmTWgCTWwCh1gXAAAAX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm1YBQAAAGNsYXNzTXECTZYCh1gZAAAAX0NoYWluZWRQVHJhbnNmb3JtLl9fb3JfX1gDAAAAZGVmTewBTfIBh1gZAAAAX01hdGVyaWFsaXplUFZhbHVlcy52aXNpdFgDAAAAZGVmS3VLfYdYHAAAAFBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNYAwAAAGRlZk0IAU0KAYdYHAAAAFBUcmFuc2Zvcm0ud2l0aF9vdXRwdXRfdHlwZXNYAwAAAGRlZkv0TQcBh1g0AAAAUFRyYW5zZm9ybS5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzLl9kaWN0X3R1cGxlX2xlYXZlc1gDAAAAZGVmTagBTbMBh1gKAAAAUFRyYW5zZm9ybVgFAAAAY2xhc3NLuk3bAYdYEAAAAF9TZXRJbnB1dFBWYWx1ZXNYBQAAAGNsYXNzS1xLYodYHgAAAFBUcmFuc2Zvcm0uX2luZmVyX291dHB1dF9jb2RlclgDAAAAZGVmTSgBTTwBh1glAAAAX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0uZGVmYXVsdF9sYWJlbFgDAAAAZGVmTZECTZYCh1ggAAAAX1BWYWx1ZWlzaFRyYW5zZm9ybS52aXNpdF9uZXN0ZWRYAwAAAGRlZktNS1qHWBgAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHNYBQAAAGNsYXNzTfcBTW8Ch1gnAAAAX01hdGVyaWFsaXplZERvT3V0cHV0c1R1cGxlLl9fZ2V0aXRlbV9fWAMAAABkZWZLa0tvh1gYAAAAUFRyYW5zZm9ybS5fc3RyX2ludGVybmFsWAMAAABkZWZNTAFNVAGHWB0AAABQVHJhbnNmb3JtLnR5cGVfY2hlY2tfb3V0cHV0c1gDAAAAZGVmTQ4BTRABh1gbAAAAX0NoYWluZWRQVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZN5QFN6AGHWBMAAABQVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZLzkvRh1gnAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c19vcl9vdXRwdXRzWAMAAABkZWZNEQFNJwGHWA0AAABwdHJhbnNmb3JtX2ZuWAMAAABkZWZNmAJNxgKHWBcAAABfTmFtZWRQVHJhbnNmb3JtLmV4cGFuZFgDAAAAZGVmTd0CTd8Ch1gpAAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLndpdGhfaW5wdXRfdHlwZXNYAwAAAGRlZk0hAk1IAodYGgAAAF9aaXBQVmFsdWVzLnZpc2l0X3NlcXVlbmNlWAMAAABkZWZLqEuwh1gSAAAAX0NoYWluZWRQVHJhbnNmb3JtWAUAAABjbGFzc03jAU31AYdYFwAAAFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuWAMAAABkZWZNtwFNwgGHWCkAAABwdHJhbnNmb3JtX2ZuLmNhbGxhYmxlX3B0cmFuc2Zvcm1fZmFjdG9yeVgDAAAAZGVmTcMCTcUCh1gYAAAAUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpWAMAAABkZWZNwwFNygGHWCoAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMudHlwZV9jaGVja19pbnB1dHNYAwAAAGRlZk1JAk1iAodYLAAAAFBUcmFuc2Zvcm1XaXRoU2lkZUlucHV0cy5fcHJvY2Vzc19hcmdzcGVjX2ZuWAMAAABkZWZNYwJNZwKHWBgAAABQVHJhbnNmb3JtLmRlZmF1bHRfbGFiZWxYAwAAAGRlZkvaS9yHWBsAAABQVHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXNYAwAAAGRlZkvdS/OHWBwAAABQVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNCwFNDQGHWBYAAABfWmlwUFZhbHVlcy52aXNpdF9kaWN0WAMAAABkZWZLsUu4h1gSAAAAUFRyYW5zZm9ybS5fX3Jvcl9fWAMAAABkZWZNbQFNlwGHWCAAAABfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybS5fX2luaXRfX1gDAAAAZGVmTXQCTXkCh1gWAAAAX1NldElucHV0UFZhbHVlcy52aXNpdFgDAAAAZGVmS11LYodYNwAAAFBUcmFuc2Zvcm1XaXRoU2lkZUlucHV0cy50eXBlX2NoZWNrX2lucHV0cy5lbGVtZW50X3R5cGVYAwAAAGRlZk1OAk1SAodYIAAAAFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuLnJlZ2lzdGVyWAMAAABkZWZNuQFNvAGHWCIAAABQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZN1AFN1wGHWCQAAABfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybS5kaXNwbGF5X2RhdGFYAwAAAGRlZk16Ak2BAodYEAAAAFBUcmFuc2Zvcm0ubGFiZWxYAwAAAGRlZkvWS9mHWBEAAABQVHJhbnNmb3JtLmV4cGFuZFgDAAAAZGVmTUMBTUUBh1gLAAAAX1ppcFBWYWx1ZXNYBQAAAGNsYXNzS41LuIdYEQAAAFBUcmFuc2Zvcm0uX19vcl9fWAMAAABkZWZNZwFNbAGHWBMAAABfUFZhbHVlaXNoVHJhbnNmb3JtWAUAAABjbGFzc0tGS1qHWBEAAABQVHJhbnNmb3JtLl9jbG9uZVgDAAAAZGVmTT0BTUIBh1gRAAAAX0dldFBWYWx1ZXMudmlzaXRYAwAAAGRlZkuAS4WHWBkAAABfTmFtZWRQVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZN1gJN2QKHWBAAAABfTmFtZWRQVHJhbnNmb3JtWAUAAABjbGFzc03UAk3fAodYEwAAAGxhYmVsX2Zyb21fY2FsbGFibGVYAwAAAGRlZk3IAk3SAodYGQAAAF9DaGFpbmVkUFRyYW5zZm9ybS5leHBhbmRYAwAAAGRlZk3zAU31AYdYGAAAAFBUcmFuc2Zvcm0uZ2V0X3dpbmRvd2luZ1gDAAAAZGVmTVsBTWMBh1gTAAAAX01hdGVyaWFsaXplUFZhbHVlc1gFAAAAY2xhc3NLcUt9h1geAAAAX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0uZXhwYW5kWAMAAABkZWZNggJNkAKHdX1ykAEAAChYJwAAAFBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0c1ghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtcpEBAABYDQAAAHB0cmFuc2Zvcm1fZm5qkQEAAFgcAAAAUFRyYW5zZm9ybS53aXRoX291dHB1dF90eXBlc2qRAQAAWBEAAABQVHJhbnNmb3JtLmV4cGFuZGqRAQAAWCQAAABQVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqkQEAAFgcAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c2qRAQAAWAoAAABQVHJhbnNmb3JtapEBAABYFwAAAFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuapEBAABYGgAAAFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpapEBAABYEwAAAGxhYmVsX2Zyb21fY2FsbGFibGVqkQEAAFgdAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX291dHB1dHNqkQEAAFgYAAAAUFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVsapEBAABYGAAAAFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaWqRAQAAWBwAAABQVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBlapEBAABYGAAAAFBUcmFuc2Zvcm0uZ2V0X3dpbmRvd2luZ2qRAQAAWCIAAABQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyapEBAABYGwAAAFBUcmFuc2Zvcm0ud2l0aF9pbnB1dF90eXBlc2qRAQAAdWiKWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc3KSAQAAhYFykwEAAH1ylAEAAGJ0cpUBAABVLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZShYZCkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGF0YWZsb3cgbmF0aXZlIHNvdXJjZXMgYW5kIHNpbmtzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmltcG9ydCBsb2dnaW5nCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgSGFzRGlzcGxheURhdGEKCgpkZWYgX2RpY3RfcHJpbnRhYmxlX2ZpZWxkcyhkaWN0X29iamVjdCwgc2tpcF9maWVsZHMpOgogICIiIlJldHVybnMgYSBsaXN0IG9mIHN0cmluZ3MgZm9yIHRoZSBpbnRlcmVzdGluZyBmaWVsZHMgb2YgYSBkaWN0LiIiIgogIHJldHVybiBbJyVzPSVyJyAlIChuYW1lLCB2YWx1ZSkKICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkaWN0X29iamVjdC5pdGVyaXRlbXMoKQogICAgICAgICAgIyB3YW50IHRvIG91dHB1dCB2YWx1ZSAwIGJ1dCBub3QgTm9uZSBub3IgW10KICAgICAgICAgIGlmICh2YWx1ZSBvciB2YWx1ZSA9PSAwKQogICAgICAgICAgYW5kIG5hbWUgbm90IGluIHNraXBfZmllbGRzXQoKCl9taW5vcl9maWVsZHMgPSBbJ2NvZGVyJywgJ2tleV9jb2RlcicsICd2YWx1ZV9jb2RlcicsCiAgICAgICAgICAgICAgICAgJ2NvbmZpZ19ieXRlcycsICdlbGVtZW50cycsCiAgICAgICAgICAgICAgICAgJ2FwcGVuZF90cmFpbGluZ19uZXdsaW5lcycsICdzdHJpcF90cmFpbGluZ19uZXdsaW5lcycsCiAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uX3R5cGUnXQoKCmNsYXNzIE5hdGl2ZVNvdXJjZShpb2Jhc2UuU291cmNlQmFzZSk6CiAgIiIiQSBzb3VyY2UgaW1wbGVtZW50ZWQgYnkgRGF0YWZsb3cgc2VydmljZS4KCiAgVGhpcyBjbGFzcyBpcyB0byBiZSBvbmx5IGluaGVyaXRlZCBieSBzb3VyY2VzIG5hdGl2ZWx5IGltcGxlbWVudGVkIGJ5IENsb3VkCiAgRGF0YWZsb3cgc2VydmljZSwgaGVuY2Ugc2hvdWxkIG5vdCBiZSBzdWItY2xhc3NlZCBieSB1c2Vycy4KCiAgVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGVmaW5lIG5ldyBzb3VyY2VzLgogICIiIgoKICBkZWYgcmVhZGVyKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIE5hdGl2ZVNvdXJjZVJlYWRlciBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb3VyY2UuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBpc19ib3VuZGVkKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8e25hbWV9IHt2YWxzfT4nLmZvcm1hdCgKICAgICAgICBuYW1lPXNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHZhbHM9JywgJy5qb2luKF9kaWN0X3ByaW50YWJsZV9maWVsZHMoc2VsZi5fX2RpY3RfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5vcl9maWVsZHMpKSkKCgpjbGFzcyBOYXRpdmVTb3VyY2VSZWFkZXIob2JqZWN0KToKICAiIiJBIHJlYWRlciBmb3IgYSBzb3VyY2UgaW1wbGVtZW50ZWQgYnkgRGF0YWZsb3cgc2VydmljZS4iIiIKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICIiIk9wZW5zIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBhIHJlYWRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHRyYWNlYmFjayk6CiAgICAiIiJDbGVhbnMgdXAgYWZ0ZXIgYSByZWFkZXIgZXhlY3V0ZWQuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICIiIlJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciBhbGwgdGhlIHJlY29yZHMgb2YgdGhlIHNvdXJjZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHByb3BlcnR5CiAgZGVmIHJldHVybnNfd2luZG93ZWRfdmFsdWVzKHNlbGYpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoaXMgcmVhZGVyIHJldHVybnMgd2luZG93ZWQgdmFsdWVzLiIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBnZXRfcHJvZ3Jlc3Moc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgaG93IGZhciB0aGUgcmVhZGVyIGhhcyByZWFkLgoKICAgIFJldHVybnM6CiAgICAgIEEgU291cmNlUmVhZGVyUHJvZ3Jlc3Mgb2JqZWN0IHRoYXQgZ2l2ZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlCiAgICAgIHJlYWRlci4KICAgICIiIgogICAgcmV0dXJuCgogIGRlZiByZXF1ZXN0X2R5bmFtaWNfc3BsaXQoc2VsZiwgZHluYW1pY19zcGxpdF9yZXF1ZXN0KToKICAgICIiIkF0dGVtcHRzIHRvIHNwbGl0IHRoZSBpbnB1dCBpbiB0d28gcGFydHMuCgogICAgVGhlIHR3byBwYXJ0cyBhcmUgbmFtZWQgdGhlICJwcmltYXJ5IiBwYXJ0IGFuZCB0aGUgInJlc2lkdWFsIiBwYXJ0LiBUaGUKICAgIGN1cnJlbnQgJ05hdGl2ZVNvdXJjZVJlYWRlcicga2VlcHMgcHJvY2Vzc2luZyB0aGUgcHJpbWFyeSBwYXJ0LCB3aGlsZSB0aGUKICAgIHJlc2lkdWFsIHBhcnQgd2lsbCBiZSBwcm9jZXNzZWQgZWxzZXdoZXJlIChlLmcuIHBlcmhhcHMgb24gYSBkaWZmZXJlbnQKICAgIHdvcmtlcikuCgogICAgVGhlIHByaW1hcnkgYW5kIHJlc2lkdWFsIHBhcnRzLCBpZiBjb25jYXRlbmF0ZWQsIG11c3QgcmVwcmVzZW50IHRoZQogICAgc2FtZSBpbnB1dCBhcyB0aGUgY3VycmVudCBpbnB1dCBvZiB0aGlzICdOYXRpdmVTb3VyY2VSZWFkZXInIGJlZm9yZSB0aGlzCiAgICBjYWxsLgoKICAgIFRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSBwcmltYXJ5IHBhcnQgYW5kIHRoZSByZXNpZHVhbCBwYXJ0IGlzCiAgICBzcGVjaWZpZWQgaW4gYSBmcmFtZXdvcmstc3BlY2lmaWMgd2F5IHVzaW5nICdEeW5hbWljU3BsaXRSZXF1ZXN0JyBlLmcuLAogICAgaWYgdGhlIGZyYW1ld29yayBzdXBwb3J0cyB0aGUgbm90aW9uIG9mIHBvc2l0aW9ucywgaXQgbWlnaHQgYmUgYQogICAgcG9zaXRpb24gYXQgd2hpY2ggdGhlIGlucHV0IGlzIGFza2VkIHRvIHNwbGl0IGl0c2VsZiAod2hpY2ggaXMgbm90CiAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBwb3NpdGlvbiBhdCB3aGljaCBpdCAqd2lsbCogc3BsaXQgaXRzZWxmKTsgaXQKICAgIG1pZ2h0IGJlIGFuIGFwcHJveGltYXRlIGZyYWN0aW9uIG9mIGlucHV0LCBvciBzb21ldGhpbmcgZWxzZS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSAnRHluYW1pY1NwbGl0UmVzdWx0Jywgd2hpY2ggZW5jb2RlcywgaW4gYQogICAgZnJhbWV3b3JrLXNwZWNpZmljIHdheSwgdGhlIGluZm9ybWF0aW9uIHN1ZmZpY2llbnQgdG8gY29uc3RydWN0IGEKICAgIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1bHRpbmcgcHJpbWFyeSBhbmQgcmVzaWR1YWwgaW5wdXRzLiBGb3IgZXhhbXBsZSwgaXQKICAgIG1pZ2h0LCBhZ2FpbiwgYmUgYSBwb3NpdGlvbiBkZW1hcmNhdGluZyB0aGVzZSBwYXJ0cywgb3IgaXQgbWlnaHQgYmUgYSBwYWlyCiAgICBvZiBmdWxseS1zcGVjaWZpZWQgaW5wdXQgZGVzY3JpcHRpb25zLCBvciBzb21ldGhpbmcgZWxzZS4KCiAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byAncmVxdWVzdF9keW5hbWljX3NwbGl0KCknLCBzdWJzZXF1ZW50IGNhbGxzCiAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIG5ldyBwcmltYXJ5LgoKICAgIEFyZ3M6CiAgICAgIGR5bmFtaWNfc3BsaXRfcmVxdWVzdDogQSAnRHluYW1pY1NwbGl0UmVxdWVzdCcgZGVzY3JpYmluZyB0aGUgc3BsaXQKICAgICAgICByZXF1ZXN0LgoKICAgIFJldHVybnM6CiAgICAgICdOb25lJyBpZiB0aGUgJ0R5bmFtaWNTcGxpdFJlcXVlc3QnIGNhbm5vdCBiZSBob25vcmVkIChpbiB0aGF0CiAgICAgIGNhc2UgdGhlIGlucHV0IHJlcHJlc2VudGVkIGJ5IHRoaXMgJ05hdGl2ZVNvdXJjZVJlYWRlcicgc3RheXMgdGhlIHNhbWUpLAogICAgICBvciBhICdEeW5hbWljU3BsaXRSZXN1bHQnIGRlc2NyaWJpbmcgaG93IHRoZSBpbnB1dCB3YXMgc3BsaXQgaW50byBhCiAgICAgIHByaW1hcnkgYW5kIHJlc2lkdWFsIHBhcnQuCiAgICAiIiIKICAgIGxvZ2dpbmcuZGVidWcoCiAgICAgICAgJ1NvdXJjZVJlYWRlciAlciBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgc3BsaXR0aW5nLiBJZ25vcmluZyBkeW5hbWljICcKICAgICAgICAnc3BsaXQgcmVxdWVzdDogJXInLAogICAgICAgIHNlbGYsIGR5bmFtaWNfc3BsaXRfcmVxdWVzdCkKICAgIHJldHVybgoKCmNsYXNzIFJlYWRlclByb2dyZXNzKG9iamVjdCk6CiAgIiIiQSByZXByZXNlbnRhdGlvbiBvZiBob3cgZmFyIGEgTmF0aXZlU291cmNlUmVhZGVyIGhhcyByZWFkLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcG9zaXRpb249Tm9uZSwgcGVyY2VudF9jb21wbGV0ZT1Ob25lLCByZW1haW5pbmdfdGltZT1Ob25lLAogICAgICAgICAgICAgICBjb25zdW1lZF9zcGxpdF9wb2ludHM9Tm9uZSwgcmVtYWluaW5nX3NwbGl0X3BvaW50cz1Ob25lKToKCiAgICBzZWxmLl9wb3NpdGlvbiA9IHBvc2l0aW9uCgogICAgaWYgcGVyY2VudF9jb21wbGV0ZSBpcyBub3QgTm9uZToKICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IGZsb2F0KHBlcmNlbnRfY29tcGxldGUpCiAgICAgIGlmIHBlcmNlbnRfY29tcGxldGUgPCAwIG9yIHBlcmNlbnRfY29tcGxldGUgPiAxOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdUaGUgcGVyY2VudF9jb21wbGV0ZSBhcmd1bWVudCB3YXMgJWYuIE11c3QgYmUgaW4gcmFuZ2UgWzAsIDFdLicKICAgICAgICAgICAgJSBwZXJjZW50X2NvbXBsZXRlKQogICAgc2VsZi5fcGVyY2VudF9jb21wbGV0ZSA9IHBlcmNlbnRfY29tcGxldGUKCiAgICBzZWxmLl9yZW1haW5pbmdfdGltZSA9IHJlbWFpbmluZ190aW1lCiAgICBzZWxmLl9jb25zdW1lZF9zcGxpdF9wb2ludHMgPSBjb25zdW1lZF9zcGxpdF9wb2ludHMKICAgIHNlbGYuX3JlbWFpbmluZ19zcGxpdF9wb2ludHMgPSByZW1haW5pbmdfc3BsaXRfcG9pbnRzCgogIEBwcm9wZXJ0eQogIGRlZiBwb3NpdGlvbihzZWxmKToKICAgICIiIlJldHVybnMgcHJvZ3Jlc3MsIHJlcHJlc2VudGVkIGFzIGEgUmVhZGVyUG9zaXRpb24gb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogIEBwcm9wZXJ0eQogIGRlZiBwZXJjZW50X2NvbXBsZXRlKHNlbGYpOgogICAgIiIiUmV0dXJucyBwcm9ncmVzcywgcmVwcmVzZW50ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHdvcmsuCgogICAgUHJvZ3Jlc3MgcmFuZ2UgZnJvbSAwLjAgKGJlZ2lubmluZywgbm90aGluZyBjb21wbGV0ZSkgdG8gMS4wIChlbmQgb2YgdGhlCiAgICB3b3JrIHJhbmdlLCBlbnRpcmUgV29ya0l0ZW0gY29tcGxldGUpLgoKICAgIFJldHVybnM6CiAgICAgIFByb2dyZXNzIHJlcHJlc2VudGVkIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCB3b3JrLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGVyY2VudF9jb21wbGV0ZQoKICBAcHJvcGVydHkKICBkZWYgcmVtYWluaW5nX3RpbWUoc2VsZik6CiAgICAiIiJSZXR1cm5zIHByb2dyZXNzLCByZXByZXNlbnRlZCBhcyBhbiBlc3RpbWF0ZWQgdGltZSByZW1haW5pbmcuIiIiCiAgICByZXR1cm4gc2VsZi5fcmVtYWluaW5nX3RpbWUKCiAgQHByb3BlcnR5CiAgZGVmIGNvbnN1bWVkX3NwbGl0X3BvaW50cyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9jb25zdW1lZF9zcGxpdF9wb2ludHMKCiAgQHByb3BlcnR5CiAgZGVmIHJlbWFpbmluZ19zcGxpdF9wb2ludHMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcmVtYWluaW5nX3NwbGl0X3BvaW50cwoKCmNsYXNzIFJlYWRlclBvc2l0aW9uKG9iamVjdCk6CiAgIiIiQSByZXByZXNlbnRhdGlvbiBvZiBwb3NpdGlvbiBpbiBhbiBpdGVyYXRpb24gb2YgYSAnTmF0aXZlU291cmNlUmVhZGVyJy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVuZD1Ob25lLCBrZXk9Tm9uZSwgYnl0ZV9vZmZzZXQ9Tm9uZSwgcmVjb3JkX2luZGV4PU5vbmUsCiAgICAgICAgICAgICAgIHNodWZmbGVfcG9zaXRpb249Tm9uZSwgY29uY2F0X3Bvc2l0aW9uPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgUmVhZGVyUG9zaXRpb24uCgogICAgQSBSZWFkZXJQb3NpdGlvbiBtYXkgZ2V0IGluc3RhbnRpYXRlZCBmb3Igb25lIG9mIHRoZXNlIHBvc2l0aW9uIHR5cGVzLiBPbmx5CiAgICBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIHNwZWNpZmllZC4KCiAgICBBcmdzOgogICAgICBlbmQ6IHBvc2l0aW9uIGlzIHBhc3QgYWxsIG90aGVyIHBvc2l0aW9ucy4gRm9yIGV4YW1wbGUsIHRoaXMgbWF5IGJlIHVzZWQKICAgICAgICB0byByZXByZXNlbnQgdGhlIGVuZCBwb3NpdGlvbiBvZiBhbiB1bmJvdW5kZWQgcmFuZ2UuCiAgICAgIGtleTogcG9zaXRpb24gaXMgYSBzdHJpbmcga2V5LgogICAgICBieXRlX29mZnNldDogcG9zaXRpb24gaXMgYSBieXRlIG9mZnNldC4KICAgICAgcmVjb3JkX2luZGV4OiBwb3NpdGlvbiBpcyBhIHJlY29yZCBpbmRleAogICAgICBzaHVmZmxlX3Bvc2l0aW9uOiBwb3NpdGlvbiBpcyBhIGJhc2U2NCBlbmNvZGVkIHNodWZmbGUgcG9zaXRpb24uCiAgICAgIGNvbmNhdF9wb3NpdGlvbjogcG9zaXRpb24gaXMgYSAnQ29uY2F0UG9zaXRpb24nLgogICAgIiIiCgogICAgc2VsZi5lbmQgPSBlbmQKICAgIHNlbGYua2V5ID0ga2V5CiAgICBzZWxmLmJ5dGVfb2Zmc2V0ID0gYnl0ZV9vZmZzZXQKICAgIHNlbGYucmVjb3JkX2luZGV4ID0gcmVjb3JkX2luZGV4CiAgICBzZWxmLnNodWZmbGVfcG9zaXRpb24gPSBzaHVmZmxlX3Bvc2l0aW9uCgogICAgaWYgY29uY2F0X3Bvc2l0aW9uIGlzIG5vdCBOb25lOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb25jYXRfcG9zaXRpb24sIENvbmNhdFBvc2l0aW9uKQogICAgc2VsZi5jb25jYXRfcG9zaXRpb24gPSBjb25jYXRfcG9zaXRpb24KCgpjbGFzcyBDb25jYXRQb3NpdGlvbihvYmplY3QpOgogICIiIkEgcG9zaXRpb24gdGhhdCBlbmNhcHN1bGF0ZSBhbiBpbm5lciBwb3NpdGlvbiBhbmQgYW4gaW5kZXguCgogIFRoaXMgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHBvc2l0aW9uIG9mIGEgc291cmNlIHRoYXQgZW5jYXBzdWxhdGUgc2V2ZXJhbAogIG90aGVyIHNvdXJjZXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRleCwgcG9zaXRpb24pOgogICAgIiIiSW5pdGlhbGl6ZXMgQ29uY2F0UG9zaXRpb24uCgogICAgQXJnczoKICAgICAgaW5kZXg6IGluZGV4IG9mIHRoZSBzb3VyY2UgY3VycmVudGx5IGJlaW5nIHJlYWQuCiAgICAgIHBvc2l0aW9uOiBpbm5lciBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSBjdXJyZW50bHkgYmVpbmcgcmVhZC4KICAgICIiIgoKICAgIGlmIHBvc2l0aW9uIGlzIG5vdCBOb25lOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShwb3NpdGlvbiwgUmVhZGVyUG9zaXRpb24pCiAgICBzZWxmLmluZGV4ID0gaW5kZXgKICAgIHNlbGYucG9zaXRpb24gPSBwb3NpdGlvbgoKCmNsYXNzIER5bmFtaWNTcGxpdFJlcXVlc3Qob2JqZWN0KToKICAiIiJTcGVjaWZpZXMgaG93ICdOYXRpdmVTb3VyY2VSZWFkZXIucmVxdWVzdF9keW5hbWljX3NwbGl0JyBzaG91bGQgc3BsaXQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9ncmVzcyk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9ncmVzcywgUmVhZGVyUHJvZ3Jlc3MpCiAgICBzZWxmLnByb2dyZXNzID0gcHJvZ3Jlc3MKCgpjbGFzcyBEeW5hbWljU3BsaXRSZXN1bHQob2JqZWN0KToKICBwYXNzCgoKY2xhc3MgRHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9uKER5bmFtaWNTcGxpdFJlc3VsdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdG9wX3Bvc2l0aW9uKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHN0b3BfcG9zaXRpb24sIFJlYWRlclBvc2l0aW9uKQogICAgc2VsZi5zdG9wX3Bvc2l0aW9uID0gc3RvcF9wb3NpdGlvbgoKCmNsYXNzIE5hdGl2ZVNpbmsoSGFzRGlzcGxheURhdGEpOgogICIiIkEgc2luayBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLgoKICBUaGlzIGNsYXNzIGlzIHRvIGJlIG9ubHkgaW5oZXJpdGVkIGJ5IHNpbmtzIG5hdGl2ZWx5IGltcGxlbWVudGVkIGJ5IENsb3VkCiAgRGF0YWZsb3cgc2VydmljZSwgaGVuY2Ugc2hvdWxkIG5vdCBiZSBzdWItY2xhc3NlZCBieSB1c2Vycy4KICAiIiIKCiAgZGVmIHdyaXRlcihzZWxmKToKICAgICIiIlJldHVybnMgYSBTaW5rV3JpdGVyIGZvciB0aGlzIHNvdXJjZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8e25hbWV9IHt2YWxzfT4nLmZvcm1hdCgKICAgICAgICBuYW1lPXNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHZhbHM9X2RpY3RfcHJpbnRhYmxlX2ZpZWxkcyhzZWxmLl9fZGljdF9fLCBfbWlub3JfZmllbGRzKSkKCgpjbGFzcyBOYXRpdmVTaW5rV3JpdGVyKG9iamVjdCk6CiAgIiIiQSB3cml0ZXIgZm9yIGEgc2luayBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLiIiIgoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgIiIiT3BlbnMgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGEgd3JpdGVyIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgICIiIkNsZWFucyB1cCBhZnRlciBhIHdyaXRlciBleGVjdXRlZC4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHByb3BlcnR5CiAgZGVmIHRha2VzX3dpbmRvd2VkX3ZhbHVlcyhzZWxmKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIHdyaXRlciB0YWtlcyB3aW5kb3dlZCB2YWx1ZXMuIiIiCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIFdyaXRlKHNlbGYsIG8pOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgICAiIiJXcml0ZXMgYSByZWNvcmQgdG8gdGhlIHNpbmsgYXNzb2NpYXRlZCB3aXRoIHRoaXMgd3JpdGVyLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIF9OYXRpdmVXcml0ZShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgUFRyYW5zZm9ybSBmb3Igd3JpdGluZyB0byBhIERhdGFmbG93IG5hdGl2ZSBzaW5rLgoKICBUaGVzZSBhcmUgc2lua3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgbmF0aXZlbHkgYnkgdGhlIERhdGFmbG93IHNlcnZpY2UKICBhbmQgaGVuY2Ugc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGJ5IHVzZXJzLiBUaGVzZSBzaW5rcyBhcmUgcHJvY2Vzc2VkCiAgdXNpbmcgYSBEYXRhZmxvdyBuYXRpdmUgd3JpdGUgdHJhbnNmb3JtLgoKICBBcHBseWluZyB0aGlzIHRyYW5zZm9ybSByZXN1bHRzIGluIGEgYGBwdmFsdWUuUERvbmVgYC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmspOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBXcml0ZSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgc2luazogU2luayB0byB1c2UgZm9yIHRoZSB3cml0ZQogICAgIiIiCiAgICBzdXBlcihfTmF0aXZlV3JpdGUsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBzZWxmLl9jaGVja19wY29sbGVjdGlvbihwY29sbCkKICAgIHJldHVybiBwdmFsdWUuUERvbmUocGNvbGwucGlwZWxpbmUpCn1ylgEAAChYFwAAAFJlYWRlclBvc2l0aW9uLl9faW5pdF9fWAMAAABkZWZLxUvfh1gXAAAAUmVhZGVyUHJvZ3Jlc3MucG9zaXRpb25YAwAAAGRlZkujS6eHWBcAAABSZWFkZXJQcm9ncmVzcy5fX2luaXRfX1gDAAAAZGVmS5JLoodYFwAAAE5hdGl2ZVNvdXJjZS5pc19ib3VuZGVkWAMAAABkZWZLO0s9h1gWAAAATmF0aXZlU2lua1dyaXRlci5Xcml0ZVgDAAAAZGVmTSsBTS4Bh1gKAAAATmF0aXZlU2lua1gFAAAAY2xhc3NNCgFNGQGHWCYAAABOYXRpdmVTaW5rV3JpdGVyLnRha2VzX3dpbmRvd2VkX3ZhbHVlc1gDAAAAZGVmTSYBTSoBh1gqAAAATmF0aXZlU291cmNlUmVhZGVyLnJldHVybnNfd2luZG93ZWRfdmFsdWVzWAMAAABkZWZLVEtYh1gVAAAAX05hdGl2ZVdyaXRlLl9faW5pdF9fWAMAAABkZWZNOgFNQgGHWBwAAABEeW5hbWljU3BsaXRSZXF1ZXN0Ll9faW5pdF9fWAMAAABkZWZL+kv9h1gTAAAARHluYW1pY1NwbGl0UmVxdWVzdFgFAAAAY2xhc3NL9kv9h1glAAAAUmVhZGVyUHJvZ3Jlc3MucmVtYWluaW5nX3NwbGl0X3BvaW50c1gDAAAAZGVmS71LwIdYFQAAAE5hdGl2ZVNvdXJjZS5fX3JlcHJfX1gDAAAAZGVmSz5LQ4dYEwAAAE5hdGl2ZVNvdXJjZS5yZWFkZXJYAwAAAGRlZks3SzqHWB0AAABSZWFkZXJQcm9ncmVzcy5yZW1haW5pbmdfdGltZVgDAAAAZGVmS7RLuIdYJwAAAER5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbi5fX2luaXRfX1gDAAAAZGVmTQUBTQgBh1gSAAAARHluYW1pY1NwbGl0UmVzdWx0WAUAAABjbGFzc0v/TQEBh1gOAAAAQ29uY2F0UG9zaXRpb25YBQAAAGNsYXNzS+FL9IdYFwAAAENvbmNhdFBvc2l0aW9uLl9faW5pdF9fWAMAAABkZWZL6Ev0h1gcAAAATmF0aXZlU291cmNlUmVhZGVyLl9fZW50ZXJfX1gDAAAAZGVmS0hLS4dYGwAAAE5hdGl2ZVNvdXJjZVJlYWRlci5fX2l0ZXJfX1gDAAAAZGVmS1BLU4dYFgAAAF9kaWN0X3ByaW50YWJsZV9maWVsZHNYAwAAAGRlZksfSyaHWCgAAABOYXRpdmVTb3VyY2VSZWFkZXIucmVxdWVzdF9keW5hbWljX3NwbGl0WAMAAABkZWZLYkuNh1gaAAAATmF0aXZlU2lua1dyaXRlci5fX2VudGVyX19YAwAAAGRlZk0eAU0hAYdYEAAAAE5hdGl2ZVNpbmtXcml0ZXJYBQAAAGNsYXNzTRsBTS4Bh1gOAAAAUmVhZGVyUG9zaXRpb25YBQAAAGNsYXNzS8JL34dYEwAAAE5hdGl2ZVNpbmsuX19yZXByX19YAwAAAGRlZk0VAU0ZAYdYEgAAAE5hdGl2ZVNvdXJjZVJlYWRlclgFAAAAY2xhc3NLRUuNh1gZAAAATmF0aXZlU2lua1dyaXRlci5fX2V4aXRfX1gDAAAAZGVmTSIBTSUBh1gMAAAATmF0aXZlU291cmNlWAUAAABjbGFzc0suS0OHWCQAAABSZWFkZXJQcm9ncmVzcy5jb25zdW1lZF9zcGxpdF9wb2ludHNYAwAAAGRlZku5S7yHWBMAAABfTmF0aXZlV3JpdGUuZXhwYW5kWAMAAABkZWZNQwFNRgGHWBEAAABOYXRpdmVTaW5rLndyaXRlclgDAAAAZGVmTREBTRQBh1gMAAAAX05hdGl2ZVdyaXRlWAUAAABjbGFzc00wAU1GAYdYHwAAAE5hdGl2ZVNvdXJjZVJlYWRlci5nZXRfcHJvZ3Jlc3NYAwAAAGRlZktZS2GHWA4AAABSZWFkZXJQcm9ncmVzc1gFAAAAY2xhc3NLj0vAh1gbAAAATmF0aXZlU291cmNlUmVhZGVyLl9fZXhpdF9fWAMAAABkZWZLTEtPh1geAAAARHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9uWAUAAABjbGFzc00DAU0IAYdYHwAAAFJlYWRlclByb2dyZXNzLnBlcmNlbnRfY29tcGxldGVYAwAAAGRlZkuoS7OHdX1ylwEAAChYEwAAAER5bmFtaWNTcGxpdFJlcXVlc3RYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZXKYAQAAWB4AAABEeW5hbWljU3BsaXRSZXN1bHRXaXRoUG9zaXRpb25qmAEAAFgXAAAATmF0aXZlU291cmNlLmlzX2JvdW5kZWRqmAEAAFgWAAAATmF0aXZlU2lua1dyaXRlci5Xcml0ZWqYAQAAWAoAAABOYXRpdmVTaW5rapgBAABYKAAAAE5hdGl2ZVNvdXJjZVJlYWRlci5yZXF1ZXN0X2R5bmFtaWNfc3BsaXRqmAEAAFgTAAAATmF0aXZlU291cmNlLnJlYWRlcmqYAQAAWBAAAABOYXRpdmVTaW5rV3JpdGVyapgBAABYHwAAAE5hdGl2ZVNvdXJjZVJlYWRlci5nZXRfcHJvZ3Jlc3NqmAEAAFgOAAAAUmVhZGVyUG9zaXRpb25qmAEAAFgOAAAAUmVhZGVyUHJvZ3Jlc3NqmAEAAFgSAAAATmF0aXZlU291cmNlUmVhZGVyapgBAABYEgAAAER5bmFtaWNTcGxpdFJlc3VsdGqYAQAAWA4AAABDb25jYXRQb3NpdGlvbmqYAQAAWAwAAABOYXRpdmVTb3VyY2VqmAEAAFgRAAAATmF0aXZlU2luay53cml0ZXJqmAEAAHVoilgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlcpkBAACFgXKaAQAAfXKbAQAAYnRynAEAAFUbYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2Vzcp0BAAAoWNAGAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNyb3NzLXBsYXRmb3JtIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgc3VicHJvY2Vzc2VzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmltcG9ydCBwbGF0Zm9ybQppbXBvcnQgc3VicHJvY2VzcwoKIyBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBzaGVsbD1UcnVlIHdoZW4gY3JlYXRpbmcgc3VicHJvY2Vzc2VzIGZvciBiaW5hcnkKIyBwYXRocyB0byBiZSByZXNvbHZlZCBjb3JyZWN0bHkuCmZvcmNlX3NoZWxsID0gcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnCgojIFdlIG1pbWljIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBzdWJwcm9jZXNzIG1vZHVsZS4KUElQRSA9IHN1YnByb2Nlc3MuUElQRQpTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAoKCmRlZiBjYWxsKCphcmdzLCAqKmt3YXJncyk6CiAgaWYgZm9yY2Vfc2hlbGw6CiAgICBrd2FyZ3NbJ3NoZWxsJ10gPSBUcnVlCiAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbCgqYXJncywgKiprd2FyZ3MpCgoKZGVmIGNoZWNrX2NhbGwoKmFyZ3MsICoqa3dhcmdzKToKICBpZiBmb3JjZV9zaGVsbDoKICAgIGt3YXJnc1snc2hlbGwnXSA9IFRydWUKICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19jYWxsKCphcmdzLCAqKmt3YXJncykKCgpkZWYgY2hlY2tfb3V0cHV0KCphcmdzLCAqKmt3YXJncyk6CiAgaWYgZm9yY2Vfc2hlbGw6CiAgICBrd2FyZ3NbJ3NoZWxsJ10gPSBUcnVlCiAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCphcmdzLCAqKmt3YXJncykKCgpkZWYgUG9wZW4oKmFyZ3MsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogIGlmIGZvcmNlX3NoZWxsOgogICAga3dhcmdzWydzaGVsbCddID0gVHJ1ZQogIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKCphcmdzLCAqKmt3YXJncykKfXKeAQAAKFgFAAAAUG9wZW5YAwAAAGRlZks1SzmHWAQAAABjYWxsWAMAAABkZWZLI0snh1gKAAAAY2hlY2tfY2FsbFgDAAAAZGVmSylLLYdYDAAAAGNoZWNrX291dHB1dFgDAAAAZGVmSy9LM4d1fXKfAQAAKFgFAAAAUG9wZW5YGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc3KgAQAAWAQAAABjYWxsaqABAABYCgAAAGNoZWNrX2NhbGxqoAEAAFgMAAAAY2hlY2tfb3V0cHV0aqABAAB1aIpYGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc3KhAQAAhYFyogEAAH1yowEAAGJ0cqQBAABVKWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzKFjLEAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKRGlyZWN0UnVubmVyIGltcGxlbWVudGF0aW9uIG9mIE1ldHJpY1Jlc3VsdHMuIEl0IGlzIGluIGNoYXJnZSBub3Qgb25seSBvZgpyZXNwb25kaW5nIHRvIHF1ZXJpZXMgb2YgY3VycmVudCBtZXRyaWNzLCBidXQgYWxzbyBvZiBrZWVwaW5nIHRoZSBjb21tb24Kc3RhdGUgY29uc2lzdGVudC4KIiIiCmltcG9ydCB0aHJlYWRpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgQ291bnRlckFnZ3JlZ2F0b3IKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25BZ2dyZWdhdG9yCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY0tleQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyBpbXBvcnQgTWV0cmljUmVzdWx0cwoKCmNsYXNzIERpcmVjdE1ldHJpY3MoTWV0cmljUmVzdWx0cyk6CiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fY291bnRlcnMgPSBkZWZhdWx0ZGljdCgKICAgICAgICBsYW1iZGE6IERpcmVjdE1ldHJpYyhDb3VudGVyQWdncmVnYXRvcigpKSkKICAgIHNlbGYuX2Rpc3RyaWJ1dGlvbnMgPSBkZWZhdWx0ZGljdCgKICAgICAgICBsYW1iZGE6IERpcmVjdE1ldHJpYyhEaXN0cmlidXRpb25BZ2dyZWdhdG9yKCkpKQoKICBkZWYgX2FwcGx5X29wZXJhdGlvbihzZWxmLCBidW5kbGUsIHVwZGF0ZXMsIG9wKToKICAgIGZvciBrLCB2IGluIHVwZGF0ZXMuY291bnRlcnMuaXRlbXMoKToKICAgICAgb3Aoc2VsZi5fY291bnRlcnNba10sIGJ1bmRsZSwgdikKCiAgICBmb3IgaywgdiBpbiB1cGRhdGVzLmRpc3RyaWJ1dGlvbnMuaXRlbXMoKToKICAgICAgb3Aoc2VsZi5fZGlzdHJpYnV0aW9uc1trXSwgYnVuZGxlLCB2KQoKICBkZWYgY29tbWl0X2xvZ2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGVzKToKICAgIG9wID0gbGFtYmRhIG9iaiwgYnVuZGxlLCB1cGRhdGU6IG9iai5jb21taXRfbG9naWNhbChidW5kbGUsIHVwZGF0ZSkKICAgIHNlbGYuX2FwcGx5X29wZXJhdGlvbihidW5kbGUsIHVwZGF0ZXMsIG9wKQoKICBkZWYgY29tbWl0X3BoeXNpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlcyk6CiAgICBvcCA9IGxhbWJkYSBvYmosIGJ1bmRsZSwgdXBkYXRlOiBvYmouY29tbWl0X3BoeXNpY2FsKGJ1bmRsZSwgdXBkYXRlKQogICAgc2VsZi5fYXBwbHlfb3BlcmF0aW9uKGJ1bmRsZSwgdXBkYXRlcywgb3ApCgogIGRlZiB1cGRhdGVfcGh5c2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGVzKToKICAgIG9wID0gbGFtYmRhIG9iaiwgYnVuZGxlLCB1cGRhdGU6IG9iai51cGRhdGVfcGh5c2ljYWwoYnVuZGxlLCB1cGRhdGUpCiAgICBzZWxmLl9hcHBseV9vcGVyYXRpb24oYnVuZGxlLCB1cGRhdGVzLCBvcCkKCiAgZGVmIHF1ZXJ5KHNlbGYsIGZpbHRlcj1Ob25lKToKICAgIGNvdW50ZXJzID0gW01ldHJpY1Jlc3VsdChNZXRyaWNLZXkoay5zdGVwLCBrLm1ldHJpYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5leHRyYWN0X2NvbW1pdHRlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpCiAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLl9jb3VudGVycy5pdGVtcygpCiAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKV0KICAgIGRpc3RyaWJ1dGlvbnMgPSBbTWV0cmljUmVzdWx0KE1ldHJpY0tleShrLnN0ZXAsIGsubWV0cmljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9jb21taXR0ZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuX2Rpc3RyaWJ1dGlvbnMuaXRlbXMoKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKV0KCiAgICByZXR1cm4geydjb3VudGVycyc6IGNvdW50ZXJzLAogICAgICAgICAgICAnZGlzdHJpYnV0aW9ucyc6IGRpc3RyaWJ1dGlvbnN9CgoKY2xhc3MgRGlyZWN0TWV0cmljKG9iamVjdCk6CiAgIiIiIEtlZXBzIGEgY29uc2lzdGVudCBzdGF0ZSBmb3IgYSBzaW5nbGUgbWV0cmljLgoKICBJdCBrZWVwcyB0cmFjayBvZiB0aGUgbWV0cmljJ3MgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgdXBkYXRlcy4KICBJdCdzIHRocmVhZCBzYWZlLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBhZ2dyZWdhdG9yKToKICAgIHNlbGYuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IKICAgIHNlbGYuX2F0dGVtcHRlZF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5maW5pc2hlZF9hdHRlbXB0ZWQgPSBhZ2dyZWdhdG9yLnplcm8oKQogICAgc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWQgPSB7fQogICAgc2VsZi5fY29tbWl0dGVkX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCA9IGFnZ3JlZ2F0b3IuemVybygpCgogIGRlZiBjb21taXRfbG9naWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZSk6CiAgICB3aXRoIHNlbGYuX2NvbW1pdHRlZF9sb2NrOgogICAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCA9IHNlbGYuYWdncmVnYXRvci5jb21iaW5lKHVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCkKCiAgZGVmIGNvbW1pdF9waHlzaWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZSk6CiAgICB3aXRoIHNlbGYuX2F0dGVtcHRlZF9sb2NrOgogICAgICBzZWxmLmluZmxpZ2h0X2F0dGVtcHRlZFtidW5kbGVdID0gdXBkYXRlCiAgICAgIHNlbGYuZmluaXNoZWRfYXR0ZW1wdGVkID0gc2VsZi5hZ2dyZWdhdG9yLmNvbWJpbmUodXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoZWRfYXR0ZW1wdGVkKQogICAgICBkZWwgc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWRbYnVuZGxlXQoKICBkZWYgdXBkYXRlX3BoeXNpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlKToKICAgIHNlbGYuaW5mbGlnaHRfYXR0ZW1wdGVkW2J1bmRsZV0gPSB1cGRhdGUKCiAgZGVmIGV4dHJhY3RfY29tbWl0dGVkKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuYWdncmVnYXRvci5yZXN1bHQoc2VsZi5maW5pc2hlZF9jb21taXR0ZWQpCgogIGRlZiBleHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWQoc2VsZik6CiAgICByZXMgPSBzZWxmLmZpbmlzaGVkX2F0dGVtcHRlZAogICAgZm9yIF8sIHUgaW4gc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWQuaXRlbXMoKToKICAgICAgcmVzID0gc2VsZi5hZ2dyZWdhdG9yLmNvbWJpbmUocmVzLCB1KQoKICAgIHJldHVybiBzZWxmLmFnZ3JlZ2F0b3IucmVzdWx0KHJlcykKfXKlAQAAKFgdAAAARGlyZWN0TWV0cmljcy51cGRhdGVfcGh5c2ljYWxYAwAAAGRlZks3SzqHWBwAAABEaXJlY3RNZXRyaWNzLmNvbW1pdF9sb2dpY2FsWAMAAABkZWZLL0syh1gbAAAARGlyZWN0TWV0cmljLmNvbW1pdF9sb2dpY2FsWAMAAABkZWZLWUtdh1gTAAAARGlyZWN0TWV0cmljcy5xdWVyeVgDAAAAZGVmSztLSYdYHAAAAERpcmVjdE1ldHJpYy51cGRhdGVfcGh5c2ljYWxYAwAAAGRlZktlS2eHWB4AAABEaXJlY3RNZXRyaWMuZXh0cmFjdF9jb21taXR0ZWRYAwAAAGRlZktoS2qHWBwAAABEaXJlY3RNZXRyaWMuY29tbWl0X3BoeXNpY2FsWAMAAABkZWZLXktkh1gVAAAARGlyZWN0TWV0cmljLl9faW5pdF9fWAMAAABkZWZLUUtYh1gMAAAARGlyZWN0TWV0cmljWAUAAABjbGFzc0tLS3GHWB4AAABEaXJlY3RNZXRyaWNzLl9hcHBseV9vcGVyYXRpb25YAwAAAGRlZksoSy6HWCUAAABEaXJlY3RNZXRyaWMuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkWAMAAABkZWZLa0txh1gWAAAARGlyZWN0TWV0cmljcy5fX2luaXRfX1gDAAAAZGVmSyJLJ4dYDQAAAERpcmVjdE1ldHJpY3NYBQAAAGNsYXNzSyFLSYdYHQAAAERpcmVjdE1ldHJpY3MuY29tbWl0X3BoeXNpY2FsWAMAAABkZWZLM0s2h3V9cqYBAAAoWB0AAABEaXJlY3RNZXRyaWNzLnVwZGF0ZV9waHlzaWNhbFgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3NypwEAAFgMAAAARGlyZWN0TWV0cmljaqcBAABYGwAAAERpcmVjdE1ldHJpYy5jb21taXRfbG9naWNhbGqnAQAAWBwAAABEaXJlY3RNZXRyaWMudXBkYXRlX3BoeXNpY2FsaqcBAABYHgAAAERpcmVjdE1ldHJpYy5leHRyYWN0X2NvbW1pdHRlZGqnAQAAWBwAAABEaXJlY3RNZXRyaWMuY29tbWl0X3BoeXNpY2FsaqcBAABYHAAAAERpcmVjdE1ldHJpY3MuY29tbWl0X2xvZ2ljYWxqpwEAAFglAAAARGlyZWN0TWV0cmljLmV4dHJhY3RfbGF0ZXN0X2F0dGVtcHRlZGqnAQAAWBMAAABEaXJlY3RNZXRyaWNzLnF1ZXJ5aqcBAABYDQAAAERpcmVjdE1ldHJpY3NqpwEAAFgdAAAARGlyZWN0TWV0cmljcy5jb21taXRfcGh5c2ljYWxqpwEAAHVoilgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3NyqAEAAIWBcqkBAAB9cqoBAABidFUsYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIoWGCuAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgcnVubmVyIGltcGxlbWVudGF0aW9uIHRoYXQgc3VibWl0cyBhIGpvYiBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4KClRoZSBydW5uZXIgd2lsbCBjcmVhdGUgYSBKU09OIGRlc2NyaXB0aW9uIG9mIHRoZSBqb2IgZ3JhcGggYW5kIHRoZW4gc3VibWl0IGl0CnRvIHRoZSBEYXRhZmxvdyBTZXJ2aWNlIGZvciByZW1vdGUgZXhlY3V0aW9uIGJ5IGEgd29ya2VyLgoiIiIKCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aHJlYWRpbmcKaW1wb3J0IHRpbWUKaW1wb3J0IHRyYWNlYmFjawppbXBvcnQgdXJsbGliCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgZXJyb3IKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AgaW1wb3J0IGpzb25fdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgQXNTaWRlSW5wdXQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MgaW1wb3J0IERhdGFmbG93TWV0cmljcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IG5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBkYXRhZmxvdyBhcyBkYXRhZmxvd19hcGkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsLm5hbWVzIGltcG9ydCBQcm9wZXJ0eU5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5uYW1lcyBpbXBvcnQgVHJhbnNmb3JtTmFtZXMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQVmFsdWVDYWNoZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGEKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiBpbXBvcnQgQmVhbVBsdWdpbgoKX19hbGxfXyA9IFsnRGF0YWZsb3dSdW5uZXInXQoKCmNsYXNzIERhdGFmbG93UnVubmVyKFBpcGVsaW5lUnVubmVyKToKICAiIiJBIHJ1bm5lciB0aGF0IGNyZWF0ZXMgam9iIGdyYXBocyBhbmQgc3VibWl0cyB0aGVtIGZvciByZW1vdGUgZXhlY3V0aW9uLgoKICBFdmVyeSBleGVjdXRpb24gb2YgdGhlIHJ1bigpIG1ldGhvZCB3aWxsIHN1Ym1pdCBhbiBpbmRlcGVuZGVudCBqb2IgZm9yCiAgcmVtb3RlIGV4ZWN1dGlvbiB0aGF0IGNvbnNpc3RzIG9mIHRoZSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUgcGFzc2VkIGluCiAgbm9kZSBhcmd1bWVudCBvciBlbnRpcmUgZ3JhcGggaWYgbm9kZSBpcyBOb25lLiBUaGUgcnVuKCkgbWV0aG9kIHJldHVybnMKICBhZnRlciB0aGUgc2VydmljZSBjcmVhdGVkIHRoZSBqb2IgYW5kICB3aWxsIG5vdCB3YWl0IGZvciB0aGUgam9iIHRvIGZpbmlzaAogIGlmIGJsb2NraW5nIGlzIHNldCB0byBGYWxzZS4KICAiIiIKCiAgIyBBIGxpc3Qgb2YgUFRyYW5zZm9ybU92ZXJyaWRlIG9iamVjdHMgdG8gYmUgYXBwbGllZCBiZWZvcmUgcnVubmluZyBhIHBpcGVsaW5lCiAgIyB1c2luZyBEYXRhZmxvd1J1bm5lci4KICAjIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgZm9yIG92ZXJyaWRlcyB3aGVyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBkbwogICMgbm90IGNoYW5nZS4KICAjIEZvciBpbnRlcm5hbCBTREsgdXNlIG9ubHkuIFRoaXMgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGJ5IEJlYW0gcGlwZWxpbmUKICAjIGF1dGhvcnMuCgogICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgIyBUT0RPOiBSZW1vdmUgdGhlIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGRlcGVuZGVuY3kgaW4gQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzIGltcG9ydCBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUKCiAgX1BUUkFOU0ZPUk1fT1ZFUlJJREVTID0gWwogICAgICBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUoKSwKICBdCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZT1Ob25lKToKICAgICMgQ2FjaGUgb2YgQ2xvdWRXb3JrZmxvd1N0ZXAgcHJvdG9zIGdlbmVyYXRlZCB3aGlsZSB0aGUgcnVubmVyCiAgICAjICJleGVjdXRlcyIgYSBwaXBlbGluZS4KICAgIHNlbGYuX2NhY2hlID0gY2FjaGUgaWYgY2FjaGUgaXMgbm90IE5vbmUgZWxzZSBQVmFsdWVDYWNoZSgpCiAgICBzZWxmLl91bmlxdWVfc3RlcF9pZCA9IDAKCiAgZGVmIF9nZXRfdW5pcXVlX3N0ZXBfbmFtZShzZWxmKToKICAgIHNlbGYuX3VuaXF1ZV9zdGVwX2lkICs9IDEKICAgIHJldHVybiAncyVzJyAlIHNlbGYuX3VuaXF1ZV9zdGVwX2lkCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcG9sbF9mb3Jfam9iX2NvbXBsZXRpb24ocnVubmVyLCByZXN1bHQsIGR1cmF0aW9uKToKICAgICIiIlBvbGxzIGZvciB0aGUgc3BlY2lmaWVkIGpvYiB0byBmaW5pc2ggcnVubmluZyAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuCgogICAgVXBkYXRlcyB0aGUgcmVzdWx0IHdpdGggdGhlIG5ldyBqb2IgaW5mb3JtYXRpb24gYmVmb3JlIHJldHVybmluZy4KCiAgICBBcmdzOgogICAgICBydW5uZXI6IERhdGFmbG93UnVubmVyIGluc3RhbmNlIHRvIHVzZSBmb3IgcG9sbGluZyBqb2Igc3RhdGUuCiAgICAgIHJlc3VsdDogRGF0YWZsb3dQaXBlbGluZVJlc3VsdCBpbnN0YW5jZSB1c2VkIGZvciBqb2IgaW5mb3JtYXRpb24uCiAgICAgIGR1cmF0aW9uIChpbnQpOiBUaGUgdGltZSB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBqb2IgdG8gZmluaXNoLgogICAgICAgIElmIGl0IGlzIHNldCB0byA6ZGF0YTpgTm9uZWAsIGl0IHdpbGwgd2FpdCBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGpvYgogICAgICAgIGlzIGZpbmlzaGVkLgogICAgIiIiCiAgICBsYXN0X21lc3NhZ2VfdGltZSA9IE5vbmUKICAgIGxhc3RfbWVzc2FnZV9oYXNoID0gTm9uZQoKICAgIGxhc3RfZXJyb3JfcmFuayA9IGZsb2F0KCctaW5mJykKICAgIGxhc3RfZXJyb3JfbXNnID0gTm9uZQogICAgbGFzdF9qb2Jfc3RhdGUgPSBOb25lCiAgICAjIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgcGlwZWxpbmUgZmFpbHVyZSBmb3IgdGhlIGVycm9yCiAgICAjIG1lc3NhZ2UgdG8gc2hvdyB1cCBnaXZpbmcgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuCiAgICAjIEl0IHR5cGljYWxseSB0YWtlcyBhYm91dCAzMCBzZWNvbmRzLgogICAgZmluYWxfY291bnRkb3duX3RpbWVyX3NlY3MgPSA1MC4wCiAgICBzbGVlcF9zZWNzID0gNS4wCgogICAgIyBUcnkgdG8gcHJpb3JpdGl6ZSB0aGUgdXNlci1sZXZlbCB0cmFjZWJhY2ssIGlmIGFueS4KICAgIGRlZiByYW5rX2Vycm9yKG1zZyk6CiAgICAgIGlmICd3b3JrIGl0ZW0gd2FzIGF0dGVtcHRlZCcgaW4gbXNnOgogICAgICAgIHJldHVybiAtMQogICAgICBlbGlmICdUcmFjZWJhY2snIGluIG1zZzoKICAgICAgICByZXR1cm4gMQogICAgICByZXR1cm4gMAoKICAgIGlmIGR1cmF0aW9uOgogICAgICBzdGFydF9zZWNzID0gdGltZS50aW1lKCkKICAgICAgZHVyYXRpb25fc2VjcyA9IGR1cmF0aW9uIC8gMTAwMAoKICAgIGpvYl9pZCA9IHJlc3VsdC5qb2JfaWQoKQogICAgd2hpbGUgVHJ1ZToKICAgICAgcmVzcG9uc2UgPSBydW5uZXIuZGF0YWZsb3dfY2xpZW50LmdldF9qb2Ioam9iX2lkKQogICAgICAjIElmIGdldCgpIGlzIGNhbGxlZCB2ZXJ5IHNvb24gYWZ0ZXIgQ3JlYXRlKCkgdGhlIHJlc3BvbnNlIG1heSBub3QgY29udGFpbgogICAgICAjIGFuIGluaXRpYWxpemVkICdjdXJyZW50U3RhdGUnIGZpZWxkLgogICAgICBpZiByZXNwb25zZS5jdXJyZW50U3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgaWYgcmVzcG9uc2UuY3VycmVudFN0YXRlICE9IGxhc3Rfam9iX3N0YXRlOgogICAgICAgICAgbG9nZ2luZy5pbmZvKCdKb2IgJXMgaXMgaW4gc3RhdGUgJXMnLCBqb2JfaWQsIHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkKICAgICAgICAgIGxhc3Rfam9iX3N0YXRlID0gcmVzcG9uc2UuY3VycmVudFN0YXRlCiAgICAgICAgaWYgc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgIT0gJ0pPQl9TVEFURV9SVU5OSU5HJzoKICAgICAgICAgICMgU3RvcCBjaGVja2luZyBmb3IgbmV3IG1lc3NhZ2VzIG9uIHRpbWVvdXQsIGV4cGxhbmF0b3J5CiAgICAgICAgICAjIG1lc3NhZ2UgcmVjZWl2ZWQsIHN1Y2Nlc3MsIG9yIGEgdGVybWluYWwgam9iIHN0YXRlIGNhdXNlZAogICAgICAgICAgIyBieSB0aGUgdXNlciB0aGF0IHRoZXJlZm9yZSBkb2Vzbid0IHJlcXVpcmUgZXhwbGFuYXRpb24uCiAgICAgICAgICBpZiAoZmluYWxfY291bnRkb3duX3RpbWVyX3NlY3MgPD0gMC4wCiAgICAgICAgICAgICAgb3IgbGFzdF9lcnJvcl9tc2cgaXMgbm90IE5vbmUKICAgICAgICAgICAgICBvciBzdHIocmVzcG9uc2UuY3VycmVudFN0YXRlKSA9PSAnSk9CX1NUQVRFX0RPTkUnCiAgICAgICAgICAgICAgb3Igc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgPT0gJ0pPQl9TVEFURV9DQU5DRUxMRUQnCiAgICAgICAgICAgICAgb3Igc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgPT0gJ0pPQl9TVEFURV9VUERBVEVEJwogICAgICAgICAgICAgIG9yIHN0cihyZXNwb25zZS5jdXJyZW50U3RhdGUpID09ICdKT0JfU1RBVEVfRFJBSU5FRCcpOgogICAgICAgICAgICBicmVhawogICAgICAgICAgIyBUaGUgam9iIGhhcyBmYWlsZWQ7IGVuc3VyZSB3ZSBzZWUgYW55IGZpbmFsIGVycm9yIG1lc3NhZ2VzLgogICAgICAgICAgc2xlZXBfc2VjcyA9IDEuMCAgICAgICMgcG9sbCBmYXN0ZXIgZHVyaW5nIHRoZSBmaW5hbCBjb3VudGRvd24KICAgICAgICAgIGZpbmFsX2NvdW50ZG93bl90aW1lcl9zZWNzIC09IHNsZWVwX3NlY3MKICAgICAgdGltZS5zbGVlcChzbGVlcF9zZWNzKQoKICAgICAgIyBHZXQgYWxsIG1lc3NhZ2VzIHNpbmNlIGJlZ2lubmluZyBvZiB0aGUgam9iIHJ1biBvciBzaW5jZSBsYXN0IG1lc3NhZ2UuCiAgICAgIHBhZ2VfdG9rZW4gPSBOb25lCiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgbWVzc2FnZXMsIHBhZ2VfdG9rZW4gPSBydW5uZXIuZGF0YWZsb3dfY2xpZW50Lmxpc3RfbWVzc2FnZXMoCiAgICAgICAgICAgIGpvYl9pZCwgcGFnZV90b2tlbj1wYWdlX3Rva2VuLCBzdGFydF90aW1lPWxhc3RfbWVzc2FnZV90aW1lKQogICAgICAgIGZvciBtIGluIG1lc3NhZ2VzOgogICAgICAgICAgbWVzc2FnZSA9ICclczogJXM6ICVzJyAlIChtLnRpbWUsIG0ubWVzc2FnZUltcG9ydGFuY2UsIG0ubWVzc2FnZVRleHQpCiAgICAgICAgICBtX2hhc2ggPSBoYXNoKG1lc3NhZ2UpCgogICAgICAgICAgaWYgbGFzdF9tZXNzYWdlX2hhc2ggaXMgbm90IE5vbmUgYW5kIG1faGFzaCA9PSBsYXN0X21lc3NhZ2VfaGFzaDoKICAgICAgICAgICAgIyBTa2lwIHRoZSBmaXJzdCBtZXNzYWdlIGlmIGl0IGlzIHRoZSBsYXN0IG1lc3NhZ2Ugd2UgZ290IGluIHRoZQogICAgICAgICAgICAjIHByZXZpb3VzIHJvdW5kLiBUaGlzIGNhbiBoYXBwZW4gYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgICAgICMgbGFzdF9tZXNzYWdlX3RpbWUgYXMgYSBwYXJhbWV0ZXIgb2YgdGhlIHF1ZXJ5IGZvciBuZXcgbWVzc2FnZXMuCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBsYXN0X21lc3NhZ2VfdGltZSA9IG0udGltZQogICAgICAgICAgbGFzdF9tZXNzYWdlX2hhc2ggPSBtX2hhc2gKICAgICAgICAgICMgU2tpcCBlbXB0eSBtZXNzYWdlcy4KICAgICAgICAgIGlmIG0ubWVzc2FnZUltcG9ydGFuY2UgaXMgTm9uZToKICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIGxvZ2dpbmcuaW5mbyhtZXNzYWdlKQogICAgICAgICAgaWYgc3RyKG0ubWVzc2FnZUltcG9ydGFuY2UpID09ICdKT0JfTUVTU0FHRV9FUlJPUic6CiAgICAgICAgICAgIGlmIHJhbmtfZXJyb3IobS5tZXNzYWdlVGV4dCkgPj0gbGFzdF9lcnJvcl9yYW5rOgogICAgICAgICAgICAgIGxhc3RfZXJyb3JfcmFuayA9IHJhbmtfZXJyb3IobS5tZXNzYWdlVGV4dCkKICAgICAgICAgICAgICBsYXN0X2Vycm9yX21zZyA9IG0ubWVzc2FnZVRleHQKICAgICAgICBpZiBub3QgcGFnZV90b2tlbjoKICAgICAgICAgIGJyZWFrCgogICAgICBpZiBkdXJhdGlvbjoKICAgICAgICBwYXNzZWRfc2VjcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfc2VjcwogICAgICAgIGlmIHBhc3NlZF9zZWNzID4gZHVyYXRpb25fc2VjczoKICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnVGltaW5nIG91dCBvbiB3YWl0aW5nIGZvciBqb2IgJXMgYWZ0ZXIgJWQgc2Vjb25kcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgam9iX2lkLCBwYXNzZWRfc2VjcykKICAgICAgICAgIGJyZWFrCgogICAgcmVzdWx0Ll9qb2IgPSByZXNwb25zZQogICAgcnVubmVyLmxhc3RfZXJyb3JfbXNnID0gbGFzdF9lcnJvcl9tc2cKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKICAgIGNsYXNzIEdyb3VwQnlLZXlJbnB1dFZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgIiIiQSB2aXNpdG9yIHRoYXQgcmVwbGFjZXMgYEFueWAgZWxlbWVudCB0eXBlIGZvciBpbnB1dCBgUENvbGxlY3Rpb25gIG9mCiAgICAgIGEgYEdyb3VwQnlLZXlgIG9yIGBfR3JvdXBCeUtleU9ubHlgIHdpdGggYSBgS1ZgIHR5cGUuCgogICAgICBUT0RPKEJFQU0tMTE1KTogT25jZSBQeXRob24gU0RrIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IFJ1bm5lciBBUEksCiAgICAgIHdlIGNvdWxkIGRpcmVjdGx5IHJlcGxhY2UgdGhlIGNvZGVyIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGVsZW1lbnQgdHlwZS4KICAgICAgIiIiCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEdyb3VwQnlLZXksIF9Hcm91cEJ5S2V5T25seQogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLCAoR3JvdXBCeUtleSwgX0dyb3VwQnlLZXlPbmx5KSk6CiAgICAgICAgICBwY29sbCA9IHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXQogICAgICAgICAgaW5wdXRfdHlwZSA9IHBjb2xsLmVsZW1lbnRfdHlwZQogICAgICAgICAgIyBJZiBpbnB1dF90eXBlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdHJlYXQgaXQgYXMgYEFueWAuCiAgICAgICAgICBpZiBub3QgaW5wdXRfdHlwZToKICAgICAgICAgICAgaW5wdXRfdHlwZSA9IHR5cGVoaW50cy5BbnkKCiAgICAgICAgICBkZWYgY29lcmNlX3RvX2t2X3R5cGUoZWxlbWVudF90eXBlKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50X3R5cGUsIHR5cGVoaW50cy5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KToKICAgICAgICAgICAgICBpZiBsZW4oZWxlbWVudF90eXBlLnR1cGxlX3R5cGVzKSA9PSAyOgogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRfdHlwZQogICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICJUdXBsZSBpbnB1dCB0byBHcm91cEJ5S2V5IG11c3QgYmUgaGF2ZSB0d28gY29tcG9uZW50cy4gIgogICAgICAgICAgICAgICAgICAgICJGb3VuZCAlcyBmb3IgJXMiICUgKGVsZW1lbnRfdHlwZSwgcGNvbGwpKQogICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoaW5wdXRfdHlwZSwgdHlwZWhpbnRzLkFueVR5cGVDb25zdHJhaW50KToKICAgICAgICAgICAgICAjIGBBbnlgIHR5cGUgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBhIEtWW0FueSwgQW55XSB0bwogICAgICAgICAgICAgICMgZm9yY2UgYSBLViBjb2RlciBhcyB0aGUgbWFpbiBvdXRwdXQgY29kZXIgZm9yIHRoZSBwY29sbGVjdGlvbgogICAgICAgICAgICAgICMgcHJlY2VkaW5nIGEgR3JvdXBCeUtleS4KICAgICAgICAgICAgICByZXR1cm4gdHlwZWhpbnRzLktWW3R5cGVoaW50cy5BbnksIHR5cGVoaW50cy5BbnldCiAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50X3R5cGUsIHR5cGVoaW50cy5VbmlvbkNvbnN0cmFpbnQpOgogICAgICAgICAgICAgIHVuaW9uX3R5cGVzID0gWwogICAgICAgICAgICAgICAgICBjb2VyY2VfdG9fa3ZfdHlwZSh0KSBmb3IgdCBpbiBlbGVtZW50X3R5cGUudW5pb25fdHlwZXNdCiAgICAgICAgICAgICAgcmV0dXJuIHR5cGVoaW50cy5LVlsKICAgICAgICAgICAgICAgICAgdHlwZWhpbnRzLlVuaW9uW3R1cGxlKHQudHVwbGVfdHlwZXNbMF0gZm9yIHQgaW4gdW5pb25fdHlwZXMpXSwKICAgICAgICAgICAgICAgICAgdHlwZWhpbnRzLlVuaW9uW3R1cGxlKHQudHVwbGVfdHlwZXNbMV0gZm9yIHQgaW4gdW5pb25fdHlwZXMpXV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAjIFRPRE86IFBvc3NpYmx5IGhhbmRsZSBvdGhlciB2YWxpZCB0eXBlcy4KICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAiSW5wdXQgdG8gR3JvdXBCeUtleSBtdXN0IGJlIG9mIFR1cGxlIG9yIEFueSB0eXBlLiAiCiAgICAgICAgICAgICAgICAgICJGb3VuZCAlcyBmb3IgJXMiICUgKGVsZW1lbnRfdHlwZSwgcGNvbGwpKQogICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gY29lcmNlX3RvX2t2X3R5cGUoaW5wdXRfdHlwZSkKCiAgICByZXR1cm4gR3JvdXBCeUtleUlucHV0VmlzaXRvcigpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZmxhdHRlbl9pbnB1dF92aXNpdG9yKCk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgRmxhdHRlbklucHV0VmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICAiIiJBIHZpc2l0b3IgdGhhdCByZXBsYWNlcyB0aGUgZWxlbWVudCB0eXBlIGZvciBpbnB1dCBgYFBDb2xsZWN0aW9uc2BgcyBvZgogICAgICAgYSBgYEZsYXR0ZW5gYCB0cmFuc2Zvcm0gd2l0aCB0aGF0IG9mIHRoZSBvdXRwdXQgYGBQQ29sbGVjdGlvbmBgLgogICAgICAiIiIKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBGbGF0dGVuCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sIEZsYXR0ZW4pOgogICAgICAgICAgb3V0cHV0X3Bjb2xsID0gdHJhbnNmb3JtX25vZGUub3V0cHV0c1tOb25lXQogICAgICAgICAgZm9yIGlucHV0X3Bjb2xsIGluIHRyYW5zZm9ybV9ub2RlLmlucHV0czoKICAgICAgICAgICAgaW5wdXRfcGNvbGwuZWxlbWVudF90eXBlID0gb3V0cHV0X3Bjb2xsLmVsZW1lbnRfdHlwZQoKICAgIHJldHVybiBGbGF0dGVuSW5wdXRWaXNpdG9yKCkKCiAgZGVmIHJ1bl9waXBlbGluZShzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJSZW1vdGVseSBleGVjdXRlcyBlbnRpcmUgcGlwZWxpbmUgb3IgcGFydHMgcmVhY2hhYmxlIGZyb20gbm9kZS4iIiIKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgIHRyeToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIERhdGFmbG93IHJ1bm5lciBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCgogICAgIyBTbmFwc2hvdCB0aGUgcGlwZWxpbmUgaW4gYSBwb3J0YWJsZSBwcm90byBiZWZvcmUgbXV0YXRpbmcgaXQKICAgIHByb3RvX3BpcGVsaW5lID0gcGlwZWxpbmUudG9fcnVubmVyX2FwaSgpCgogICAgIyBQZXJmb3JtaW5nIGNvbmZpZ3VyZWQgUFRyYW5zZm9ybSBvdmVycmlkZXMuCiAgICBwaXBlbGluZS5yZXBsYWNlX2FsbChEYXRhZmxvd1J1bm5lci5fUFRSQU5TRk9STV9PVkVSUklERVMpCgogICAgIyBBZGQgc2V0dXBfb3B0aW9ucyBmb3IgYWxsIHRoZSBCZWFtUGx1Z2luIGltcG9ydHMKICAgIHNldHVwX29wdGlvbnMgPSBwaXBlbGluZS5fb3B0aW9ucy52aWV3X2FzKFNldHVwT3B0aW9ucykKICAgIHBsdWdpbnMgPSBCZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzKCkKICAgIGlmIHNldHVwX29wdGlvbnMuYmVhbV9wbHVnaW5zIGlzIG5vdCBOb25lOgogICAgICBwbHVnaW5zID0gbGlzdChzZXQocGx1Z2lucyArIHNldHVwX29wdGlvbnMuYmVhbV9wbHVnaW5zKSkKICAgIHNldHVwX29wdGlvbnMuYmVhbV9wbHVnaW5zID0gcGx1Z2lucwoKICAgIHNlbGYuam9iID0gYXBpY2xpZW50LkpvYihwaXBlbGluZS5fb3B0aW9ucywgcHJvdG9fcGlwZWxpbmUpCgogICAgIyBEYXRhZmxvdyBydW5uZXIgcmVxdWlyZXMgYSBLViB0eXBlIGZvciBHQksgaW5wdXRzLCBoZW5jZSB3ZSBlbmZvcmNlIHRoYXQKICAgICMgaGVyZS4KICAgIHBpcGVsaW5lLnZpc2l0KHNlbGYuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3IoKSkKCiAgICAjIERhdGFmbG93IHJ1bm5lciByZXF1aXJlcyBvdXRwdXQgdHlwZSBvZiB0aGUgRmxhdHRlbiB0byBiZSB0aGUgc2FtZSBhcyB0aGUKICAgICMgaW5wdXRzLCBoZW5jZSB3ZSBlbmZvcmNlIHRoYXQgaGVyZS4KICAgIHBpcGVsaW5lLnZpc2l0KHNlbGYuZmxhdHRlbl9pbnB1dF92aXNpdG9yKCkpCgogICAgIyBUaGUgc3VwZXJjbGFzcydzIHJ1biB3aWxsIHRyaWdnZXIgYSB0cmF2ZXJzYWwgb2YgYWxsIHJlYWNoYWJsZSBub2Rlcy4KICAgIHN1cGVyKERhdGFmbG93UnVubmVyLCBzZWxmKS5ydW5fcGlwZWxpbmUocGlwZWxpbmUpCgogICAgdGVzdF9vcHRpb25zID0gcGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhUZXN0T3B0aW9ucykKICAgICMgSWYgaXQgaXMgYSBkcnkgcnVuLCByZXR1cm4gd2l0aG91dCBzdWJtaXR0aW5nIHRoZSBqb2IuCiAgICBpZiB0ZXN0X29wdGlvbnMuZHJ5X3J1bjoKICAgICAgcmV0dXJuIE5vbmUKCiAgICAjIEdldCBhIERhdGFmbG93IEFQSSBjbGllbnQgYW5kIHNldCBpdHMgb3B0aW9ucwogICAgc2VsZi5kYXRhZmxvd19jbGllbnQgPSBhcGljbGllbnQuRGF0YWZsb3dBcHBsaWNhdGlvbkNsaWVudCgKICAgICAgICBwaXBlbGluZS5fb3B0aW9ucykKCiAgICAjIENyZWF0ZSB0aGUgam9iIGRlc2NyaXB0aW9uIGFuZCBzZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmljZS4gVGhlIHJlc3VsdAogICAgIyBjYW4gYmUgTm9uZSBpZiB0aGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2aWNlIChlLmcuCiAgICAjIHRlbXBsYXRlIGNyZWF0aW9uKS4gSWYgYSByZXF1ZXN0IHdhcyBzZW50IGFuZCBmYWlsZWQgdGhlbiB0aGUgY2FsbCB3aWxsCiAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgIHJlc3VsdCA9IERhdGFmbG93UGlwZWxpbmVSZXN1bHQoCiAgICAgICAgc2VsZi5kYXRhZmxvd19jbGllbnQuY3JlYXRlX2pvYihzZWxmLmpvYiksIHNlbGYpCgogICAgc2VsZi5fbWV0cmljcyA9IERhdGFmbG93TWV0cmljcyhzZWxmLmRhdGFmbG93X2NsaWVudCwgcmVzdWx0LCBzZWxmLmpvYikKICAgIHJlc3VsdC5tZXRyaWNfcmVzdWx0cyA9IHNlbGYuX21ldHJpY3MKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIF9nZXRfdHlwZWhpbnRfYmFzZWRfZW5jb2Rpbmcoc2VsZiwgdHlwZWhpbnQsIHdpbmRvd19jb2Rlcik6CiAgICAiIiJSZXR1cm5zIGFuIGVuY29kaW5nIGJhc2VkIG9uIGEgdHlwZWhpbnQgb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuX2dldF9jbG91ZF9lbmNvZGluZyhzZWxmLl9nZXRfY29kZXIodHlwZWhpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfY29kZXI9d2luZG93X2NvZGVyKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZ2V0X2NvZGVyKHR5cGVoaW50LCB3aW5kb3dfY29kZXIpOgogICAgIiIiUmV0dXJucyBhIGNvZGVyIGJhc2VkIG9uIGEgdHlwZWhpbnQgb2JqZWN0LiIiIgogICAgaWYgd2luZG93X2NvZGVyOgogICAgICByZXR1cm4gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICAgIGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIodHlwZWhpbnQpLAogICAgICAgICAgd2luZG93X2NvZGVyPXdpbmRvd19jb2RlcikKICAgIHJldHVybiBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50KQoKICBkZWYgX2dldF9jbG91ZF9lbmNvZGluZyhzZWxmLCBjb2Rlcik6CiAgICAiIiJSZXR1cm5zIGFuIGVuY29kaW5nIGJhc2VkIG9uIGEgY29kZXIgb2JqZWN0LiIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoY29kZXIsIGNvZGVycy5Db2Rlcik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ29kZXIgb2JqZWN0IG11c3QgaW5oZXJpdCBmcm9tIGNvZGVycy5Db2RlcjogJXMuJyAlCiAgICAgICAgICAgICAgICAgICAgICBzdHIoY29kZXIpKQogICAgcmV0dXJuIGNvZGVyLmFzX2Nsb3VkX29iamVjdCgpCgogIGRlZiBfZ2V0X3NpZGVfaW5wdXRfZW5jb2Rpbmcoc2VsZiwgaW5wdXRfZW5jb2RpbmcpOgogICAgIiIiUmV0dXJucyBhbiBlbmNvZGluZyBmb3IgdGhlIG91dHB1dCBvZiBhIHZpZXcgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X2VuY29kaW5nOiBlbmNvZGluZyBvZiBjdXJyZW50IHRyYW5zZm9ybSdzIGlucHV0LiBTaWRlIGlucHV0cyBuZWVkCiAgICAgICAgdGhpcyBiZWNhdXNlIHRoZSBzZXJ2aWNlIHdpbGwgY2hlY2sgdGhhdCBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzIG1hdGNoLgoKICAgIFJldHVybnM6CiAgICAgIEFuIGVuY29kaW5nIHRoYXQgbWF0Y2hlcyB0aGUgb3V0cHV0IGFuZCBpbnB1dCBlbmNvZGluZy4gVGhpcyBpcyBlc3NlbnRpYWwKICAgICAgZm9yIHRoZSBWaWV3IHRyYW5zZm9ybXMgaW50cm9kdWNlZCB0byBwcm9kdWNlIHNpZGUgaW5wdXRzIHRvIGEgUGFyRG8uCiAgICAiIiIKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogaW5wdXRfZW5jb2RpbmdbJ0B0eXBlJ10sCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbaW5wdXRfZW5jb2RpbmddCiAgICB9CgogIGRlZiBfZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCB3aW5kb3dfdmFsdWU9VHJ1ZSk6CiAgICAiIiJSZXR1cm5zIHRoZSBjbG91ZCBlbmNvZGluZyBvZiB0aGUgY29kZXIgZm9yIHRoZSBvdXRwdXQgb2YgYSB0cmFuc2Zvcm0uIiIiCiAgICBpZiAobGVuKHRyYW5zZm9ybV9ub2RlLm91dHB1dHMpID09IDEKICAgICAgICBhbmQgdHJhbnNmb3JtX25vZGUub3V0cHV0c1tOb25lXS5lbGVtZW50X3R5cGUgaXMgbm90IE5vbmUpOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBIYW5kbGUgdHlwZSBoaW50cyBmb3IgbXVsdGktb3V0cHV0IHRyYW5zZm9ybXMuCiAgICAgIGVsZW1lbnRfdHlwZSA9IHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlCiAgICBlbHNlOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFJlbW92ZSB0aGlzIGJyYW5jaCAoYW5kIGFzc2VydCkgd2hlbiB0eXBlaGludHMgYXJlCiAgICAgICMgcHJvcGFnYXRlZCBldmVyeXdoZXJlLiBSZXR1cm5pbmcgYW4gJ0FueScgYXMgdHlwZSBoaW50IHdpbGwgdHJpZ2dlcgogICAgICAjIHVzYWdlIG9mIHRoZSBmYWxsYmFjayBjb2RlciAoaS5lLiwgY1BpY2tsZXIpLgogICAgICBlbGVtZW50X3R5cGUgPSB0eXBlaGludHMuQW55CiAgICBpZiB3aW5kb3dfdmFsdWU6CiAgICAgIHdpbmRvd19jb2RlciA9ICgKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0ud2luZG93aW5nLndpbmRvd2ZuLmdldF93aW5kb3dfY29kZXIoKSkKICAgIGVsc2U6CiAgICAgIHdpbmRvd19jb2RlciA9IE5vbmUKICAgIHJldHVybiBzZWxmLl9nZXRfdHlwZWhpbnRfYmFzZWRfZW5jb2RpbmcoCiAgICAgICAgZWxlbWVudF90eXBlLCB3aW5kb3dfY29kZXI9d2luZG93X2NvZGVyKQoKICBkZWYgX2FkZF9zdGVwKHNlbGYsIHN0ZXBfa2luZCwgc3RlcF9sYWJlbCwgdHJhbnNmb3JtX25vZGUsIHNpZGVfdGFncz0oKSk6CiAgICAiIiJDcmVhdGVzIGEgU3RlcCBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIGNhY2hlLiIiIgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbCBpbXBvcnQgYXBpY2xpZW50CiAgICBzdGVwID0gYXBpY2xpZW50LlN0ZXAoc3RlcF9raW5kLCBzZWxmLl9nZXRfdW5pcXVlX3N0ZXBfbmFtZSgpKQogICAgc2VsZi5qb2IucHJvdG8uc3RlcHMuYXBwZW5kKHN0ZXAucHJvdG8pCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRSwgc3RlcF9sYWJlbCkKICAgICMgQ2FjaGUgdGhlIG5vZGUvc3RlcCBhc3NvY2lhdGlvbiBmb3IgdGhlIG1haW4gb3V0cHV0IG9mIHRoZSB0cmFuc2Zvcm0gbm9kZS4KICAgIHNlbGYuX2NhY2hlLmNhY2hlX291dHB1dCh0cmFuc2Zvcm1fbm9kZSwgTm9uZSwgc3RlcCkKICAgICMgSWYgc2lkZV90YWdzIGlzIG5vdCAoKSB0aGVuIHRoaXMgaXMgYSBtdWx0aS1vdXRwdXQgdHJhbnNmb3JtIG5vZGUgYW5kIHdlCiAgICAjIG5lZWQgdG8gY2FjaGUgdGhlIChub2RlLCB0YWcsIHN0ZXApIGZvciBlYWNoIG9mIHRoZSB0YWdzIHVzZWQgdG8gYWNjZXNzCiAgICAjIHRoZSBvdXRwdXRzLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlIHRoZSBrZXlzIHVzZWQgdG8gc2VhcmNoIGluIHRoZQogICAgIyBjYWNoZSBhbHdheXMgY29udGFpbiB0aGUgdGFnLgogICAgZm9yIHRhZyBpbiBzaWRlX3RhZ3M6CiAgICAgIHNlbGYuX2NhY2hlLmNhY2hlX291dHB1dCh0cmFuc2Zvcm1fbm9kZSwgdGFnLCBzdGVwKQoKICAgICMgRmluYWxseSwgd2UgYWRkIHRoZSBkaXNwbGF5IGRhdGEgaXRlbXMgdG8gdGhlIHBpcGVsaW5lIHN0ZXAuCiAgICAjIElmIHRoZSB0cmFuc2Zvcm0gY29udGFpbnMgbm8gZGlzcGxheSBkYXRhIHRoZW4gYW4gZW1wdHkgbGlzdCBpcyBhZGRlZC4KICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuRElTUExBWV9EQVRBLAogICAgICAgIFtpdGVtLmdldF9kaWN0KCkgZm9yIGl0ZW0gaW4KICAgICAgICAgRGlzcGxheURhdGEuY3JlYXRlX2Zyb20odHJhbnNmb3JtX25vZGUudHJhbnNmb3JtKS5pdGVtc10pCgogICAgcmV0dXJuIHN0ZXAKCiAgZGVmIF9hZGRfc2luZ2xldG9uX3N0ZXAoc2VsZiwgbGFiZWwsIGZ1bGxfbGFiZWwsIHRhZywgaW5wdXRfc3RlcCk6CiAgICAiIiJDcmVhdGVzIGEgQ29sbGVjdGlvblRvU2luZ2xldG9uIHN0ZXAgdXNlZCB0byBoYW5kbGUgUGFyRG8gc2lkZSBpbnB1dHMuIiIiCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgc3RlcCA9IGFwaWNsaWVudC5TdGVwKFRyYW5zZm9ybU5hbWVzLkNPTExFQ1RJT05fVE9fU0lOR0xFVE9OLCBsYWJlbCkKICAgIHNlbGYuam9iLnByb3RvLnN0ZXBzLmFwcGVuZChzdGVwLnByb3RvKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5VU0VSX05BTUUsIGZ1bGxfbGFiZWwpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogaW5wdXRfc3RlcC5nZXRfb3V0cHV0KHRhZyl9KQogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9zaWRlX2lucHV0X2VuY29kaW5nKGlucHV0X3N0ZXAuZW5jb2RpbmcpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlIChmdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVFBVVCkpLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfV0pCiAgICByZXR1cm4gc3RlcAoKICBkZWYgcnVuX0ltcHVsc2Uoc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgc3RhbmRhcmRfb3B0aW9ucyA9ICgKICAgICAgICB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdLnBpcGVsaW5lLl9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKSkKICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgICBUcmFuc2Zvcm1OYW1lcy5SRUFELCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsICdwdWJzdWInKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9TVUJTQ1JJUFRJT04sICdfc3RhcnRpbmdfc2lnbmFsLycpCgogICAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sCiAgICAgICAgICBbe1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICAgJyVzLiVzJyAlICgKICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVR9XSkKICAgIGVsc2U6CiAgICAgIFZhbHVlRXJyb3IoJ0ltcHVsc2Ugc291cmNlIGZvciBiYXRjaCBwaXBlbGluZXMgaGFzIG5vdCBiZWVuIGRlZmluZWQuJykKCiAgZGVmIHJ1bl9GbGF0dGVuKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcChUcmFuc2Zvcm1OYW1lcy5GTEFUVEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgaW5wdXRzID0gW10KICAgIGZvciBvbmVfaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICBpbnB1dF9zdGVwID0gc2VsZi5fY2FjaGUuZ2V0X3B2YWx1ZShvbmVfaW5wdXQpCiAgICAgIGlucHV0cy5hcHBlbmQoCiAgICAgICAgICB7J0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBpbnB1dF9zdGVwLmdldF9vdXRwdXQob25lX2lucHV0LnRhZyl9KQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5JTlBVVFMsIGlucHV0cykKICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfV0pCgogIGRlZiBhcHBseV9Xcml0ZVRvQmlnUXVlcnkoc2VsZiwgdHJhbnNmb3JtLCBwY29sbCk6CiAgICAjIE1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBXcml0ZVRvQmlnUXVlcnkgY2xhc3MgdGhhdCB3ZSBleHBlY3RlZAogICAgaWYgbm90IGlzaW5zdGFuY2UodHJhbnNmb3JtLCBiZWFtLmlvLldyaXRlVG9CaWdRdWVyeSk6CiAgICAgIHJldHVybiBzZWxmLmFwcGx5X1BUcmFuc2Zvcm0odHJhbnNmb3JtLCBwY29sbCkKICAgIHN0YW5kYXJkX29wdGlvbnMgPSBwY29sbC5waXBlbGluZS5fb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykKICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICBpZiAodHJhbnNmb3JtLndyaXRlX2Rpc3Bvc2l0aW9uID09CiAgICAgICAgICBiZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEUpOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2FuIG5vdCB1c2Ugd3JpdGUgdHJ1bmNhdGlvbiBtb2RlIGluIHN0cmVhbWluZycpCiAgICAgIHJldHVybiBzZWxmLmFwcGx5X1BUcmFuc2Zvcm0odHJhbnNmb3JtLCBwY29sbCkKICAgIGVsc2U6CiAgICAgIHJldHVybiBwY29sbCAgfCAnV3JpdGVUb0JpZ1F1ZXJ5JyA+PiBiZWFtLmlvLldyaXRlKAogICAgICAgICAgYmVhbS5pby5CaWdRdWVyeVNpbmsoCiAgICAgICAgICAgICAgdHJhbnNmb3JtLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS5zY2hlbWEsCiAgICAgICAgICAgICAgdHJhbnNmb3JtLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgICAgICB0cmFuc2Zvcm0ud3JpdGVfZGlzcG9zaXRpb24pKQoKICBkZWYgYXBwbHlfR3JvdXBCeUtleShzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsKToKICAgICMgSW5mZXIgY29kZXIgb2YgcGFyZW50LgogICAgIwogICAgIyBUT0RPKGNjeSk6IG1ha2UgQ29kZXIgaW5mZXJlbmNlIGFuZCBjaGVja2luZyBsZXNzIHNwZWNpYWxpemVkIGFuZCBtb3JlCiAgICAjIGNvbXByZWhlbnNpdmUuCiAgICBwYXJlbnQgPSBwY29sbC5wcm9kdWNlcgogICAgaWYgcGFyZW50OgogICAgICBjb2RlciA9IHBhcmVudC50cmFuc2Zvcm0uX2luZmVyX291dHB1dF9jb2RlcigpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBpZiBub3QgY29kZXI6CiAgICAgIGNvZGVyID0gc2VsZi5fZ2V0X2NvZGVyKHBjb2xsLmVsZW1lbnRfdHlwZSBvciB0eXBlaGludHMuQW55LCBOb25lKQogICAgaWYgbm90IGNvZGVyLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKCdDb2RlciBmb3IgdGhlIEdyb3VwQnlLZXkgb3BlcmF0aW9uICIlcyIgaXMgbm90IGEgJwogICAgICAgICAgICAgICAgICAgICAgICAna2V5LXZhbHVlIGNvZGVyOiAlcy4nKSAlICh0cmFuc2Zvcm0ubGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVyKSkKICAgICMgVE9ETyhyb2JlcnR3Yik6IFVwZGF0ZSB0aGUgY29kZXIgaXRzZWxmIGlmIGl0IGNoYW5nZWQuCiAgICBjb2RlcnMucmVnaXN0cnkudmVyaWZ5X2RldGVybWluaXN0aWMoCiAgICAgICAgY29kZXIua2V5X2NvZGVyKCksICdHcm91cEJ5S2V5IG9wZXJhdGlvbiAiJXMiJyAlIHRyYW5zZm9ybS5sYWJlbCkKCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgcnVuX0dyb3VwQnlLZXkoc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLkdST1VQLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuUEFSQUxMRUxfSU5QVVQsCiAgICAgICAgeydAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLlNURVBfTkFNRTogaW5wdXRfc3RlcC5wcm90by5uYW1lLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBpbnB1dF9zdGVwLmdldF9vdXRwdXQoaW5wdXRfdGFnKX0pCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfSU5GTywKICAgICAgICBbe1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVH1dKQogICAgd2luZG93aW5nID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLmdldF93aW5kb3dpbmcoCiAgICAgICAgdHJhbnNmb3JtX25vZGUuaW5wdXRzKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5TRVJJQUxJWkVEX0ZOLAogICAgICAgIHNlbGYuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneSh3aW5kb3dpbmcpKQoKICBkZWYgcnVuX1BhckRvKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQoKICAgICMgQXR0YWNoIHNpZGUgaW5wdXRzLgogICAgc2lfZGljdCA9IHt9CiAgICAjIFdlIG11c3QgY2FsbCBzZWxmLl9jYWNoZS5nZXRfcHZhbHVlIGV4YWN0bHkgb25jZSBkdWUgdG8gcmVmY291bnRpbmcuCiAgICBzaV9sYWJlbHMgPSB7fQogICAgZnVsbF9sYWJlbF9jb3VudHMgPSBkZWZhdWx0ZGljdChpbnQpCiAgICBsb29rdXBfbGFiZWwgPSBsYW1iZGEgc2lkZV9wdmFsOiBzaV9sYWJlbHNbc2lkZV9wdmFsXQogICAgZm9yIHNpZGVfcHZhbCBpbiB0cmFuc2Zvcm1fbm9kZS5zaWRlX2lucHV0czoKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2lkZV9wdmFsLCBBc1NpZGVJbnB1dCkKICAgICAgc3RlcF9udW1iZXIgPSBzZWxmLl9nZXRfdW5pcXVlX3N0ZXBfbmFtZSgpCiAgICAgIHNpX2xhYmVsID0gJ1NpZGVJbnB1dC0nICsgc3RlcF9udW1iZXIKICAgICAgcGNvbGxlY3Rpb25fbGFiZWwgPSAnJXMuJXMnICUgKAogICAgICAgICAgc2lkZV9wdmFsLnB2YWx1ZS5wcm9kdWNlci5mdWxsX2xhYmVsLnNwbGl0KCcvJylbLTFdLAogICAgICAgICAgc2lkZV9wdmFsLnB2YWx1ZS50YWcgaWYgc2lkZV9wdmFsLnB2YWx1ZS50YWcgZWxzZSAnb3V0JykKICAgICAgc2lfZnVsbF9sYWJlbCA9ICclcy8lcyglcy4lcyknICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX3B2YWwuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNvbGxlY3Rpb25fbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2xhYmVsX2NvdW50c1twY29sbGVjdGlvbl9sYWJlbF0pCgogICAgICAjIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHNhbWUgUENvbGxlY3Rpb24gaXMgYSBzaWRlIGlucHV0CiAgICAgICMgdG8gdGhlIHNhbWUgUGFyRG8uCiAgICAgIGZ1bGxfbGFiZWxfY291bnRzW3Bjb2xsZWN0aW9uX2xhYmVsXSArPSAxCgogICAgICBzZWxmLl9hZGRfc2luZ2xldG9uX3N0ZXAoCiAgICAgICAgICBzaV9sYWJlbCwgc2lfZnVsbF9sYWJlbCwgc2lkZV9wdmFsLnB2YWx1ZS50YWcsCiAgICAgICAgICBzZWxmLl9jYWNoZS5nZXRfcHZhbHVlKHNpZGVfcHZhbC5wdmFsdWUpKQogICAgICBzaV9kaWN0W3NpX2xhYmVsXSA9IHsKICAgICAgICAgICdAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IHNpX2xhYmVsLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVR9CiAgICAgIHNpX2xhYmVsc1tzaWRlX3B2YWxdID0gc2lfbGFiZWwKCiAgICAjIE5vdyBjcmVhdGUgdGhlIHN0ZXAgZm9yIHRoZSBQYXJEbyB0cmFuc2Zvcm0gYmVpbmcgaGFuZGxlZC4KICAgIHRyYW5zZm9ybV9uYW1lID0gdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbC5yc3BsaXQoJy8nLCAxKVstMV0KICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5ETywKICAgICAgICB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsICsgKAogICAgICAgICAgICAnL3t9Jy5mb3JtYXQodHJhbnNmb3JtX25hbWUpCiAgICAgICAgICAgIGlmIHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzIGVsc2UgJycpLAogICAgICAgIHRyYW5zZm9ybV9ub2RlLAogICAgICAgIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybS5vdXRwdXRfdGFncykKICAgIGZuX2RhdGEgPSBzZWxmLl9wYXJkb19mbl9kYXRhKHRyYW5zZm9ybV9ub2RlLCBsb29rdXBfbGFiZWwpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlNFUklBTElaRURfRk4sIHBpY2tsZXIuZHVtcHMoZm5fZGF0YSkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogaW5wdXRfc3RlcC5nZXRfb3V0cHV0KGlucHV0X3RhZyl9KQogICAgIyBBZGQgc2lkZSBpbnB1dHMgaWYgYW55LgogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5OT05fUEFSQUxMRUxfSU5QVVRTLCBzaV9kaWN0KQoKICAgICMgR2VuZXJhdGUgZGVzY3JpcHRpb24gZm9yIHRoZSBvdXRwdXRzLiBUaGUgb3V0cHV0IG5hbWVzCiAgICAjIHdpbGwgYmUgJ291dCcgZm9yIG1haW4gb3V0cHV0IGFuZCAnb3V0Xzx0YWc+JyBmb3IgYSB0YWdnZWQgb3V0cHV0LgogICAgIyBVc2luZyAnb3V0JyBhcyBhIHRhZyB3aWxsIG5vdCBjbGFzaCB3aXRoIHRoZSBuYW1lIGZvciBtYWluIHNpbmNlIGl0IHdpbGwKICAgICMgYmUgdHJhbnNmb3JtZWQgaW50byAnb3V0X291dCcgaW50ZXJuYWxseS4KICAgIG91dHB1dHMgPSBbXQogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9lbmNvZGVkX291dHB1dF9jb2Rlcih0cmFuc2Zvcm1fbm9kZSkKCiAgICAjIEFkZCB0aGUgbWFpbiBvdXRwdXQgdG8gdGhlIGRlc2NyaXB0aW9uLgogICAgb3V0cHV0cy5hcHBlbmQoCiAgICAgICAge1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVR9KQogICAgZm9yIHNpZGVfdGFnIGluIHRyYW5zZm9ybS5vdXRwdXRfdGFnczoKICAgICAgIyBUaGUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYWxsIG91dHB1dHMgd2lsbCBoYXZlIHRoZSBzYW1lIHR5cGVoaW50CiAgICAgICMgYW5kIGNvZGVyIGFzIHRoZSBtYWluIG91dHB1dC4gVGhpcyBpcyBjZXJ0YWlubHkgdGhlIGNhc2UgcmlnaHQgbm93CiAgICAgICMgYnV0IGNvbmNlaXZhYmx5IGl0IGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICBvdXRwdXRzLmFwcGVuZCgKICAgICAgICAgIHtQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRTogKAogICAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgc2lkZV90YWcpKSwKICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HOiBzdGVwLmVuY29kaW5nLAogICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6ICgKICAgICAgICAgICAgICAgJyVzXyVzJyAlIChQcm9wZXJ0eU5hbWVzLk9VVCwgc2lkZV90YWcpKX0pCgogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5PVVRQVVRfSU5GTywgb3V0cHV0cykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfcGFyZG9fZm5fZGF0YSh0cmFuc2Zvcm1fbm9kZSwgZ2V0X2xhYmVsKToKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgc2lfdGFnc19hbmRfdHlwZXMgPSBbICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgKGdldF9sYWJlbChzaWRlX3B2YWwpLCBzaWRlX3B2YWwuX19jbGFzc19fLCBzaWRlX3B2YWwuX3ZpZXdfb3B0aW9ucygpKQogICAgICAgIGZvciBzaWRlX3B2YWwgaW4gdHJhbnNmb3JtX25vZGUuc2lkZV9pbnB1dHNdCiAgICByZXR1cm4gKHRyYW5zZm9ybS5mbiwgdHJhbnNmb3JtLmFyZ3MsIHRyYW5zZm9ybS5rd2FyZ3MsIHNpX3RhZ3NfYW5kX3R5cGVzLAogICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0ud2luZG93aW5nKQoKICBkZWYgYXBwbHlfQ29tYmluZVZhbHVlcyhzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsKToKICAgICMgVE9ETyhCRUFNLTI5MzcpOiBEaXNhYmxlIGNvbWJpbmVyIGxpZnRpbmcgZm9yIGZuYXBpLiBSZW1vdmUgdGhpcwogICAgIyByZXN0cmljdGlvbnMgb25jZSB0aGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGluIHRoZSBkYXRhZmxvdyBydW5uZXIKICAgICMgaGFybmVzcy4KICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgaWYgYXBpY2xpZW50Ll91c2VfZm5hcGkocGNvbGwucGlwZWxpbmUuX29wdGlvbnMpOgogICAgICByZXR1cm4gc2VsZi5hcHBseV9QVHJhbnNmb3JtKHRyYW5zZm9ybSwgcGNvbGwpCgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwY29sbC5waXBlbGluZSkKCiAgZGVmIHJ1bl9Db21iaW5lVmFsdWVzKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLkNPTUJJTkUsIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgIyBDb21iaW5lciBmdW5jdGlvbnMgZG8gbm90IHRha2UgZGVmZXJyZWQgc2lkZS1pbnB1dHMgKGkuZS4gUFZhbHVlcykgYW5kCiAgICAjIHRoZXJlZm9yZSB0aGUgY29kZSB0byBoYW5kbGUgZXh0cmEgYXJncy9rd2FyZ3MgaXMgc2ltcGxlciB0aGFuIGZvciB0aGUKICAgICMgRG9GbidzIG9mIHRoZSBQYXJEbyB0cmFuc2Zvcm0uIEluIHRoZSBsYXN0LCBlbXB0eSBhcmd1bWVudCBpcyB3aGVyZQogICAgIyBzaWRlIGlucHV0cyBpbmZvcm1hdGlvbiB3b3VsZCBnby4KICAgIGZuX2RhdGEgPSAodHJhbnNmb3JtLmZuLCB0cmFuc2Zvcm0uYXJncywgdHJhbnNmb3JtLmt3YXJncywgKCkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlNFUklBTElaRURfRk4sCiAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyLmR1bXBzKGZuX2RhdGEpKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5QQVJBTExFTF9JTlBVVCwKICAgICAgICB7J0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpfSkKICAgICMgTm90ZSB0aGF0IHRoZSBhY2N1bXVsYXRvciBtdXN0IG5vdCBoYXZlIGEgV2luZG93ZWRWYWx1ZSBlbmNvZGluZywgd2hpbGUKICAgICMgdGhlIG91dHB1dCBvZiB0aGlzIHN0ZXAgZG9lcyBpbiBmYWN0IGhhdmUgYSBXaW5kb3dlZFZhbHVlIGVuY29kaW5nLgogICAgYWNjdW11bGF0b3JfZW5jb2RpbmcgPSBzZWxmLl9nZXRfY2xvdWRfZW5jb2RpbmcoCiAgICAgICAgdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLmZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcigpKQogICAgb3V0cHV0X2VuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQoKICAgIHN0ZXAuZW5jb2RpbmcgPSBvdXRwdXRfZW5jb2RpbmcKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRU5DT0RJTkcsIGFjY3VtdWxhdG9yX2VuY29kaW5nKQogICAgIyBHZW5lcmF0ZSBkZXNjcmlwdGlvbiBmb3IgbWFpbiBvdXRwdXQgJ291dC4nCiAgICBvdXRwdXRzID0gW10KICAgICMgQWRkIHRoZSBtYWluIG91dHB1dCB0byB0aGUgZGVzY3JpcHRpb24uCiAgICBvdXRwdXRzLmFwcGVuZCgKICAgICAgICB7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HOiBzdGVwLmVuY29kaW5nLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVH0pCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLCBvdXRwdXRzKQoKICBkZWYgcnVuX1JlYWQoc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuUkVBRCwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdHJhbnNmb3JtX25vZGUpCiAgICAjIFRPRE8obWFpcmJlayk6IHJlZmFjdG9yIGlmLWVsc2UgdHJlZSB0byB1c2UgcmVnaXN0ZXJhYmxlIGZ1bmN0aW9ucy4KICAgICMgSW5pdGlhbGl6ZSB0aGUgc291cmNlIHNwZWNpZmljIHByb3BlcnRpZXMuCgogICAgaWYgbm90IGhhc2F0dHIodHJhbnNmb3JtLnNvdXJjZSwgJ2Zvcm1hdCcpOgogICAgICAjIElmIGEgZm9ybWF0IGlzIG5vdCBzZXQsIHdlIGFzc3VtZSB0aGUgc291cmNlIHRvIGJlIGEgY3VzdG9tIHNvdXJjZS4KICAgICAgc291cmNlX2RpY3QgPSB7fQoKICAgICAgc291cmNlX2RpY3RbJ3NwZWMnXSA9IHsKICAgICAgICAgICdAdHlwZSc6IG5hbWVzLlNPVVJDRV9UWVBFLAogICAgICAgICAgbmFtZXMuU0VSSUFMSVpFRF9TT1VSQ0VfS0VZOiBwaWNrbGVyLmR1bXBzKHRyYW5zZm9ybS5zb3VyY2UpCiAgICAgIH0KCiAgICAgIHRyeToKICAgICAgICBzb3VyY2VfZGljdFsnbWV0YWRhdGEnXSA9IHsKICAgICAgICAgICAgJ2VzdGltYXRlZF9zaXplX2J5dGVzJzoganNvbl92YWx1ZS5nZXRfdHlwZWRfdmFsdWVfZGVzY3JpcHRvcigKICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UuZXN0aW1hdGVfc2l6ZSgpKQogICAgICAgIH0KICAgICAgZXhjZXB0IGVycm9yLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3I6CiAgICAgICAgIyBTaXplIGVzdGltYXRpb24gaXMgYmVzdCBlZmZvcnQsIGFuZCB0aGlzIGVycm9yIGlzIGJ5IHZhbHVlIHByb3ZpZGVyLgogICAgICAgIGxvZ2dpbmcuaW5mbygKICAgICAgICAgICAgJ0NvdWxkIG5vdCBlc3RpbWF0ZSBzaXplIG9mIHNvdXJjZSAlciBkdWUgdG8gJyArIFwKICAgICAgICAgICAgJ1J1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3InLCB0cmFuc2Zvcm0uc291cmNlKQogICAgICBleGNlcHQgRXhjZXB0aW9uOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgIyBTaXplIGVzdGltYXRpb24gaXMgYmVzdCBlZmZvcnQuIFNvIHdlIGxvZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlLgogICAgICAgIGxvZ2dpbmcuaW5mbygKICAgICAgICAgICAgJ0NvdWxkIG5vdCBlc3RpbWF0ZSBzaXplIG9mIHNvdXJjZSAlciBkdWUgdG8gYW4gZXhjZXB0aW9uOiAlcycsCiAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlNPVVJDRV9TVEVQX0lOUFVULAogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZGljdCkKICAgIGVsaWYgdHJhbnNmb3JtLnNvdXJjZS5mb3JtYXQgPT0gJ3RleHQnOgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkZJTEVfUEFUVEVSTiwgdHJhbnNmb3JtLnNvdXJjZS5wYXRoKQogICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCA9PSAnYmlncXVlcnknOgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX0VYUE9SVF9GT1JNQVQsICdGT1JNQVRfQVZSTycpCiAgICAgICMgVE9ETyhzaWx2aXVjKTogQWRkIHRhYmxlIHZhbGlkYXRpb24gaWYgdHJhbnNmb3JtLnNvdXJjZS52YWxpZGF0ZS4KICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9EQVRBU0VULAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCkKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1RBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCiAgICAgICAgIyBJZiBwcm9qZWN0IG93bmluZyB0aGUgdGFibGUgd2FzIG5vdCBzcGVjaWZpZWQgdGhlbiB0aGUgcHJvamVjdCBvd25pbmcKICAgICAgICAjIHRoZSB3b3JrZmxvdyAoY3VycmVudCBwcm9qZWN0KSB3aWxsIGJlIHVzZWQuCiAgICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9QUk9KRUNULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkKQogICAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UucXVlcnkgaXMgbm90IE5vbmU6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9RVUVSWSwgdHJhbnNmb3JtLnNvdXJjZS5xdWVyeSkKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1VTRV9MRUdBQ1lfU1FMLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudXNlX2xlZ2FjeV9zcWwpCiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9GTEFUVEVOX1JFU1VMVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5mbGF0dGVuX3Jlc3VsdHMpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQmlnUXVlcnkgc291cmNlICVyIG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB0YWJsZSBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICcgYSBxdWVyeScsCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlKQogICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCA9PSAncHVic3ViJzoKICAgICAgc3RhbmRhcmRfb3B0aW9ucyA9ICgKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXS5waXBlbGluZS5vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKSkKICAgICAgaWYgbm90IHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1B1YlN1YlBheWxvYWRTb3VyY2UgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGluIHN0cmVhbWluZyBwaXBlbGluZXMuJykKICAgICAgIyBPbmx5IG9uZSBvZiB0b3BpYyBvciBzdWJzY3JpcHRpb24gc2hvdWxkIGJlIHNldC4KICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS5mdWxsX3N1YnNjcmlwdGlvbjoKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9TVUJTQ1JJUFRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5mdWxsX3N1YnNjcmlwdGlvbikKICAgICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLmZ1bGxfdG9waWM6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5QVUJTVUJfVE9QSUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5mdWxsX3RvcGljKQogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLmlkX2xhYmVsOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX0lEX0xBQkVMLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UuaWRfbGFiZWwpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1NvdXJjZSAlciBoYXMgdW5leHBlY3RlZCBmb3JtYXQgJXMuJyAlICgKICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLCB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCkpCgogICAgaWYgbm90IGhhc2F0dHIodHJhbnNmb3JtLnNvdXJjZSwgJ2Zvcm1hdCcpOgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkZPUk1BVCwgbmFtZXMuU09VUkNFX0ZPUk1BVCkKICAgIGVsc2U6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRk9STUFULCB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCkKCiAgICAjIFdyYXAgY29kZXIgaW4gV2luZG93ZWRWYWx1ZUNvZGVyOiB0aGlzIGlzIG5lY2Vzc2FyeSBhcyB0aGUgZW5jb2Rpbmcgb2YgYQogICAgIyBzdGVwIHNob3VsZCBiZSB0aGUgdHlwZSBvZiB2YWx1ZSBvdXRwdXR0ZWQgYnkgZWFjaCBzdGVwLiAgUmVhZCBzdGVwcwogICAgIyBhdXRvbWF0aWNhbGx5IHdyYXAgb3V0cHV0IHZhbHVlcyBpbiBhIFdpbmRvd2VkVmFsdWUgd3JhcHBlciwgaWYgbmVjZXNzYXJ5LgogICAgIyBUaGlzIGlzIGFsc28gbmVjZXNzYXJ5IGZvciBwcm9wZXIgZW5jb2RpbmcgZm9yIHNpemUgZXN0aW1hdGlvbi4KICAgICMgVXNpbmcgYSBHbG9iYWxXaW5kb3dDb2RlciBhcyBhIHBsYWNlIGhvbGRlciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CiAgICAjIFBpY2tsZUNvZGVyIGJlY2F1c2UgR2xvYmFsV2luZG93Q29kZXIgaXMga25vd24gY29kZXIuCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBRdWVyeSB0aGUgY29sbGVjdGlvbiBmb3IgdGhlIHdpbmRvd2ZuIHRvIGV4dHJhY3QgdGhlCiAgICAjIGNvcnJlY3QgY29kZXIuCiAgICBjb2RlciA9IGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIodHJhbnNmb3JtLl9pbmZlcl9vdXRwdXRfY29kZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9jbG91ZF9lbmNvZGluZyhjb2RlcikKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sCiAgICAgICAgW3tQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRTogKAogICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HOiBzdGVwLmVuY29kaW5nLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVR9XSkKCiAgZGVmIHJ1bl9fTmF0aXZlV3JpdGUoc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBpbnB1dF90YWcgPSB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0udGFnCiAgICBpbnB1dF9zdGVwID0gc2VsZi5fY2FjaGUuZ2V0X3B2YWx1ZSh0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0pCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuV1JJVEUsIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgIyBUT0RPKG1haXJiZWspOiByZWZhY3RvciBpZi1lbHNlIHRyZWUgdG8gdXNlIHJlZ2lzdGVyYWJsZSBmdW5jdGlvbnMuCiAgICAjIEluaXRpYWxpemUgdGhlIHNpbmsgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgIGlmIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCA9PSAndGV4dCc6CiAgICAgICMgTm90ZSB0aGF0IGl0IGlzIGltcG9ydGFudCB0byB1c2UgdHlwZWQgcHJvcGVydGllcyAoQHR5cGUvdmFsdWUgZGljdHMpCiAgICAgICMgZm9yIG5vbi1zdHJpbmcgcHJvcGVydGllcyBhbmQgYWxzbyBmb3IgZW1wdHkgc3RyaW5ncy4gRm9yIGV4YW1wbGUsCiAgICAgICMgaW4gdGhlIGNvZGUgYmVsb3cgdGhlIG51bV9zaGFyZHMgbXVzdCBoYXZlIHR5cGUgYW5kIGFsc28KICAgICAgIyBmaWxlX25hbWVfc3VmZml4IGFuZCBzaGFyZF9uYW1lX3RlbXBsYXRlIChjb3VsZCBiZSBlbXB0eSBzdHJpbmdzKS4KICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkZJTEVfTkFNRV9QUkVGSVgsIHRyYW5zZm9ybS5zaW5rLmZpbGVfbmFtZV9wcmVmaXgsCiAgICAgICAgICB3aXRoX3R5cGU9VHJ1ZSkKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkZJTEVfTkFNRV9TVUZGSVgsIHRyYW5zZm9ybS5zaW5rLmZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICB3aXRoX3R5cGU9VHJ1ZSkKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlNIQVJEX05BTUVfVEVNUExBVEUsIHRyYW5zZm9ybS5zaW5rLnNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICB3aXRoX3R5cGU9VHJ1ZSkKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsubnVtX3NoYXJkcyA+IDA6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuTlVNX1NIQVJEUywgdHJhbnNmb3JtLnNpbmsubnVtX3NoYXJkcywgd2l0aF90eXBlPVRydWUpCiAgICAgICMgVE9ETyhzaWx2aXVjKTogSW1wbGVtZW50IHNpbmsgdmFsaWRhdGlvbi4KICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5WQUxJREFURV9TSU5LLCBGYWxzZSwgd2l0aF90eXBlPVRydWUpCiAgICBlbGlmIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCA9PSAnYmlncXVlcnknOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IEFkZCB0YWJsZSB2YWxpZGF0aW9uIGlmIHRyYW5zZm9ybS5zaW5rLnZhbGlkYXRlLgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX0RBVEFTRVQsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfVEFCTEUsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICAjIElmIHByb2plY3Qgb3duaW5nIHRoZSB0YWJsZSB3YXMgbm90IHNwZWNpZmllZCB0aGVuIHRoZSBwcm9qZWN0IG93bmluZwogICAgICAjIHRoZSB3b3JrZmxvdyAoY3VycmVudCBwcm9qZWN0KSB3aWxsIGJlIHVzZWQuCiAgICAgIGlmIHRyYW5zZm9ybS5zaW5rLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9QUk9KRUNULAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfQ1JFQVRFX0RJU1BPU0lUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luay5jcmVhdGVfZGlzcG9zaXRpb24pCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfV1JJVEVfRElTUE9TSVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLndyaXRlX2Rpc3Bvc2l0aW9uKQogICAgICBpZiB0cmFuc2Zvcm0uc2luay50YWJsZV9zY2hlbWEgaXMgbm90IE5vbmU6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfU0NIRU1BLCB0cmFuc2Zvcm0uc2luay5zY2hlbWFfYXNfanNvbigpKQogICAgZWxpZiB0cmFuc2Zvcm0uc2luay5mb3JtYXQgPT0gJ3B1YnN1Yic6CiAgICAgIHN0YW5kYXJkX29wdGlvbnMgPSAoCiAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0ucGlwZWxpbmUub3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykpCiAgICAgIGlmIG5vdCBzdGFuZGFyZF9vcHRpb25zLnN0cmVhbWluZzoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdQdWJTdWJQYXlsb2FkU2luayBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB1c2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4nKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9UT1BJQywgdHJhbnNmb3JtLnNpbmsuZnVsbF90b3BpYykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU2luayAlciBoYXMgdW5leHBlY3RlZCBmb3JtYXQgJXMuJyAlICgKICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luaywgdHJhbnNmb3JtLnNpbmsuZm9ybWF0KSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRk9STUFULCB0cmFuc2Zvcm0uc2luay5mb3JtYXQpCgogICAgIyBXcmFwIGNvZGVyIGluIFdpbmRvd2VkVmFsdWVDb2RlcjogdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciBlbmNvZGluZwogICAgIyBmb3Igc2l6ZSBlc3RpbWF0aW9uLiBVc2luZyBhIEdsb2JhbFdpbmRvd0NvZGVyIGFzIGEgcGxhY2UgaG9sZGVyIGluc3RlYWQKICAgICMgb2YgdGhlIGRlZmF1bHQgUGlja2xlQ29kZXIgYmVjYXVzZSBHbG9iYWxXaW5kb3dDb2RlciBpcyBrbm93biBjb2Rlci4KICAgICMgVE9ETyhyb2JlcnR3Yik6IFF1ZXJ5IHRoZSBjb2xsZWN0aW9uIGZvciB0aGUgd2luZG93Zm4gdG8gZXh0cmFjdCB0aGUKICAgICMgY29ycmVjdCBjb2Rlci4KICAgIGNvZGVyID0gY29kZXJzLldpbmRvd2VkVmFsdWVDb2Rlcih0cmFuc2Zvcm0uc2luay5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2Nsb3VkX2VuY29kaW5nKGNvZGVyKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5FTkNPRElORywgc3RlcC5lbmNvZGluZykKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuUEFSQUxMRUxfSU5QVVQsCiAgICAgICAgeydAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLlNURVBfTkFNRTogaW5wdXRfc3RlcC5wcm90by5uYW1lLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBpbnB1dF9zdGVwLmdldF9vdXRwdXQoaW5wdXRfdGFnKX0pCgogIEBjbGFzc21ldGhvZAogIGRlZiBzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5KGNscywgd2luZG93aW5nKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgcGlwZWxpbmVfY29udGV4dAogICAgZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKICAgIGNvbnRleHQgPSBwaXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCgpCiAgICB3aW5kb3dpbmdfcHJvdG8gPSB3aW5kb3dpbmcudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgcmV0dXJuIGNscy5ieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuTWVzc2FnZVdpdGhDb21wb25lbnRzKAogICAgICAgICAgICBjb21wb25lbnRzPWNvbnRleHQudG9fcnVubmVyX2FwaSgpLAogICAgICAgICAgICB3aW5kb3dpbmdfc3RyYXRlZ3k9d2luZG93aW5nX3Byb3RvKS5TZXJpYWxpemVUb1N0cmluZygpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZGVzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5KGNscywgc2VyaWFsaXplZF9kYXRhKToKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBwaXBlbGluZV9jb250ZXh0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd2luZwogICAgcHJvdG8gPSBiZWFtX3J1bm5lcl9hcGlfcGIyLk1lc3NhZ2VXaXRoQ29tcG9uZW50cygpCiAgICBwcm90by5QYXJzZUZyb21TdHJpbmcoY2xzLmpzb25fc3RyaW5nX3RvX2J5dGVfYXJyYXkoc2VyaWFsaXplZF9kYXRhKSkKICAgIHJldHVybiBXaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHByb3RvLndpbmRvd2luZ19zdHJhdGVneSwKICAgICAgICBwaXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dChwcm90by5jb21wb25lbnRzKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKHJhd19ieXRlcyk6CiAgICAiIiJJbXBsZW1lbnRzIG9yZy5hcGFjaGUuYmVhbS5zZGsudXRpbC5TdHJpbmdVdGlscy5ieXRlQXJyYXlUb0pzb25TdHJpbmcuIiIiCiAgICByZXR1cm4gdXJsbGliLnF1b3RlKHJhd19ieXRlcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBqc29uX3N0cmluZ190b19ieXRlX2FycmF5KGVuY29kZWRfc3RyaW5nKToKICAgICIiIkltcGxlbWVudHMgb3JnLmFwYWNoZS5iZWFtLnNkay51dGlsLlN0cmluZ1V0aWxzLmpzb25TdHJpbmdUb0J5dGVBcnJheS4iIiIKICAgIHJldHVybiB1cmxsaWIudW5xdW90ZShlbmNvZGVkX3N0cmluZykKCgpjbGFzcyBEYXRhZmxvd1BpcGVsaW5lUmVzdWx0KFBpcGVsaW5lUmVzdWx0KToKICAiIiJSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIHBpcGVsaW5lIHJ1biBvbiB0aGUgRGF0YWZsb3cgc2VydmljZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGpvYiwgcnVubmVyKToKICAgICIiIkluaXRpYWxpemUgYSBuZXcgRGF0YWZsb3dQaXBlbGluZVJlc3VsdCBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICBqb2I6IEpvYiBtZXNzYWdlIGZyb20gdGhlIERhdGFmbG93IEFQSS4gQ291bGQgYmUgOmRhdGE6YE5vbmVgIGlmIGEgam9iCiAgICAgICAgcmVxdWVzdCB3YXMgbm90IHNlbnQgdG8gRGF0YWZsb3cgc2VydmljZSAoZS5nLiB0ZW1wbGF0ZSBqb2JzKS4KICAgICAgcnVubmVyOiBEYXRhZmxvd1J1bm5lciBpbnN0YW5jZS4KICAgICIiIgogICAgc2VsZi5fam9iID0gam9iCiAgICBzZWxmLl9ydW5uZXIgPSBydW5uZXIKICAgIHNlbGYubWV0cmljX3Jlc3VsdHMgPSBOb25lCgogIGRlZiBfdXBkYXRlX2pvYihzZWxmKToKICAgICMgV2UgbmVlZCB0aGUgam9iIGlkIHRvIGJlIGFibGUgdG8gdXBkYXRlIGpvYiBpbmZvcm1hdGlvbi4gVGhlcmUgaXMgbm8gbmVlZAogICAgIyB0byB1cGRhdGUgdGhlIGpvYiBpZiB3ZSBhcmUgaW4gYSBrbm93biB0ZXJtaW5hbCBzdGF0ZS4KICAgIGlmIHNlbGYuaGFzX2pvYiBhbmQgbm90IHNlbGYuX2lzX2luX3Rlcm1pbmFsX3N0YXRlKCk6CiAgICAgIHNlbGYuX2pvYiA9IHNlbGYuX3J1bm5lci5kYXRhZmxvd19jbGllbnQuZ2V0X2pvYihzZWxmLmpvYl9pZCgpKQoKICBkZWYgam9iX2lkKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2pvYi5pZAoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgIHJldHVybiBzZWxmLm1ldHJpY19yZXN1bHRzCgogIEBwcm9wZXJ0eQogIGRlZiBoYXNfam9iKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2pvYiBpcyBub3QgTm9uZQoKICBAcHJvcGVydHkKICBkZWYgc3RhdGUoc2VsZik6CiAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbW90ZSBqb2IuCgogICAgUmV0dXJuczoKICAgICAgQSBQaXBlbGluZVN0YXRlIG9iamVjdC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuaGFzX2pvYjoKICAgICAgcmV0dXJuIFBpcGVsaW5lU3RhdGUuVU5LTk9XTgoKICAgIHNlbGYuX3VwZGF0ZV9qb2IoKQoKICAgIHZhbHVlc19lbnVtID0gZGF0YWZsb3dfYXBpLkpvYi5DdXJyZW50U3RhdGVWYWx1ZVZhbHVlc0VudW0KCiAgICAjIFRPRE86IE1vdmUgdGhpcyB0YWJsZSB0byBhIGFub3RoZXIgbG9jYXRpb24uCiAgICAjIE9yZGVyZWQgYnkgdGhlIGVudW0gdmFsdWVzLgogICAgYXBpX2pvYnN0YXRlX21hcCA9IHsKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfVU5LTk9XTjogUGlwZWxpbmVTdGF0ZS5VTktOT1dOLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9TVE9QUEVEOiBQaXBlbGluZVN0YXRlLlNUT1BQRUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1JVTk5JTkc6IFBpcGVsaW5lU3RhdGUuUlVOTklORywKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfRE9ORTogUGlwZWxpbmVTdGF0ZS5ET05FLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9GQUlMRUQ6IFBpcGVsaW5lU3RhdGUuRkFJTEVELAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9DQU5DRUxMRUQ6IFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTEVELAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9VUERBVEVEOiBQaXBlbGluZVN0YXRlLlVQREFURUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX0RSQUlOSU5HOiBQaXBlbGluZVN0YXRlLkRSQUlOSU5HLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9EUkFJTkVEOiBQaXBlbGluZVN0YXRlLkRSQUlORUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1BFTkRJTkc6IFBpcGVsaW5lU3RhdGUuUEVORElORywKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfQ0FOQ0VMTElORzogUGlwZWxpbmVTdGF0ZS5DQU5DRUxMSU5HLAogICAgfQoKICAgIHJldHVybiAoYXBpX2pvYnN0YXRlX21hcFtzZWxmLl9qb2IuY3VycmVudFN0YXRlXSBpZiBzZWxmLl9qb2IuY3VycmVudFN0YXRlCiAgICAgICAgICAgIGVsc2UgUGlwZWxpbmVTdGF0ZS5VTktOT1dOKQoKICBkZWYgX2lzX2luX3Rlcm1pbmFsX3N0YXRlKHNlbGYpOgogICAgaWYgbm90IHNlbGYuaGFzX2pvYjoKICAgICAgcmV0dXJuIFRydWUKCiAgICB2YWx1ZXNfZW51bSA9IGRhdGFmbG93X2FwaS5Kb2IuQ3VycmVudFN0YXRlVmFsdWVWYWx1ZXNFbnVtCiAgICByZXR1cm4gc2VsZi5fam9iLmN1cnJlbnRTdGF0ZSBpbiBbCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1NUT1BQRUQsIHZhbHVlc19lbnVtLkpPQl9TVEFURV9ET05FLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9GQUlMRUQsIHZhbHVlc19lbnVtLkpPQl9TVEFURV9DQU5DRUxMRUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1VQREFURUQsIHZhbHVlc19lbnVtLkpPQl9TVEFURV9EUkFJTkVEXQoKICBkZWYgd2FpdF91bnRpbF9maW5pc2goc2VsZiwgZHVyYXRpb249Tm9uZSk6CiAgICBpZiBub3Qgc2VsZi5faXNfaW5fdGVybWluYWxfc3RhdGUoKToKICAgICAgaWYgbm90IHNlbGYuaGFzX2pvYjoKICAgICAgICByYWlzZSBJT0Vycm9yKCdGYWlsZWQgdG8gZ2V0IHRoZSBEYXRhZmxvdyBqb2IgaWQuJykKCiAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICB0YXJnZXQ9RGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb24sCiAgICAgICAgICBhcmdzPShzZWxmLl9ydW5uZXIsIHNlbGYsIGR1cmF0aW9uKSkKCiAgICAgICMgTWFyayB0aGUgdGhyZWFkIGFzIGEgZGFlbW9uIHRocmVhZCBzbyBhIGtleWJvYXJkIGludGVycnVwdCBvbiB0aGUgbWFpbgogICAgICAjIHRocmVhZCB3aWxsIHRlcm1pbmF0ZSBldmVyeXRoaW5nLiBUaGlzIGlzIGFsc28gdGhlIHJlYXNvbiB3ZSB3aWxsIG5vdAogICAgICAjIHVzZSB0aHJlYWQuam9pbigpIHRvIHdhaXQgZm9yIHRoZSBwb2xsaW5nIHRocmVhZC4KICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgICAgdGhyZWFkLnN0YXJ0KCkKICAgICAgd2hpbGUgdGhyZWFkLmlzQWxpdmUoKToKICAgICAgICB0aW1lLnNsZWVwKDUuMCkKCiAgICAgICMgVE9ETzogTWVyZ2UgdGhlIHRlcm1pbmF0aW9uIGNvZGUgaW4gcG9sbF9mb3Jfam9iX2NvbXBsZXRpb24gYW5kCiAgICAgICMgX2lzX2luX3Rlcm1pbmFsX3N0YXRlLgogICAgICB0ZXJtaW5hdGVkID0gc2VsZi5faXNfaW5fdGVybWluYWxfc3RhdGUoKQogICAgICBhc3NlcnQgZHVyYXRpb24gb3IgdGVybWluYXRlZCwgKAogICAgICAgICAgJ0pvYiBkaWQgbm90IHJlYWNoIHRvIGEgdGVybWluYWwgc3RhdGUgYWZ0ZXIgd2FpdGluZyBpbmRlZmluaXRlbHkuJykKCiAgICAgIGlmIHRlcm1pbmF0ZWQgYW5kIHNlbGYuc3RhdGUgIT0gUGlwZWxpbmVTdGF0ZS5ET05FOgogICAgICAgICMgVE9ETyhCRUFNLTEyOTApOiBDb25zaWRlciBjb252ZXJ0aW5nIHRoaXMgdG8gYW4gZXJyb3IgbG9nIGJhc2VkIG9uCiAgICAgICAgIyB0aGVyZXNvbHV0aW9uIG9mIHRoZSBpc3N1ZS4KICAgICAgICByYWlzZSBEYXRhZmxvd1J1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICdEYXRhZmxvdyBwaXBlbGluZSBmYWlsZWQuIFN0YXRlOiAlcywgRXJyb3I6XG4lcycgJQogICAgICAgICAgICAoc2VsZi5zdGF0ZSwgZ2V0YXR0cihzZWxmLl9ydW5uZXIsICdsYXN0X2Vycm9yX21zZycsIE5vbmUpKSwgc2VsZikKICAgIHJldHVybiBzZWxmLnN0YXRlCgogIGRlZiBjYW5jZWwoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5oYXNfam9iOgogICAgICByYWlzZSBJT0Vycm9yKCdGYWlsZWQgdG8gZ2V0IHRoZSBEYXRhZmxvdyBqb2IgaWQuJykKCiAgICBzZWxmLl91cGRhdGVfam9iKCkKCiAgICBpZiBzZWxmLl9pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAnQ2FuY2VsIGZhaWxlZCBiZWNhdXNlIGpvYiAlcyBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQgaW4gc3RhdGUgJXMuJywKICAgICAgICAgIHNlbGYuam9iX2lkKCksIHNlbGYuc3RhdGUpCiAgICBlbHNlOgogICAgICBpZiBub3Qgc2VsZi5fcnVubmVyLmRhdGFmbG93X2NsaWVudC5tb2RpZnlfam9iX3N0YXRlKAogICAgICAgICAgc2VsZi5qb2JfaWQoKSwgJ0pPQl9TVEFURV9DQU5DRUxMRUQnKToKICAgICAgICBjYW5jZWxfZmFpbGVkX21lc3NhZ2UgPSAoCiAgICAgICAgICAgICdGYWlsZWQgdG8gY2FuY2VsIGpvYiAlcywgcGxlYXNlIGdvIHRvIHRoZSBEZXZlbG9wZXJzIENvbnNvbGUgdG8gJwogICAgICAgICAgICAnY2FuY2VsIGl0IG1hbnVhbGx5LicpICUgc2VsZi5qb2JfaWQoKQogICAgICAgIGxvZ2dpbmcuZXJyb3IoY2FuY2VsX2ZhaWxlZF9tZXNzYWdlKQogICAgICAgIHJhaXNlIERhdGFmbG93UnVudGltZUV4Y2VwdGlvbihjYW5jZWxfZmFpbGVkX21lc3NhZ2UsIHNlbGYpCgogICAgcmV0dXJuIHNlbGYuc3RhdGUKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyAlcyAlcz4nICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHNlbGYuam9iX2lkKCksCiAgICAgICAgc2VsZi5zdGF0ZSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgJXMgYXQgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fam9iLCBoZXgoaWQoc2VsZikpKQoKCmNsYXNzIERhdGFmbG93UnVudGltZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICIiIkluZGljYXRlcyBhbiBlcnJvciBoYXMgb2NjdXJyZWQgaW4gcnVubmluZyB0aGlzIHBpcGVsaW5lLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCByZXN1bHQpOgogICAgc3VwZXIoRGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhtc2cpCiAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAp9cqsBAAAoWEAAAABEYXRhZmxvd1J1bm5lci5ncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvci5Hcm91cEJ5S2V5SW5wdXRWaXNpdG9yWAUAAABjbGFzc0vES/CHWCcAAABEYXRhZmxvd1J1bm5lci5fZ2V0X3NpZGVfaW5wdXRfZW5jb2RpbmdYAwAAAGRlZk1WAU1lAYdYIgAAAERhdGFmbG93UnVubmVyLl9nZXRfY2xvdWRfZW5jb2RpbmdYAwAAAGRlZk1PAU1VAYdYKwAAAERhdGFmbG93UnVubmVyLl9nZXRfdHlwZWhpbnRfYmFzZWRfZW5jb2RpbmdYAwAAAGRlZk1BAU1FAYdYIgAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX3VwZGF0ZV9qb2JYAwAAAGRlZk17A02AA4dYFwAAAERhdGFmbG93UnVubmVyLl9faW5pdF9fWAMAAABkZWZLUktXh1ghAAAARGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uLl9faW5pdF9fWAMAAABkZWZN9wNN+gOHWDgAAABEYXRhZmxvd1J1bm5lci5mbGF0dGVuX2lucHV0X3Zpc2l0b3IuRmxhdHRlbklucHV0VmlzaXRvclgFAAAAY2xhc3NL+E0FAYdYHAAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuc3RhdGVYAwAAAGRlZk2LA02rA4dYFgAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHRYBQAAAGNsYXNzTWwDTfIDh1gdAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC5qb2JfaWRYAwAAAGRlZk2BA02DA4dYJgAAAERhdGFmbG93UnVubmVyLnBvbGxfZm9yX2pvYl9jb21wbGV0aW9uWAMAAABkZWZLXEu+h1goAAAARGF0YWZsb3dSdW5uZXIuX2dldF9lbmNvZGVkX291dHB1dF9jb2RlclgDAAAAZGVmTWYBTXgBh1gYAAAARGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uWAUAAABjbGFzc030A036A4dYIAAAAERhdGFmbG93UnVubmVyLnJ1bl9Db21iaW5lVmFsdWVzWAMAAABkZWZNdAJNlwKHWCIAAABEYXRhZmxvd1J1bm5lci5hcHBseV9Db21iaW5lVmFsdWVzWAMAAABkZWZNaAJNcwKHWCwAAABEYXRhZmxvd1BpcGVsaW5lUmVzdWx0Ll9pc19pbl90ZXJtaW5hbF9zdGF0ZVgDAAAAZGVmTawDTbUDh1gaAAAARGF0YWZsb3dSdW5uZXIucnVuX0ltcHVsc2VYAwAAAGRlZk2oAU27AYdYHgAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19zdHJfX1gDAAAAZGVmTeoDTe8Dh1gbAAAARGF0YWZsb3dSdW5uZXIucnVuX3BpcGVsaW5lWAMAAABkZWZNCAFNQAGHWC0AAABEYXRhZmxvd1J1bm5lci5kZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3lYAwAAAGRlZk1UA01gA4dYUAAAAERhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9yLkdyb3VwQnlLZXlJbnB1dFZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZLzEvwh1gpAAAARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3JYAwAAAGRlZku/S/KHWCsAAABEYXRhZmxvd1J1bm5lci5zZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5WAMAAABkZWZNSQNNUwOHWEgAAABEYXRhZmxvd1J1bm5lci5mbGF0dGVuX2lucHV0X3Zpc2l0b3IuRmxhdHRlbklucHV0VmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZkv9TQUBh1hiAAAARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3IuR3JvdXBCeUtleUlucHV0VmlzaXRvci52aXNpdF90cmFuc2Zvcm0uY29lcmNlX3RvX2t2X3R5cGVYAwAAAGRlZkvXS++HWBkAAABEYXRhZmxvd1J1bm5lci5fZ2V0X2NvZGVyWAMAAABkZWZNRgFNTgGHWA4AAABEYXRhZmxvd1J1bm5lclgFAAAAY2xhc3NLOU1qA4dYHwAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19pbml0X19YAwAAAGRlZk1vA016A4dYGgAAAERhdGFmbG93UnVubmVyLnJ1bl9GbGF0dGVuWAMAAABkZWZNvAFNzgGHWCQAAABEYXRhZmxvd1J1bm5lci5hcHBseV9Xcml0ZVRvQmlnUXVlcnlYAwAAAGRlZk3PAU3iAYdYHQAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuY2FuY2VsWAMAAABkZWZN1QNN6QOHWB8AAABEYXRhZmxvd1J1bm5lci5ydW5fX05hdGl2ZVdyaXRlWAMAAABkZWZNAANNSAOHWB0AAABEYXRhZmxvd1J1bm5lci5ydW5fR3JvdXBCeUtleVgDAAAAZGVmTfcBTQ0Ch1goAAAARGF0YWZsb3dSdW5uZXIuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheVgDAAAAZGVmTWYDTWoDh1gXAAAARGF0YWZsb3dSdW5uZXIucnVuX1JlYWRYAwAAAGRlZk2YAk3/AodYJAAAAERhdGFmbG93UnVubmVyLmZsYXR0ZW5faW5wdXRfdmlzaXRvclgDAAAAZGVmS/NNBwGHWB8AAABEYXRhZmxvd1J1bm5lci5hcHBseV9Hcm91cEJ5S2V5WAMAAABkZWZN4wFN9gGHWCQAAABEYXRhZmxvd1J1bm5lci5fZ2V0X3VuaXF1ZV9zdGVwX25hbWVYAwAAAGRlZktYS1uHWCgAAABEYXRhZmxvd1J1bm5lci5ieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nWAMAAABkZWZNYQNNZQOHWDEAAABEYXRhZmxvd1J1bm5lci5wb2xsX2Zvcl9qb2JfY29tcGxldGlvbi5yYW5rX2Vycm9yWAMAAABkZWZLdkt8h1geAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC5oYXNfam9iWAMAAABkZWZNhwNNigOHWCgAAABEYXRhZmxvd1BpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoWAMAAABkZWZNtgNN1AOHWCIAAABEYXRhZmxvd1J1bm5lci5fYWRkX3NpbmdsZXRvbl9zdGVwWAMAAABkZWZNkwFNpwGHWB4AAABEYXRhZmxvd1BpcGVsaW5lUmVzdWx0Lm1ldHJpY3NYAwAAAGRlZk2EA02GA4dYHwAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19yZXByX19YAwAAAGRlZk3wA03yA4dYGAAAAERhdGFmbG93UnVubmVyLl9hZGRfc3RlcFgDAAAAZGVmTXkBTZIBh1gYAAAARGF0YWZsb3dSdW5uZXIucnVuX1BhckRvWAMAAABkZWZNDgJNXgKHWB0AAABEYXRhZmxvd1J1bm5lci5fcGFyZG9fZm5fZGF0YVgDAAAAZGVmTV8CTWcCh3V9cqwBAAAoWCAAAABEYXRhZmxvd1J1bm5lci5ydW5fQ29tYmluZVZhbHVlc1gsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXJyrQEAAFgpAAAARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3JqrQEAAFgkAAAARGF0YWZsb3dSdW5uZXIuYXBwbHlfV3JpdGVUb0JpZ1F1ZXJ5aq0BAABYIgAAAERhdGFmbG93UnVubmVyLmFwcGx5X0NvbWJpbmVWYWx1ZXNqrQEAAFgXAAAARGF0YWZsb3dSdW5uZXIucnVuX1JlYWRqrQEAAFgkAAAARGF0YWZsb3dSdW5uZXIuZmxhdHRlbl9pbnB1dF92aXNpdG9yaq0BAABYHwAAAERhdGFmbG93UnVubmVyLmFwcGx5X0dyb3VwQnlLZXlqrQEAAFgoAAAARGF0YWZsb3dSdW5uZXIuYnl0ZV9hcnJheV90b19qc29uX3N0cmluZ2qtAQAAWA4AAABEYXRhZmxvd1J1bm5lcmqtAQAAWBsAAABEYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmVqrQEAAFgoAAAARGF0YWZsb3dSdW5uZXIuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheWqtAQAAWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZWqtAQAAWB0AAABEYXRhZmxvd1J1bm5lci5ydW5fR3JvdXBCeUtleWqtAQAAWC0AAABEYXRhZmxvd1J1bm5lci5kZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3lqrQEAAFgfAAAARGF0YWZsb3dSdW5uZXIucnVuX19OYXRpdmVXcml0ZWqtAQAAWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fRmxhdHRlbmqtAQAAWBgAAABEYXRhZmxvd1J1bm5lci5ydW5fUGFyRG9qrQEAAFgmAAAARGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb25qrQEAAFgrAAAARGF0YWZsb3dSdW5uZXIuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneWqtAQAAdWiKWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnKuAQAAhYFyrwEAAH1ysAEAAGJ0crEBAABVK2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW9ysgEAAChYNU4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBjb25uZWN0b3IgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBHb29nbGUgQ2xvdWQgRGF0YXN0b3JlIiIiCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGltZQoKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCBoZWxwZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCBxdWVyeV9zcGxpdHRlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlciBpbXBvcnQgQWRhcHRpdmVUaHJvdHRsZXIKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyBpbXBvcnQgTWV0cmljcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IENyZWF0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBGbGF0TWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgR3JvdXBCeUtleQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCBpbXBvcnQgVmFsdWVzCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgZGF0YXN0b3JlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZGF0YXN0b3JlX3BiMgogIGZyb20gZ29vZ2xlZGF0YXN0b3JlIGltcG9ydCBoZWxwZXIgYXMgZGF0YXN0b3JlX2hlbHBlcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKX19hbGxfXyA9IFsnUmVhZEZyb21EYXRhc3RvcmUnLCAnV3JpdGVUb0RhdGFzdG9yZScsICdEZWxldGVGcm9tRGF0YXN0b3JlJ10KCgpjbGFzcyBSZWFkRnJvbURhdGFzdG9yZShQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGZyb20gR29vZ2xlIENsb3VkIERhdGFzdG9yZS4KCiAgVG8gcmVhZCBhIGBgUENvbGxlY3Rpb25bRW50aXR5XWBgIGZyb20gYSBDbG91ZCBEYXRhc3RvcmUgYGBRdWVyeWBgLCB1c2UKICBgYFJlYWRGcm9tRGF0YXN0b3JlYGAgdHJhbnNmb3JtIGJ5IHByb3ZpZGluZyBhIGBwcm9qZWN0YCBpZCBhbmQgYSBgcXVlcnlgIHRvCiAgcmVhZCBmcm9tLiBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhIGBuYW1lc3BhY2VgIGFuZC9vciBzcGVjaWZ5IGhvdyBtYW55CiAgc3BsaXRzIHlvdSB3YW50IGZvciB0aGUgcXVlcnkgdGhyb3VnaCBgbnVtX3NwbGl0c2Agb3B0aW9uLgoKICBOb3RlOiBOb3JtYWxseSwgYSBydW5uZXIgd2lsbCByZWFkIGZyb20gQ2xvdWQgRGF0YXN0b3JlIGluIHBhcmFsbGVsIGFjcm9zcwogIG1hbnkgd29ya2Vycy4gSG93ZXZlciwgd2hlbiB0aGUgYHF1ZXJ5YCBpcyBjb25maWd1cmVkIHdpdGggYSBgbGltaXRgIG9yIGlmIHRoZQogIHF1ZXJ5IGNvbnRhaW5zIGluZXF1YWxpdHkgZmlsdGVycyBsaWtlIGBHUkVBVEVSX1RIQU4sIExFU1NfVEhBTmAgZXRjLiwgdGhlbgogIGFsbCB0aGUgcmV0dXJuZWQgcmVzdWx0cyB3aWxsIGJlIHJlYWQgYnkgYSBzaW5nbGUgd29ya2VyIGluIG9yZGVyIHRvIGVuc3VyZQogIGNvcnJlY3QgZGF0YS4gU2luY2UgZGF0YSBpcyByZWFkIGZyb20gYSBzaW5nbGUgd29ya2VyLCB0aGlzIGNvdWxkIGhhdmUKICBzaWduaWZpY2FudCBpbXBhY3Qgb24gdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBqb2IuCgogIFRoZSBzZW1hbnRpY3MgZm9yIHRoZSBxdWVyeSBzcGxpdHRpbmcgaXMgZGVmaW5lZCBiZWxvdzoKICAgIDEuIElmIGBudW1fc3BsaXRzYCBpcyBlcXVhbCB0byAwLCB0aGVuIHRoZSBudW1iZXIgb2Ygc3BsaXRzIHdpbGwgYmUgY2hvc2VuCiAgICBkeW5hbWljYWxseSBhdCBydW50aW1lIGJhc2VkIG9uIHRoZSBxdWVyeSBkYXRhIHNpemUuCgogICAgMi4gQW55IHZhbHVlIG9mIGBudW1fc3BsaXRzYCBncmVhdGVyIHRoYW4KICAgIGBSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NQVhgIHdpbGwgYmUgY2FwcGVkIGF0IHRoYXQgdmFsdWUuCgogICAgMy4gSWYgdGhlIGBxdWVyeWAgaGFzIGEgdXNlciBsaW1pdCBzZXQsIG9yIGNvbnRhaW5zIGluZXF1YWxpdHkgZmlsdGVycywgdGhlbgogICAgYG51bV9zcGxpdHNgIHdpbGwgYmUgaWdub3JlZCBhbmQgbm8gc3BsaXQgd2lsbCBiZSBwZXJmb3JtZWQuCgogICAgNC4gVW5kZXIgY2VydGFpbiBjYXNlcyBDbG91ZCBEYXRhc3RvcmUgaXMgdW5hYmxlIHRvIHNwbGl0IHF1ZXJ5IHRvIHRoZQogICAgcmVxdWVzdGVkIG51bWJlciBvZiBzcGxpdHMuIEluIHN1Y2ggY2FzZXMgd2UganVzdCB1c2Ugd2hhdGV2ZXIgdGhlIENsb3VkCiAgICBEYXRhc3RvcmUgcmV0dXJucy4KCiAgU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL2RhdGFzdG9yZS8gZm9yIG1vcmUgZGV0YWlscyBvbiBHb29nbGUgQ2xvdWQKICBEYXRhc3RvcmUuCiAgIiIiCgogICMgQW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgZm9yIGEgcXVlcnkuCiAgX05VTV9RVUVSWV9TUExJVFNfTUFYID0gNTAwMDAKICAjIEEgbG93ZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgZm9yIGEgcXVlcnkuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQKICAjIHdlIHBhcmVsbGVsaXplIHRoZSBxdWVyeSBldmVuIHdoZW4gRGF0YXN0b3JlIHN0YXRpc3RpY3MgYXJlIG5vdCBhdmFpbGFibGUuCiAgX05VTV9RVUVSWV9TUExJVFNfTUlOID0gMTIKICAjIERlZmF1bHQgYnVuZGxlIHNpemUgb2YgNjRNQi4KICBfREVGQVVMVF9CVU5ETEVfU0laRV9CWVRFUyA9IDY0ICogMTAyNCAqIDEwMjQKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIHF1ZXJ5LCBuYW1lc3BhY2U9Tm9uZSwgbnVtX3NwbGl0cz0wKToKICAgICIiIkluaXRpYWxpemUgdGhlIGBSZWFkRnJvbURhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCB0byByZWFkIGZyb20uCiAgICAgIHF1ZXJ5OiBDbG91ZCBEYXRhc3RvcmUgcXVlcnkgdG8gYmUgcmVhZCBmcm9tLgogICAgICBuYW1lc3BhY2U6IEFuIG9wdGlvbmFsIG5hbWVzcGFjZS4KICAgICAgbnVtX3NwbGl0czogTnVtYmVyIG9mIHNwbGl0cyBmb3IgdGhlIHF1ZXJ5LgogICAgIiIiCgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBmcm9tIGFwaXRvb2xzLmJhc2UgaW1wb3J0IHB5ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIElPIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICBsb2dnaW5nLndhcm5pbmcoJ2RhdGFzdG9yZWlvIHJlYWQgdHJhbnNmb3JtIGlzIGV4cGVyaW1lbnRhbC4nKQogICAgc3VwZXIoUmVhZEZyb21EYXRhc3RvcmUsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBpZiBub3QgcHJvamVjdDoKICAgICAgVmFsdWVFcnJvcigiUHJvamVjdCBjYW5ub3QgYmUgZW1wdHkiKQogICAgaWYgbm90IHF1ZXJ5OgogICAgICBWYWx1ZUVycm9yKCJRdWVyeSBjYW5ub3QgYmUgZW1wdHkiKQogICAgaWYgbnVtX3NwbGl0cyA8IDA6CiAgICAgIFZhbHVlRXJyb3IoIm51bV9zcGxpdHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgMCIpCgogICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgICMgdXNpbmcgX25hbWVzcGFjZSBjb25mbGljdHMgd2l0aCBEaXNwbGF5RGF0YS5fbmFtZXNwYWNlCiAgICBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLl9xdWVyeSA9IHF1ZXJ5CiAgICBzZWxmLl9udW1fc3BsaXRzID0gbnVtX3NwbGl0cwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgVGhpcyBpcyBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKICAgICMgICAxLiBDcmVhdGUgYSBzaW5nbGV0b24gb2YgdGhlIHVzZXIgcHJvdmlkZWQgYHF1ZXJ5YCBhbmQgYXBwbHkgYSBgYFBhckRvYGAKICAgICMgICB0aGF0IHNwbGl0cyB0aGUgcXVlcnkgaW50byBgbnVtX3NwbGl0c2AgYW5kIGFzc2lnbiBlYWNoIHNwbGl0IHF1ZXJ5IGEKICAgICMgICB1bmlxdWUgYGludGAgYXMgdGhlIGtleS4gVGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgb2YgdGhlIHR5cGUKICAgICMgICBgYFBDb2xsZWN0aW9uWyhpbnQsIFF1ZXJ5KV1gYC4KICAgICMKICAgICMgICBJZiB0aGUgdmFsdWUgb2YgYG51bV9zcGxpdHNgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLCB0aGVuIHRoZQogICAgIyAgIG51bWJlciBvZiBzcGxpdHMgd2lsbCBiZSBjb21wdXRlZCBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUKICAgICMgICBkYXRhIGZvciB0aGUgYHF1ZXJ5YC4KICAgICMKICAgICMgICAyLiBUaGUgcmVzdWx0aW5nIGBgUENvbGxlY3Rpb25gYCBpcyBzaGFyZGVkIHVzaW5nIGEgYGBHcm91cEJ5S2V5YGAKICAgICMgICBvcGVyYXRpb24uIFRoZSBxdWVyaWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgKGludCwgSXRlcmFibGVbUXVlcnldKSBhbmQKICAgICMgICBmbGF0dGVuZWQgdG8gb3V0cHV0IGEgYGBQQ29sbGVjdGlvbltRdWVyeV1gYC4KICAgICMKICAgICMgICAzLiBJbiB0aGUgdGhpcmQgc3RlcCwgYSBgYFBhckRvYGAgcmVhZHMgZW50aXRpZXMgZm9yIGVhY2ggcXVlcnkgYW5kCiAgICAjICAgb3V0cHV0cyBhIGBgUENvbGxlY3Rpb25bRW50aXR5XWBgLgoKICAgIHF1ZXJpZXMgPSAocGNvbGwucGlwZWxpbmUKICAgICAgICAgICAgICAgfCAnVXNlclF1ZXJ5JyA+PiBDcmVhdGUoW3NlbGYuX3F1ZXJ5XSkKICAgICAgICAgICAgICAgfCAnU3BsaXRRdWVyeScgPj4gUGFyRG8oUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuKAogICAgICAgICAgICAgICAgICAgc2VsZi5fcHJvamVjdCwgc2VsZi5fcXVlcnksIHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UsCiAgICAgICAgICAgICAgICAgICBzZWxmLl9udW1fc3BsaXRzKSkpCgogICAgc2hhcmRlZF9xdWVyaWVzID0gKHF1ZXJpZXMKICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwQnlLZXkoKQogICAgICAgICAgICAgICAgICAgICAgIHwgVmFsdWVzKCkKICAgICAgICAgICAgICAgICAgICAgICB8ICdGbGF0dGVuJyA+PiBGbGF0TWFwKGxhbWJkYSB4OiB4KSkKCiAgICBlbnRpdGllcyA9IHNoYXJkZWRfcXVlcmllcyB8ICdSZWFkJyA+PiBQYXJEbygKICAgICAgICBSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4oc2VsZi5fcHJvamVjdCwgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSkpCiAgICByZXR1cm4gZW50aXRpZXMKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIGRpc3BfZGF0YSA9IHsncHJvamVjdCc6IHNlbGYuX3Byb2plY3QsCiAgICAgICAgICAgICAgICAgJ3F1ZXJ5Jzogc3RyKHNlbGYuX3F1ZXJ5KSwKICAgICAgICAgICAgICAgICAnbnVtX3NwbGl0cyc6IHNlbGYuX251bV9zcGxpdHN9CgogICAgaWYgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgICAgZGlzcF9kYXRhWyduYW1lc3BhY2UnXSA9IHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UKCiAgICByZXR1cm4gZGlzcF9kYXRhCgogIGNsYXNzIFNwbGl0UXVlcnlGbihEb0ZuKToKICAgICIiIkEgYERvRm5gIHRoYXQgc3BsaXRzIGEgZ2l2ZW4gcXVlcnkgaW50byBtdWx0aXBsZSBzdWItcXVlcmllcy4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBxdWVyeSwgbmFtZXNwYWNlLCBudW1fc3BsaXRzKToKICAgICAgc3VwZXIoUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYuX2RhdGFzdG9yZSA9IE5vbmUKICAgICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgICAgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgICBzZWxmLl9xdWVyeSA9IHF1ZXJ5CiAgICAgIHNlbGYuX251bV9zcGxpdHMgPSBudW1fc3BsaXRzCgogICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgc2VsZi5fZGF0YXN0b3JlID0gaGVscGVyLmdldF9kYXRhc3RvcmUoc2VsZi5fcHJvamVjdCkKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBxdWVyeSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgIyBkaXN0aW5jdCBrZXkgdG8gYmUgdXNlZCB0byBncm91cCBxdWVyeSBzcGxpdHMuCiAgICAgIGtleSA9IDEKCiAgICAgICMgSWYgcXVlcnkgaGFzIGEgdXNlciBzZXQgbGltaXQsIHRoZW4gdGhlIHF1ZXJ5IGNhbm5vdCBiZSBzcGxpdC4KICAgICAgaWYgcXVlcnkuSGFzRmllbGQoJ2xpbWl0Jyk6CiAgICAgICAgcmV0dXJuIFsoa2V5LCBxdWVyeSldCgogICAgICAjIENvbXB1dGUgdGhlIGVzdGltYXRlZCBudW1TcGxpdHMgaWYgbm90IHNwZWNpZmllZCBieSB0aGUgdXNlci4KICAgICAgaWYgc2VsZi5fbnVtX3NwbGl0cyA9PSAwOgogICAgICAgIGVzdGltYXRlZF9udW1fc3BsaXRzID0gUmVhZEZyb21EYXRhc3RvcmUuZ2V0X2VzdGltYXRlZF9udW1fc3BsaXRzKAogICAgICAgICAgICBzZWxmLl9wcm9qZWN0LCBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlLCBzZWxmLl9xdWVyeSwKICAgICAgICAgICAgc2VsZi5fZGF0YXN0b3JlKQogICAgICBlbHNlOgogICAgICAgIGVzdGltYXRlZF9udW1fc3BsaXRzID0gc2VsZi5fbnVtX3NwbGl0cwoKICAgICAgbG9nZ2luZy5pbmZvKCJTcGxpdHRpbmcgdGhlIHF1ZXJ5IGludG8gJWQgc3BsaXRzIiwgZXN0aW1hdGVkX251bV9zcGxpdHMpCiAgICAgIHRyeToKICAgICAgICBxdWVyeV9zcGxpdHMgPSBxdWVyeV9zcGxpdHRlci5nZXRfc3BsaXRzKAogICAgICAgICAgICBzZWxmLl9kYXRhc3RvcmUsIHF1ZXJ5LCBlc3RpbWF0ZWRfbnVtX3NwbGl0cywKICAgICAgICAgICAgaGVscGVyLm1ha2VfcGFydGl0aW9uKHNlbGYuX3Byb2plY3QsIHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UpKQogICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGxvZ2dpbmcud2FybmluZygiVW5hYmxlIHRvIHBhcmFsbGVsaXplIHRoZSBnaXZlbiBxdWVyeTogJXMiLCBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKICAgICAgICBxdWVyeV9zcGxpdHMgPSBbcXVlcnldCgogICAgICBzaGFyZGVkX3F1ZXJ5X3NwbGl0cyA9IFtdCiAgICAgIGZvciBzcGxpdF9xdWVyeSBpbiBxdWVyeV9zcGxpdHM6CiAgICAgICAgc2hhcmRlZF9xdWVyeV9zcGxpdHMuYXBwZW5kKChrZXksIHNwbGl0X3F1ZXJ5KSkKICAgICAgICBrZXkgKz0gMQoKICAgICAgcmV0dXJuIHNoYXJkZWRfcXVlcnlfc3BsaXRzCgogICAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICAgZGlzcF9kYXRhID0geydwcm9qZWN0Jzogc2VsZi5fcHJvamVjdCwKICAgICAgICAgICAgICAgICAgICdxdWVyeSc6IHN0cihzZWxmLl9xdWVyeSksCiAgICAgICAgICAgICAgICAgICAnbnVtX3NwbGl0cyc6IHNlbGYuX251bV9zcGxpdHN9CgogICAgICBpZiBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlIGlzIG5vdCBOb25lOgogICAgICAgIGRpc3BfZGF0YVsnbmFtZXNwYWNlJ10gPSBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlCgogICAgICByZXR1cm4gZGlzcF9kYXRhCgogIGNsYXNzIFJlYWRGbihEb0ZuKToKICAgICIiIkEgRG9GbiB0aGF0IHJlYWRzIGVudGl0aWVzIGZyb20gQ2xvdWQgRGF0YXN0b3JlLCBmb3IgYSBnaXZlbiBxdWVyeS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgIHN1cGVyKFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiwgc2VsZikuX19pbml0X18oKQogICAgICBzZWxmLl9wcm9qZWN0ID0gcHJvamVjdAogICAgICBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICAgIHNlbGYuX2RhdGFzdG9yZSA9IE5vbmUKCiAgICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgICBzZWxmLl9kYXRhc3RvcmUgPSBoZWxwZXIuZ2V0X2RhdGFzdG9yZShzZWxmLl9wcm9qZWN0KQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIHF1ZXJ5LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAjIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgZW50aXRpZXMgdGhhdCByZWFkcyBpbiBiYXRjaGVzLgogICAgICBlbnRpdGllcyA9IGhlbHBlci5mZXRjaF9lbnRpdGllcyhzZWxmLl9wcm9qZWN0LCBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSwgc2VsZi5fZGF0YXN0b3JlKQogICAgICByZXR1cm4gZW50aXRpZXMKCiAgICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgICBkaXNwX2RhdGEgPSB7J3Byb2plY3QnOiBzZWxmLl9wcm9qZWN0fQoKICAgICAgaWYgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgICAgICBkaXNwX2RhdGFbJ25hbWVzcGFjZSddID0gc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZQoKICAgICAgcmV0dXJuIGRpc3BfZGF0YQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcChwcm9qZWN0LCBuYW1lc3BhY2UsIGRhdGFzdG9yZSk6CiAgICAiIiJGZXRjaGVzIHRoZSBsYXRlc3QgdGltZXN0YW1wIG9mIHN0YXRpc3RpY3MgZnJvbSBDbG91ZCBEYXRhc3RvcmUuCgogICAgQ2xvdWQgRGF0YXN0b3JlIHN5c3RlbSB0YWJsZXMgd2l0aCBzdGF0aXN0aWNzIGFyZSBwZXJpb2RpY2FsbHkgdXBkYXRlZC4KICAgIFRoaXMgbWV0aG9kIGZldGhlcyB0aGUgbGF0ZXN0IHRpbWVzdGFtcCAoaW4gbWljcm9zZWNvbmRzKSBvZiBzdGF0aXN0aWNzCiAgICB1cGRhdGUgdXNpbmcgdGhlIGBfX1N0YXRfVG90YWxfX2AgdGFibGUuCiAgICAiIiIKICAgIHF1ZXJ5ID0gaGVscGVyLm1ha2VfbGF0ZXN0X3RpbWVzdGFtcF9xdWVyeShuYW1lc3BhY2UpCiAgICByZXEgPSBoZWxwZXIubWFrZV9yZXF1ZXN0KHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnkpCiAgICByZXNwID0gZGF0YXN0b3JlLnJ1bl9xdWVyeShyZXEpCiAgICBpZiBub3QgcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0czoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEYXRhc3RvcmUgdG90YWwgc3RhdGlzdGljcyB1bmF2YWlsYWJsZS4iKQoKICAgIGVudGl0eSA9IHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHNbMF0uZW50aXR5CiAgICByZXR1cm4gZGF0YXN0b3JlX2hlbHBlci5taWNyb3NfZnJvbV90aW1lc3RhbXAoCiAgICAgICAgZW50aXR5LnByb3BlcnRpZXNbJ3RpbWVzdGFtcCddLnRpbWVzdGFtcF92YWx1ZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXMocHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSwgZGF0YXN0b3JlKToKICAgICIiIkdldCB0aGUgZXN0aW1hdGVkIHNpemUgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIHF1ZXJ5LgoKICAgIENsb3VkIERhdGFzdG9yZSBwcm92aWRlcyBubyB3YXkgdG8gZ2V0IGEgZ29vZCBlc3RpbWF0ZSBvZiBob3cgbGFyZ2UgdGhlCiAgICByZXN1bHQgb2YgYSBxdWVyeSBpcyBnb2luZyB0byBiZS4gSGVuY2Ugd2UgdXNlIHRoZSBfX1N0YXRfS2luZF9fIHN5c3RlbQogICAgdGFibGUgdG8gZ2V0IHNpemUgb2YgdGhlIGVudGlyZSBraW5kIGFzIGFuIGFwcHJveGltYXRlIGVzdGltYXRlLCBhc3N1bWluZwogICAgZXhhY3RseSAxIGtpbmQgaXMgc3BlY2lmaWVkIGluIHRoZSBxdWVyeS4KICAgIFNlZSBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YXN0b3JlL2RvY3MvY29uY2VwdHMvc3RhdHMuCiAgICAiIiIKICAgIGtpbmQgPSBxdWVyeS5raW5kWzBdLm5hbWUKICAgIGxhdGVzdF90aW1lc3RhbXAgPSBSZWFkRnJvbURhdGFzdG9yZS5xdWVyeV9sYXRlc3Rfc3RhdGlzdGljc190aW1lc3RhbXAoCiAgICAgICAgcHJvamVjdCwgbmFtZXNwYWNlLCBkYXRhc3RvcmUpCiAgICBsb2dnaW5nLmluZm8oJ0xhdGVzdCBzdGF0cyB0aW1lc3RhbXAgZm9yIGtpbmQgJXMgaXMgJXMnLAogICAgICAgICAgICAgICAgIGtpbmQsIGxhdGVzdF90aW1lc3RhbXApCgogICAga2luZF9zdGF0c19xdWVyeSA9ICgKICAgICAgICBoZWxwZXIubWFrZV9raW5kX3N0YXRzX3F1ZXJ5KG5hbWVzcGFjZSwga2luZCwgbGF0ZXN0X3RpbWVzdGFtcCkpCgogICAgcmVxID0gaGVscGVyLm1ha2VfcmVxdWVzdChwcm9qZWN0LCBuYW1lc3BhY2UsIGtpbmRfc3RhdHNfcXVlcnkpCiAgICByZXNwID0gZGF0YXN0b3JlLnJ1bl9xdWVyeShyZXEpCiAgICBpZiBub3QgcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0czoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEYXRhc3RvcmUgc3RhdGlzdGljcyBmb3Iga2luZCAlcyB1bmF2YWlsYWJsZSIgJSBraW5kKQoKICAgIGVudGl0eSA9IHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHNbMF0uZW50aXR5CiAgICByZXR1cm4gZGF0YXN0b3JlX2hlbHBlci5nZXRfdmFsdWUoZW50aXR5LnByb3BlcnRpZXNbJ2VudGl0eV9ieXRlcyddKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0cyhwcm9qZWN0LCBuYW1lc3BhY2UsIHF1ZXJ5LCBkYXRhc3RvcmUpOgogICAgIiIiQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBzcGxpdHMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBnaXZlbiBxdWVyeS4iIiIKICAgIHRyeToKICAgICAgZXN0aW1hdGVkX3NpemVfYnl0ZXMgPSBSZWFkRnJvbURhdGFzdG9yZS5nZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXMoCiAgICAgICAgICBwcm9qZWN0LCBuYW1lc3BhY2UsIHF1ZXJ5LCBkYXRhc3RvcmUpCiAgICAgIGxvZ2dpbmcuaW5mbygnRXN0aW1hdGVkIHNpemUgYnl0ZXMgZm9yIHF1ZXJ5OiAlcycsIGVzdGltYXRlZF9zaXplX2J5dGVzKQogICAgICBudW1fc3BsaXRzID0gaW50KG1pbihSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NQVgsIHJvdW5kKAogICAgICAgICAgKGZsb2F0KGVzdGltYXRlZF9zaXplX2J5dGVzKSAvCiAgICAgICAgICAgUmVhZEZyb21EYXRhc3RvcmUuX0RFRkFVTFRfQlVORExFX1NJWkVfQllURVMpKSkpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBmZXRjaCBlc3RpbWF0ZWQgc2l6ZSBieXRlczogJXMnLCBlKQogICAgICAjIEZhbGxiYWNrIGluIGNhc2UgZXN0aW1hdGVkIHNpemUgaXMgdW5hdmFpbGFibGUuCiAgICAgIG51bV9zcGxpdHMgPSBSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NSU4KCiAgICByZXR1cm4gbWF4KG51bV9zcGxpdHMsIFJlYWRGcm9tRGF0YXN0b3JlLl9OVU1fUVVFUllfU1BMSVRTX01JTikKCgpjbGFzcyBfTXV0YXRlKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgdGhhdCB3cml0ZXMgbXV0YXRpb25zIHRvIENsb3VkIERhdGFzdG9yZS4KCiAgT25seSBpZGVtcG90ZW50IERhdGFzdG9yZSBtdXRhdGlvbiBvcGVyYXRpb25zICh1cHNlcnQgYW5kIGRlbGV0ZSkgYXJlCiAgc3VwcG9ydGVkLCBhcyB0aGUgY29tbWl0cyBhcmUgcmV0cmllZCB3aGVuIGZhaWx1cmVzIG9jY3VyLgogICIiIgoKICBfV1JJVEVfQkFUQ0hfSU5JVElBTF9TSVpFID0gMjAwCiAgIyBNYXggYWxsb3dlZCBEYXRhc3RvcmUgd3JpdGVzIHBlciBiYXRjaCwgYW5kIG1heCBieXRlcyBwZXIgYmF0Y2guCiAgIyBOb3RlIHRoYXQgdGhlIG1heCBieXRlcyBwZXIgYmF0Y2ggc2V0IGhlcmUgaXMgbG93ZXIgdGhhbiB0aGUgMTBNQiBsaW1pdAogICMgYWN0dWFsbHkgZW5mb3JjZWQgYnkgdGhlIEFQSSwgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBDb21taXRSZXF1ZXN0IHdyYXBwZXIKICAjIGFyb3VuZCB0aGUgbXV0YXRpb25zLgogIF9XUklURV9CQVRDSF9NQVhfU0laRSA9IDUwMAogIF9XUklURV9CQVRDSF9NQVhfQllURVNfU0laRSA9IDkwMDAwMDAKICBfV1JJVEVfQkFUQ0hfTUlOX1NJWkUgPSAxMAogIF9XUklURV9CQVRDSF9UQVJHRVRfTEFURU5DWV9NUyA9IDUwMDAKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIG11dGF0aW9uX2ZuKToKICAgICIiIkluaXRpYWxpemVzIGEgTXV0YXRlIHRyYW5zZm9ybS4KCiAgICAgQXJnczoKICAgICAgIHByb2plY3Q6IFRoZSBQcm9qZWN0IElECiAgICAgICBtdXRhdGlvbl9mbjogQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGBlbnRpdGllc2Agb3IgYGtleXNgIHRvCiAgICAgICAgIGBtdXRhdGlvbnNgLgogICAgICIiIgogICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgIHNlbGYuX211dGF0aW9uX2ZuID0gbXV0YXRpb25fZm4KICAgIGxvZ2dpbmcud2FybmluZygnZGF0YXN0b3JlaW8gd3JpdGUgdHJhbnNmb3JtIGlzIGV4cGVyaW1lbnRhbC4nKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiAocGNvbGwKICAgICAgICAgICAgfCAnQ29udmVydCB0byBNdXRhdGlvbicgPj4gTWFwKHNlbGYuX211dGF0aW9uX2ZuKQogICAgICAgICAgICB8ICdXcml0ZSBNdXRhdGlvbiB0byBEYXRhc3RvcmUnID4+IFBhckRvKF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbigKICAgICAgICAgICAgICAgIHNlbGYuX3Byb2plY3QpKSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3Byb2plY3QnOiBzZWxmLl9wcm9qZWN0LAogICAgICAgICAgICAnbXV0YXRpb25fZm4nOiBzZWxmLl9tdXRhdGlvbl9mbi5fX2NsYXNzX18uX19uYW1lX199CgogIGNsYXNzIF9EeW5hbWljQmF0Y2hTaXplcihvYmplY3QpOgogICAgIiIiRGV0ZXJtaW5lcyByZXF1ZXN0IHNpemVzIGZvciBmdXR1cmUgRGF0YXN0b3JlIFJQQ1MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgIHNlbGYuX2NvbW1pdF90aW1lX3Blcl9lbnRpdHlfbXMgPSB1dGlsLk1vdmluZ1N1bSh3aW5kb3dfbXM9MTIwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0X21zPTEwMDAwKQoKICAgIGRlZiBnZXRfYmF0Y2hfc2l6ZShzZWxmLCBub3cpOgogICAgICAiIiJSZXR1cm5zIHRoZSByZWNvbW1lbmRlZCBzaXplIGZvciBkYXRhc3RvcmUgUlBDcyBhdCB0aGlzIHRpbWUuIiIiCiAgICAgIGlmIG5vdCBzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLmhhc19kYXRhKG5vdyk6CiAgICAgICAgcmV0dXJuIF9NdXRhdGUuX1dSSVRFX0JBVENIX0lOSVRJQUxfU0laRQoKICAgICAgcmVjZW50X21lYW5fbGF0ZW5jeV9tcyA9IChzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLnN1bShub3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLmNvdW50KG5vdykpCiAgICAgIHJldHVybiBtYXgoX011dGF0ZS5fV1JJVEVfQkFUQ0hfTUlOX1NJWkUsCiAgICAgICAgICAgICAgICAgbWluKF9NdXRhdGUuX1dSSVRFX0JBVENIX01BWF9TSVpFLAogICAgICAgICAgICAgICAgICAgICBfTXV0YXRlLl9XUklURV9CQVRDSF9UQVJHRVRfTEFURU5DWV9NUwogICAgICAgICAgICAgICAgICAgICAvIG1heChyZWNlbnRfbWVhbl9sYXRlbmN5X21zLCAxKQogICAgICAgICAgICAgICAgICAgICkpCgogICAgZGVmIHJlcG9ydF9sYXRlbmN5KHNlbGYsIG5vdywgbGF0ZW5jeV9tcywgbnVtX211dGF0aW9ucyk6CiAgICAgICIiIlJlcG9ydHMgdGhlIGxhdGVuY3kgb2YgYW4gUlBDIHRvIERhdGFzdG9yZS4KCiAgICAgIEFyZ3M6CiAgICAgICAgbm93OiBkb3VibGUsIGNvbXBsZXRpb24gdGltZSBvZiB0aGUgUlBDIGFzIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgogICAgICAgIGxhdGVuY3lfbXM6IGRvdWJsZSwgdGhlIG9ic2VydmVkIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGlzIFJQQy4KICAgICAgICBudW1fbXV0YXRpb25zOiBpbnQsIG51bWJlciBvZiBtdXRhdGlvbnMgY29udGFpbmVkIGluIHRoZSBSUEMuCiAgICAgICIiIgogICAgICBzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLmFkZChub3csIGxhdGVuY3lfbXMgLyBudW1fbXV0YXRpb25zKQoKICBjbGFzcyBEYXRhc3RvcmVXcml0ZUZuKERvRm4pOgogICAgIiIiQSBgYERvRm5gYCB0aGF0IHdyaXRlIG11dGF0aW9ucyB0byBEYXRhc3RvcmUuCgogICAgTXV0YXRpb25zIGFyZSB3cml0dGVuIGluIGJhdGNoZXMsIHdoZXJlIHRoZSBtYXhpbXVtIGJhdGNoIHNpemUgaXMKICAgIGBfTXV0YXRlLl9XUklURV9CQVRDSF9TSVpFYC4KCiAgICBDb21taXRzIGFyZSBub24tdHJhbnNhY3Rpb25hbC4gSWYgYSBjb21taXQgZmFpbHMgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IG92ZXIKICAgIGFuIGVudGl0eSBncm91cCwgdGhlIGNvbW1pdCB3aWxsIGJlIHJldHJpZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24KICAgIHNob3VsZCBiZSBpZGVtcG90ZW50IChgdXBzZXJ0YCBhbmQgYGRlbGV0ZWAgbXV0YXRpb25zKSB0byBwcmV2ZW50IGR1cGxpY2F0ZQogICAgZGF0YSBvciBlcnJvcnMuCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBmaXhlZF9iYXRjaF9zaXplPU5vbmUpOgogICAgICAiIiIKICAgICAgQXJnczoKICAgICAgICBwcm9qZWN0OiBzdHIsIHRoZSBjbG91ZCBwcm9qZWN0IGlkLgogICAgICAgIGZpeGVkX2JhdGNoX3NpemU6IGludCwgZm9yIHRlc3Rpbmcgb25seSwgdGhpcyBmb3JjZXMgYWxsIGJhdGNoZXMgb2YKICAgICAgICAgICB3cml0ZXMgdG8gYmUgYSBmaXhlZCBzaXplLCBmb3IgZWFzaWVyIHVuaXR0ZXN0aW5nLgogICAgICAiIiIKICAgICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgICAgc2VsZi5fZGF0YXN0b3JlID0gTm9uZQogICAgICBzZWxmLl9maXhlZF9iYXRjaF9zaXplID0gZml4ZWRfYmF0Y2hfc2l6ZQogICAgICBzZWxmLl9ycGNfc3VjY2Vzc2VzID0gTWV0cmljcy5jb3VudGVyKAogICAgICAgICAgX011dGF0ZS5EYXRhc3RvcmVXcml0ZUZuLCAiZGF0YXN0b3JlUnBjU3VjY2Vzc2VzIikKICAgICAgc2VsZi5fcnBjX2Vycm9ycyA9IE1ldHJpY3MuY291bnRlcigKICAgICAgICAgIF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbiwgImRhdGFzdG9yZVJwY0Vycm9ycyIpCiAgICAgIHNlbGYuX3Rocm90dGxlZF9zZWNzID0gTWV0cmljcy5jb3VudGVyKAogICAgICAgICAgX011dGF0ZS5EYXRhc3RvcmVXcml0ZUZuLCAiY3VtdWxhdGl2ZVRocm90dGxpbmdTZWNvbmRzIikKICAgICAgc2VsZi5fdGhyb3R0bGVyID0gQWRhcHRpdmVUaHJvdHRsZXIod2luZG93X21zPTEyMDAwMCwgYnVja2V0X21zPTEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkX3JhdGlvPTEuMjUpCgogICAgZGVmIF91cGRhdGVfcnBjX3N0YXRzKHNlbGYsIHN1Y2Nlc3Nlcz0wLCBlcnJvcnM9MCwgdGhyb3R0bGVkX3NlY3M9MCk6CiAgICAgIHNlbGYuX3JwY19zdWNjZXNzZXMuaW5jKHN1Y2Nlc3NlcykKICAgICAgc2VsZi5fcnBjX2Vycm9ycy5pbmMoZXJyb3JzKQogICAgICBzZWxmLl90aHJvdHRsZWRfc2Vjcy5pbmModGhyb3R0bGVkX3NlY3MpCgogICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgc2VsZi5fbXV0YXRpb25zID0gW10KICAgICAgc2VsZi5fbXV0YXRpb25zX3NpemUgPSAwCiAgICAgIHNlbGYuX2RhdGFzdG9yZSA9IGhlbHBlci5nZXRfZGF0YXN0b3JlKHNlbGYuX3Byb2plY3QpCiAgICAgIGlmIHNlbGYuX2ZpeGVkX2JhdGNoX3NpemU6CiAgICAgICAgc2VsZi5fdGFyZ2V0X2JhdGNoX3NpemUgPSBzZWxmLl9maXhlZF9iYXRjaF9zaXplCiAgICAgIGVsc2U6CiAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZXIgPSBfTXV0YXRlLl9EeW5hbWljQmF0Y2hTaXplcigpCiAgICAgICAgc2VsZi5fdGFyZ2V0X2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplci5nZXRfYmF0Y2hfc2l6ZSgKICAgICAgICAgICAgdGltZS50aW1lKCkqMTAwMCkKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgICAgc2l6ZSA9IGVsZW1lbnQuQnl0ZVNpemUoKQogICAgICBpZiAoc2VsZi5fbXV0YXRpb25zIGFuZAogICAgICAgICAgc2l6ZSArIHNlbGYuX211dGF0aW9uc19zaXplID4gX011dGF0ZS5fV1JJVEVfQkFUQ0hfTUFYX0JZVEVTX1NJWkUpOgogICAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKICAgICAgc2VsZi5fbXV0YXRpb25zLmFwcGVuZChlbGVtZW50KQogICAgICBzZWxmLl9tdXRhdGlvbnNfc2l6ZSArPSBzaXplCiAgICAgIGlmIGxlbihzZWxmLl9tdXRhdGlvbnMpID49IHNlbGYuX3RhcmdldF9iYXRjaF9zaXplOgogICAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKCiAgICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgICAgaWYgc2VsZi5fbXV0YXRpb25zOgogICAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKCiAgICBkZWYgX2ZsdXNoX2JhdGNoKHNlbGYpOgogICAgICAjIEZsdXNoIHRoZSBjdXJyZW50IGJhdGNoIG9mIG11dGF0aW9ucyB0byBDbG91ZCBEYXRhc3RvcmUuCiAgICAgIF8sIGxhdGVuY3lfbXMgPSBoZWxwZXIud3JpdGVfbXV0YXRpb25zKAogICAgICAgICAgc2VsZi5fZGF0YXN0b3JlLCBzZWxmLl9wcm9qZWN0LCBzZWxmLl9tdXRhdGlvbnMsCiAgICAgICAgICBzZWxmLl90aHJvdHRsZXIsIHNlbGYuX3VwZGF0ZV9ycGNfc3RhdHMsCiAgICAgICAgICB0aHJvdHRsZV9kZWxheT1fTXV0YXRlLl9XUklURV9CQVRDSF9UQVJHRVRfTEFURU5DWV9NUy8xMDAwKQogICAgICBsb2dnaW5nLmRlYnVnKCJTdWNjZXNzZnVsbHkgd3JvdGUgJWQgbXV0YXRpb25zIGluICVkbXMuIiwKICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5fbXV0YXRpb25zKSwgbGF0ZW5jeV9tcykKCiAgICAgIGlmIG5vdCBzZWxmLl9maXhlZF9iYXRjaF9zaXplOgogICAgICAgIG5vdyA9IHRpbWUudGltZSgpKjEwMDAKICAgICAgICBzZWxmLl9iYXRjaF9zaXplci5yZXBvcnRfbGF0ZW5jeShub3csIGxhdGVuY3lfbXMsIGxlbihzZWxmLl9tdXRhdGlvbnMpKQogICAgICAgIHNlbGYuX3RhcmdldF9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZXIuZ2V0X2JhdGNoX3NpemUobm93KQoKICAgICAgc2VsZi5fbXV0YXRpb25zID0gW10KICAgICAgc2VsZi5fbXV0YXRpb25zX3NpemUgPSAwCgoKY2xhc3MgV3JpdGVUb0RhdGFzdG9yZShfTXV0YXRlKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIHRvIHdyaXRlIGEgYGBQQ29sbGVjdGlvbltFbnRpdHldYGAgdG8gQ2xvdWQgRGF0YXN0b3JlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgV3JpdGVUb0RhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCB0byB3cml0ZSB0by4KICAgICIiIgoKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgIHRyeToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGl0b29scy5iYXNlIGltcG9ydCBweSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICAgJ0dvb2dsZSBDbG91ZCBJTyBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCgogICAgc3VwZXIoV3JpdGVUb0RhdGFzdG9yZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgcHJvamVjdCwgV3JpdGVUb0RhdGFzdG9yZS50b191cHNlcnRfbXV0YXRpb24pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgdG9fdXBzZXJ0X211dGF0aW9uKGVudGl0eSk6CiAgICBpZiBub3QgaGVscGVyLmlzX2tleV92YWxpZChlbnRpdHkua2V5KToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW50aXRpZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgQ2xvdWQgRGF0YXN0b3JlIG11c3QgJwogICAgICAgICAgICAgICAgICAgICAgICdoYXZlIGNvbXBsZXRlIGtleXM6XG4lcycgJSBlbnRpdHkpCiAgICBtdXRhdGlvbiA9IGRhdGFzdG9yZV9wYjIuTXV0YXRpb24oKQogICAgbXV0YXRpb24udXBzZXJ0LkNvcHlGcm9tKGVudGl0eSkKICAgIHJldHVybiBtdXRhdGlvbgoKCmNsYXNzIERlbGV0ZUZyb21EYXRhc3RvcmUoX011dGF0ZSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCB0byBkZWxldGUgYSBgYFBDb2xsZWN0aW9uW0tleV1gYCBmcm9tIENsb3VkIERhdGFzdG9yZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgRGVsZXRlRnJvbURhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBmcm9tIHdoaWNoIHRoZSBlbnRpdGllcyB3aWxsIGJlIGRlbGV0ZWQuCiAgICAiIiIKCiAgICBzdXBlcihEZWxldGVGcm9tRGF0YXN0b3JlLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBwcm9qZWN0LCBEZWxldGVGcm9tRGF0YXN0b3JlLnRvX2RlbGV0ZV9tdXRhdGlvbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0b19kZWxldGVfbXV0YXRpb24oa2V5KToKICAgIGlmIG5vdCBoZWxwZXIuaXNfa2V5X3ZhbGlkKGtleSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0tleXMgdG8gYmUgZGVsZXRlZCBmcm9tIHRoZSBDbG91ZCBEYXRhc3RvcmUgbXVzdCBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXRlOlxuJXMiLCBrZXknKQogICAgbXV0YXRpb24gPSBkYXRhc3RvcmVfcGIyLk11dGF0aW9uKCkKICAgIG11dGF0aW9uLmRlbGV0ZS5Db3B5RnJvbShrZXkpCiAgICByZXR1cm4gbXV0YXRpb24KfXKzAQAAKFgmAAAARGVsZXRlRnJvbURhdGFzdG9yZS50b19kZWxldGVfbXV0YXRpb25YAwAAAGRlZk34AU0AAodYJQAAAF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbi5fZmx1c2hfYmF0Y2hYAwAAAGRlZk26AU3KAYdYEAAAAFdyaXRlVG9EYXRhc3RvcmVYBQAAAGNsYXNzTcwBTeoBh1gaAAAAX011dGF0ZS5fRHluYW1pY0JhdGNoU2l6ZXJYBQAAAGNsYXNzTWEBTX0Bh1glAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmS+lL64dYJQAAAF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbi5zdGFydF9idW5kbGVYAwAAAGRlZk2hAU2rAYdYKwAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5zdGFydF9idW5kbGVYAwAAAGRlZkuzS7WHWCYAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTbYBTbkBh1gcAAAARGVsZXRlRnJvbURhdGFzdG9yZS5fX2luaXRfX1gDAAAAZGVmTe4BTfcBh1gZAAAAV3JpdGVUb0RhdGFzdG9yZS5fX2luaXRfX1gDAAAAZGVmTc8BTeEBh1gjAAAAX011dGF0ZS5fRHluYW1pY0JhdGNoU2l6ZXIuX19pbml0X19YAwAAAGRlZk1jAU1mAYdYGAAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGblgFAAAAY2xhc3NL4Uv5h1gOAAAAX011dGF0ZS5leHBhbmRYAwAAAGRlZk1XAU1cAYdYKgAAAFJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlc1gDAAAAZGVmTQwBTSYBh1gaAAAAUmVhZEZyb21EYXRhc3RvcmUuX19pbml0X19YAwAAAGRlZktbS32HWBEAAABSZWFkRnJvbURhdGFzdG9yZVgFAAAAY2xhc3NLMk04AYdYEAAAAF9NdXRhdGUuX19pbml0X19YAwAAAGRlZk1LAU1WAYdYJwAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5fX2luaXRfX1gDAAAAZGVmS6tLsodYGAAAAFJlYWRGcm9tRGF0YXN0b3JlLmV4cGFuZFgDAAAAZGVmS35LnodYKQAAAF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyLnJlcG9ydF9sYXRlbmN5WAMAAABkZWZNdAFNfQGHWB4AAABSZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGFYAwAAAGRlZkufS6iHWCUAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4uZGlzcGxheV9kYXRhWAMAAABkZWZL8kv5h1ggAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnByb2Nlc3NYAwAAAGRlZkvsS/GHWBQAAABfTXV0YXRlLmRpc3BsYXlfZGF0YVgDAAAAZGVmTV0BTWABh1ghAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLl9faW5pdF9fWAMAAABkZWZL40voh1gHAAAAX011dGF0ZVgFAAAAY2xhc3NNOgFNygGHWBMAAABEZWxldGVGcm9tRGF0YXN0b3JlWAUAAABjbGFzc03sAU0AAodYMwAAAFJlYWRGcm9tRGF0YXN0b3JlLnF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcFgDAAAAZGVmS/pNCwGHWCsAAABSZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4uZGlzcGxheV9kYXRhWAMAAABkZWZL10vgh1gmAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLnByb2Nlc3NYAwAAAGRlZku2S9aHWCEAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uX19pbml0X19YAwAAAGRlZk2JAU2bAYdYKgAAAFJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0c1gDAAAAZGVmTScBTTgBh1gjAAAAV3JpdGVUb0RhdGFzdG9yZS50b191cHNlcnRfbXV0YXRpb25YAwAAAGRlZk3iAU3qAYdYIAAAAF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbi5wcm9jZXNzWAMAAABkZWZNrAFNtQGHWCoAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uX3VwZGF0ZV9ycGNfc3RhdHNYAwAAAGRlZk2cAU2gAYdYKQAAAF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyLmdldF9iYXRjaF9zaXplWAMAAABkZWZNZwFNcwGHWBgAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm5YBQAAAGNsYXNzTX4BTcoBh1geAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuWAUAAABjbGFzc0upS+CHdX1ytAEAAChYKgAAAFJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0c1grAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpb3K1AQAAWCYAAABEZWxldGVGcm9tRGF0YXN0b3JlLnRvX2RlbGV0ZV9tdXRhdGlvbmq1AQAAWDMAAABSZWFkRnJvbURhdGFzdG9yZS5xdWVyeV9sYXRlc3Rfc3RhdGlzdGljc190aW1lc3RhbXBqtQEAAFgjAAAAV3JpdGVUb0RhdGFzdG9yZS50b191cHNlcnRfbXV0YXRpb25qtQEAAFgQAAAAV3JpdGVUb0RhdGFzdG9yZWq1AQAAWCoAAABSZWFkRnJvbURhdGFzdG9yZS5nZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXNqtQEAAFgRAAAAUmVhZEZyb21EYXRhc3RvcmVqtQEAAFglAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnN0YXJ0X2J1bmRsZWq1AQAAWCsAAABSZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4uc3RhcnRfYnVuZGxlarUBAABYEwAAAERlbGV0ZUZyb21EYXRhc3RvcmVqtQEAAFgeAAAAUmVhZEZyb21EYXRhc3RvcmUuZGlzcGxheV9kYXRharUBAABYJQAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5kaXNwbGF5X2RhdGFqtQEAAFggAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnByb2Nlc3NqtQEAAFgrAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLmRpc3BsYXlfZGF0YWq1AQAAWCYAAABSZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4ucHJvY2Vzc2q1AQAAWBgAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm5qtQEAAFgeAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuarUBAABYGAAAAFJlYWRGcm9tRGF0YXN0b3JlLmV4cGFuZGq1AQAAdWiKWCsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvcrYBAACFgXK3AQAAfXK4AQAAYnRyuQEAAFUfYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbHK6AQAAKFjwDwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaW1lc3RhbXAgdXRpbGl0aWVzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhCmZyb20gYWJjIGltcG9ydCBhYnN0cmFjdG1ldGhvZAoKX19hbGxfXyA9IFsKICAgICdUaW1lRG9tYWluJywKICAgIF0KCgpjbGFzcyBUaW1lRG9tYWluKG9iamVjdCk6CiAgIiIiVGltZSBkb21haW4gZm9yIHN0cmVhbWluZyB0aW1lcnMuIiIiCgogIFdBVEVSTUFSSyA9ICdXQVRFUk1BUksnCiAgUkVBTF9USU1FID0gJ1JFQUxfVElNRScKICBERVBFTkRFTlRfUkVBTF9USU1FID0gJ0RFUEVOREVOVF9SRUFMX1RJTUUnCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9zdHJpbmcoZG9tYWluKToKICAgIGlmIGRvbWFpbiBpbiAoVGltZURvbWFpbi5XQVRFUk1BUkssCiAgICAgICAgICAgICAgICAgIFRpbWVEb21haW4uUkVBTF9USU1FLAogICAgICAgICAgICAgICAgICBUaW1lRG9tYWluLkRFUEVOREVOVF9SRUFMX1RJTUUpOgogICAgICByZXR1cm4gZG9tYWluCiAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIHRpbWUgZG9tYWluOiAlcycgJSBkb21haW4pCgoKY2xhc3MgVGltZXN0YW1wQ29tYmluZXJJbXBsKG9iamVjdCk6CiAgIiIiSW1wbGVtZW50YXRpb24gb2YgVGltZXN0YW1wQ29tYmluZXIuIiIiCgogIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBhc3NpZ25fb3V0cHV0X3RpbWUoc2VsZiwgd2luZG93LCBpbnB1dF90aW1lc3RhbXApOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY29tYmluZShzZWxmLCBvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKToKICAgIHBhc3MKCiAgZGVmIGNvbWJpbmVfYWxsKHNlbGYsIG1lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAiIiJBcHBseSBjb21iaW5lIHRvIGxpc3Qgb2YgdGltZXN0YW1wcy4iIiIKICAgIGNvbWJpbmVkX291dHB1dF90aW1lID0gTm9uZQogICAgZm9yIG91dHB1dF90aW1lIGluIG1lcmdpbmdfdGltZXN0YW1wczoKICAgICAgaWYgY29tYmluZWRfb3V0cHV0X3RpbWUgaXMgTm9uZToKICAgICAgICBjb21iaW5lZF9vdXRwdXRfdGltZSA9IG91dHB1dF90aW1lCiAgICAgIGVsc2U6CiAgICAgICAgY29tYmluZWRfb3V0cHV0X3RpbWUgPSBzZWxmLmNvbWJpbmUoCiAgICAgICAgICAgIGNvbWJpbmVkX291dHB1dF90aW1lLCBvdXRwdXRfdGltZSkKICAgIHJldHVybiBjb21iaW5lZF9vdXRwdXRfdGltZQoKICBkZWYgbWVyZ2Uoc2VsZiwgdW51c2VkX3Jlc3VsdF93aW5kb3csIG1lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAiIiJEZWZhdWx0IHRvIHJldHVybmluZyB0aGUgcmVzdWx0IG9mIGNvbWJpbmVfYWxsLiIiIgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9hbGwobWVyZ2luZ190aW1lc3RhbXBzKQoKCmNsYXNzIERlcGVuZHNPbmx5T25XaW5kb3coVGltZXN0YW1wQ29tYmluZXJJbXBsKToKICAiIiJUaW1lc3RhbXBDb21iaW5lckltcGwgdGhhdCBvbmx5IGRlcGVuZHMgb24gdGhlIHdpbmRvdy4iIiIKCiAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gb3V0cHV0X3RpbWVzdGFtcAoKICBkZWYgbWVyZ2Uoc2VsZiwgcmVzdWx0X3dpbmRvdywgdW51c2VkX21lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAjIFNpbmNlIHdlIGtub3cgdGhhdCB0aGUgcmVzdWx0IG9ubHkgZGVwZW5kcyBvbiB0aGUgd2luZG93LCB3ZSBjYW4gaWdub3JlCiAgICAjIHRoZSBnaXZlbiB0aW1lc3RhbXBzLgogICAgcmV0dXJuIHNlbGYuYXNzaWduX291dHB1dF90aW1lKHJlc3VsdF93aW5kb3csIE5vbmUpCgoKY2xhc3MgT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbChUaW1lc3RhbXBDb21iaW5lckltcGwpOgogICIiIlRpbWVzdGFtcENvbWJpbmVySW1wbCBvdXRwdXR0aW5nIGF0IGVhcmxpZXN0IGlucHV0IHRpbWVzdGFtcC4iIiIKCiAgZGVmIGFzc2lnbl9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIGlucHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gaW5wdXRfdGltZXN0YW1wCgogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgIiIiRGVmYXVsdCB0byByZXR1cm5pbmcgdGhlIGVhcmxpZXIgb2YgdHdvIHRpbWVzdGFtcHMuIiIiCiAgICByZXR1cm4gbWluKG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApCgoKY2xhc3MgT3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBsKFRpbWVzdGFtcENvbWJpbmVySW1wbCk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIG91dHB1dHRpbmcgYXQgZWFybGllc3QgaW5wdXQgdGltZXN0YW1wLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93X2ZuKToKICAgIHNlbGYud2luZG93X2ZuID0gd2luZG93X2ZuCgogIGRlZiBhc3NpZ25fb3V0cHV0X3RpbWUoc2VsZiwgd2luZG93LCBpbnB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIHNlbGYud2luZG93X2ZuLmdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZSh3aW5kb3csIGlucHV0X3RpbWVzdGFtcCkKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gbWluKG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApCgoKY2xhc3MgT3V0cHV0QXRMYXRlc3RJbnB1dFRpbWVzdGFtcEltcGwoVGltZXN0YW1wQ29tYmluZXJJbXBsKToKICAiIiJUaW1lc3RhbXBDb21iaW5lckltcGwgb3V0cHV0dGluZyBhdCBsYXRlc3QgaW5wdXQgdGltZXN0YW1wLiIiIgoKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBpbnB1dF90aW1lc3RhbXAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gbWF4KG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApCgoKY2xhc3MgT3V0cHV0QXRFbmRPZldpbmRvd0ltcGwoRGVwZW5kc09ubHlPbldpbmRvdyk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIG91dHB1dHRpbmcgYXQgZW5kIG9mIHdpbmRvdy4iIiIKCiAgZGVmIGFzc2lnbl9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIHVudXNlZF9pbnB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIHdpbmRvdy5lbmQKfXK7AQAAKFgzAAAAT3V0cHV0QXRMYXRlc3RJbnB1dFRpbWVzdGFtcEltcGwuYXNzaWduX291dHB1dF90aW1lWAMAAABkZWZLdEt2h1gbAAAARGVwZW5kc09ubHlPbldpbmRvdy5jb21iaW5lWAMAAABkZWZLUEtSh1hAAAAAT3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS2pLbIdYNQAAAE91dHB1dEF0RWFybGllc3RUcmFuc2Zvcm1lZElucHV0VGltZXN0YW1wSW1wbC5jb21iaW5lWAMAAABkZWZLbUtvh1gVAAAAVGltZXN0YW1wQ29tYmluZXJJbXBsWAUAAABjbGFzc0suS0mHWBcAAABPdXRwdXRBdEVuZE9mV2luZG93SW1wbFgFAAAAY2xhc3NLe0uAh1gdAAAAVGltZXN0YW1wQ29tYmluZXJJbXBsLmNvbWJpbmVYAwAAAGRlZks3SzqHWDUAAABPdXRwdXRBdEVhcmxpZXN0SW5wdXRUaW1lc3RhbXBJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS1xLXodYKAAAAFRpbWVzdGFtcENvbWJpbmVySW1wbC5hc3NpZ25fb3V0cHV0X3RpbWVYAwAAAGRlZkszSzaHWCIAAABPdXRwdXRBdEVhcmxpZXN0SW5wdXRUaW1lc3RhbXBJbXBsWAUAAABjbGFzc0tZS2KHWAoAAABUaW1lRG9tYWluWAUAAABjbGFzc0seSyyHWBMAAABEZXBlbmRzT25seU9uV2luZG93WAUAAABjbGFzc0tLS1eHWCgAAABPdXRwdXRBdExhdGVzdElucHV0VGltZXN0YW1wSW1wbC5jb21iaW5lWAMAAABkZWZLd0t5h1ggAAAAT3V0cHV0QXRMYXRlc3RJbnB1dFRpbWVzdGFtcEltcGxYBQAAAGNsYXNzS3FLeYdYLQAAAE91dHB1dEF0RWFybGllc3RUcmFuc2Zvcm1lZElucHV0VGltZXN0YW1wSW1wbFgFAAAAY2xhc3NLZEtvh1gWAAAAVGltZURvbWFpbi5mcm9tX3N0cmluZ1gDAAAAZGVmSyVLLIdYNgAAAE91dHB1dEF0RWFybGllc3RUcmFuc2Zvcm1lZElucHV0VGltZXN0YW1wSW1wbC5fX2luaXRfX1gDAAAAZGVmS2dLaYdYKgAAAE91dHB1dEF0RW5kT2ZXaW5kb3dJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS35LgIdYGQAAAERlcGVuZHNPbmx5T25XaW5kb3cubWVyZ2VYAwAAAGRlZktTS1eHWCoAAABPdXRwdXRBdEVhcmxpZXN0SW5wdXRUaW1lc3RhbXBJbXBsLmNvbWJpbmVYAwAAAGRlZktfS2KHWCEAAABUaW1lc3RhbXBDb21iaW5lckltcGwuY29tYmluZV9hbGxYAwAAAGRlZks7S0WHWBsAAABUaW1lc3RhbXBDb21iaW5lckltcGwubWVyZ2VYAwAAAGRlZktGS0mHdX1yvAEAAChYFgAAAFRpbWVEb21haW4uZnJvbV9zdHJpbmdYHwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWxyvQEAAFgKAAAAVGltZURvbWFpbmq9AQAAdWiKWB8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlscr4BAACFgXK/AQAAfXLAAQAAYnRywQEAAFUoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcihYZjIAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGlyZWN0UnVubmVyLCBleGVjdXRpbmcgb24gdGhlIGxvY2FsIG1hY2hpbmUuCgpUaGUgRGlyZWN0UnVubmVyIGlzIGEgcnVubmVyIGltcGxlbWVudGF0aW9uIHRoYXQgZXhlY3V0ZXMgdGhlIGVudGlyZQpncmFwaCBvZiB0cmFuc2Zvcm1hdGlvbnMgYmVsb25naW5nIHRvIGEgcGlwZWxpbmUgb24gdGhlIGxvY2FsIG1hY2hpbmUuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgbG9nZ2luZwoKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHdyYXBwZXJzX3BiMgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY3NFbnZpcm9ubWVudApmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGlyZWN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgUnVudGltZVZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IFBDb2xsZWN0aW9uCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkgaW1wb3J0IEJ1bmRsZUZhY3RvcnkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jayBpbXBvcnQgUmVhbENsb2NrCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2sgaW1wb3J0IFRlc3RDbG9jawpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBWYWx1ZUNhY2hlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBfR3JvdXBBbHNvQnlXaW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IF9Hcm91cEJ5S2V5T25seQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQoKX19hbGxfXyA9IFsnRGlyZWN0UnVubmVyJ10KCgojIFR5cGUgdmFyaWFibGVzLgpLID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnSycpClYgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdWJykKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIFZdKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCB0eXBlaGludHMuSXRlcmFibGVbVl1dKQpjbGFzcyBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkoX0dyb3VwQnlLZXlPbmx5KToKICAiIiJTdHJlYW1pbmcgR3JvdXBCeUtleU9ubHkgcGxhY2Vob2xkZXIgZm9yIG92ZXJyaWRpbmcgaW4gRGlyZWN0UnVubmVyLiIiIgogIHVybiA9ICJkaXJlY3RfcnVubmVyOnN0cmVhbWluZ19nYmtvOnYwLjEiCgogICMgVGhlc2UgYXJlIG5lZWRlZCBkdWUgdG8gYXBwbHkgb3ZlcmxvYWRzLgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LnVybiwgTm9uZQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXlsb2FkLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5KCkKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdyhfR3JvdXBBbHNvQnlXaW5kb3cpOgogICIiIlN0cmVhbWluZyBHcm91cEFsc29CeVdpbmRvdyBwbGFjZWhvbGRlciBmb3Igb3ZlcnJpZGluZyBpbiBEaXJlY3RSdW5uZXIuIiIiCiAgdXJuID0gImRpcmVjdF9ydW5uZXI6c3RyZWFtaW5nX2dhYnc6djAuMSIKCiAgIyBUaGVzZSBhcmUgbmVlZGVkIGR1ZSB0byBhcHBseSBvdmVybG9hZHMuCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICgKICAgICAgICBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cudXJuLAogICAgICAgIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlKHZhbHVlPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKAogICAgICAgICAgICBzZWxmLndpbmRvd2luZykpKQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb250ZXh0KToKICAgIHJldHVybiBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3coCiAgICAgICAgY29udGV4dC53aW5kb3dpbmdfc3RyYXRlZ2llcy5nZXRfYnlfaWQocGF5bG9hZC52YWx1ZSkpCgoKZGVmIF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcygpOgogICMgQSBsaXN0IG9mIFBUcmFuc2Zvcm1PdmVycmlkZSBvYmplY3RzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIHJ1bm5pbmcgYSBwaXBlbGluZQogICMgdXNpbmcgRGlyZWN0UnVubmVyLgogICMgQ3VycmVudGx5IHRoaXMgb25seSB3b3JrcyBmb3Igb3ZlcnJpZGVzIHdoZXJlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzIGRvCiAgIyBub3QgY2hhbmdlLgogICMgRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAjIEltcG9ydGluZyBmb2xsb3dpbmcgbG9jYWxseSB0byBhdm9pZCBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24gaW1wb3J0IFNwbGl0dGFibGVQYXJEb092ZXJyaWRlCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlCiAgcmV0dXJuIFtTcGxpdHRhYmxlUGFyRG9PdmVycmlkZSgpLAogICAgICAgICAgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlKCldCgoKY2xhc3MgRGlyZWN0UnVubmVyKFBpcGVsaW5lUnVubmVyKToKICAiIiJFeGVjdXRlcyBhIHNpbmdsZSBwaXBlbGluZSBvbiB0aGUgbG9jYWwgbWFjaGluZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fY2FjaGUgPSBOb25lCiAgICBzZWxmLl91c2VfdGVzdF9jbG9jayA9IEZhbHNlICAjIHVzZSBSZWFsQ2xvY2soKSBpbiBwcm9kdWN0aW9uCiAgICBzZWxmLl9wdHJhbnNmb3JtX292ZXJyaWRlcyA9IF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcygpCgogIGRlZiBhcHBseV9Db21iaW5lUGVyS2V5KHNlbGYsIHRyYW5zZm9ybSwgcGNvbGwpOgogICAgIyBUT0RPOiBNb3ZlIGltcG9ydHMgdG8gdG9wLiBQaXBlbGluZSA8LT4gUnVubmVyIGRlcGVuZGVuY3kgY2F1c2UgcHJvYmxlbXMKICAgICMgd2l0aCByZXNvbHZpbmcgaW1wb3J0cyB3aGVuIHRoZXkgYXJlIGF0IHRvcC4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3JtcyBpbXBvcnQgTGlmdGVkQ29tYmluZVBlcktleQogICAgdHJ5OgogICAgICByZXR1cm4gcGNvbGwgfCBMaWZ0ZWRDb21iaW5lUGVyS2V5KAogICAgICAgICAgdHJhbnNmb3JtLmZuLCB0cmFuc2Zvcm0uYXJncywgdHJhbnNmb3JtLmt3YXJncykKICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICByZXR1cm4gdHJhbnNmb3JtLmV4cGFuZChwY29sbCkKCiAgZGVmIGFwcGx5X1Rlc3RTdHJlYW0oc2VsZiwgdHJhbnNmb3JtLCBwY29sbCk6CiAgICBzZWxmLl91c2VfdGVzdF9jbG9jayA9IFRydWUgICMgdXNlIFRlc3RDbG9jaygpIGZvciB0ZXN0aW5nCiAgICByZXR1cm4gdHJhbnNmb3JtLmV4cGFuZChwY29sbCkKCiAgZGVmIGFwcGx5X19Hcm91cEJ5S2V5T25seShzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsKToKICAgIGlmICh0cmFuc2Zvcm0uX19jbGFzc19fID09IF9Hcm91cEJ5S2V5T25seSBhbmQKICAgICAgICBwY29sbC5waXBlbGluZS5fb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykuc3RyZWFtaW5nKToKICAgICAgIyBVc2Ugc3BlY2lhbGl6ZWQgc3RyZWFtaW5nIGltcGxlbWVudGF0aW9uLCBpZiByZXF1ZXN0ZWQuCiAgICAgIHR5cGVfaGludHMgPSB0cmFuc2Zvcm0uZ2V0X3R5cGVfaGludHMoKQogICAgICByZXR1cm4gcGNvbGwgfCAoX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5KCkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2lucHV0X3R5cGVzKCp0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzBdKQogICAgICAgICAgICAgICAgICAgICAgLndpdGhfb3V0cHV0X3R5cGVzKCp0eXBlX2hpbnRzLm91dHB1dF90eXBlc1swXSkpCiAgICByZXR1cm4gdHJhbnNmb3JtLmV4cGFuZChwY29sbCkKCiAgZGVmIGFwcGx5X19Hcm91cEFsc29CeVdpbmRvdyhzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsKToKICAgIGlmICh0cmFuc2Zvcm0uX19jbGFzc19fID09IF9Hcm91cEFsc29CeVdpbmRvdyBhbmQKICAgICAgICBwY29sbC5waXBlbGluZS5fb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykuc3RyZWFtaW5nKToKICAgICAgIyBVc2Ugc3BlY2lhbGl6ZWQgc3RyZWFtaW5nIGltcGxlbWVudGF0aW9uLCBpZiByZXF1ZXN0ZWQuCiAgICAgIHR5cGVfaGludHMgPSB0cmFuc2Zvcm0uZ2V0X3R5cGVfaGludHMoKQogICAgICByZXR1cm4gcGNvbGwgfCAoX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93KHRyYW5zZm9ybS53aW5kb3dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAud2l0aF9pbnB1dF90eXBlcygqdHlwZV9oaW50cy5pbnB1dF90eXBlc1swXSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcygqdHlwZV9oaW50cy5vdXRwdXRfdHlwZXNbMF0pKQogICAgcmV0dXJuIHRyYW5zZm9ybS5leHBhbmQocGNvbGwpCgogIGRlZiBhcHBseV9SZWFkU3RyaW5nc0Zyb21QdWJTdWIoc2VsZiwgdHJhbnNmb3JtLCBwY29sbCk6CiAgICB0cnk6CiAgICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIgYXMgdW51c2VkX3B1YnN1YgogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICByYWlzZSBJbXBvcnRFcnJvcignR29vZ2xlIENsb3VkIFB1YlN1YiBub3QgYXZhaWxhYmxlLCBwbGVhc2UgaW5zdGFsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICdhcGFjaGVfYmVhbVtnY3BdJykKICAgICMgRXhlY3V0ZSB0aGlzIGFzIGEgbmF0aXZlIHRyYW5zZm9ybS4KICAgIG91dHB1dCA9IFBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQogICAgb3V0cHV0LmVsZW1lbnRfdHlwZSA9IHVuaWNvZGUKICAgIHJldHVybiBvdXRwdXQKCiAgZGVmIGFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViKHNlbGYsIHRyYW5zZm9ybSwgcGNvbGwpOgogICAgdHJ5OgogICAgICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgcHVic3ViCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdHb29nbGUgQ2xvdWQgUHViU3ViIG5vdCBhdmFpbGFibGUsIHBsZWFzZSBpbnN0YWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwYWNoZV9iZWFtW2djcF0nKQogICAgcHJvamVjdCA9IHRyYW5zZm9ybS5fc2luay5wcm9qZWN0CiAgICB0b3BpY19uYW1lID0gdHJhbnNmb3JtLl9zaW5rLnRvcGljX25hbWUKCiAgICBjbGFzcyBEaXJlY3RXcml0ZVRvUHViU3ViKGJlYW0uRG9Gbik6CiAgICAgIF90b3BpYyA9IE5vbmUKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCB0b3BpY19uYW1lKToKICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CiAgICAgICAgc2VsZi50b3BpY19uYW1lID0gdG9waWNfbmFtZQoKICAgICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgICBpZiBzZWxmLl90b3BpYyBpcyBOb25lOgogICAgICAgICAgc2VsZi5fdG9waWMgPSBwdWJzdWIuQ2xpZW50KHByb2plY3Q9c2VsZi5wcm9qZWN0KS50b3BpYygKICAgICAgICAgICAgICBzZWxmLnRvcGljX25hbWUpCiAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KCiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW0pOgogICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZWxlbS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPj0gMTAwOgogICAgICAgICAgc2VsZi5fZmx1c2goKQoKICAgICAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAgICAgc2VsZi5fZmx1c2goKQoKICAgICAgZGVmIF9mbHVzaChzZWxmKToKICAgICAgICBpZiBzZWxmLl9idWZmZXI6CiAgICAgICAgICB3aXRoIHNlbGYuX3RvcGljLmJhdGNoKCkgYXMgYmF0Y2g6CiAgICAgICAgICAgIGZvciBkYXR1bSBpbiBzZWxmLl9idWZmZXI6CiAgICAgICAgICAgICAgYmF0Y2gucHVibGlzaChkYXR1bSkKICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCgogICAgb3V0cHV0ID0gcGNvbGwgfCBiZWFtLlBhckRvKERpcmVjdFdyaXRlVG9QdWJTdWIocHJvamVjdCwgdG9waWNfbmFtZSkpCiAgICBvdXRwdXQuZWxlbWVudF90eXBlID0gdW5pY29kZQogICAgcmV0dXJuIG91dHB1dAoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lKToKICAgICIiIkV4ZWN1dGUgdGhlIGVudGlyZSBwaXBlbGluZSBhbmQgcmV0dXJucyBhbiBEaXJlY3RQaXBlbGluZVJlc3VsdC4iIiIKCiAgICAjIFBlcmZvcm1pbmcgY29uZmlndXJlZCBQVHJhbnNmb3JtIG92ZXJyaWRlcy4KICAgIHBpcGVsaW5lLnJlcGxhY2VfYWxsKHNlbGYuX3B0cmFuc2Zvcm1fb3ZlcnJpZGVzKQoKICAgICMgVE9ETzogTW92ZSBpbXBvcnRzIHRvIHRvcC4gUGlwZWxpbmUgPC0+IFJ1bm5lciBkZXBlbmRlbmN5IGNhdXNlIHByb2JsZW1zCiAgICAjIHdpdGggcmVzb2x2aW5nIGltcG9ydHMgd2hlbiB0aGV5IGFyZSBhdCB0b3AuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvciBpbXBvcnQgXAogICAgICBDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dCBpbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IgaW1wb3J0IEV4ZWN1dG9yCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IgaW1wb3J0IFwKICAgICAgVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkKCiAgICBNZXRyaWNzRW52aXJvbm1lbnQuc2V0X21ldHJpY3Nfc3VwcG9ydGVkKFRydWUpCiAgICBsb2dnaW5nLmluZm8oJ1J1bm5pbmcgcGlwZWxpbmUgd2l0aCBEaXJlY3RSdW5uZXIuJykKICAgIHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvciA9IENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IoKQogICAgcGlwZWxpbmUudmlzaXQoc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yKQoKICAgIGNsb2NrID0gVGVzdENsb2NrKCkgaWYgc2VsZi5fdXNlX3Rlc3RfY2xvY2sgZWxzZSBSZWFsQ2xvY2soKQogICAgZXZhbHVhdGlvbl9jb250ZXh0ID0gRXZhbHVhdGlvbkNvbnRleHQoCiAgICAgICAgcGlwZWxpbmUuX29wdGlvbnMsCiAgICAgICAgQnVuZGxlRmFjdG9yeShzdGFja2VkPXBpcGVsaW5lLl9vcHRpb25zLnZpZXdfYXMoRGlyZWN0T3B0aW9ucykKICAgICAgICAgICAgICAgICAgICAgIC5kaXJlY3RfcnVubmVyX3VzZV9zdGFja2VkX2J1bmRsZSksCiAgICAgICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yLnJvb3RfdHJhbnNmb3JtcywKICAgICAgICBzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3IudmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgIHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci5zdGVwX25hbWVzLAogICAgICAgIHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci52aWV3cywKICAgICAgICBjbG9jaykKCiAgICBldmFsdWF0aW9uX2NvbnRleHQudXNlX3B2YWx1ZV9jYWNoZShzZWxmLl9jYWNoZSkKCiAgICBleGVjdXRvciA9IEV4ZWN1dG9yKHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci52YWx1ZV90b19jb25zdW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5KGV2YWx1YXRpb25fY29udGV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb25fY29udGV4dCkKICAgICMgRGlyZWN0UnVubmVyIGRvZXMgbm90IHN1cHBvcnQgaW5qZWN0aW5nCiAgICAjIFBpcGVsaW5lT3B0aW9ucyB2YWx1ZXMgYXQgcnVudGltZQogICAgUnVudGltZVZhbHVlUHJvdmlkZXIuc2V0X3J1bnRpbWVfb3B0aW9ucyh7fSkKICAgICMgU3RhcnQgdGhlIGV4ZWN1dG9yLiBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwsIGl0IHdpbGwgc3RhcnQgdGhlCiAgICAjIGV4ZWN1dGlvbiBpbiBiYWNrZ3JvdW5kIHRocmVhZHMgYW5kIHJldHVybi4KICAgIGV4ZWN1dG9yLnN0YXJ0KHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci5yb290X3RyYW5zZm9ybXMpCiAgICByZXN1bHQgPSBEaXJlY3RQaXBlbGluZVJlc3VsdChleGVjdXRvciwgZXZhbHVhdGlvbl9jb250ZXh0KQoKICAgIGlmIHNlbGYuX2NhY2hlOgogICAgICAjIFdlIGFyZSBydW5uaW5nIGluIGVhZ2VyIG1vZGUsIGJsb2NrIHVudGlsIHRoZSBwaXBlbGluZSBleGVjdXRpb24KICAgICAgIyBjb21wbGV0ZXMgaW4gb3JkZXIgdG8gaGF2ZSBmdWxsIHJlc3VsdHMgaW4gdGhlIGNhY2hlLgogICAgICByZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQogICAgICBzZWxmLl9jYWNoZS5maW5hbGl6ZSgpCgogICAgcmV0dXJuIHJlc3VsdAoKICBAcHJvcGVydHkKICBkZWYgY2FjaGUoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5fY2FjaGU6CiAgICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyaW5nSW5NZW1vcnlDYWNoZSgpCiAgICByZXR1cm4gc2VsZi5fY2FjaGUucHZhbHVlX2NhY2hlCgoKY2xhc3MgQnVmZmVyaW5nSW5NZW1vcnlDYWNoZShvYmplY3QpOgogICIiIlBWYWx1ZUNhY2hlIHdyYXBwZXIgZm9yIGJ1ZmZlcmluZyBidW5kbGVzIHVudGlsIGEgUFZhbHVlIGlzIGZ1bGx5IGNvbXB1dGVkLgoKICBCdWZmZXJpbmdJbk1lbW9yeUNhY2hlIGtlZXBzIGFuIGluIG1lbW9yeSBjYWNoZSBvZgogIChhcHBsaWVkX3B0cmFuc2Zvcm0sIHRhZykgdHVwbGVzLiBJdCBhY2NlcHRzIGFwcGVuZGluZyB0byBleGlzdGluZyBjYWNoZQogIGVudHJpZXMgdW50aWwgaXQgaXMgZmluYWxpemVkLiBmaW5hbGl6ZSgpIHdpbGwgbWFrZSBhbGwgdGhlIGV4aXN0aW5nIGNhY2hlZAogIGVudHJpZXMgdmlzaWJsZSB0byB0aGUgdW5kZXJ5bGluZyBQVmFsdWVDYWNoZSBpbiB0aGVpciBlbnRpcmV0eSwgY2xlYW4gdGhlIGluCiAgbWVtb3J5IGNhY2hlIGFuZCBzdG9wIGFjY2VwdGluZyBuZXcgY2FjaGUgZW50cmllcy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fY2FjaGUgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogICAgc2VsZi5fcHZhbHVlX2NhY2hlID0gUFZhbHVlQ2FjaGUoKQogICAgc2VsZi5fZmluYWxpemVkID0gRmFsc2UKCiAgQHByb3BlcnR5CiAgZGVmIHB2YWx1ZV9jYWNoZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9wdmFsdWVfY2FjaGUKCiAgZGVmIGFwcGVuZChzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0sIHRhZywgZWxlbWVudHMpOgogICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5hbGl6ZWQKICAgIGFzc2VydCBlbGVtZW50cyBpcyBub3QgTm9uZQogICAgc2VsZi5fY2FjaGVbKGFwcGxpZWRfcHRyYW5zZm9ybSwgdGFnKV0uZXh0ZW5kKGVsZW1lbnRzKQoKICBkZWYgZmluYWxpemUoc2VsZik6CiAgICAiIiJNYWtlIGJ1ZmZlcmVkIGNhY2hlIGVsZW1lbnRzIHZpc2libGUgdG8gdGhlIHVuZGVybHlpbmcgUFZhbHVlQ2FjaGUuIiIiCiAgICBhc3NlcnQgbm90IHNlbGYuX2ZpbmFsaXplZAogICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5fY2FjaGUuaXRlcml0ZW1zKCk6CiAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwgdGFnID0ga2V5CiAgICAgIHNlbGYuX3B2YWx1ZV9jYWNoZS5jYWNoZV9vdXRwdXQoYXBwbGllZF9wdHJhbnNmb3JtLCB0YWcsIHZhbHVlKQogICAgc2VsZi5fY2FjaGUgPSBOb25lCgoKY2xhc3MgRGlyZWN0UGlwZWxpbmVSZXN1bHQoUGlwZWxpbmVSZXN1bHQpOgogICIiIkEgRGlyZWN0UGlwZWxpbmVSZXN1bHQgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm8gYWJvdXQgYSBwaXBlbGluZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgc3VwZXIoRGlyZWN0UGlwZWxpbmVSZXN1bHQsIHNlbGYpLl9faW5pdF9fKFBpcGVsaW5lU3RhdGUuUlVOTklORykKICAgIHNlbGYuX2V4ZWN1dG9yID0gZXhlY3V0b3IKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAoKICBkZWYgX19kZWxfXyhzZWxmKToKICAgIGlmIHNlbGYuX3N0YXRlID09IFBpcGVsaW5lU3RhdGUuUlVOTklORzoKICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgJ1RoZSBEaXJlY3RQaXBlbGluZVJlc3VsdCBpcyBiZWluZyBnYXJiYWdlLWNvbGxlY3RlZCB3aGlsZSB0aGUgJwogICAgICAgICAgJ0RpcmVjdFJ1bm5lciBpcyBzdGlsbCBydW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBpcGVsaW5lLiBUaGlzIG1heSAnCiAgICAgICAgICAnbGVhZCB0byBpbmNvbXBsZXRlIGV4ZWN1dGlvbiBvZiB0aGUgcGlwZWxpbmUgaWYgdGhlIG1haW4gdGhyZWFkICcKICAgICAgICAgICdleGl0cyBiZWZvcmUgcGlwZWxpbmUgY29tcGxldGlvbi4gQ29uc2lkZXIgdXNpbmcgJwogICAgICAgICAgJ3Jlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgcGlwZWxpbmUgJwogICAgICAgICAgJ2V4ZWN1dGlvbi4nKQoKICBkZWYgX2lzX2luX3Rlcm1pbmFsX3N0YXRlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXRlIGlzIG5vdCBQaXBlbGluZVN0YXRlLlJVTk5JTkcKCiAgZGVmIHdhaXRfdW50aWxfZmluaXNoKHNlbGYsIGR1cmF0aW9uPU5vbmUpOgogICAgaWYgbm90IHNlbGYuX2lzX2luX3Rlcm1pbmFsX3N0YXRlKCk6CiAgICAgIGlmIGR1cmF0aW9uOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICdEaXJlY3RSdW5uZXIgZG9lcyBub3Qgc3VwcG9ydCBkdXJhdGlvbiBhcmd1bWVudC4nKQogICAgICB0cnk6CiAgICAgICAgc2VsZi5fZXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbigpCiAgICAgICAgc2VsZi5fc3RhdGUgPSBQaXBlbGluZVN0YXRlLkRPTkUKICAgICAgZXhjZXB0OiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgc2VsZi5fc3RhdGUgPSBQaXBlbGluZVN0YXRlLkZBSUxFRAogICAgICAgIHJhaXNlCiAgICByZXR1cm4gc2VsZi5fc3RhdGUKCiAgZGVmIGFnZ3JlZ2F0ZWRfdmFsdWVzKHNlbGYsIGFnZ3JlZ2F0b3Jfb3JfbmFtZSk6CiAgICByZXR1cm4gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmdldF9hZ2dyZWdhdG9yX3ZhbHVlcyhhZ2dyZWdhdG9yX29yX25hbWUpCgogIGRlZiBtZXRyaWNzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5tZXRyaWNzKCkKCgpjbGFzcyBFYWdlclJ1bm5lcihEaXJlY3RSdW5uZXIpOgoKICBpc19lYWdlciA9IFRydWUKfXLCAQAAKFgfAAAAQnVmZmVyaW5nSW5NZW1vcnlDYWNoZS5maW5hbGl6ZVgDAAAAZGVmTRwBTSMBh1gUAAAARGlyZWN0UGlwZWxpbmVSZXN1bHRYBQAAAGNsYXNzTSUBTUwBh1goAAAARGlyZWN0UnVubmVyLmFwcGx5X1JlYWRTdHJpbmdzRnJvbVB1YlN1YlgDAAAAZGVmS5RLnodYHAAAAERpcmVjdFBpcGVsaW5lUmVzdWx0Lm1ldHJpY3NYAwAAAGRlZk1KAU1MAYdYSQAAAERpcmVjdFJ1bm5lci5hcHBseV9Xcml0ZVN0cmluZ3NUb1B1YlN1Yi5EaXJlY3RXcml0ZVRvUHViU3ViLmZpbmlzaF9idW5kbGVYAwAAAGRlZku6S7yHWAwAAABEaXJlY3RSdW5uZXJYBQAAAGNsYXNzS2lNAgGHWCIAAABEaXJlY3RSdW5uZXIuYXBwbHlfX0dyb3VwQnlLZXlPbmx5WAMAAABkZWZLgEuJh1gdAAAAQnVmZmVyaW5nSW5NZW1vcnlDYWNoZS5hcHBlbmRYAwAAAGRlZk0XAU0bAYdYJQAAAERpcmVjdFJ1bm5lci5hcHBseV9fR3JvdXBBbHNvQnlXaW5kb3dYAwAAAGRlZkuKS5OHWDUAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmS1VLWYdYOwAAAERpcmVjdFJ1bm5lci5hcHBseV9Xcml0ZVN0cmluZ3NUb1B1YlN1Yi5EaXJlY3RXcml0ZVRvUHViU3ViWAUAAABjbGFzc0uoS8OHWB8AAABCdWZmZXJpbmdJbk1lbW9yeUNhY2hlLl9faW5pdF9fWAMAAABkZWZNDgFNEgGHWBUAAABEaXJlY3RSdW5uZXIuX19pbml0X19YAwAAAGRlZktsS3CHWCMAAABCdWZmZXJpbmdJbk1lbW9yeUNhY2hlLnB2YWx1ZV9jYWNoZVgDAAAAZGVmTRMBTRYBh1hCAAAARGlyZWN0UnVubmVyLmFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViLkRpcmVjdFdyaXRlVG9QdWJTdWIuX2ZsdXNoWAMAAABkZWZLvUvDh1gZAAAARGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZVgDAAAAZGVmS8hL/IdYIAAAAERpcmVjdFJ1bm5lci5hcHBseV9Db21iaW5lUGVyS2V5WAMAAABkZWZLcUt7h1gmAAAARGlyZWN0UGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNYAwAAAGRlZk1HAU1JAYdYRAAAAERpcmVjdFJ1bm5lci5hcHBseV9Xcml0ZVN0cmluZ3NUb1B1YlN1Yi5EaXJlY3RXcml0ZVRvUHViU3ViLl9faW5pdF9fWAMAAABkZWZLq0uuh1gnAAAARGlyZWN0UnVubmVyLmFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViWAMAAABkZWZLn0vHh1gYAAAAX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzWAMAAABkZWZLW0tnh1gqAAAARGlyZWN0UGlwZWxpbmVSZXN1bHQuX2lzX2luX3Rlcm1pbmFsX3N0YXRlWAMAAABkZWZNNwFNOQGHWDMAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZktPS1SHWBwAAABEaXJlY3RQaXBlbGluZVJlc3VsdC5fX2RlbF9fWAMAAABkZWZNLQFNNgGHWAsAAABFYWdlclJ1bm5lclgFAAAAY2xhc3NNTgFNUQGHWBsAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dYBQAAAGNsYXNzS0hLWYdYMgAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZLQ0tGh1gmAAAARGlyZWN0UGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2hYAwAAAGRlZk06AU1GAYdYGAAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seVgFAAAAY2xhc3NLOUtGh1gwAAAAX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZLQEtCh1gWAAAAQnVmZmVyaW5nSW5NZW1vcnlDYWNoZVgFAAAAY2xhc3NNBAFNIwGHWB0AAABEaXJlY3RQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmTSgBTSwBh1hIAAAARGlyZWN0UnVubmVyLmFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViLkRpcmVjdFdyaXRlVG9QdWJTdWIuc3RhcnRfYnVuZGxlWAMAAABkZWZLr0u0h1hDAAAARGlyZWN0UnVubmVyLmFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViLkRpcmVjdFdyaXRlVG9QdWJTdWIucHJvY2Vzc1gDAAAAZGVmS7VLuYdYEgAAAERpcmVjdFJ1bm5lci5jYWNoZVgDAAAAZGVmS/1NAgGHWB0AAABEaXJlY3RSdW5uZXIuYXBwbHlfVGVzdFN0cmVhbVgDAAAAZGVmS3xLf4d1fXLDAQAAKFgnAAAARGlyZWN0UnVubmVyLmFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViWCgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVycsQBAABYHQAAAERpcmVjdFJ1bm5lci5hcHBseV9UZXN0U3RyZWFtasQBAABYKAAAAERpcmVjdFJ1bm5lci5hcHBseV9SZWFkU3RyaW5nc0Zyb21QdWJTdWJqxAEAAFgMAAAARGlyZWN0UnVubmVyasQBAABYIgAAAERpcmVjdFJ1bm5lci5hcHBseV9fR3JvdXBCeUtleU9ubHlqxAEAAFgZAAAARGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZWrEAQAAWCAAAABEaXJlY3RSdW5uZXIuYXBwbHlfQ29tYmluZVBlcktleWrEAQAAWCUAAABEaXJlY3RSdW5uZXIuYXBwbHlfX0dyb3VwQWxzb0J5V2luZG93asQBAAB1aIpYKAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXJyxQEAAIWBcsYBAAB9cscBAABidFUVYXBhY2hlX2JlYW0uaW8udGV4dGlvcsgBAAAoWOleAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgc291cmNlIGFuZCBhIHNpbmsgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byB0ZXh0IGZpbGVzLiIiIgoKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzaW5rCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGViYXNlZHNvdXJjZQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UgaW1wb3J0IFJlYWRBbGxGaWxlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCgpfX2FsbF9fID0gWydSZWFkRnJvbVRleHQnLCAnUmVhZEFsbEZyb21UZXh0JywgJ1dyaXRlVG9UZXh0J10KCgpjbGFzcyBfVGV4dFNvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICByIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgdGV4dCBmaWxlcy4KCiAgUGFyc2VzIGEgdGV4dCBmaWxlIGFzIG5ld2xpbmUtZGVsaW1pdGVkIGVsZW1lbnRzLiBTdXBwb3J0cyBuZXdsaW5lIGRlbGltaXRlcnMKICAnXG4nIGFuZCAnXHJcbi4KCiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHJlYWRpbmcgdGV4dCBlbmNvZGVkIHVzaW5nIFVURi04IG9yCiAgQVNDSUkuCiAgIiIiCgogIERFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSA9IDgxOTIKCiAgY2xhc3MgUmVhZEJ1ZmZlcihvYmplY3QpOgogICAgIyBBIGJ1ZmZlciB0aGF0IGdpdmVzIHRoZSBidWZmZXJlZCBkYXRhIGFuZCBuZXh0IHBvc2l0aW9uIGluIHRoZQogICAgIyBidWZmZXIgdGhhdCBzaG91bGQgYmUgcmVhZC4KCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgcG9zaXRpb24pOgogICAgICBzZWxmLl9kYXRhID0gZGF0YQogICAgICBzZWxmLl9wb3NpdGlvbiA9IHBvc2l0aW9uCgogICAgQHByb3BlcnR5CiAgICBkZWYgZGF0YShzZWxmKToKICAgICAgcmV0dXJuIHNlbGYuX2RhdGEKCiAgICBAZGF0YS5zZXR0ZXIKICAgIGRlZiBkYXRhKHNlbGYsIHZhbHVlKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKQogICAgICBzZWxmLl9kYXRhID0gdmFsdWUKCiAgICBAcHJvcGVydHkKICAgIGRlZiBwb3NpdGlvbihzZWxmKToKICAgICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogICAgQHBvc2l0aW9uLnNldHRlcgogICAgZGVmIHBvc2l0aW9uKHNlbGYsIHZhbHVlKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKQogICAgICBpZiB2YWx1ZSA+IGxlbihzZWxmLl9kYXRhKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qgc2V0IHBvc2l0aW9uIHRvICVkIHNpbmNlIGl0XCdzIGxhcmdlciB0aGFuICcKICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplIG9mIGRhdGEgJWQuJywgdmFsdWUsIGxlbihzZWxmLl9kYXRhKSkKICAgICAgc2VsZi5fcG9zaXRpb24gPSB2YWx1ZQoKICAgIGRlZiByZXNldChzZWxmKToKICAgICAgc2VsZi5kYXRhID0gJycKICAgICAgc2VsZi5wb3NpdGlvbiA9IDAKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgICAgICAgICAgY29kZXIsCiAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgICAgICAgICAgc2tpcF9oZWFkZXJfbGluZXM9MCwKICAgICAgICAgICAgICAgaGVhZGVyX3Byb2Nlc3Nvcl9mbnM9KE5vbmUsIE5vbmUpKToKICAgICIiIkluaXRpYWxpemUgYSBfVGV4dFNvdXJjZQoKICAgIEFyZ3M6CiAgICAgIGhlYWRlcl9wcm9jZXNzb3JfZm5zICh0dXBsZSk6IGEgdHVwbGUgb2YgYSBgaGVhZGVyX21hdGNoZXJgIGZ1bmN0aW9uCiAgICAgICAgYW5kIGEgYGhlYWRlcl9wcm9jZXNzb3JgIGZ1bmN0aW9uLiBUaGUgYGhlYWRlcl9tYXRjaGVyYCBzaG91bGQKICAgICAgICByZXR1cm4gYFRydWVgIGZvciBhbGwgbGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHRoYXQgYXJlIHBhcnQKICAgICAgICBvZiB0aGUgZmlsZSBoZWFkZXIgYW5kIGBGYWxzZWAgb3RoZXJ3aXNlLiBUaGVzZSBoZWFkZXIgbGluZXMgd2lsbAogICAgICAgIG5vdCBiZSB5aWVsZGVkIHdoZW4gcmVhZGluZyByZWNvcmRzIGFuZCBpbnN0ZWFkIHBhc3NlZCBpbnRvCiAgICAgICAgYGhlYWRlcl9wcm9jZXNzb3JgIHRvIGJlIGhhbmRsZWQuIElmIGBza2lwX2hlYWRlcl9saW5lc2AgYW5kIGEKICAgICAgICBgaGVhZGVyX21hdGNoZXJgIGFyZSBib3RoIHByb3ZpZGVkLCB0aGUgdmFsdWUgb2YgYHNraXBfaGVhZGVyX2xpbmVzYAogICAgICAgIGxpbmVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgdGhlIGhlYWRlciB3aWxsIGJlIHByb2Nlc3NlZCBmcm9tCiAgICAgICAgdGhlcmUuCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IGlmIHNraXBfbGluZXMgaXMgbmVnYXRpdmUuCgogICAgUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gaW4gY2xhc3MgYFJlYWRGcm9tVGV4dGAgZm9yIHRoZSByZXN0CiAgICBvZiB0aGUgYXJndW1lbnRzLgogICAgIiIiCiAgICBzdXBlcihfVGV4dFNvdXJjZSwgc2VsZikuX19pbml0X18oZmlsZV9wYXR0ZXJuLCBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlKQoKICAgIHNlbGYuX3N0cmlwX3RyYWlsaW5nX25ld2xpbmVzID0gc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9jb2RlciA9IGNvZGVyCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCiAgICBpZiBza2lwX2hlYWRlcl9saW5lcyA8IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBza2lwIG5lZ2F0aXZlIG51bWJlciBvZiBoZWFkZXIgbGluZXM6ICVkJywKICAgICAgICAgICAgICAgICAgICAgICBza2lwX2hlYWRlcl9saW5lcykKICAgIGVsaWYgc2tpcF9oZWFkZXJfbGluZXMgPiAxMDoKICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgJ1NraXBwaW5nICVkIGhlYWRlciBsaW5lcy4gU2tpcHBpbmcgbGFyZ2UgbnVtYmVyIG9mIGhlYWRlciAnCiAgICAgICAgICAnbGluZXMgbWlnaHQgc2lnbmlmaWNhbnRseSBzbG93IGRvd24gcHJvY2Vzc2luZy4nKQogICAgc2VsZi5fc2tpcF9oZWFkZXJfbGluZXMgPSBza2lwX2hlYWRlcl9saW5lcwogICAgc2VsZi5faGVhZGVyX21hdGNoZXIsIHNlbGYuX2hlYWRlcl9wcm9jZXNzb3IgPSBoZWFkZXJfcHJvY2Vzc29yX2ZucwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcGFyZW50X2RkID0gc3VwZXIoX1RleHRTb3VyY2UsIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICBwYXJlbnRfZGRbJ3N0cmlwX25ld2xpbmUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9zdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgICBsYWJlbD0nU3RyaXAgVHJhaWxpbmcgTmV3IExpbmVzJykKICAgIHBhcmVudF9kZFsnYnVmZmVyX3NpemUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9idWZmZXJfc2l6ZSwKICAgICAgICBsYWJlbD0nQnVmZmVyIFNpemUnKQogICAgcGFyZW50X2RkWydjb2RlciddID0gRGlzcGxheURhdGFJdGVtKAogICAgICAgIHNlbGYuX2NvZGVyLl9fY2xhc3NfXywKICAgICAgICBsYWJlbD0nQ29kZXInKQogICAgcmV0dXJuIHBhcmVudF9kZAoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHJlYWRfYnVmZmVyID0gX1RleHRTb3VyY2UuUmVhZEJ1ZmZlcignJywgMCkKCiAgICBuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbiA9IC0xCgogICAgZGVmIHNwbGl0X3BvaW50c191bmNsYWltZWQoc3RvcF9wb3NpdGlvbik6CiAgICAgIHJldHVybiAoMCBpZiBzdG9wX3Bvc2l0aW9uIDw9IG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uCiAgICAgICAgICAgICAgZWxzZSBpb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOKQoKICAgIHJhbmdlX3RyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCkKCiAgICB3aXRoIHNlbGYub3Blbl9maWxlKGZpbGVfbmFtZSkgYXMgZmlsZV90b19yZWFkOgogICAgICBwb3NpdGlvbl9hZnRlcl9wcm9jZXNzaW5nX2hlYWRlcl9saW5lcyA9ICgKICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfaGVhZGVyKGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpKQogICAgICBzdGFydF9vZmZzZXQgPSBtYXgoc3RhcnRfb2Zmc2V0LCBwb3NpdGlvbl9hZnRlcl9wcm9jZXNzaW5nX2hlYWRlcl9saW5lcykKICAgICAgaWYgc3RhcnRfb2Zmc2V0ID4gcG9zaXRpb25fYWZ0ZXJfcHJvY2Vzc2luZ19oZWFkZXJfbGluZXM6CiAgICAgICAgIyBTZWVraW5nIHRvIG9uZSBwb3NpdGlvbiBiZWZvcmUgdGhlIHN0YXJ0IGluZGV4IGFuZCBpZ25vcmluZyB0aGUKICAgICAgICAjIGN1cnJlbnQgbGluZS4gSWYgc3RhcnRfcG9zaXRpb24gaXMgYXQgYmVnaW5uaW5nIGlmIHRoZSBsaW5lLCB0aGF0IGxpbmUKICAgICAgICAjIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgYnVuZGxlLCBoZW5jZSBpZ25vcmluZyB0aGF0IGlzIGluY29ycmVjdC4KICAgICAgICAjIFNlZWtpbmcgdG8gb25lIGJ5dGUgYmVmb3JlIHByZXZlbnRzIHRoYXQuCgogICAgICAgIGZpbGVfdG9fcmVhZC5zZWVrKHN0YXJ0X29mZnNldCAtIDEpCiAgICAgICAgcmVhZF9idWZmZXIucmVzZXQoKQogICAgICAgIHNlcF9ib3VuZHMgPSBzZWxmLl9maW5kX3NlcGFyYXRvcl9ib3VuZHMoZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcikKICAgICAgICBpZiBub3Qgc2VwX2JvdW5kczoKICAgICAgICAgICMgQ291bGQgbm90IGZpbmQgYSBzZXBhcmF0b3IgYWZ0ZXIgKHN0YXJ0X29mZnNldCAtIDEpLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICMgbm9uZSBvZiB0aGUgcmVjb3JkcyB3aXRoaW4gdGhlIGZpbGUgYmVsb25ncyB0byB0aGUgY3VycmVudCBzb3VyY2UuCiAgICAgICAgICByZXR1cm4KCiAgICAgICAgXywgc2VwX2VuZCA9IHNlcF9ib3VuZHMKICAgICAgICByZWFkX2J1ZmZlci5kYXRhID0gcmVhZF9idWZmZXIuZGF0YVtzZXBfZW5kOl0KICAgICAgICBuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbiA9IHN0YXJ0X29mZnNldCAtIDEgKyBzZXBfZW5kCiAgICAgIGVsc2U6CiAgICAgICAgbmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24gPSBwb3NpdGlvbl9hZnRlcl9wcm9jZXNzaW5nX2hlYWRlcl9saW5lcwoKICAgICAgd2hpbGUgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0obmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24pOgogICAgICAgIHJlY29yZCwgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkID0gc2VsZi5fcmVhZF9yZWNvcmQoZmlsZV90b19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9idWZmZXIpCiAgICAgICAgIyBGb3IgY29tcHJlc3NlZCB0ZXh0IGZpbGVzIHRoYXQgdXNlIGFuIHVuc3BsaXR0YWJsZSBPZmZzZXRSYW5nZVRyYWNrZXIKICAgICAgICAjIHdpdGggaW5maW5pdHkgYXMgdGhlIGVuZCBwb3NpdGlvbiwgYWJvdmUgJ3RyeV9jbGFpbSgpJyBpbnZvY2F0aW9uCiAgICAgICAgIyB3b3VsZCBwYXNzIGZvciBhbiBlbXB0eSByZWNvcmQgYXQgdGhlIGVuZCBvZiBmaWxlIHRoYXQgaXMgbm90CiAgICAgICAgIyBmb2xsb3dlZCBieSBhIG5ldyBsaW5lIGNoYXJhY3Rlci4gU2luY2Ugc3VjaCBhIHJlY29yZCBpcyBhdCB0aGUgbGFzdAogICAgICAgICMgcG9zaXRpb24gb2YgYSBmaWxlLCBpdCBzaG91bGQgbm90IGJlIGEgcGFydCBvZiB0aGUgY29uc2lkZXJlZCByYW5nZS4KICAgICAgICAjIFdlIGRvIHRoaXMgY2hlY2sgdG8gaWdub3JlIHN1Y2ggcmVjb3Jkcy4KICAgICAgICBpZiBsZW4ocmVjb3JkKSA9PSAwIGFuZCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPCAwOiAgIyBweWxpbnQ6IGRpc2FibGU9bGVuLWFzLWNvbmRpdGlvbgogICAgICAgICAgYnJlYWsKCiAgICAgICAgIyBSZWNvcmQgc2VwYXJhdG9yIG11c3QgYmUgbGFyZ2VyIHRoYW4gemVybyBieXRlcy4KICAgICAgICBhc3NlcnQgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkICE9IDAKICAgICAgICBpZiBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPiAwOgogICAgICAgICAgbmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24gKz0gbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkCgogICAgICAgIHlpZWxkIHNlbGYuX2NvZGVyLmRlY29kZShyZWNvcmQpCiAgICAgICAgaWYgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkIDwgMDoKICAgICAgICAgIGJyZWFrCgogIGRlZiBfcHJvY2Vzc19oZWFkZXIoc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcik6CiAgICAjIFJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBpbiBmaWxlIGFmdGVyIHByb2Nlc3NpbmcgaGVhZGVyCiAgICAjIHJlY29yZHMgYW5kIGEgbGlzdCBvZiBkZWNvZGVkIGhlYWRlciBsaW5lcyB0aGF0IG1hdGNoCiAgICAjICdoZWFkZXJfbWF0Y2hlcicuCiAgICBoZWFkZXJfbGluZXMgPSBbXQogICAgcG9zaXRpb24gPSBzZWxmLl9za2lwX2xpbmVzKAogICAgICAgIGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIsCiAgICAgICAgc2VsZi5fc2tpcF9oZWFkZXJfbGluZXMpIGlmIHNlbGYuX3NraXBfaGVhZGVyX2xpbmVzIGVsc2UgMAogICAgaWYgc2VsZi5faGVhZGVyX21hdGNoZXI6CiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgcmVjb3JkLCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPSBzZWxmLl9yZWFkX3JlY29yZChmaWxlX3RvX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2J1ZmZlcikKICAgICAgICBkZWNvZGVkX2xpbmUgPSBzZWxmLl9jb2Rlci5kZWNvZGUocmVjb3JkKQogICAgICAgIGlmIG5vdCBzZWxmLl9oZWFkZXJfbWF0Y2hlcihkZWNvZGVkX2xpbmUpOgogICAgICAgICAgIyBXZSd2ZSByZWFkIHBhc3QgdGhlIGhlYWRlciBzZWN0aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGdvIGJhY2sgYSBsaW5lLgogICAgICAgICAgZmlsZV90b19yZWFkLnNlZWsocG9zaXRpb24pCiAgICAgICAgICByZWFkX2J1ZmZlci5yZXNldCgpCiAgICAgICAgICBicmVhawogICAgICAgIGhlYWRlcl9saW5lcy5hcHBlbmQoZGVjb2RlZF9saW5lKQogICAgICAgIGlmIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA8IDA6CiAgICAgICAgICBicmVhawogICAgICAgIHBvc2l0aW9uICs9IG51bV9ieXRlc190b19uZXh0X3JlY29yZAoKICAgICAgaWYgc2VsZi5faGVhZGVyX3Byb2Nlc3NvcjoKICAgICAgICBzZWxmLl9oZWFkZXJfcHJvY2Vzc29yKGhlYWRlcl9saW5lcykKCiAgICByZXR1cm4gcG9zaXRpb24KCiAgZGVmIF9maW5kX3NlcGFyYXRvcl9ib3VuZHMoc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcik6CiAgICAjIERldGVybWluZXMgdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHdpdGhpbiAncmVhZF9idWZmZXIuZGF0YScgb2YgdGhlCiAgICAjIG5leHQgc2VwYXJhdG9yIHN0YXJ0aW5nIGZyb20gcG9zaXRpb24gJ3JlYWRfYnVmZmVyLnBvc2l0aW9uJy4KICAgICMgQ3VycmVudGx5IHN1cHBvcnRzIGZvbGxvd2luZyBzZXBhcmF0b3JzLgogICAgIyAqICdcbicKICAgICMgKiAnXHJcbicKICAgICMgVGhpcyBtZXRob2QgbWF5IGluY3JlYXNlIHRoZSBzaXplIG9mIGJ1ZmZlciBidXQgaXQgd2lsbCBub3QgZGVjcmVhc2UgdGhlCiAgICAjIHNpemUgb2YgaXQuCgogICAgY3VycmVudF9wb3MgPSByZWFkX2J1ZmZlci5wb3NpdGlvbgoKICAgIHdoaWxlIFRydWU6CiAgICAgIGlmIGN1cnJlbnRfcG9zID49IGxlbihyZWFkX2J1ZmZlci5kYXRhKToKICAgICAgICAjIEVuc3VyaW5nIHRoYXQgdGhlcmUgYXJlIGVub3VnaCBieXRlcyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSAnXG4nCiAgICAgICAgIyBhdCBjdXJyZW50X3Bvcy4KICAgICAgICBpZiBub3Qgc2VsZi5fdHJ5X3RvX2Vuc3VyZV9udW1fYnl0ZXNfaW5fYnVmZmVyKAogICAgICAgICAgICBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyLCBjdXJyZW50X3BvcyArIDEpOgogICAgICAgICAgcmV0dXJuCgogICAgICAjIFVzaW5nIGZpbmQoKSBoZXJlIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYSBsaW5lYXIgc2NhbiBvZiB0aGUgYnl0ZQogICAgICAjIGFycmF5LgogICAgICBuZXh0X2xmID0gcmVhZF9idWZmZXIuZGF0YS5maW5kKCdcbicsIGN1cnJlbnRfcG9zKQogICAgICBpZiBuZXh0X2xmID49IDA6CiAgICAgICAgaWYgbmV4dF9sZiA+IDAgYW5kIHJlYWRfYnVmZmVyLmRhdGFbbmV4dF9sZiAtIDFdID09ICdccic6CiAgICAgICAgICAjIEZvdW5kIGEgJ1xyXG4nLiBBY2NlcHRpbmcgdGhhdCBhcyB0aGUgbmV4dCBzZXBhcmF0b3IuCiAgICAgICAgICByZXR1cm4gKG5leHRfbGYgLSAxLCBuZXh0X2xmICsgMSkKICAgICAgICBlbHNlOgogICAgICAgICAgIyBGb3VuZCBhICdcbicuIEFjY2VwdGluZyB0aGF0IGFzIHRoZSBuZXh0IHNlcGFyYXRvci4KICAgICAgICAgIHJldHVybiAobmV4dF9sZiwgbmV4dF9sZiArIDEpCgogICAgICBjdXJyZW50X3BvcyA9IGxlbihyZWFkX2J1ZmZlci5kYXRhKQoKICBkZWYgX3RyeV90b19lbnN1cmVfbnVtX2J5dGVzX2luX2J1ZmZlcigKICAgICAgc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlciwgbnVtX2J5dGVzKToKICAgICMgVHJpZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG51bV9ieXRlcyBieXRlcyBpbiB0aGUgYnVmZmVyLgogICAgIyBSZXR1cm5zIFRydWUgaWYgdGhpcyBjYW4gYmUgZnVsZmlsbGVkLCByZXR1cm5lZCBGYWxzZSBpZiB0aGlzIGNhbm5vdCBiZQogICAgIyBmdWxmaWxsZWQgZHVlIHRvIHJlYWNoaW5nIEVPRi4KICAgIHdoaWxlIGxlbihyZWFkX2J1ZmZlci5kYXRhKSA8IG51bV9ieXRlczoKICAgICAgcmVhZF9kYXRhID0gZmlsZV90b19yZWFkLnJlYWQoc2VsZi5fYnVmZmVyX3NpemUpCiAgICAgIGlmIG5vdCByZWFkX2RhdGE6CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICByZWFkX2J1ZmZlci5kYXRhICs9IHJlYWRfZGF0YQoKICAgIHJldHVybiBUcnVlCgogIGRlZiBfc2tpcF9saW5lcyhzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyLCBudW1fbGluZXMpOgogICAgIiIiU2tpcCBudW1fbGluZXMgZnJvbSBmaWxlX3RvX3JlYWQsIHJldHVybiBudW1fbGluZXMrMSBzdGFydCBwb3NpdGlvbi4iIiIKICAgIGlmIGZpbGVfdG9fcmVhZC50ZWxsKCkgPiAwOgogICAgICBmaWxlX3RvX3JlYWQuc2VlaygwKQogICAgcG9zaXRpb24gPSAwCiAgICBmb3IgXyBpbiByYW5nZShudW1fbGluZXMpOgogICAgICBfLCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPSBzZWxmLl9yZWFkX3JlY29yZChmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKQogICAgICBpZiBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPCAwOgogICAgICAgICMgV2UgcmVhY2hlZCBlbmQgb2YgZmlsZS4gSXQgaXMgT0sgdG8ganVzdCBicmVhayBoZXJlCiAgICAgICAgIyBiZWNhdXNlIHN1YnNlcXVlbnQgX3JlYWRfcmVjb3JkIHdpbGwgcmV0dXJuIHNhbWUgcmVzdWx0LgogICAgICAgIGJyZWFrCiAgICAgIHBvc2l0aW9uICs9IG51bV9ieXRlc190b19uZXh0X3JlY29yZAogICAgcmV0dXJuIHBvc2l0aW9uCgogIGRlZiBfcmVhZF9yZWNvcmQoc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcik6CiAgICAjIFJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBjdXJyZW50X3JlY29yZCBhbmQgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZQogICAgIyBuZXh0IHJlY29yZCBzdGFydGluZyBmcm9tICdyZWFkX2J1ZmZlci5wb3NpdGlvbicuIElmIEVPRiBpcwogICAgIyByZWFjaGVkLCByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0aGUgY3VycmVudCByZWNvcmQgYW5kIC0xLgoKICAgIGlmIHJlYWRfYnVmZmVyLnBvc2l0aW9uID4gc2VsZi5fYnVmZmVyX3NpemU6CiAgICAgICMgcmVhZF9idWZmZXIgaXMgdG9vIGxhcmdlLiBUcnVuY2F0aW5nIGFuZCBhZGp1c3RpbmcgaXQuCiAgICAgIHJlYWRfYnVmZmVyLmRhdGEgPSByZWFkX2J1ZmZlci5kYXRhW3JlYWRfYnVmZmVyLnBvc2l0aW9uOl0KICAgICAgcmVhZF9idWZmZXIucG9zaXRpb24gPSAwCgogICAgcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlciA9IHJlYWRfYnVmZmVyLnBvc2l0aW9uCiAgICBzZXBfYm91bmRzID0gc2VsZi5fZmluZF9zZXBhcmF0b3JfYm91bmRzKGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpCiAgICByZWFkX2J1ZmZlci5wb3NpdGlvbiA9IHNlcF9ib3VuZHNbMV0gaWYgc2VwX2JvdW5kcyBlbHNlIGxlbigKICAgICAgICByZWFkX2J1ZmZlci5kYXRhKQoKICAgIGlmIG5vdCBzZXBfYm91bmRzOgogICAgICAjIFJlYWNoZWQgRU9GLiBCeXRlcyB1cCB0byB0aGUgRU9GIGlzIHRoZSBuZXh0IHJlY29yZC4gUmV0dXJuaW5nICctMScgZm9yCiAgICAgICMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBuZXh0IHJlY29yZC4KICAgICAgcmV0dXJuIChyZWFkX2J1ZmZlci5kYXRhW3JlY29yZF9zdGFydF9wb3NpdGlvbl9pbl9idWZmZXI6XSwgLTEpCgogICAgaWYgc2VsZi5fc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM6CiAgICAgICMgQ3VycmVudCByZWNvcmQgc2hvdWxkIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IuCiAgICAgIHJldHVybiAocmVhZF9idWZmZXIuZGF0YVtyZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyOnNlcF9ib3VuZHNbMF1dLAogICAgICAgICAgICAgIHNlcF9ib3VuZHNbMV0gLSByZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyKQogICAgZWxzZToKICAgICAgIyBDdXJyZW50IHJlY29yZCBzaG91bGQgY29udGFpbiB0aGUgc2VwYXJhdG9yLgogICAgICByZXR1cm4gKHJlYWRfYnVmZmVyLmRhdGFbcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlcjpzZXBfYm91bmRzWzFdXSwKICAgICAgICAgICAgICBzZXBfYm91bmRzWzFdIC0gcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlcikKCgpjbGFzcyBfVGV4dFNpbmsoZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rKToKICAiIiJBIHNpbmsgdG8gYSBHQ1Mgb3IgbG9jYWwgdGV4dCBmaWxlIG9yIGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD0nJywKICAgICAgICAgICAgICAgYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzPVRydWUsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHM9MCwKICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1Ob25lLAogICAgICAgICAgICAgICBjb2Rlcj1jb2RlcnMuVG9TdHJpbmdDb2RlcigpLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgICAgICAgICAgaGVhZGVyPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIF9UZXh0U2luay4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGhfcHJlZml4OiBUaGUgZmlsZSBwYXRoIHRvIHdyaXRlIHRvLiBUaGUgZmlsZXMgd3JpdHRlbiB3aWxsIGJlZ2luCiAgICAgICAgd2l0aCB0aGlzIHByZWZpeCwgZm9sbG93ZWQgYnkgYSBzaGFyZCBpZGVudGlmaWVyIChzZWUgbnVtX3NoYXJkcyksIGFuZAogICAgICAgIGVuZCBpbiBhIGNvbW1vbiBleHRlbnNpb24sIGlmIGdpdmVuIGJ5IGZpbGVfbmFtZV9zdWZmaXguIEluIG1vc3QgY2FzZXMsCiAgICAgICAgb25seSB0aGlzIGFyZ3VtZW50IGlzIHNwZWNpZmllZCBhbmQgbnVtX3NoYXJkcywgc2hhcmRfbmFtZV90ZW1wbGF0ZSwgYW5kCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeCB1c2UgZGVmYXVsdCB2YWx1ZXMuCiAgICAgIGZpbGVfbmFtZV9zdWZmaXg6IFN1ZmZpeCBmb3IgdGhlIGZpbGVzIHdyaXR0ZW4uCiAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lczogaW5kaWNhdGUgd2hldGhlciB0aGlzIHNpbmsgc2hvdWxkIHdyaXRlIGFuCiAgICAgICAgYWRkaXRpb25hbCBuZXdsaW5lIGNoYXIgYWZ0ZXIgd3JpdGluZyBlYWNoIGVsZW1lbnQuCiAgICAgIG51bV9zaGFyZHM6IFRoZSBudW1iZXIgb2YgZmlsZXMgKHNoYXJkcykgdXNlZCBmb3Igb3V0cHV0LiBJZiBub3Qgc2V0LCB0aGUKICAgICAgICBzZXJ2aWNlIHdpbGwgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIG51bWJlciBvZiBzaGFyZHMuCiAgICAgICAgQ29uc3RyYWluaW5nIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGlzIGxpa2VseSB0byByZWR1Y2UKICAgICAgICB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBwaXBlbGluZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQKICAgICAgICB1bmxlc3MgeW91IHJlcXVpcmUgYSBzcGVjaWZpYyBudW1iZXIgb2Ygb3V0cHV0IGZpbGVzLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZW5jb2RlIGVhY2ggbGluZS4KICAgICAgY29tcHJlc3Npb25fdHlwZTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBvdXRwdXQgZmlsZXMuIFR5cGljYWwgdmFsdWUKICAgICAgICBpcyBDb21wcmVzc2lvblR5cGVzLkFVVE8sIGluIHdoaWNoIGNhc2UgdGhlIGZpbmFsIGZpbGUgcGF0aCdzCiAgICAgICAgZXh0ZW5zaW9uIChhcyBkZXRlcm1pbmVkIGJ5IGZpbGVfcGF0aF9wcmVmaXgsIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgbnVtX3NoYXJkcyBhbmQgc2hhcmRfbmFtZV90ZW1wbGF0ZSkgd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUKICAgICAgICBjb21wcmVzc2lvbi4KICAgICAgaGVhZGVyOiBTdHJpbmcgdG8gd3JpdGUgYXQgYmVnaW5uaW5nIG9mIGZpbGUgYXMgYSBoZWFkZXIuIElmIG5vdCBOb25lIGFuZAogICAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcyBpcyBzZXQsICdcbicgd2lsbCBiZSBhZGRlZC4KCiAgICBSZXR1cm5zOgogICAgICBBIF9UZXh0U2luayBvYmplY3QgdXNhYmxlIGZvciB3cml0aW5nLgogICAgIiIiCiAgICBzdXBlcihfVGV4dFNpbmssIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD1maWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPXNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29kZXI9Y29kZXIsCiAgICAgICAgbWltZV90eXBlPSd0ZXh0L3BsYWluJywKICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUpCiAgICBzZWxmLl9hcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMgPSBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMKICAgIHNlbGYuX2hlYWRlciA9IGhlYWRlcgoKICBkZWYgb3BlbihzZWxmLCB0ZW1wX3BhdGgpOgogICAgZmlsZV9oYW5kbGUgPSBzdXBlcihfVGV4dFNpbmssIHNlbGYpLm9wZW4odGVtcF9wYXRoKQogICAgaWYgc2VsZi5faGVhZGVyIGlzIG5vdCBOb25lOgogICAgICBmaWxlX2hhbmRsZS53cml0ZShzZWxmLl9oZWFkZXIpCiAgICAgIGlmIHNlbGYuX2FwcGVuZF90cmFpbGluZ19uZXdsaW5lczoKICAgICAgICBmaWxlX2hhbmRsZS53cml0ZSgnXG4nKQogICAgcmV0dXJuIGZpbGVfaGFuZGxlCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICBkZF9wYXJlbnQgPSBzdXBlcihfVGV4dFNpbmssIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICBkZF9wYXJlbnRbJ2FwcGVuZF9uZXdsaW5lJ10gPSBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgc2VsZi5fYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzLAogICAgICAgIGxhYmVsPSdBcHBlbmQgVHJhaWxpbmcgTmV3IExpbmVzJykKICAgIHJldHVybiBkZF9wYXJlbnQKCiAgZGVmIHdyaXRlX2VuY29kZWRfcmVjb3JkKHNlbGYsIGZpbGVfaGFuZGxlLCBlbmNvZGVkX3ZhbHVlKToKICAgICIiIldyaXRlcyBhIHNpbmdsZSBlbmNvZGVkIHJlY29yZC4iIiIKICAgIGZpbGVfaGFuZGxlLndyaXRlKGVuY29kZWRfdmFsdWUpCiAgICBpZiBzZWxmLl9hcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM6CiAgICAgIGZpbGVfaGFuZGxlLndyaXRlKCdcbicpCgoKZGVmIF9jcmVhdGVfdGV4dF9zb3VyY2UoCiAgICBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPU5vbmUsIGNvbXByZXNzaW9uX3R5cGU9Tm9uZSwKICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPU5vbmUsIGNvZGVyPU5vbmUsIHNraXBfaGVhZGVyX2xpbmVzPU5vbmUpOgogIHJldHVybiBfVGV4dFNvdXJjZSgKICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcz1zdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgY29kZXI9Y29kZXIsIHZhbGlkYXRlPUZhbHNlLCBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKCgpjbGFzcyBSZWFkQWxsRnJvbVRleHQoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBhIGBgUENvbGxlY3Rpb25gYCBvZiB0ZXh0IGZpbGVzLgoKICAgUmVhZHMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgdGV4dCBmaWxlcyBvciBmaWxlIHBhdHRlcm5zIGFuZCBhbmQgcHJvZHVjZXMgYQogICBgYFBDb2xsZWN0aW9uYGAgb2Ygc3RyaW5ncy4KCiAgUGFyc2VzIGEgdGV4dCBmaWxlIGFzIG5ld2xpbmUtZGVsaW1pdGVkIGVsZW1lbnRzLCBieSBkZWZhdWx0IGFzc3VtaW5nCiAgVVRGLTggZW5jb2RpbmcuIFN1cHBvcnRzIG5ld2xpbmUgZGVsaW1pdGVycyAnXFxuJyBhbmQgJ1xcclxcbicuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBVVEYtOCBvciBBU0NJSS4KICBUaGlzIGRvZXMgbm90IHN1cHBvcnQgb3RoZXIgZW5jb2RpbmdzIHN1Y2ggYXMgVVRGLTE2IG9yIFVURi0zMi4KICAiIiIKCiAgREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFID0gNjQgKiAxMDI0ICogMTAyNCAgIyA2NE1CCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9REVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgY29kZXI9Y29kZXJzLlN0clV0ZjhDb2RlcigpLAogICAgICBza2lwX2hlYWRlcl9saW5lcz0wLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgYFJlYWRBbGxGcm9tVGV4dGBgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBtaW5fYnVuZGxlX3NpemU6IE1pbmltdW0gc2l6ZSBvZiBidW5kbGVzIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgc3BsaXR0aW5nIHRoaXMgc291cmNlIGludG8gYnVuZGxlcy4gU2VlIGBgRmlsZUJhc2VkU291cmNlYGAgZm9yIG1vcmUKICAgICAgICBkZXRhaWxzLgogICAgICBkZXNpcmVkX2J1bmRsZV9zaXplOiBEZXNpcmVkIHNpemUgb2YgYnVuZGxlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIHNwbGl0dGluZyB0aGlzIHNvdXJjZSBpbnRvIGJ1bmRsZXMuIFNlZSBgYEZpbGVCYXNlZFNvdXJjZWBgIGZvciBtb3JlCiAgICAgICAgZGV0YWlscy4KICAgICAgY29tcHJlc3Npb25fdHlwZTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBpbnB1dCBmaWxlcy4gVHlwaWNhbCB2YWx1ZQogICAgICAgIGlzIGBgQ29tcHJlc3Npb25UeXBlcy5BVVRPYGAsIGluIHdoaWNoIGNhc2UgdGhlIHVuZGVybHlpbmcgZmlsZV9wYXRoJ3MKICAgICAgICBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNvdXJjZSBzaG91bGQgcmVtb3ZlCiAgICAgICAgdGhlIG5ld2xpbmUgY2hhciBpbiBlYWNoIGxpbmUgaXQgcmVhZHMgYmVmb3JlIGRlY29kaW5nIHRoYXQgbGluZS4KICAgICAgdmFsaWRhdGU6IGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICBjcmVhdGlvbiB0aW1lLgogICAgICBza2lwX2hlYWRlcl9saW5lczogTnVtYmVyIG9mIGhlYWRlciBsaW5lcyB0byBza2lwLiBTYW1lIG51bWJlciBpcyBza2lwcGVkCiAgICAgICAgZnJvbSBlYWNoIHNvdXJjZSBmaWxlLiBNdXN0IGJlIDAgb3IgaGlnaGVyLiBMYXJnZSBudW1iZXIgb2Ygc2tpcHBlZAogICAgICAgIGxpbmVzIG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggbGluZS4KICAgICIiIgogICAgc3VwZXIoUmVhZEFsbEZyb21UZXh0LCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgIHNvdXJjZV9mcm9tX2ZpbGUgPSBwYXJ0aWFsKAogICAgICAgIF9jcmVhdGVfdGV4dF9zb3VyY2UsIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPXN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLCBjb2Rlcj1jb2RlciwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKICAgIHNlbGYuX2Rlc2lyZWRfYnVuZGxlX3NpemUgPSBkZXNpcmVkX2J1bmRsZV9zaXplCiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IFJlYWRBbGxGaWxlcygKICAgICAgICBUcnVlLCBjb21wcmVzc2lvbl90eXBlLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgc291cmNlX2Zyb21fZmlsZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZSB8ICdSZWFkQWxsRmlsZXMnID4+IHNlbGYuX3JlYWRfYWxsX2ZpbGVzCgoKY2xhc3MgUmVhZEZyb21UZXh0KFBUcmFuc2Zvcm0pOgogIHIiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZyB0ZXh0CiAgZmlsZXMuCgogIFBhcnNlcyBhIHRleHQgZmlsZSBhcyBuZXdsaW5lLWRlbGltaXRlZCBlbGVtZW50cywgYnkgZGVmYXVsdCBhc3N1bWluZwogIGBgVVRGLThgYCBlbmNvZGluZy4gU3VwcG9ydHMgbmV3bGluZSBkZWxpbWl0ZXJzIGBgXG5gYCBhbmQgYGBcclxuYGAuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBgYFVURi04YGAgb3IKICBgYEFTQ0lJYGAuCiAgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IG90aGVyIGVuY29kaW5ncyBzdWNoIGFzIGBgVVRGLTE2YGAgb3IgYGBVVEYtMzJgYC4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPVRydWUsCiAgICAgIGNvZGVyPWNvZGVycy5TdHJVdGY4Q29kZXIoKSwKICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgc2tpcF9oZWFkZXJfbGluZXM9MCwKICAgICAgKiprd2FyZ3MpOgogICAgIiIiSW5pdGlhbGl6ZSB0aGUgOmNsYXNzOmBSZWFkRnJvbVRleHRgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm4gKHN0cik6IFRoZSBmaWxlIHBhdGggdG8gcmVhZCBmcm9tIGFzIGEgbG9jYWwgZmlsZSBwYXRoIG9yIGEKICAgICAgICBHQ1MgYGBnczovL2BgIHBhdGguIFRoZSBwYXRoIGNhbiBjb250YWluIGdsb2IgY2hhcmFjdGVycwogICAgICAgIChgYCpgYCwgYGA/YGAsIGFuZCBgYFsuLi5dYGAgc2V0cykuCiAgICAgIG1pbl9idW5kbGVfc2l6ZSAoaW50KTogTWluaW11bSBzaXplIG9mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICAgICAgd2hlbiBzcGxpdHRpbmcgdGhpcyBzb3VyY2UgaW50byBidW5kbGVzLiBTZWUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlYCBmb3IgbW9yZQogICAgICAgIGRldGFpbHMuCiAgICAgIGNvbXByZXNzaW9uX3R5cGUgKHN0cik6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgaW5wdXQgZmlsZXMuCiAgICAgICAgVHlwaWNhbCB2YWx1ZSBpcyA6YXR0cjpgQ29tcHJlc3Npb25UeXBlcy5BVVRPCiAgICAgICAgPGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5BVVRPPmAsIGluIHdoaWNoIGNhc2UgdGhlCiAgICAgICAgdW5kZXJseWluZyBmaWxlX3BhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzIChib29sKTogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzb3VyY2Ugc2hvdWxkCiAgICAgICAgcmVtb3ZlIHRoZSBuZXdsaW5lIGNoYXIgaW4gZWFjaCBsaW5lIGl0IHJlYWRzIGJlZm9yZSBkZWNvZGluZyB0aGF0IGxpbmUuCiAgICAgIHZhbGlkYXRlIChib29sKTogZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZXMgZXhpc3QgZHVyaW5nIHRoZSBwaXBlbGluZQogICAgICAgIGNyZWF0aW9uIHRpbWUuCiAgICAgIHNraXBfaGVhZGVyX2xpbmVzIChpbnQpOiBOdW1iZXIgb2YgaGVhZGVyIGxpbmVzIHRvIHNraXAuIFNhbWUgbnVtYmVyIGlzCiAgICAgICAgc2tpcHBlZCBmcm9tIGVhY2ggc291cmNlIGZpbGUuIE11c3QgYmUgMCBvciBoaWdoZXIuIExhcmdlIG51bWJlciBvZgogICAgICAgIHNraXBwZWQgbGluZXMgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlLgogICAgICBjb2RlciAofmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIpOiBDb2RlciB1c2VkIHRvIGRlY29kZSBlYWNoIGxpbmUuCiAgICAiIiIKCiAgICBzdXBlcihSZWFkRnJvbVRleHQsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQogICAgc2VsZi5fc291cmNlID0gX1RleHRTb3VyY2UoCiAgICAgICAgZmlsZV9wYXR0ZXJuLCBtaW5fYnVuZGxlX3NpemUsIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMsIGNvZGVyLCB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKCmNsYXNzIFdyaXRlVG9UZXh0KFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciB3cml0aW5nIHRvCiAgdGV4dCBmaWxlcy4iIiIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgIGNvZGVyPWNvZGVycy5Ub1N0cmluZ0NvZGVyKCksCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICBoZWFkZXI9Tm9uZSk6CiAgICByIiIiSW5pdGlhbGl6ZSBhIDpjbGFzczpgV3JpdGVUb1RleHRgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGhfcHJlZml4IChzdHIpOiBUaGUgZmlsZSBwYXRoIHRvIHdyaXRlIHRvLiBUaGUgZmlsZXMgd3JpdHRlbiB3aWxsCiAgICAgICAgYmVnaW4gd2l0aCB0aGlzIHByZWZpeCwgZm9sbG93ZWQgYnkgYSBzaGFyZCBpZGVudGlmaWVyIChzZWUKICAgICAgICAqKm51bV9zaGFyZHMqKiksIGFuZCBlbmQgaW4gYSBjb21tb24gZXh0ZW5zaW9uLCBpZiBnaXZlbiBieQogICAgICAgICoqZmlsZV9uYW1lX3N1ZmZpeCoqLiBJbiBtb3N0IGNhc2VzLCBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZAogICAgICAgICoqbnVtX3NoYXJkcyoqLCAqKnNoYXJkX25hbWVfdGVtcGxhdGUqKiwgYW5kICoqZmlsZV9uYW1lX3N1ZmZpeCoqIHVzZQogICAgICAgIGRlZmF1bHQgdmFsdWVzLgogICAgICBmaWxlX25hbWVfc3VmZml4IChzdHIpOiBTdWZmaXggZm9yIHRoZSBmaWxlcyB3cml0dGVuLgogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMgKGJvb2wpOiBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgc2luayBzaG91bGQgd3JpdGUKICAgICAgICBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhciBhZnRlciB3cml0aW5nIGVhY2ggZWxlbWVudC4KICAgICAgbnVtX3NoYXJkcyAoaW50KTogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuCiAgICAgICAgSWYgbm90IHNldCwgdGhlIHNlcnZpY2Ugd2lsbCBkZWNpZGUgb24gdGhlIG9wdGltYWwgbnVtYmVyIG9mIHNoYXJkcy4KICAgICAgICBDb25zdHJhaW5pbmcgdGhlIG51bWJlciBvZiBzaGFyZHMgaXMgbGlrZWx5IHRvIHJlZHVjZQogICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLiAgU2V0dGluZyB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZAogICAgICAgIHVubGVzcyB5b3UgcmVxdWlyZSBhIHNwZWNpZmljIG51bWJlciBvZiBvdXRwdXQgZmlsZXMuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUgKHN0cik6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBDdXJyZW50bHkgb25seSBgYCcnYGAgYW5kCiAgICAgICAgYGAnLVNTU1NTLW9mLU5OTk5OJ2BgIGFyZSBwYXR0ZXJucyBhY2NlcHRlZCBieSB0aGUgc2VydmljZS4KICAgICAgICBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUKICAgICAgICB1cHBlci1jYXNlIGxldHRlcnMgYGBTYGAgYW5kIGBgTmBgIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBgYDBgYC1wYWRkZWQKICAgICAgICBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50IHJlc3BlY3RpdmVseS4gIFRoaXMgYXJndW1lbnQgY2FuIGJlIGBgJydgYAogICAgICAgIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcyBzZXQgdG8gMSBhbmQgb25seSBvbmUgZmlsZQogICAgICAgIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQgaXMgYGAnLVNTU1NTLW9mLU5OTk5OJ2BgLgogICAgICBjb2RlciAofmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIpOiBDb2RlciB1c2VkIHRvIGVuY29kZSBlYWNoIGxpbmUuCiAgICAgIGNvbXByZXNzaW9uX3R5cGUgKHN0cik6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgb3V0cHV0IGZpbGVzLgogICAgICAgIFR5cGljYWwgdmFsdWUgaXMgOmNsYXNzOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwgaW4gd2hpY2ggY2FzZSB0aGUKICAgICAgICBmaW5hbCBmaWxlIHBhdGgncyBleHRlbnNpb24gKGFzIGRldGVybWluZWQgYnkgKipmaWxlX3BhdGhfcHJlZml4KiosCiAgICAgICAgKipmaWxlX25hbWVfc3VmZml4KiosICoqbnVtX3NoYXJkcyoqIGFuZCAqKnNoYXJkX25hbWVfdGVtcGxhdGUqKikgd2lsbAogICAgICAgIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgaGVhZGVyIChzdHIpOiBTdHJpbmcgdG8gd3JpdGUgYXQgYmVnaW5uaW5nIG9mIGZpbGUgYXMgYSBoZWFkZXIuCiAgICAgICAgSWYgbm90IDpkYXRhOmBOb25lYCBhbmQgKiphcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMqKiBpcyBzZXQsIGBgXG5gYCB3aWxsCiAgICAgICAgYmUgYWRkZWQuCiAgICAiIiIKCiAgICBzZWxmLl9zaW5rID0gX1RleHRTaW5rKGZpbGVfcGF0aF9wcmVmaXgsIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcywgbnVtX3NoYXJkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwgY29kZXIsIGNvbXByZXNzaW9uX3R5cGUsIGhlYWRlcikKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQp9cskBAAAoWC4AAABfVGV4dFNvdXJjZS5fdHJ5X3RvX2Vuc3VyZV9udW1fYnl0ZXNfaW5fYnVmZmVyWAMAAABkZWZNBQFNEgGHWB4AAABfVGV4dFNpbmsud3JpdGVfZW5jb2RlZF9yZWNvcmRYAwAAAGRlZk2IAU2NAYdYFAAAAF9UZXh0U291cmNlLl9faW5pdF9fWAMAAABkZWZLVUuCh1gTAAAAUmVhZEZyb21UZXh0LmV4cGFuZFgDAAAAZGVmTQoCTQwCh1gvAAAAX1RleHRTb3VyY2UucmVhZF9yZWNvcmRzLnNwbGl0X3BvaW50c191bmNsYWltZWRYAwAAAGRlZkuWS5mHWBgAAABSZWFkQWxsRnJvbVRleHQuX19pbml0X19YAwAAAGRlZk2oAU3SAYdYCQAAAF9UZXh0U2lua1gFAAAAY2xhc3NNPwFNjQGHWBcAAABfVGV4dFNvdXJjZS5fc2tpcF9saW5lc1gDAAAAZGVmTRMBTSABh1gLAAAAV3JpdGVUb1RleHRYBQAAAGNsYXNzTQ4CTUcCh1gWAAAAX1RleHRTb3VyY2UuUmVhZEJ1ZmZlclgFAAAAY2xhc3NLNEtUh1gLAAAAX1RleHRTb3VyY2VYBQAAAGNsYXNzSyhNPQGHWBsAAABfVGV4dFNvdXJjZS5fcHJvY2Vzc19oZWFkZXJYAwAAAGRlZkvJS+SHWCIAAABfVGV4dFNvdXJjZS5fZmluZF9zZXBhcmF0b3JfYm91bmRzWAMAAABkZWZL5U0EAYdYEgAAAFdyaXRlVG9UZXh0LmV4cGFuZFgDAAAAZGVmTUUCTUcCh1gbAAAAX1RleHRTb3VyY2UuUmVhZEJ1ZmZlci5kYXRhWAMAAABkZWZLQEtEh1gYAAAAX1RleHRTb3VyY2UuX3JlYWRfcmVjb3JkWAMAAABkZWZNIQFNPQGHWB8AAABfVGV4dFNvdXJjZS5SZWFkQnVmZmVyLnBvc2l0aW9uWAMAAABkZWZLSUtQh1gTAAAAX2NyZWF0ZV90ZXh0X3NvdXJjZVgDAAAAZGVmTY8BTZcBh1gOAAAAX1RleHRTaW5rLm9wZW5YAwAAAGRlZk15AU2AAYdYGAAAAF9UZXh0U291cmNlLmRpc3BsYXlfZGF0YVgDAAAAZGVmS4NLj4dYFQAAAFJlYWRGcm9tVGV4dC5fX2luaXRfX1gDAAAAZGVmTeIBTQkCh1gMAAAAUmVhZEZyb21UZXh0WAUAAABjbGFzc03XAU0MAodYEgAAAF9UZXh0U2luay5fX2luaXRfX1gDAAAAZGVmTUIBTXgBh1gPAAAAUmVhZEFsbEZyb21UZXh0WAUAAABjbGFzc02ZAU3VAYdYFgAAAFJlYWRBbGxGcm9tVGV4dC5leHBhbmRYAwAAAGRlZk3TAU3VAYdYHAAAAF9UZXh0U291cmNlLlJlYWRCdWZmZXIucmVzZXRYAwAAAGRlZktRS1SHWBgAAABfVGV4dFNvdXJjZS5yZWFkX3JlY29yZHNYAwAAAGRlZkuQS8iHWBYAAABfVGV4dFNpbmsuZGlzcGxheV9kYXRhWAMAAABkZWZNgQFNhwGHWB8AAABfVGV4dFNvdXJjZS5SZWFkQnVmZmVyLl9faW5pdF9fWAMAAABkZWZLOEs7h1gUAAAAV3JpdGVUb1RleHQuX19pbml0X19YAwAAAGRlZk0SAk1EAod1fXLKAQAAKFgTAAAAUmVhZEZyb21UZXh0LmV4cGFuZFgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvcssBAABYDwAAAFJlYWRBbGxGcm9tVGV4dGrLAQAAWBYAAABSZWFkQWxsRnJvbVRleHQuZXhwYW5kassBAABYDAAAAFJlYWRGcm9tVGV4dGrLAQAAWBIAAABXcml0ZVRvVGV4dC5leHBhbmRqywEAAFgLAAAAV3JpdGVUb1RleHRqywEAAHVoilgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvcswBAACFgXLNAQAAfXLOAQAAYnRyzwEAAFUhYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lctABAAAoWEAaAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRlc3QgUGlwZWxpbmUsIGEgd3JhcHBlciBvZiBQaXBlbGluZSBmb3IgdGVzdCBwdXJwb3NlIiIiCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IHNobGV4Cgpmcm9tIG5vc2UucGx1Z2lucy5za2lwIGltcG9ydCBTa2lwVGVzdAoKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lU3RhdGUKCl9fYWxsX18gPSBbCiAgICAnVGVzdFBpcGVsaW5lJywKICAgIF0KCgpjbGFzcyBUZXN0UGlwZWxpbmUoUGlwZWxpbmUpOgogICIiIjpjbGFzczpgVGVzdFBpcGVsaW5lYCBjbGFzcyBpcyB1c2VkIGluc2lkZSBvZiBCZWFtIHRlc3RzIHRoYXQgY2FuIGJlCiAgY29uZmlndXJlZCB0byBydW4gYWdhaW5zdCBwaXBlbGluZSBydW5uZXIuCgogIEl0IGhhcyBhIGZ1bmN0aW9uYWxpdHkgdG8gcGFyc2UgYXJndW1lbnRzIGZyb20gY29tbWFuZCBsaW5lIGFuZCBidWlsZCBwaXBlbGluZQogIG9wdGlvbnMgZm9yIHRlc3RzIHdobyBydW5zIGFnYWluc3QgYSBwaXBlbGluZSBydW5uZXIgYW5kIHV0aWxpemVzIHJlc291cmNlcwogIG9mIHRoZSBwaXBlbGluZSBydW5uZXIuIFRob3NlIHRlc3QgZnVuY3Rpb25zIGFyZSByZWNvbW1lbmRlZCB0byBiZSB0YWdnZWQgYnkKICBgYEBhdHRyKCJWYWxpZGF0ZXNSdW5uZXIiKWBgIGFubm90YXRpb24uCgogIEluIG9yZGVyIHRvIGNvbmZpZ3VyZSB0aGUgdGVzdCB3aXRoIGN1c3RvbWl6ZWQgcGlwZWxpbmUgb3B0aW9ucyBmcm9tIGNvbW1hbmQKICBsaW5lLCBzeXN0ZW0gYXJndW1lbnQgYGAtLXRlc3QtcGlwZWxpbmUtb3B0aW9uc2BgIGNhbiBiZSB1c2VkIHRvIG9idGFpbnMgYQogIGxpc3Qgb2YgcGlwZWxpbmUgb3B0aW9ucy4gSWYgbm8gb3B0aW9ucyBzcGVjaWZpZWQsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgoKICBGb3IgZXhhbXBsZSwgdXNlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBhbGwgVmFsaWRhdGVzUnVubmVyIHRlc3RzOjoKCiAgICBweXRob24gc2V0dXAucHkgbm9zZXRlc3RzIC1hIFZhbGlkYXRlc1J1bm5lciBcXAogICAgICAgIC0tdGVzdC1waXBlbGluZS1vcHRpb25zPSItLXJ1bm5lcj1EaXJlY3RSdW5uZXIgXFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1qb2JfbmFtZT1teUpvYk5hbWUgXFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1udW1fd29ya2Vycz0xIgoKICBGb3IgZXhhbXBsZSwgdXNlIGFzc2VydF90aGF0IGZvciB0ZXN0IHZhbGlkYXRpb246OgoKICAgIHBpcGVsaW5lID0gVGVzdFBpcGVsaW5lKCkKICAgIHBjb2xsID0gLi4uCiAgICBhc3NlcnRfdGhhdChwY29sbCwgZXF1YWxfdG8oLi4uKSkKICAgIHBpcGVsaW5lLnJ1bigpCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBydW5uZXI9Tm9uZSwKICAgICAgICAgICAgICAgb3B0aW9ucz1Ob25lLAogICAgICAgICAgICAgICBhcmd2PU5vbmUsCiAgICAgICAgICAgICAgIGlzX2ludGVncmF0aW9uX3Rlc3Q9RmFsc2UsCiAgICAgICAgICAgICAgIGJsb2NraW5nPVRydWUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIHBpcGVsaW5lIG9iamVjdCBmb3IgdGVzdC4KCiAgICBBcmdzOgogICAgICBydW5uZXIgKH5hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lcik6IEFuIG9iamVjdCBvZiB0eXBlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXJgIHRoYXQgd2lsbCBiZSB1c2VkCiAgICAgICAgdG8gZXhlY3V0ZSB0aGUgcGlwZWxpbmUuIEZvciByZWdpc3RlcmVkIHJ1bm5lcnMsIHRoZSBydW5uZXIgbmFtZSBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQsIG90aGVyd2lzZSBhIHJ1bm5lciBvYmplY3QgbXVzdCBiZSBzdXBwbGllZC4KICAgICAgb3B0aW9ucyAofmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMpOgogICAgICAgIEEgY29uZmlndXJlZAogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNgCiAgICAgICAgb2JqZWN0IGNvbnRhaW5pbmcgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHJ1bm5pbmcgdGhlCiAgICAgICAgcGlwZWxpbmUgam9iLgogICAgICBhcmd2IChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgYXJndW1lbnRzIChzdWNoIGFzIDpkYXRhOmBzeXMuYXJndmApIHRvIGJlCiAgICAgICAgdXNlZCBmb3IgYnVpbGRpbmcgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNgIG9iamVjdC4KICAgICAgICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGFyZ3VtZW50ICoqb3B0aW9ucyoqIGlzIDpkYXRhOmBOb25lYC4KICAgICAgaXNfaW50ZWdyYXRpb25fdGVzdCAoYm9vbCk6IDpkYXRhOmBUcnVlYCBpZiB0aGUgdGVzdCBpcyBhbiBpbnRlZ3JhdGlvbgogICAgICAgIHRlc3QsIDpkYXRhOmBGYWxzZWAgb3RoZXJ3aXNlLgogICAgICBibG9ja2luZyAoYm9vbCk6IFJ1biBtZXRob2Qgd2lsbCB3YWl0IHVudGlsIHBpcGVsaW5lIGV4ZWN1dGlvbiBpcwogICAgICAgIGNvbXBsZXRlZC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIGVpdGhlciB0aGUgcnVubmVyIG9yIG9wdGlvbnMgYXJndW1lbnQgaXMgbm90CiAgICAgICAgb2YgdGhlIGV4cGVjdGVkIHR5cGUuCiAgICAiIiIKICAgIHNlbGYuaXNfaW50ZWdyYXRpb25fdGVzdCA9IGlzX2ludGVncmF0aW9uX3Rlc3QKICAgIHNlbGYub3B0aW9uc19saXN0ID0gc2VsZi5fcGFyc2VfdGVzdF9vcHRpb25fYXJncyhhcmd2KQogICAgc2VsZi5ibG9ja2luZyA9IGJsb2NraW5nCiAgICBpZiBvcHRpb25zIGlzIE5vbmU6CiAgICAgIG9wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMoc2VsZi5vcHRpb25zX2xpc3QpCiAgICBzdXBlcihUZXN0UGlwZWxpbmUsIHNlbGYpLl9faW5pdF9fKHJ1bm5lciwgb3B0aW9ucykKCiAgZGVmIHJ1bihzZWxmKToKICAgIHJlc3VsdCA9IHN1cGVyKFRlc3RQaXBlbGluZSwgc2VsZikucnVuKCkKICAgIGlmIHNlbGYuYmxvY2tpbmc6CiAgICAgIHN0YXRlID0gcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICAgICAgYXNzZXJ0IHN0YXRlID09IFBpcGVsaW5lU3RhdGUuRE9ORSwgIlBpcGVsaW5lIGV4ZWN1dGlvbiBmYWlsZWQuIgoKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIF9wYXJzZV90ZXN0X29wdGlvbl9hcmdzKHNlbGYsIGFyZ3YpOgogICAgIiIiUGFyc2UgdmFsdWUgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50OiAtLXRlc3QtcGlwZWxpbmUtb3B0aW9ucyB0byBnZXQKICAgIHBpcGVsaW5lIG9wdGlvbnMuCgogICAgQXJnczoKICAgICAgYXJndjogQW4gaXRlcmFibGUgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBiZSB1c2VkLiBJZiBub3Qgc3BlY2lmaWVkCiAgICAgICAgdGhlbiBzeXMuYXJndiB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHBhcnNpbmcgYXJndW1lbnRzLgoKICAgIFJldHVybnM6CiAgICAgIEFuIGFyZ3VtZW50IGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSBwYXJzZWQgYnkgYXJncGFyc2VyIG9yIGRpcmVjdGx5CiAgICAgIGJ1aWxkIGEgcGlwZWxpbmUgb3B0aW9uLgogICAgIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXRlc3QtcGlwZWxpbmUtb3B0aW9ucycsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nb25seSBydW4gdGVzdHMgcHJvdmlkaW5nIHNlcnZpY2Ugb3B0aW9ucycpCiAgICBrbm93biwgdW51c2VkX2FyZ3YgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQoKICAgIGlmIHNlbGYuaXNfaW50ZWdyYXRpb25fdGVzdCBhbmQgbm90IGtub3duLnRlc3RfcGlwZWxpbmVfb3B0aW9uczoKICAgICAgIyBTa2lwIGludGVncmF0aW9uIHRlc3Qgd2hlbiBhcmd1bWVudCAnLS10ZXN0LXBpcGVsaW5lLW9wdGlvbnMnIGlzIG5vdAogICAgICAjIHNwZWNpZmllZCBzaW5jZSBub3NlIGNhbGxzIGludGVncmF0aW9uIHRlc3RzIHdoZW4gcnVucyB1bml0IHRlc3QgYnkKICAgICAgIyAnc2V0dXAucHkgdGVzdCcuCiAgICAgIHJhaXNlIFNraXBUZXN0KCdJVCBpcyBza2lwcGVkIGJlY2F1c2UgLS10ZXN0LXBpcGVsaW5lLW9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAnaXMgbm90IHNwZWNpZmllZCcpCgogICAgcmV0dXJuIHNobGV4LnNwbGl0KGtub3duLnRlc3RfcGlwZWxpbmVfb3B0aW9ucykgXAogICAgICBpZiBrbm93bi50ZXN0X3BpcGVsaW5lX29wdGlvbnMgZWxzZSBbXQoKICBkZWYgZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzKHNlbGYsICoqZXh0cmFfb3B0cyk6CiAgICAiIiJHZXQgZnVsbCBwaXBlbGluZSBvcHRpb25zIGFzIGFuIGFyZ3VtZW50IGxpc3QuCgogICAgQXBwZW5kIGV4dHJhIHBpcGVsaW5lIG9wdGlvbnMgdG8gZXhpc3Rpbmcgb3B0aW9uIGxpc3QgaWYgcHJvdmlkZWQuCiAgICBUZXN0IHZlcmlmaWVyIChpZiBjb250YWlucyBpbiBleHRyYSBvcHRpb25zKSBzaG91bGQgYmUgcGlja2xlZCBiZWZvcmUKICAgIGFwcGVuZGluZywgYW5kIHdpbGwgYmUgdW5waWNrbGVkIGxhdGVyIGluIHRoZSBUZXN0UnVubmVyLgogICAgIiIiCiAgICBvcHRpb25zID0gbGlzdChzZWxmLm9wdGlvbnNfbGlzdCkKICAgIGZvciBrLCB2IGluIGV4dHJhX29wdHMuaXRlbXMoKToKICAgICAgaWYgbm90IHY6CiAgICAgICAgY29udGludWUKICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGJvb2wpIGFuZCB2OgogICAgICAgIG9wdGlvbnMuYXBwZW5kKCctLSVzJyAlIGspCiAgICAgIGVsaWYgJ21hdGNoZXInIGluIGs6CiAgICAgICAgb3B0aW9ucy5hcHBlbmQoJy0tJXM9JXMnICUgKGssIHBpY2tsZXIuZHVtcHModikpKQogICAgICBlbHNlOgogICAgICAgIG9wdGlvbnMuYXBwZW5kKCctLSVzPSVzJyAlIChrLCB2KSkKICAgIHJldHVybiBvcHRpb25zCgogIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG9wdF9uYW1lKToKICAgICIiIkdldCBhIHBpcGVsaW5lIG9wdGlvbiB2YWx1ZSBieSBuYW1lCgogICAgQXJnczoKICAgICAgb3B0X25hbWU6IFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSBvcHRpb24uCgogICAgUmV0dXJuczoKICAgICAgTm9uZSBpZiBvcHRpb24gaXMgbm90IGZvdW5kIGluIGV4aXN0aW5nIG9wdGlvbiBsaXN0IHdoaWNoIGlzIGdlbmVyYXRlZAogICAgICBieSBwYXJzaW5nIHZhbHVlIG9mIGFyZ3VtZW50IGB0ZXN0LXBpcGVsaW5lLW9wdGlvbnNgLgogICAgIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBvcHRfbmFtZSA9IG9wdF9uYW1lWzoyXSBpZiBvcHRfbmFtZVs6Ml0gPT0gJy0tJyBlbHNlIG9wdF9uYW1lCiAgICAjIE9wdGlvbiBuYW1lIHNob3VsZCBzdGFydCB3aXRoICctLScgd2hlbiBpdCdzIHVzZWQgZm9yIHBhcnNpbmcuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLScgKyBvcHRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnKQogICAga25vd24sIF8gPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhzZWxmLm9wdGlvbnNfbGlzdCkKICAgIHJldHVybiBnZXRhdHRyKGtub3duLCBvcHRfbmFtZSkgaWYgaGFzYXR0cihrbm93biwgb3B0X25hbWUpIGVsc2UgTm9uZQp9ctEBAAAoWBAAAABUZXN0UGlwZWxpbmUucnVuWAMAAABkZWZLZUtsh1gMAAAAVGVzdFBpcGVsaW5lWAUAAABjbGFzc0sjS6+HWBUAAABUZXN0UGlwZWxpbmUuX19pbml0X19YAwAAAGRlZks/S2SHWBcAAABUZXN0UGlwZWxpbmUuZ2V0X29wdGlvblgDAAAAZGVmS51Lr4dYJAAAAFRlc3RQaXBlbGluZS5fcGFyc2VfdGVzdF9vcHRpb25fYXJnc1gDAAAAZGVmS21LiYdYJQAAAFRlc3RQaXBlbGluZS5nZXRfZnVsbF9vcHRpb25zX2FzX2FyZ3NYAwAAAGRlZkuKS5yHdX1y0gEAAChYJQAAAFRlc3RQaXBlbGluZS5nZXRfZnVsbF9vcHRpb25zX2FzX2FyZ3NYIQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZXLTAQAAWBAAAABUZXN0UGlwZWxpbmUucnVuatMBAABYFwAAAFRlc3RQaXBlbGluZS5nZXRfb3B0aW9uatMBAABYDAAAAFRlc3RQaXBlbGluZWrTAQAAdWiKWCEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmVy1AEAAIWBctUBAAB9ctYBAABidHLXAQAAVRVhcGFjaGVfYmVhbS5pby5pb2Jhc2Vy2AEAAChYErMAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU291cmNlcyBhbmQgc2lua3MuCgpBIFNvdXJjZSBtYW5hZ2VzIHJlY29yZC1vcmllbnRlZCBkYXRhIGlucHV0IGZyb20gYSBwYXJ0aWN1bGFyIGtpbmQgb2Ygc291cmNlCihlLmcuIGEgc2V0IG9mIGZpbGVzLCBhIGRhdGFiYXNlIHRhYmxlLCBldGMuKS4gVGhlIHJlYWRlcigpIG1ldGhvZCBvZiBhIHNvdXJjZQpyZXR1cm5zIGEgcmVhZGVyIG9iamVjdCBzdXBwb3J0aW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbDsgaXRlcmF0aW9uIHlpZWxkcwpyYXcgcmVjb3JkcyBvZiB1bnByb2Nlc3NlZCwgc2VyaWFsaXplZCBkYXRhLgoKCkEgU2luayBtYW5hZ2VzIHJlY29yZC1vcmllbnRlZCBkYXRhIG91dHB1dCB0byBhIHBhcnRpY3VsYXIga2luZCBvZiBzaW5rCihlLmcuIGEgc2V0IG9mIGZpbGVzLCBhIGRhdGFiYXNlIHRhYmxlLCBldGMuKS4gVGhlIHdyaXRlcigpIG1ldGhvZCBvZiBhIHNpbmsKcmV0dXJucyBhIHdyaXRlciBvYmplY3Qgc3VwcG9ydGluZyB3cml0aW5nIHJlY29yZHMgb2Ygc2VyaWFsaXplZCBkYXRhIHRvCnRoZSBzaW5rLgoiIiIKCmltcG9ydCBsb2dnaW5nCmltcG9ydCByYW5kb20KaW1wb3J0IHV1aWQKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgQXNJdGVyCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBBc1NpbmdsZXRvbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHVybnMKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKX19hbGxfXyA9IFsnQm91bmRlZFNvdXJjZScsICdSYW5nZVRyYWNrZXInLCAnUmVhZCcsICdSZXN0cmljdGlvblRyYWNrZXInLAogICAgICAgICAgICdTaW5rJywgJ1dyaXRlJywgJ1dyaXRlciddCgoKIyBFbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBidW5kbGUgb2YgYSBzb3VyY2UgZ2VuZXJhdGVkIHdoZW4gbWV0aG9kCiMgQm91bmRlZFNvdXJjZS5zcGxpdCgpIGlzIGludm9rZWQuCiMgVGhpcyBpcyBhIG5hbWVkIDQtdHVwbGUgdGhhdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KIyAqIHdlaWdodCAtIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgYnVuZGxlLiBUaGlzIHZhbHVlIHdpbGwKIyAgICAgICAgICAgIGJlIHVzZWQgdG8gY29tcGFyZSB0aGUgcmVsYXRpdmUgc2l6ZXMgb2YgYnVuZGxlcyBnZW5lcmF0ZWQgYnkgdGhlCiMgICAgICAgICAgICBjdXJyZW50IHNvdXJjZS4KIyAgICAgICAgICAgIFRoZSB3ZWlnaHQgcmV0dXJuZWQgaGVyZSBjb3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgYSB1bml0IG9mIHlvdXIKIyAgICAgICAgICAgIGNob2ljZSAoZm9yIGV4YW1wbGUsIGJ1bmRsZXMgb2Ygc2l6ZXMgMTAwTUIsIDIwME1CLCBhbmQgNzAwTUIgbWF5CiMgICAgICAgICAgICBzcGVjaWZ5IHdlaWdodHMgMTAwLCAyMDAsIDcwMCBvciAxLCAyLCA3KSBidXQgYWxsIGJ1bmRsZXMgb2YgYQojICAgICAgICAgICAgc291cmNlIHNob3VsZCBzcGVjaWZ5IHRoZSB3ZWlnaHQgdXNpbmcgdGhlIHNhbWUgdW5pdC4KIyAqIHNvdXJjZSAtIGEgQm91bmRlZFNvdXJjZSBvYmplY3QgZm9yIHRoZSAgYnVuZGxlLgojICogc3RhcnRfcG9zaXRpb24gLSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgYnVuZGxlCiMgKiBzdG9wX3Bvc2l0aW9uIC0gZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBidW5kbGUuCiMKIyBUeXBlIGZvciBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBib3VuZGVkIHNvdXJjZSBhbmQgbXVzdAojIGJlIGNvbnNpc3RlbnQgdGhyb3VnaG91dC4KU291cmNlQnVuZGxlID0gbmFtZWR0dXBsZSgKICAgICdTb3VyY2VCdW5kbGUnLAogICAgJ3dlaWdodCBzb3VyY2Ugc3RhcnRfcG9zaXRpb24gc3RvcF9wb3NpdGlvbicpCgoKY2xhc3MgU291cmNlQmFzZShIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIHNvdXJjZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGJlYW0uaW8uUmVhZCguLi4pLgogICIiIgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3Vybih1cm5zLlBJQ0tMRURfU09VUkNFKQoKCmNsYXNzIEJvdW5kZWRTb3VyY2UoU291cmNlQmFzZSk6CiAgIiIiQSBzb3VyY2UgdGhhdCByZWFkcyBhIGZpbml0ZSBhbW91bnQgb2YgaW5wdXQgcmVjb3Jkcy4KCiAgVGhpcyBjbGFzcyBkZWZpbmVzIGZvbGxvd2luZyBvcGVyYXRpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHNvdXJjZQogIGVmZmljaWVudGx5LgoKICAqIFNpemUgZXN0aW1hdGlvbiAtIG1ldGhvZCBgYGVzdGltYXRlX3NpemUoKWBgIG1heSByZXR1cm4gYW4gYWNjdXJhdGUKICAgIGVzdGltYXRpb24gaW4gYnl0ZXMgZm9yIHRoZSBzaXplIG9mIHRoZSBzb3VyY2UuCiAgKiBTcGxpdHRpbmcgaW50byBidW5kbGVzIG9mIGEgZ2l2ZW4gc2l6ZSAtIG1ldGhvZCBgYHNwbGl0KClgYCBjYW4gYmUgdXNlZCB0bwogICAgc3BsaXQgdGhlIHNvdXJjZSBpbnRvIGEgc2V0IG9mIHN1Yi1zb3VyY2VzIChidW5kbGVzKSBiYXNlZCBvbiBhIGRlc2lyZWQKICAgIGJ1bmRsZSBzaXplLgogICogR2V0dGluZyBhIFJhbmdlVHJhY2tlciAtIG1ldGhvZCBgYGdldF9yYW5nZV90cmFja2VyKClgYCBzaG91bGQgcmV0dXJuIGEKICAgIGBgUmFuZ2VUcmFja2VyYGAgb2JqZWN0IGZvciBhIGdpdmVuIHBvc2l0aW9uIHJhbmdlIGZvciB0aGUgcG9zaXRpb24gdHlwZQogICAgb2YgdGhlIHJlY29yZHMgcmV0dXJuZWQgYnkgdGhlIHNvdXJjZS4KICAqIFJlYWRpbmcgdGhlIGRhdGEgLSBtZXRob2QgYGByZWFkKClgYCBjYW4gYmUgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUKICAgIHNvdXJjZSB3aGlsZSByZXNwZWN0aW5nIHRoZSBib3VuZGFyaWVzIGRlZmluZWQgYnkgYSBnaXZlbgogICAgYGBSYW5nZVRyYWNrZXJgYC4KCiAgQSBydW5uZXIgd2lsbCBwZXJmb3JtIHJlYWRpbmcgdGhlIHNvdXJjZSBpbiB0d28gc3RlcHMuCgogICgxKSBNZXRob2QgYGBnZXRfcmFuZ2VfdHJhY2tlcigpYGAgd2lsbCBiZSBpbnZva2VkIHdpdGggc3RhcnQgYW5kIGVuZAogICAgICBwb3NpdGlvbnMgdG8gb2J0YWluIGEgYGBSYW5nZVRyYWNrZXJgYCBmb3IgdGhlIHJhbmdlIG9mIHBvc2l0aW9ucyB0aGUKICAgICAgcnVubmVyIGludGVuZHMgdG8gcmVhZC4gU291cmNlIG11c3QgZGVmaW5lIGEgZGVmYXVsdCBpbml0aWFsIHN0YXJ0IGFuZCBlbmQKICAgICAgcG9zaXRpb24gcmFuZ2UuIFRoZXNlIHBvc2l0aW9ucyBtdXN0IGJlIHVzZWQgaWYgdGhlIHN0YXJ0IGFuZC9vciBlbmQKICAgICAgcG9zaXRpb25zIHBhc3NlZCB0byB0aGUgbWV0aG9kIGBgZ2V0X3JhbmdlX3RyYWNrZXIoKWBgIGFyZSBgYE5vbmVgYAogICgyKSBNZXRob2QgcmVhZCgpIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBgYFJhbmdlVHJhY2tlcmBgIG9idGFpbmVkIGluIHRoZQogICAgICBwcmV2aW91cyBzdGVwLgoKICAqKk11dGFiaWxpdHkqKgoKICBBIGBgQm91bmRlZFNvdXJjZWBgIG9iamVjdCBzaG91bGQgbm90IGJlIG11dGF0ZWQgd2hpbGUKICBpdHMgbWV0aG9kcyAoZm9yIGV4YW1wbGUsIGBgcmVhZCgpYGApIGFyZSBiZWluZyBpbnZva2VkIGJ5IGEgcnVubmVyLiBSdW5uZXIKICBpbXBsZW1lbnRhdGlvbnMgbWF5IGludm9rZSBtZXRob2RzIG9mIGBgQm91bmRlZFNvdXJjZWBgIG9iamVjdHMgdGhyb3VnaAogIG11bHRpLXRocmVhZGVkIGFuZC9vciByZWVudHJhbnQgZXhlY3V0aW9uIG1vZGVzLgogICIiIgoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgICIiIkVzdGltYXRlcyB0aGUgc2l6ZSBvZiBzb3VyY2UgaW4gYnl0ZXMuCgogICAgQW4gZXN0aW1hdGUgb2YgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSB0aGF0IHdvdWxkIGJlIHJlYWQKICAgIGZyb20gdGhpcyBzb3VyY2UuIFRoaXMgZXN0aW1hdGUgaXMgaW4gdGVybXMgb2YgZXh0ZXJuYWwgc3RvcmFnZSBzaXplLAogICAgYmVmb3JlIHBlcmZvcm1pbmcgZGVjb21wcmVzc2lvbiBvciBvdGhlciBwcm9jZXNzaW5nLgoKICAgIFJldHVybnM6CiAgICAgIGVzdGltYXRlZCBzaXplIG9mIHRoZSBzb3VyY2UgaWYgdGhlIHNpemUgY2FuIGJlIGRldGVybWluZWQsIGBgTm9uZWBgCiAgICAgIG90aGVyd2lzZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgICIiIlNwbGl0cyB0aGUgc291cmNlIGludG8gYSBzZXQgb2YgYnVuZGxlcy4KCiAgICBCdW5kbGVzIHNob3VsZCBiZSBhcHByb3hpbWF0ZWx5IG9mIHNpemUgYGBkZXNpcmVkX2J1bmRsZV9zaXplYGAgYnl0ZXMuCgogICAgQXJnczoKICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBidW5kbGVzIHJldHVybmVkLgogICAgICBzdGFydF9wb3NpdGlvbjogaWYgc3BlY2lmaWVkIHRoZSBnaXZlbiBwb3NpdGlvbiBtdXN0IGJlIHVzZWQgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYnVuZGxlLgogICAgICBzdG9wX3Bvc2l0aW9uOiBpZiBzcGVjaWZpZWQgdGhlIGdpdmVuIHBvc2l0aW9uIG11c3QgYmUgdXNlZCBhcyB0aGUgZW5kaW5nCiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJ1bmRsZS4KICAgIFJldHVybnM6CiAgICAgIGFuIGl0ZXJhdG9yIG9mIG9iamVjdHMgb2YgdHlwZSAnU291cmNlQnVuZGxlJyB0aGF0IGdpdmVzIGluZm9ybWF0aW9uIGFib3V0CiAgICAgIHRoZSBnZW5lcmF0ZWQgYnVuZGxlcy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pOgogICAgIiIiUmV0dXJucyBhIFJhbmdlVHJhY2tlciBmb3IgYSBnaXZlbiBwb3NpdGlvbiByYW5nZS4KCiAgICBGcmFtZXdvcmsgbWF5IGludm9rZSBgYHJlYWQoKWBgIG1ldGhvZCB3aXRoIHRoZSBSYW5nZVRyYWNrZXIgb2JqZWN0IHJldHVybmVkCiAgICBoZXJlIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBzb3VyY2UuCgogICAgQXJnczoKICAgICAgc3RhcnRfcG9zaXRpb246IHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSByYW5nZS4gSWYgJ05vbmUnIGRlZmF1bHQgc3RhcnQKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgbXVzdCBiZSB1c2VkLgogICAgICBzdG9wX3Bvc2l0aW9uOiAgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSByYW5nZS4gSWYgJ05vbmUnIGRlZmF1bHQgc3RvcAogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBtdXN0IGJlIHVzZWQuCiAgICBSZXR1cm5zOgogICAgICBhIGBgUmFuZ2VUcmFja2VyYGAgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiByYW5nZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgICIiIlJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCByZWFkcyBkYXRhIGZyb20gdGhlIHNvdXJjZS4KCiAgICBUaGUgcmV0dXJuZWQgc2V0IG9mIGRhdGEgbXVzdCByZXNwZWN0IHRoZSBib3VuZGFyaWVzIGRlZmluZWQgYnkgdGhlIGdpdmVuCiAgICBgYFJhbmdlVHJhY2tlcmBgIG9iamVjdC4gRm9yIGV4YW1wbGU6CgogICAgICAqIFJldHVybmVkIHNldCBvZiBkYXRhIG11c3QgYmUgZm9yIHRoZSByYW5nZQogICAgICAgIGBgW3JhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24sIHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbilgYC4gTm90ZQogICAgICAgIHRoYXQgYSBzb3VyY2UgbWF5IGRlY2lkZSB0byByZXR1cm4gcmVjb3JkcyB0aGF0IHN0YXJ0IGFmdGVyCiAgICAgICAgYGByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb25gYC4gU2VlIGRvY3VtZW50YXRpb24gaW4gY2xhc3MKICAgICAgICBgYFJhbmdlVHJhY2tlcmBgIGZvciBtb3JlIGRldGFpbHMuIEFsc28sIG5vdGUgdGhhdCBmcmFtZXdvcmsgbWlnaHQKICAgICAgICBpbnZva2UgYGByYW5nZV90cmFja2VyLnRyeV9zcGxpdCgpYGAgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0CiAgICAgICAgb3BlcmF0aW9ucy4gcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uIG1heSBiZSB1cGRhdGVkCiAgICAgICAgZHluYW1pY2FsbHkgZHVlIHRvIHN1Y2Nlc3NmdWwgZHluYW1pYyBzcGxpdCBvcGVyYXRpb25zLgogICAgICAqIE1ldGhvZCBgYHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KClgYCBtdXN0IGJlIGludm9rZWQgZm9yIGV2ZXJ5IHJlY29yZAogICAgICAgIHRoYXQgc3RhcnRzIGF0IGEgc3BsaXQgcG9pbnQuCiAgICAgICogTWV0aG9kIGBgcmFuZ2VfdHJhY2tlci5yZWNvcmRfY3VycmVudF9wb3NpdGlvbigpYGAgbWF5IGJlIGludm9rZWQgZm9yCiAgICAgICAgcmVjb3JkcyB0aGF0IGRvIG5vdCBzdGFydCBhdCBzcGxpdCBwb2ludHMuCgogICAgQXJnczoKICAgICAgcmFuZ2VfdHJhY2tlcjogYSBgYFJhbmdlVHJhY2tlcmBgIHdob3NlIGJvdW5kYXJpZXMgbXVzdCBiZSByZXNwZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgd2hlbiByZWFkaW5nIGRhdGEgZnJvbSB0aGUgc291cmNlLiBBIHJ1bm5lciB0aGF0IHJlYWRzIHRoaXMKICAgICAgICAgICAgICAgICAgICAgc291cmNlIG11c3MgcGFzcyBhIGBgUmFuZ2VUcmFja2VyYGAgb2JqZWN0IHRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAgICAgIGBgTm9uZWBgLgogICAgUmV0dXJuczoKICAgICAgYW4gaXRlcmF0b3Igb2YgZGF0YSByZWFkIGJ5IHRoZSBzb3VyY2UuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGRlZmF1bHRfb3V0cHV0X2NvZGVyKHNlbGYpOgogICAgIiIiQ29kZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHJlY29yZHMgcmV0dXJuZWQgYnkgdGhlIHNvdXJjZS4KCiAgICBTaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzb3VyY2VzIHRoYXQgcHJvZHVjZSBvYmplY3RzIHRoYXQgY2FuIGJlIGVuY29kZWQKICAgIG1vcmUgZWZmaWNpZW50bHkgdGhhbiBwaWNrbGluZy4KICAgICIiIgogICAgcmV0dXJuIGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIob2JqZWN0KQoKICBkZWYgaXNfYm91bmRlZChzZWxmKToKICAgIHJldHVybiBUcnVlCgoKY2xhc3MgUmFuZ2VUcmFja2VyKG9iamVjdCk6CiAgIiIiQSB0aHJlYWQgc2FmZSBvYmplY3QgdXNlZCBieSBEYXRhZmxvdyBzb3VyY2UgZnJhbWV3b3JrLgoKICBBIERhdGFmbG93IHNvdXJjZSBpcyBkZWZpbmVkIHVzaW5nIGEgJydCb3VuZGVkU291cmNlJycgYW5kIGEgJydSYW5nZVRyYWNrZXInJwogIHBhaXIuIEEgJydSYW5nZVRyYWNrZXInJyBpcyB1c2VkIGJ5IERhdGFmbG93IHNvdXJjZSBmcmFtZXdvcmsgdG8gcGVyZm9ybQogIGR5bmFtaWMgd29yayByZWJhbGFuY2luZyBvZiBwb3NpdGlvbi1iYXNlZCBzb3VyY2VzLgoKICAqKlBvc2l0aW9uLWJhc2VkIHNvdXJjZXMqKgoKICBBIHBvc2l0aW9uLWJhc2VkIHNvdXJjZSBpcyBvbmUgd2hlcmUgdGhlIHNvdXJjZSBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgcmFuZ2UKICBvZiBwb3NpdGlvbnMgb2YgYW4gb3JkZXJlZCB0eXBlIGFuZCB0aGUgcmVjb3JkcyByZXR1cm5lZCBieSB0aGUgcmVhZGVyIGNhbiBiZQogIGRlc2NyaWJlZCBieSBwb3NpdGlvbnMgb2YgdGhlIHNhbWUgdHlwZS4KCiAgSW4gY2FzZSBhIHJlY29yZCBvY2N1cGllcyBhIHJhbmdlIG9mIHBvc2l0aW9ucyBpbiB0aGUgc291cmNlLCB0aGUgbW9zdAogIGltcG9ydGFudCB0aGluZyBhYm91dCB0aGUgcmVjb3JkIGlzIHRoZSBwb3NpdGlvbiB3aGVyZSBpdCBzdGFydHMuCgogIERlZmluaW5nIHRoZSBzZW1hbnRpY3Mgb2YgcG9zaXRpb25zIGZvciBhIHNvdXJjZSBpcyBlbnRpcmVseSB1cCB0byB0aGUgc291cmNlCiAgY2xhc3MsIGhvd2V2ZXIgdGhlIGNob3NlbiBkZWZpbml0aW9ucyBoYXZlIHRvIG9iZXkgY2VydGFpbiBwcm9wZXJ0aWVzIGluIG9yZGVyCiAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBjb3JyZWN0bHkgc3BsaXQgdGhlIHNvdXJjZSBpbnRvIHBhcnRzLCBpbmNsdWRpbmcKICBkeW5hbWljIHNwbGl0dGluZy4gVHdvIG1haW4gYXNwZWN0cyBuZWVkIHRvIGJlIGRlZmluZWQ6CgogIDEuIEhvdyB0byBhc3NpZ24gc3RhcnRpbmcgcG9zaXRpb25zIHRvIHJlY29yZHMuCiAgMi4gV2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgcmVhZCBieSBhIHNvdXJjZSB3aXRoIGEgcmFuZ2UgJ1tBLCBCKScuCgogIE1vcmVvdmVyLCByZWFkaW5nIGEgcmFuZ2UgbXVzdCBiZSAqZWZmaWNpZW50KiwgaS5lLiwgdGhlIHBlcmZvcm1hbmNlIG9mCiAgcmVhZGluZyBhIHJhbmdlIHNob3VsZCBub3Qgc2lnbmlmaWNhbnRseSBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSByYW5nZS4KICBGb3IgZXhhbXBsZSwgcmVhZGluZyB0aGUgcmFuZ2UgW0EsIEIpIHNob3VsZCBub3QgcmVxdWlyZSByZWFkaW5nIGFsbCBkYXRhCiAgYmVmb3JlICdBJy4KCiAgVGhlIHNlY3Rpb25zIGJlbG93IGV4cGxhaW4gZXhhY3RseSB3aGF0IHByb3BlcnRpZXMgdGhlc2UgZGVmaW5pdGlvbnMgbXVzdAogIHNhdGlzZnksIGFuZCBob3cgdG8gdXNlIGEgYGBSYW5nZVRyYWNrZXJgYCB3aXRoIGEgcHJvcGVybHkgZGVmaW5lZCBzb3VyY2UuCgogICoqUHJvcGVydGllcyBvZiBwb3NpdGlvbi1iYXNlZCBzb3VyY2VzKioKCiAgVGhlIG1haW4gcmVxdWlyZW1lbnQgZm9yIHBvc2l0aW9uLWJhc2VkIHNvdXJjZXMgaXMgKmFzc29jaWF0aXZpdHkqOiByZWFkaW5nCiAgcmVjb3JkcyBmcm9tICdbQSwgQiknIGFuZCByZWNvcmRzIGZyb20gJ1tCLCBDKScgc2hvdWxkIGdpdmUgdGhlIHNhbWUKICByZWNvcmRzIGFzIHJlYWRpbmcgZnJvbSAnW0EsIEMpJywgd2hlcmUgJ0EgPD0gQiA8PSBDJy4gVGhpcyBwcm9wZXJ0eQogIGVuc3VyZXMgdGhhdCBubyBtYXR0ZXIgaG93IGEgcmFuZ2Ugb2YgcG9zaXRpb25zIGlzIHNwbGl0IGludG8gYXJiaXRyYXJpbHkgbWFueQogIHN1Yi1yYW5nZXMsIHRoZSB0b3RhbCBzZXQgb2YgcmVjb3JkcyBkZXNjcmliZWQgYnkgdGhlbSBzdGF5cyB0aGUgc2FtZS4KCiAgVGhlIG90aGVyIGltcG9ydGFudCBwcm9wZXJ0eSBpcyBob3cgdGhlIHNvdXJjZSdzIHJhbmdlIHJlbGF0ZXMgdG8gcG9zaXRpb25zIG9mCiAgcmVjb3JkcyBpbiB0aGUgc291cmNlLiBJbiBtYW55IHNvdXJjZXMgZWFjaCByZWNvcmQgY2FuIGJlIGlkZW50aWZpZWQgYnkgYQogIHVuaXF1ZSBzdGFydGluZyBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlOgoKICAqIEFsbCByZWNvcmRzIHJldHVybmVkIGJ5IGEgc291cmNlICdbQSwgQiknIG11c3QgaGF2ZSBzdGFydGluZyBwb3NpdGlvbnMgaW4KICAgIHRoaXMgcmFuZ2UuCiAgKiBBbGwgYnV0IHRoZSBsYXN0IHJlY29yZCBzaG91bGQgZW5kIHdpdGhpbiB0aGlzIHJhbmdlLiBUaGUgbGFzdCByZWNvcmQgbWF5IG9yCiAgICBtYXkgbm90IGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHJhbmdlLgogICogUmVjb3JkcyBzaG91bGQgbm90IG92ZXJsYXAuCgogIFN1Y2ggc291cmNlcyBzaG91bGQgZGVmaW5lICJyZWFkICdbQSwgQiknIiBhcyAicmVhZCBmcm9tIHRoZSBmaXJzdCByZWNvcmQKICBzdGFydGluZyBhdCBvciBhZnRlciAnQScsIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBmaXJzdCByZWNvcmQgc3RhcnRpbmcKICBhdCBvciBhZnRlciAnQiciLgoKICBTb21lIGV4YW1wbGVzIG9mIHN1Y2ggc291cmNlcyBpbmNsdWRlIHJlYWRpbmcgbGluZXMgb3IgQ1NWIGZyb20gYSB0ZXh0IGZpbGUsCiAgcmVhZGluZyBrZXlzIGFuZCB2YWx1ZXMgZnJvbSBhIEJpZ1RhYmxlLCBldGMuCgogIFRoZSBjb25jZXB0IG9mICpzcGxpdCBwb2ludHMqIGFsbG93cyB0byBleHRlbmQgdGhlIGRlZmluaXRpb25zIGZvciBkZWFsaW5nCiAgd2l0aCBzb3VyY2VzIHdoZXJlIHNvbWUgcmVjb3JkcyBjYW5ub3QgYmUgaWRlbnRpZmllZCBieSBhIHVuaXF1ZSBzdGFydGluZwogIHBvc2l0aW9uLgoKICBJbiBhbGwgY2FzZXMsIGFsbCByZWNvcmRzIHJldHVybmVkIGJ5IGEgc291cmNlICdbQSwgQiknIG11c3QgKnN0YXJ0KiBhdCBvcgogIGFmdGVyICdBJy4KCiAgKipTcGxpdCBwb2ludHMqKgoKICBTb21lIHNvdXJjZXMgbWF5IGhhdmUgcmVjb3JkcyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgYWRkcmVzc2FibGUuIEZvciBleGFtcGxlLAogIGltYWdpbmUgYSBmaWxlIGZvcm1hdCBjb25zaXN0aW5nIG9mIGEgc2VxdWVuY2Ugb2YgY29tcHJlc3NlZCBibG9ja3MuIEVhY2gKICBibG9jayBjYW4gYmUgYXNzaWduZWQgYW4gb2Zmc2V0LCBidXQgcmVjb3JkcyB3aXRoaW4gdGhlIGJsb2NrIGNhbm5vdCBiZQogIGRpcmVjdGx5IGFkZHJlc3NlZCB3aXRob3V0IGRlY29tcHJlc3NpbmcgdGhlIGJsb2NrLiBMZXQgdXMgcmVmZXIgdG8gdGhpcwogIGh5cG90aGV0aWNhbCBmb3JtYXQgYXMgPGk+Q0JGIChDb21wcmVzc2VkIEJsb2NrcyBGb3JtYXQpPC9pPi4KCiAgTWFueSBzdWNoIGZvcm1hdHMgY2FuIHN0aWxsIHNhdGlzZnkgdGhlIGFzc29jaWF0aXZpdHkgcHJvcGVydHkuIEZvciBleGFtcGxlLAogIGluIENCRiwgcmVhZGluZyAnW0EsIEIpJyBjYW4gbWVhbiAicmVhZCBhbGwgdGhlIHJlY29yZHMgaW4gYWxsIGJsb2NrcyB3aG9zZQogIHN0YXJ0aW5nIG9mZnNldCBpcyBpbiAnW0EsIEIpJyIuCgogIFRvIHN1cHBvcnQgc3VjaCBjb21wbGV4IGZvcm1hdHMsIHdlIGludHJvZHVjZSB0aGUgbm90aW9uIG9mICpzcGxpdCBwb2ludHMqLiBXZQogIHNheSB0aGF0IGEgcmVjb3JkIGlzIGEgc3BsaXQgcG9pbnQgaWYgdGhlcmUgZXhpc3RzIGEgcG9zaXRpb24gJ0EnIHN1Y2ggdGhhdAogIHRoZSByZWNvcmQgaXMgdGhlIGZpcnN0IG9uZSB0byBiZSByZXR1cm5lZCB3aGVuIHJlYWRpbmcgdGhlIHJhbmdlCiAgJ1tBLCBpbmZpbml0eSknLiBJbiBDQkYsIHRoZSBvbmx5IHNwbGl0IHBvaW50cyB3b3VsZCBiZSB0aGUgZmlyc3QgcmVjb3JkcwogIGluIGVhY2ggYmxvY2suCgogIFNwbGl0IHBvaW50cyBhbGxvdyB1cyB0byBkZWZpbmUgdGhlIG1lYW5pbmcgb2YgYSByZWNvcmQncyBwb3NpdGlvbiBhbmQgYQogIHNvdXJjZSdzIHJhbmdlIGluIGFsbCBjYXNlczoKCiAgKiBGb3IgYSByZWNvcmQgdGhhdCBpcyBhdCBhIHNwbGl0IHBvaW50LCBpdHMgcG9zaXRpb24gaXMgZGVmaW5lZCB0byBiZSB0aGUKICAgIGxhcmdlc3QgJ0EnIHN1Y2ggdGhhdCByZWFkaW5nIGEgc291cmNlIHdpdGggdGhlIHJhbmdlICdbQSwgaW5maW5pdHkpJwogICAgcmV0dXJucyB0aGlzIHJlY29yZC4KICAqIFBvc2l0aW9ucyBvZiBvdGhlciByZWNvcmRzIGFyZSBvbmx5IHJlcXVpcmVkIHRvIGJlIG5vbi1kZWNyZWFzaW5nLgogICogUmVhZGluZyB0aGUgc291cmNlICdbQSwgQiknIG11c3QgcmV0dXJuIHJlY29yZHMgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QKICAgIHNwbGl0IHBvaW50IGF0IG9yIGFmdGVyICdBJywgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGZpcnN0IHNwbGl0IHBvaW50CiAgICBhdCBvciBhZnRlciAnQicuIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlyc3QgcmVjb3JkIHJldHVybmVkCiAgICBieSBhIHNvdXJjZSBNVVNUIGFsd2F5cyBiZSBhIHNwbGl0IHBvaW50LgogICogUG9zaXRpb25zIG9mIHNwbGl0IHBvaW50cyBtdXN0IGJlIHVuaXF1ZS4KCiAgQXMgYSByZXN1bHQsIGZvciBhbnkgZGVjb21wb3NpdGlvbiBvZiB0aGUgZnVsbCByYW5nZSBvZiB0aGUgc291cmNlIGludG8KICBwb3NpdGlvbiByYW5nZXMsIHRoZSB0b3RhbCBzZXQgb2YgcmVjb3JkcyB3aWxsIGJlIHRoZSBmdWxsIHNldCBvZiByZWNvcmRzIGluCiAgdGhlIHNvdXJjZSwgYW5kIGVhY2ggcmVjb3JkIHdpbGwgYmUgcmVhZCBleGFjdGx5IG9uY2UuCgogICoqQ29uc3VtZWQgcG9zaXRpb25zKioKCiAgQXMgdGhlIHNvdXJjZSBpcyBiZWluZyByZWFkLCBhbmQgcmVjb3JkcyByZWFkIGZyb20gaXQgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGUKICBkb3duc3RyZWFtIHRyYW5zZm9ybXMgaW4gdGhlIHBpcGVsaW5lLCB3ZSBzYXkgdGhhdCBwb3NpdGlvbnMgaW4gdGhlIHNvdXJjZSBhcmUKICBiZWluZyAqY29uc3VtZWQqLiBXaGVuIGEgcmVhZGVyIGhhcyByZWFkIGEgcmVjb3JkIChvciBwcm9taXNlZCB0byBhIGNhbGxlcgogIHRoYXQgYSByZWNvcmQgd2lsbCBiZSByZXR1cm5lZCksIHBvc2l0aW9ucyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSByZWNvcmQncwogIHN0YXJ0IHBvc2l0aW9uIGFyZSBjb25zaWRlcmVkICpjb25zdW1lZCouCgogIER5bmFtaWMgc3BsaXR0aW5nIGNhbiBoYXBwZW4gb25seSBhdCAqdW5jb25zdW1lZCogcG9zaXRpb25zLiBJZiB0aGUgcmVhZGVyCiAganVzdCByZXR1cm5lZCBhIHJlY29yZCBhdCBvZmZzZXQgNDIgaW4gYSBmaWxlLCBkeW5hbWljIHNwbGl0dGluZyBjYW4gaGFwcGVuCiAgb25seSBhdCBvZmZzZXQgNDMgb3IgYmV5b25kLCBhcyBvdGhlcndpc2UgdGhhdCByZWNvcmQgY291bGQgYmUgcmVhZCB0d2ljZSAoYnkKICB0aGUgY3VycmVudCByZWFkZXIgYW5kIGJ5IGEgcmVhZGVyIG9mIHRoZSB0YXNrIHN0YXJ0aW5nIGF0IDQzKS4KICAiIiIKCiAgU1BMSVRfUE9JTlRTX1VOS05PV04gPSBvYmplY3QoKQoKICBkZWYgc3RhcnRfcG9zaXRpb24oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCByYW5nZSwgaW5jbHVzaXZlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCByYW5nZSwgZXhjbHVzaXZlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgdHJ5X2NsYWltKHNlbGYsIHBvc2l0aW9uKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogICAgIiIiQXRvbWljYWxseSBkZXRlcm1pbmVzIGlmIGEgcmVjb3JkIGF0IGEgc3BsaXQgcG9pbnQgaXMgd2l0aGluIHRoZSByYW5nZS4KCiAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkICoqaWYgYW5kIG9ubHkgaWYqKiB0aGUgcmVjb3JkIGlzIGF0IGEgc3BsaXQKICAgIHBvaW50LiBUaGlzIG1ldGhvZCBtYXkgbW9kaWZ5IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYGBSYW5nZVRyYWNrZXJgYCBieQogICAgdXBkYXRpbmcgdGhlIGxhc3QtY29uc3VtZWQgcG9zaXRpb24gdG8gYGBwb3NpdGlvbmBgLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJhbmdlVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGludm9rZWQKICAgIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcgYSBzaW5nbGUKICAgIGxvY2sgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHBvc2l0aW9uOiBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHJlY29yZCBiZWluZyByZWFkIGJ5IGEgc291cmNlLgoKICAgIFJldHVybnM6CiAgICAgIGBgVHJ1ZWBgLCBpZiB0aGUgZ2l2ZW4gcG9zaXRpb24gZmFsbHMgd2l0aGluIHRoZSBjdXJyZW50IHJhbmdlLCByZXR1cm5zCiAgICAgIGBgRmFsc2VgYCBvdGhlcndpc2UuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHNldF9jdXJyZW50X3Bvc2l0aW9uKHNlbGYsIHBvc2l0aW9uKToKICAgICIiIlVwZGF0ZXMgdGhlIGxhc3QtY29uc3VtZWQgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLgoKICAgIEEgc291cmNlIG1heSBpbnZva2UgdGhpcyBtZXRob2QgZm9yIHJlY29yZHMgdGhhdCBkbyBub3Qgc3RhcnQgYXQgc3BsaXQKICAgIHBvaW50cy4gVGhpcyBtYXkgbW9kaWZ5IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYGBSYW5nZVRyYWNrZXJgYC4gSWYgdGhlCiAgICByZWNvcmQgc3RhcnRzIGF0IGEgc3BsaXQgcG9pbnQsIG1ldGhvZCBgYHRyeV9jbGFpbSgpYGAgKiptdXN0KiogYmUgaW52b2tlZAogICAgaW5zdGVhZCBvZiB0aGlzIG1ldGhvZC4KCiAgICBBcmdzOgogICAgICBwb3NpdGlvbjogc3RhcnRpbmcgcG9zaXRpb24gb2YgYSByZWNvcmQgYmVpbmcgcmVhZCBieSBhIHNvdXJjZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgIiIiUmV0dXJucyB0aGUgcG9zaXRpb24gYXQgdGhlIGdpdmVuIGZyYWN0aW9uLgoKICAgIEdpdmVuIGEgZnJhY3Rpb24gd2l0aGluIHRoZSByYW5nZSBbMC4wLCAxLjApIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZQogICAgcG9zaXRpb24gYXQgdGhlIGdpdmVuIGZyYWN0aW9uIGNvbXBhcmVkIHRvIHRoZSBwb3NpdGlvbiByYW5nZQogICAgW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNlbGYuc3RvcF9wb3NpdGlvbikuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmFuZ2VUcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQgaW52b2tlZAogICAgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZyBhIHNpbmdsZQogICAgbG9jayBvYmplY3QuCgogICAgQXJnczoKICAgICAgZnJhY3Rpb246IGEgZmxvYXQgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbMC4wLCAxLjApLgogICAgUmV0dXJuczoKICAgICAgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIHJhbmdlIFtzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24pLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgcG9zaXRpb24pOgogICAgIiIiQXRvbWljYWxseSBzcGxpdHMgdGhlIGN1cnJlbnQgcmFuZ2UuCgogICAgRGV0ZXJtaW5lcyBhIHBvc2l0aW9uIHRvIHNwbGl0IHRoZSBjdXJyZW50IHJhbmdlLCBzcGxpdF9wb3NpdGlvbiwgYmFzZWQgb24KICAgIHRoZSBnaXZlbiBwb3NpdGlvbi4gSW4gbW9zdCBjYXNlcyBzcGxpdF9wb3NpdGlvbiBhbmQgcG9zaXRpb24gd2lsbCBiZSB0aGUKICAgIHNhbWUuCgogICAgU3BsaXRzIHRoZSBjdXJyZW50IHJhbmdlICdbc2VsZi5zdGFydF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKScKICAgIGludG8gYSAicHJpbWFyeSIgcGFydCAnW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNwbGl0X3Bvc2l0aW9uKScgYW5kIGEKICAgICJyZXNpZHVhbCIgcGFydCAnW3NwbGl0X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24pJywgYXNzdW1pbmcgdGhlCiAgICBjdXJyZW50IGxhc3QtY29uc3VtZWQgcG9zaXRpb24gaXMgd2l0aGluCiAgICAnW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNwbGl0X3Bvc2l0aW9uKScgKGkuZS4sIHNwbGl0X3Bvc2l0aW9uIGhhcyBub3QgYmVlbgogICAgY29uc3VtZWQgeWV0KS4KCiAgICBJZiBzdWNjZXNzZnVsLCB1cGRhdGVzIHRoZSBjdXJyZW50IHJhbmdlIHRvIGJlIHRoZSBwcmltYXJ5IGFuZCByZXR1cm5zIGEKICAgIHR1cGxlIChzcGxpdF9wb3NpdGlvbiwgc3BsaXRfZnJhY3Rpb24pLiBzcGxpdF9mcmFjdGlvbiBzaG91bGQgYmUgdGhlCiAgICBmcmFjdGlvbiBvZiBzaXplIG9mIHJhbmdlICdbc2VsZi5zdGFydF9wb3NpdGlvbiwgc3BsaXRfcG9zaXRpb24pJyBjb21wYXJlZAogICAgdG8gdGhlIG9yaWdpbmFsIChiZWZvcmUgc3BsaXQpIHJhbmdlCiAgICAnW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNlbGYuc3RvcF9wb3NpdGlvbiknLgoKICAgIElmIHRoZSBzcGxpdF9wb3NpdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLCByZXR1cm5zIGBgTm9uZWBgLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJhbmdlVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGludm9rZWQKICAgIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcgYSBzaW5nbGUKICAgIGxvY2sgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHBvc2l0aW9uOiBzdWdnZXN0ZWQgcG9zaXRpb24gd2hlcmUgdGhlIGN1cnJlbnQgcmFuZ2Ugc2hvdWxkIHRyeSB0bwogICAgICAgICAgICAgICAgYmUgc3BsaXQgYXQuCiAgICBSZXR1cm5zOgogICAgICBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHNwbGl0IHBvc2l0aW9uIGFuZCBzcGxpdCBmcmFjdGlvbiBpZiBzcGxpdCBpcwogICAgICBzdWNjZXNzZnVsLiBSZXR1cm5zIGBgTm9uZWBgIG90aGVyd2lzZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBhcHByb3hpbWF0ZSBmcmFjdGlvbiBvZiBjb25zdW1lZCBwb3NpdGlvbnMgaW4gdGhlIHNvdXJjZS4KCiAgICAqKiBUaHJlYWQgc2FmZXR5ICoqCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICBSZXR1cm5zOgogICAgICB0aGUgYXBwcm94aW1hdGUgZnJhY3Rpb24gb2YgcG9zaXRpb25zIHRoYXQgaGF2ZSBiZWVuIGNvbnN1bWVkIGJ5CiAgICAgIHN1Y2Nlc3NmdWwgJ3RyeV9zcGxpdCgpJyBhbmQgICdyZXBvcnRfY3VycmVudF9wb3NpdGlvbigpJyAgY2FsbHMsIG9yCiAgICAgIDAuMCBpZiBubyBzdWNoIGNhbGxzIGhhdmUgaGFwcGVuZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHNwbGl0X3BvaW50cyhzZWxmKToKICAgICIiIkdpdmVzIHRoZSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGNvbnN1bWVkIGFuZCByZW1haW5pbmcuCgogICAgRm9yIGEgYGBSYW5nZVRyYWNrZXJgYCB1c2VkIGJ5IGEgYGBCb3VuZGVkU291cmNlYGAgKHdpdGhpbiBhCiAgICBgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgdGhpcyBtZXRob2QgcHJvZHVjZXMgYSAyLXR1cGxlIHRoYXQKICAgIGdpdmVzIHRoZSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGNvbnN1bWVkIGJ5IHRoZSBgYEJvdW5kZWRTb3VyY2VgYCBhbmQgdGhlCiAgICBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHJlbWFpbmluZyB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBgYFJhbmdlVHJhY2tlcmBgCiAgICB0aGF0IGhhcyBub3QgYmVlbiBjb25zdW1lZCBieSB0aGUgYGBCb3VuZGVkU291cmNlYGAuCgogICAgTW9yZSBzcGVjaWZpY2FsbHksIGdpdmVuIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyByZWFkCiAgICBieSBgYEJvdW5kZWRTb3VyY2VgYCBpcyBjdXJyZW50X3Bvc2l0aW9uIHRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgdHVwbGUgdGhhdAogICAgY29uc2lzdHMgb2YKICAgICgxKSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGluIHRoZSByYW5nZSBbc2VsZi5zdGFydF9wb3NpdGlvbigpLAogICAgY3VycmVudF9wb3NpdGlvbikgd2l0aG91dCBpbmNsdWRpbmcgdGhlIHNwbGl0IHBvaW50IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nCiAgICBjb25zdW1lZC4gVGhpcyByZXByZXNlbnRzIHRoZSB0b3RhbCBhbW91bnQgb2YgcGFyYWxsZWxpc20gaW4gdGhlIGNvbnN1bWVkCiAgICBwYXJ0IG9mIHRoZSBzb3VyY2UuCiAgICAoMikgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyB3aXRoaW4gdGhlIHJhbmdlCiAgICBbY3VycmVudF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKCkpIGluY2x1ZGluZyB0aGUgc3BsaXQgcG9pbnQgdGhhdCBpcwogICAgY3VycmVudGx5IGJlaW5nIGNvbnN1bWVkLiBUaGlzIHJlcHJlc2VudHMgdGhlIHRvdGFsIGFtb3VudCBvZiBwYXJhbGxlbGlzbSBpbgogICAgdGhlIHVuY29uc3VtZWQgcGFydCBvZiB0aGUgc291cmNlLgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmFuZ2VUcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQgaW52b2tlZAogICAgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZyBhIHNpbmdsZQogICAgbG9jayBvYmplY3QuCgogICAgKiogR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBjb25zdW1lZCBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdAogICAgICAgcG9pbnRzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiAqKgoKICAgICAgKiBCZWZvcmUgYSBzb3VyY2UgcmVhZCAoYGBCb3VuZGVkU291cmNlLnJlYWQoKWBgIGludm9jYXRpb24pIGNsYWltcyB0aGUKICAgICAgICBmaXJzdCBzcGxpdCBwb2ludCwgbnVtYmVyIG9mIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBpcyAwLiBUaGlzIGNvbmRpdGlvbgogICAgICAgIGhvbGRzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIGlucHV0IGlzICJzcGxpdHRhYmxlIi4gQSBzcGxpdHRhYmxlCiAgICAgICAgc291cmNlIGlzIGEgc291cmNlIHRoYXQgaGFzIG1vcmUgdGhhbiBvbmUgc3BsaXQgcG9pbnQuCiAgICAgICogQW55IHNvdXJjZSByZWFkIHRoYXQgaGFzIG9ubHkgY2xhaW1lZCBvbmUgc3BsaXQgcG9pbnQgaGFzIDAgY29uc3VtZWQKICAgICAgICBzcGxpdCBwb2ludHMgc2luY2UgdGhlIGZpcnN0IHNwbGl0IHBvaW50IGlzIHRoZSBjdXJyZW50IHNwbGl0IHBvaW50IGFuZAogICAgICAgIGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZC4gVGhpcyBjb25kaXRpb24gaG9sZHMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlcgogICAgICAgIHRoZSBpbnB1dCBpcyBzcGxpdHRhYmxlLgogICAgICAqIEZvciBhbiBlbXB0eSBzb3VyY2UgcmVhZCB3aGljaCBuZXZlciBpbnZva2VzCiAgICAgICAgYGBSYW5nZVRyYWNrZXIudHJ5X2NsYWltKClgYCwgdGhlIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMC4KICAgICAgICBUaGlzIGNvbmRpdGlvbiBob2xkcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBpbnB1dCBpcyBzcGxpdHRhYmxlLgogICAgICAqIEZvciBhIHNvdXJjZSByZWFkIHdoaWNoIGhhcyBpbnZva2VkIGBgUmFuZ2VUcmFja2VyLnRyeV9jbGFpbSgpYGAgbgogICAgICAgIHRpbWVzLCB0aGUgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAgbiAtMS4KICAgICAgKiBJZiBhIGBgQm91bmRlZFNvdXJjZWBgIHNldHMgYSBjYWxsYmFjayB0aHJvdWdoIGZ1bmN0aW9uCiAgICAgICAgYGBzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjaygpYGAsIGBgUmFuZ2VUcmFja2VyYGAgY2FuIHVzZSB0aGF0CiAgICAgICAgY2FsbGJhY2sgd2hlbiBkZXRlcm1pbmluZyByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cy4KICAgICAgKiBSZW1haW5pbmcgc3BsaXQgcG9pbnRzIHNob3VsZCBpbmNsdWRlIHRoZSBzcGxpdCBwb2ludCB0aGF0IGlzIGN1cnJlbnRseQogICAgICAgIGJlaW5nIGNvbnN1bWVkIGJ5IHRoZSBzb3VyY2UgcmVhZC4gSGVuY2UgaWYgdGhlIGFib3ZlIGNhbGxiYWNrIHJldHVybnMKICAgICAgICBhbiBpbnRlZ2VyIHZhbHVlIG4sIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHNob3VsZCBiZSAobiArIDEpLgogICAgICAqIEFmdGVyIGxhc3Qgc3BsaXQgcG9pbnQgaXMgY2xhaW1lZCByZW1haW5pbmcgc3BsaXQgcG9pbnRzIGJlY29tZXMgMSwKICAgICAgICBiZWNhdXNlIHRoaXMgdW5maW5pc2hlZCByZWFkIGl0c2VsZiByZXByZXNlbnRzIGFuICB1bmZpbmlzaGVkIHNwbGl0CiAgICAgICAgcG9pbnQuCiAgICAgICogQWZ0ZXIgYWxsIHJlY29yZHMgb2YgdGhlIHNvdXJjZSBoYXMgYmVlbiBjb25zdW1lZCwgcmVtYWluaW5nIG51bWJlciBvZgogICAgICAgIHNwbGl0IHBvaW50cyBiZWNvbWVzIDAgYW5kIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgYmVjb21lcyBlcXVhbAogICAgICAgIHRvIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UgYmVpbmcgcmVhZCBieSB0aGUKICAgICAgICBzb3VyY2UuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGFkZHJlc3MgdGhpcyBjb25kaXRpb24gYW5kIHdpbGwgY29udGludWUgdG8KICAgICAgICByZXBvcnQgbnVtYmVyIG9mIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBhcwogICAgICAgICgidG90YWwgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyIgLSAxKSBhbmQgbnVtYmVyIG9mIHJlbWFpbmluZyBzcGxpdAogICAgICAgIHBvaW50cyBhcyAxLiBBIHJ1bm5lciB0aGF0IHBlcmZvcm1zIHRoZSByZWFkaW5nIG9mIHRoZSBzb3VyY2UgY2FuCiAgICAgICAgZGV0ZWN0IHdoZW4gYWxsIHJlY29yZHMgaGF2ZSBiZWVuIGNvbnN1bWVkIGFuZCBhZGp1c3QgcmVtYWluaW5nIGFuZAogICAgICAgIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgYWNjb3JkaW5nbHkuCgogICAgKiogRXhhbXBsZXMgKioKCiAgICAoMSkgQSAicGVyZmVjdGx5IHNwbGl0dGFibGUiIGlucHV0IHdoaWNoIGNhbiBiZSByZWFkIGluIHBhcmFsbGVsIGRvd24gdG8gdGhlCiAgICAgICAgaW5kaXZpZHVhbCByZWNvcmRzLgoKICAgICAgICBDb25zaWRlciBhIHBlcmZlY3RseSBzcGxpdHRhYmxlIGlucHV0IHRoYXQgY29uc2lzdHMgb2YgNTAgc3BsaXQgcG9pbnRzLgoKICAgICAgKiBCZWZvcmUgYSBzb3VyY2UgcmVhZCAoYGBCb3VuZGVkU291cmNlLnJlYWQoKWBgIGludm9jYXRpb24pIGNsYWltcyB0aGUKICAgICAgICBmaXJzdCBzcGxpdCBwb2ludCwgbnVtYmVyIG9mIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBpcyAwIG51bWJlciBvZgogICAgICAgIHJlbWFpbmluZyBzcGxpdCBwb2ludHMgaXMgNTAuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgZmlyc3Qgc3BsaXQgcG9pbnQsIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMAogICAgICAgIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IGlzIDUwLgogICAgICAqIEFmdGVyIGNsYWltaW5nIHNwbGl0IHBvaW50ICMzMCwgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAyOQogICAgICAgIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAyMS4KICAgICAgKiBBZnRlciBjbGFpbWluZyBhbGwgNTAgc3BsaXQgcG9pbnRzLCBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzCiAgICAgICAgNDkgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDEuCgogICAgKDIpIGEgImJsb2NrLWNvbXByZXNzZWQiIGZpbGUgZm9ybWF0IHN1Y2ggYXMgYGBhdnJvaW9gYCwgaW4gd2hpY2ggYSBibG9jayBvZgogICAgICAgIHJlY29yZHMgaGFzIHRvIGJlIHJlYWQgYXMgYSB3aG9sZSwgYnV0IGRpZmZlcmVudCBibG9ja3MgY2FuIGJlIHJlYWQgaW4KICAgICAgICBwYXJhbGxlbC4KCiAgICAgICAgQ29uc2lkZXIgYSBibG9jayBjb21wcmVzc2VkIGlucHV0IHRoYXQgY29uc2lzdHMgb2YgNSBibG9ja3MuCgogICAgICAqIEJlZm9yZSBhIHNvdXJjZSByZWFkIChgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgY2xhaW1zIHRoZQogICAgICAgIGZpcnN0IHNwbGl0IHBvaW50IChmaXJzdCBibG9jayksIG51bWJlciBvZiBjb25zdW1lZCBzcGxpdCBwb2ludHMgaXMgMAogICAgICAgIG51bWJlciBvZiByZW1haW5pbmcgc3BsaXQgcG9pbnRzIGlzIDUuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgZmlyc3Qgc3BsaXQgcG9pbnQsIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMAogICAgICAgIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IGlzIDUuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgc3BsaXQgcG9pbnQgIzMsIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMgogICAgICAgIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAzLgogICAgICAqIEFmdGVyIGNsYWltaW5nIGFsbCA1IHNwbGl0IHBvaW50cywgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcwogICAgICAgIDQgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDEuCgogICAgKDMpIGFuICJ1bnNwbGl0dGFibGUiIGlucHV0IHN1Y2ggYXMgYSBjdXJzb3IgaW4gYSBkYXRhYmFzZSBvciBhIGd6aXAKICAgICAgICBjb21wcmVzc2VkIGZpbGUuCgogICAgICAgIFN1Y2ggYW4gaW5wdXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIG9ubHkgYSBzaW5nbGUgc3BsaXQgcG9pbnQuIE51bWJlciBvZgogICAgICAgIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBpcyBhbHdheXMgMCBhbmQgbnVtYmVyIG9mIHJlbWFpbmluZyBzcGxpdCBwb2ludHMKICAgICAgICBpcyBhbHdheXMgMS4KCiAgICBCeSBkZWZhdWx0IGBgUmFuZ2VUcmFja2VyYCByZXR1cm5zIGBgUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOYGAgZm9yCiAgICBib3RoIGNvbnN1bWVkIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cywgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCiAgICBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGNvbnN1bWVkIGFuZCByZW1haW5pbmcgaXMgdW5rbm93bi4KCiAgICBSZXR1cm5zOgogICAgICBBIHBhaXIgdGhhdCBnaXZlcyBjb25zdW1lZCBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMuIENvbnN1bWVkCiAgICAgIG51bWJlciBvZiBzcGxpdCBwb2ludHMgc2hvdWxkIGJlIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gemVybwogICAgICBvciBgYFJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTmBgLiBSZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cwogICAgICBzaG91bGQgYmUgYW4gaW50ZWdlciBsYXJnZXIgdGhhbiB6ZXJvIG9yCiAgICAgIGBgUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOYGAuCiAgICAiIiIKICAgIHJldHVybiAoUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOLAogICAgICAgICAgICBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04pCgogIGRlZiBzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CiAgICAiIiJTZXRzIGEgY2FsbGJhY2sgZm9yIGRldGVybWluaW5nIHRoZSB1bmNsYWltZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cy4KCiAgICBCeSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLCBhIGBgQm91bmRlZFNvdXJjZWBgIGNhbiBzZXQgYSBjYWxsYmFjayBmdW5jdGlvbgogICAgdGhhdCBtYXkgZ2V0IGludm9rZWQgYnkgdGhlIGBgUmFuZ2VUcmFja2VyYGAgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKICAgIHVuY2xhaW1lZCBzcGxpdCBwb2ludHMuIEEgc3BsaXQgcG9pbnQgaXMgdW5jbGFpbWVkIGlmCiAgICBgYFJhbmdlVHJhY2tlci50cnlfY2xhaW0oKWBgIG1ldGhvZCBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGludm9rZWQgZm9yCiAgICB0aGF0IHBhcnRpY3VsYXIgc3BsaXQgcG9pbnQuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhY2NlcHRzIGEgc2luZ2xlCiAgICBwYXJhbWV0ZXIsIGEgc3RvcCBwb3NpdGlvbiBmb3IgdGhlIEJvdW5kZWRTb3VyY2UgKHN0b3BfcG9zaXRpb24pLiBJZiB0aGUKICAgIHJlY29yZCBjdXJyZW50bHkgYmVpbmcgY29uc3VtZWQgYnkgdGhlIGBgQm91bmRlZFNvdXJjZWBgIGlzIGF0IHBvc2l0aW9uCiAgICBjdXJyZW50X3Bvc2l0aW9uLCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHdpdGhpbgogICAgdGhlIHJhbmdlIChjdXJyZW50X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKS4gTm90ZSB0aGF0LCB0aGlzIHNob3VsZCBub3QKICAgIGluY2x1ZGUgdGhlIHNwbGl0IHBvaW50IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNvbnN1bWVkIGJ5IHRoZSBzb3VyY2UuCgogICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIGJlaW5nIHVzZWQuCgogICAgQXJnczoKICAgICAgY2FsbGJhY2s6IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGEgc3RvcCBwb3NpdGlvbiwKICAgICAgICAgICAgICAgIGFuZCByZXR1cm5zIHVuY2xhaW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGZvciB0aGUgc291cmNlIHJlYWQKICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB0aGF0IGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVmFsdWUgcmV0dXJuZWQgZnJvbQogICAgICAgICAgICAgICAgY2FsbGJhY2sgc2hvdWxkIGJlIGVpdGhlciBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvCiAgICAgICAgICAgICAgICB6ZXJvIG9yIGBgUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOYGAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBTaW5rKEhhc0Rpc3BsYXlEYXRhKToKICAiIiJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgcmVzb3VyY2UgdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB1c2luZyB0aGUgYGBiZWFtLmlvLldyaXRlYGAgdHJhbnNmb3JtLgoKICBIZXJlIGBgYmVhbWBgIHN0YW5kcyBmb3IgQXBhY2hlIEJlYW0gUHl0aG9uIGNvZGUgaW1wb3J0ZWQgaW4gZm9sbG93aW5nIG1hbm5lci4KICBgYGltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtYGAuCgogIEEgcGFyYWxsZWwgd3JpdGUgdG8gYW4gYGBpb2Jhc2UuU2lua2BgIGNvbnNpc3RzIG9mIHRocmVlIHBoYXNlczoKCiAgMS4gQSBzZXF1ZW50aWFsICppbml0aWFsaXphdGlvbiogcGhhc2UgKGUuZy4sIGNyZWF0aW5nIGEgdGVtcG9yYXJ5IG91dHB1dAogICAgIGRpcmVjdG9yeSwgZXRjLikKICAyLiBBIHBhcmFsbGVsIHdyaXRlIHBoYXNlIHdoZXJlIHdvcmtlcnMgd3JpdGUgKmJ1bmRsZXMqIG9mIHJlY29yZHMKICAzLiBBIHNlcXVlbnRpYWwgKmZpbmFsaXphdGlvbiogcGhhc2UgKGUuZy4sIGNvbW1pdHRpbmcgdGhlIHdyaXRlcywgbWVyZ2luZwogICAgIG91dHB1dCBmaWxlcywgZXRjLikKCiAgSW1wbGVtZW50aW5nIGEgbmV3IHNpbmsgcmVxdWlyZXMgZXh0ZW5kaW5nIHR3byBjbGFzc2VzLgoKICAxLiBpb2Jhc2UuU2luawoKICBgYGlvYmFzZS5TaW5rYGAgaXMgYW4gaW1tdXRhYmxlIGxvZ2ljYWwgZGVzY3JpcHRpb24gb2YgdGhlIGxvY2F0aW9uL3Jlc291cmNlCiAgdG8gd3JpdGUgdG8uIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBzaW5rLCBpdCBtYXkgY29udGFpbiBmaWVsZHMgc3VjaCBhcyB0aGUKICBwYXRoIHRvIGFuIG91dHB1dCBkaXJlY3Rvcnkgb24gYSBmaWxlc3lzdGVtLCBhIGRhdGFiYXNlIHRhYmxlIG5hbWUsCiAgZXRjLiBgYGlvYmFzZS5TaW5rYGAgcHJvdmlkZXMgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBhIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUKICBzaW5rIGRlc2NyaWJlZCBieSBpdC4gVG8gdGhpcyBlbmQsIGltcGxlbWVudG9ycyBvZiBhbiBleHRlbnNpb24gb2YKICBgYGlvYmFzZS5TaW5rYGAgbXVzdCBpbXBsZW1lbnQgdGhyZWUgbWV0aG9kczoKICBgYGluaXRpYWxpemVfd3JpdGUoKWBgLCBgYG9wZW5fd3JpdGVyKClgYCwgYW5kIGBgZmluYWxpemVfd3JpdGUoKWBgLgoKICAyLiBpb2Jhc2UuV3JpdGVyCgogIGBgaW9iYXNlLldyaXRlcmBgIGlzIHVzZWQgdG8gd3JpdGUgYSBzaW5nbGUgYnVuZGxlIG9mIHJlY29yZHMuIEFuCiAgYGBpb2Jhc2UuV3JpdGVyYGAgZGVmaW5lcyB0d28gbWV0aG9kczogYGB3cml0ZSgpYGAgd2hpY2ggd3JpdGVzIGEKICBzaW5nbGUgcmVjb3JkIGZyb20gdGhlIGJ1bmRsZSBhbmQgYGBjbG9zZSgpYGAgd2hpY2ggaXMgY2FsbGVkIG9uY2UKICBhdCB0aGUgZW5kIG9mIHdyaXRpbmcgYSBidW5kbGUuCgogIFNlZSBhbHNvIGBgYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rYGAgd2hpY2ggcHJvdmlkZXMgYQogIHNpbXBsZXIgQVBJIGZvciB3cml0aW5nIHNpbmtzIHRoYXQgcHJvZHVjZSBmaWxlcy4KCiAgKipFeGVjdXRpb24gb2YgdGhlIFdyaXRlIHRyYW5zZm9ybSoqCgogIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgYW5kIGBgZmluYWxpemVfd3JpdGUoKWBgIGFyZSBjb25jZXB0dWFsbHkgY2FsbGVkIG9uY2U6CiAgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgYGBXcml0ZWBgIHRyYW5zZm9ybS4gSG93ZXZlciwgaW1wbGVtZW50b3JzIG11c3QKICBlbnN1cmUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSAqaWRlbXBvdGVudCosIGFzIHRoZXkgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZQogIHRpbWVzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlL3JldHJ5IG9yIGZvciByZWR1bmRhbmN5LgoKICBgYGluaXRpYWxpemVfd3JpdGUoKWBgIHNob3VsZCBwZXJmb3JtIGFueSBpbml0aWFsaXphdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGRvbmUKICBwcmlvciB0byB3cml0aW5nIHRvIHRoZSBzaW5rLiBgYGluaXRpYWxpemVfd3JpdGUoKWBgIG1heSByZXR1cm4gYSByZXN1bHQKICAobGV0J3MgY2FsbCB0aGlzIGBgaW5pdF9yZXN1bHRgYCkgdGhhdCBjb250YWlucyBhbnkgcGFyYW1ldGVycyBpdCB3YW50cyB0bwogIHBhc3Mgb24gdG8gaXRzIHdyaXRlcnMgYWJvdXQgdGhlIHNpbmsuIEZvciBleGFtcGxlLCBhIHNpbmsgdGhhdCB3cml0ZXMgdG8gYQogIGZpbGUgc3lzdGVtIG1heSByZXR1cm4gYW4gYGBpbml0X3Jlc3VsdGBgIHRoYXQgY29udGFpbnMgYSBkeW5hbWljYWxseQogIGdlbmVyYXRlZCB1bmlxdWUgZGlyZWN0b3J5IHRvIHdoaWNoIGRhdGEgc2hvdWxkIGJlIHdyaXR0ZW4uCgogIFRvIHBlcmZvcm0gd3JpdGluZyBvZiBhIGJ1bmRsZSBvZiBlbGVtZW50cywgRGF0YWZsb3cgZXhlY3V0aW9uIGVuZ2luZSB3aWxsCiAgY3JlYXRlIGFuIGBgaW9iYXNlLldyaXRlcmBgIHVzaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgogIGBgaW9iYXNlLlNpbmsub3Blbl93cml0ZXIoKWBgLiBXaGVuIGludm9raW5nIGBgb3Blbl93cml0ZXIoKWBgIGV4ZWN1dGlvbgogIGVuZ2luZSB3aWxsIHByb3ZpZGUgdGhlIGBgaW5pdF9yZXN1bHRgYCByZXR1cm5lZCBieSBgYGluaXRpYWxpemVfd3JpdGUoKWBgCiAgaW52b2NhdGlvbiBhcyB3ZWxsIGFzIGEgKmJ1bmRsZSBpZCogKGxldCdzIGNhbGwgdGhpcyBgYGJ1bmRsZV9pZGBgKSB0aGF0IGlzCiAgdW5pcXVlIGZvciBlYWNoIGludm9jYXRpb24gb2YgYGBvcGVuX3dyaXRlcigpYGAuCgogIEV4ZWN1dGlvbiBlbmdpbmUgd2lsbCB0aGVuIGludm9rZSBgYGlvYmFzZS5Xcml0ZXIud3JpdGUoKWBgIGltcGxlbWVudGF0aW9uIGZvcgogIGVhY2ggZWxlbWVudCB0aGF0IGhhcyB0byBiZSB3cml0dGVuLiBPbmNlIGFsbCBlbGVtZW50cyBvZiBhIGJ1bmRsZSBhcmUKICB3cml0dGVuLCBleGVjdXRpb24gZW5naW5lIHdpbGwgaW52b2tlIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgaW1wbGVtZW50YXRpb24KICB3aGljaCBzaG91bGQgcmV0dXJuIGEgcmVzdWx0IChsZXQncyBjYWxsIHRoaXMgYGB3cml0ZV9yZXN1bHRgYCkgdGhhdCBjb250YWlucwogIGluZm9ybWF0aW9uIHRoYXQgZW5jb2RlcyB0aGUgcmVzdWx0IG9mIHRoZSB3cml0ZSBhbmQsIGluIG1vc3QgY2FzZXMsIHNvbWUKICBlbmNvZGluZyBvZiB0aGUgdW5pcXVlIGJ1bmRsZSBpZC4gRm9yIGV4YW1wbGUsIGlmIGVhY2ggYnVuZGxlIGlzIHdyaXR0ZW4gdG8gYQogIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSwgYGBjbG9zZSgpYGAgbWV0aG9kIG1heSByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29udGFpbnMKICB0aGUgdGVtcG9yYXJ5IGZpbGUgbmFtZS4gQWZ0ZXIgd3JpdGluZyBvZiBhbGwgYnVuZGxlcyBpcyBjb21wbGV0ZSwgZXhlY3V0aW9uCiAgZW5naW5lIHdpbGwgaW52b2tlIGBgZmluYWxpemVfd3JpdGUoKWBgIGltcGxlbWVudGF0aW9uLiBBcyBwYXJhbWV0ZXJzIHRvIHRoaXMKICBpbnZvY2F0aW9uIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBwcm92aWRlIGBgaW5pdF9yZXN1bHRgYCBhcyB3ZWxsIGFzIGFuCiAgaXRlcmFibGUgb2YgYGB3cml0ZV9yZXN1bHRgYC4KCiAgVGhlIGV4ZWN1dGlvbiBvZiBhIHdyaXRlIHRyYW5zZm9ybSBjYW4gYmUgaWxsdXN0cmF0ZWQgdXNpbmcgZm9sbG93aW5nIHBzZXVkbwogIGNvZGUgKGFzc3VtZSB0aGF0IHRoZSBvdXRlciBmb3IgbG9vcCBoYXBwZW5zIGluIHBhcmFsbGVsIGFjcm9zcyBtYW55CiAgbWFjaGluZXMpOjoKCiAgICBpbml0X3Jlc3VsdCA9IHNpbmsuaW5pdGlhbGl6ZV93cml0ZSgpCiAgICB3cml0ZV9yZXN1bHRzID0gW10KICAgIGZvciBidW5kbGUgaW4gcGFydGl0aW9uKHBjb2xsKToKICAgICAgd3JpdGVyID0gc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgZ2VuZXJhdGVfYnVuZGxlX2lkKCkpCiAgICAgIGZvciBlbGVtIGluIGJ1bmRsZToKICAgICAgICB3cml0ZXIud3JpdGUoZWxlbSkKICAgICAgd3JpdGVfcmVzdWx0cy5hcHBlbmQod3JpdGVyLmNsb3NlKCkpCiAgICBzaW5rLmZpbmFsaXplX3dyaXRlKGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzKQoKCiAgKippbml0X3Jlc3VsdCoqCgogIE1ldGhvZHMgb2YgJ2lvYmFzZS5TaW5rJyBzaG91bGQgYWdyZWUgb24gdGhlICdpbml0X3Jlc3VsdCcgdHlwZSB0aGF0IHdpbGwgYmUKICByZXR1cm5lZCB3aGVuIGluaXRpYWxpemluZyB0aGUgc2luay4gVGhpcyB0eXBlIGNhbiBiZSBhIGNsaWVudC1kZWZpbmVkIG9iamVjdAogIG9yIGFuIGV4aXN0aW5nIHR5cGUuIFRoZSByZXR1cm5lZCB0eXBlIG11c3QgYmUgcGlja2xhYmxlIHVzaW5nIERhdGFmbG93IGNvZGVyCiAgYGBjb2RlcnMuUGlja2xlQ29kZXJgYC4gUmV0dXJuaW5nIGFuIGluaXRfcmVzdWx0IGlzIG9wdGlvbmFsLgoKICAqKmJ1bmRsZV9pZCoqCgogIEluIG9yZGVyIHRvIGVuc3VyZSBmYXVsdC10b2xlcmFuY2UsIGEgYnVuZGxlIG1heSBiZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1lcwogIChlLmcuLCBpbiB0aGUgZXZlbnQgb2YgZmFpbHVyZS9yZXRyeSBvciBmb3IgcmVkdW5kYW5jeSkuIEhvd2V2ZXIsIGV4YWN0bHkgb25lCiAgb2YgdGhlc2UgZXhlY3V0aW9ucyB3aWxsIGhhdmUgaXRzIHJlc3VsdCBwYXNzZWQgdG8gdGhlCiAgYGBpb2Jhc2UuU2luay5maW5hbGl6ZV93cml0ZSgpYGAgbWV0aG9kLiBFYWNoIGNhbGwgdG8KICBgYGlvYmFzZS5TaW5rLm9wZW5fd3JpdGVyKClgYCBpcyBwYXNzZWQgYSB1bmlxdWUgYnVuZGxlIGlkIHdoZW4gaXQgaXMgY2FsbGVkCiAgYnkgdGhlIGBgV3JpdGVJbXBsYGAgdHJhbnNmb3JtLCBzbyBldmVuIHJlZHVuZGFudCBvciByZXRyaWVkIGJ1bmRsZXMgd2lsbCBoYXZlCiAgYSB1bmlxdWUgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZWlyIG91dHB1dC4KCiAgVGhlIGJ1bmRsZSBpZCBzaG91bGQgYmUgdXNlZCB0byBndWFyYW50ZWUgdGhhdCBhIGJ1bmRsZSdzIG91dHB1dCBpcyB1bmlxdWUuCiAgVGhpcyB1bmlxdWVuZXNzIGd1YXJhbnRlZSBpcyBpbXBvcnRhbnQ7IGlmIGEgYnVuZGxlIGlzIHRvIGJlIG91dHB1dCB0byBhIGZpbGUsCiAgZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9mIHRoZSBmaWxlIG11c3QgYmUgdW5pcXVlIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyCiAgd3JpdGVycy4gVGhlIGJ1bmRsZSBpZCBzaG91bGQgYmUgZW5jb2RlZCBpbiB0aGUgd3JpdGVyIHJlc3VsdCByZXR1cm5lZCBieSB0aGUKICB3cml0ZXIgYW5kIHN1YnNlcXVlbnRseSB1c2VkIGJ5IHRoZSBgYGZpbmFsaXplX3dyaXRlKClgYCBtZXRob2QgdG8gaWRlbnRpZnkKICB0aGUgcmVzdWx0cyBvZiBzdWNjZXNzZnVsIHdyaXRlcy4KCiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBzY2VuYXJpbyB3aGVyZSBhIFdyaXRlciB3cml0ZXMgZmlsZXMgY29udGFpbmluZwogIHNlcmlhbGl6ZWQgcmVjb3JkcyBhbmQgdGhlIGBgZmluYWxpemVfd3JpdGUoKWBgIGlzIHRvIG1lcmdlIG9yIHJlbmFtZSB0aGVzZQogIG91dHB1dCBmaWxlcy4gSW4gdGhpcyBjYXNlLCBhIHdyaXRlciBtYXkgdXNlIGl0cyB1bmlxdWUgaWQgdG8gbmFtZSBpdHMgb3V0cHV0CiAgZmlsZSAodG8gYXZvaWQgY29uZmxpY3RzKSBhbmQgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGl0IHdyb3RlIGFzIGl0cwogIHdyaXRlciByZXN1bHQuIFRoZSBgYGZpbmFsaXplX3dyaXRlKClgYCB3aWxsIHRoZW4gcmVjZWl2ZSBhbiBgYEl0ZXJhYmxlYGAgb2YKICBvdXRwdXQgZmlsZSBuYW1lcyB0aGF0IGl0IGNhbiB0aGVuIG1lcmdlIG9yIHJlbmFtZSB1c2luZyBzb21lIGJ1bmRsZSBuYW1pbmcKICBzY2hlbWUuCgogICoqd3JpdGVfcmVzdWx0KioKCiAgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBhbmQgYGBmaW5hbGl6ZV93cml0ZSgpYGAgaW1wbGVtZW50YXRpb25zIG11c3QgYWdyZWUKICBvbiB0eXBlIG9mIHRoZSBgYHdyaXRlX3Jlc3VsdGBgIG9iamVjdCByZXR1cm5lZCB3aGVuIGludm9raW5nCiAgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYC4gVGhpcyB0eXBlIGNhbiBiZSBhIGNsaWVudC1kZWZpbmVkIG9iamVjdCBvcgogIGFuIGV4aXN0aW5nIHR5cGUuIFRoZSByZXR1cm5lZCB0eXBlIG11c3QgYmUgcGlja2xhYmxlIHVzaW5nIERhdGFmbG93IGNvZGVyCiAgYGBjb2RlcnMuUGlja2xlQ29kZXJgYC4gUmV0dXJuaW5nIGEgYGB3cml0ZV9yZXN1bHRgYCB3aGVuCiAgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBpcyBpbnZva2VkIGlzIG9wdGlvbmFsIGJ1dCBpZiB1bmlxdWUKICBgYHdyaXRlX3Jlc3VsdGBgIG9iamVjdHMgYXJlIG5vdCByZXR1cm5lZCwgc2luayBzaG91bGQsIGd1YXJhbnRlZSBpZGVtcG90ZW5jeQogIHdoZW4gc2FtZSBidW5kbGUgaXMgd3JpdHRlbiBtdWx0aXBsZSB0aW1lcyBkdWUgdG8gZmFpbHVyZS9yZXRyeSBvciByZWR1bmRhbmN5LgoKCiAgKipNb3JlIGluZm9ybWF0aW9uKioKCiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgbmV3IHNpbmtzIHBsZWFzZSByZWZlciB0byB0aGUgb2ZmaWNpYWwKICBkb2N1bWVudGF0aW9uIGF0CiAgYGBodHRwczovL2JlYW0uYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uL3Nka3MvcHl0aG9uLWN1c3RvbS1pbyNjcmVhdGluZy1zaW5rc2BgCiAgIiIiCgogIGRlZiBpbml0aWFsaXplX3dyaXRlKHNlbGYpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIHNpbmsgYmVmb3JlIHdyaXRpbmcgYmVnaW5zLgoKICAgIEludm9rZWQgYmVmb3JlIGFueSBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIHNpbmsuCgoKICAgIFBsZWFzZSBzZWUgZG9jdW1lbnRhdGlvbiBpbiBgYGlvYmFzZS5TaW5rYGAgZm9yIGFuIGV4YW1wbGUuCgogICAgUmV0dXJuczoKICAgICAgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IHNpbmsgc3BlY2lmaWMgc3RhdGUgZ2VuZXJhdGVkIGJ5CiAgICAgIGluaXRpYWxpemF0aW9uLiBUaGlzIG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0byBvcGVuX3dyaXRlcigpIGFuZAogICAgICBmaW5hbGl6ZV93cml0ZSgpIG1ldGhvZHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG9wZW5fd3JpdGVyKHNlbGYsIGluaXRfcmVzdWx0LCB1aWQpOgogICAgIiIiT3BlbnMgYSB3cml0ZXIgZm9yIHdyaXRpbmcgYSBidW5kbGUgb2YgZWxlbWVudHMgdG8gdGhlIHNpbmsuCgogICAgQXJnczoKICAgICAgaW5pdF9yZXN1bHQ6IHRoZSByZXN1bHQgb2YgaW5pdGlhbGl6ZV93cml0ZSgpIGludm9jYXRpb24uCiAgICAgIHVpZDogYSB1bmlxdWUgaWRlbnRpZmllciBnZW5lcmF0ZWQgYnkgdGhlIHN5c3RlbS4KICAgIFJldHVybnM6CiAgICAgIGFuIGBgaW9iYXNlLldyaXRlcmBgIHRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYSBidW5kbGUgb2YgcmVjb3JkcyB0byB0aGUKICAgICAgY3VycmVudCBzaW5rLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBmaW5hbGl6ZV93cml0ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMpOgogICAgIiIiRmluYWxpemVzIHRoZSBzaW5rIGFmdGVyIGFsbCBkYXRhIGlzIHdyaXR0ZW4gdG8gaXQuCgogICAgR2l2ZW4gdGhlIHJlc3VsdCBvZiBpbml0aWFsaXphdGlvbiBhbmQgYW4gaXRlcmFibGUgb2YgcmVzdWx0cyBmcm9tIGJ1bmRsZQogICAgd3JpdGVzLCBwZXJmb3JtcyBmaW5hbGl6YXRpb24gYWZ0ZXIgd3JpdGluZyBhbmQgY2xvc2VzIHRoZSBzaW5rLiBDYWxsZWQKICAgIGFmdGVyIGFsbCBidW5kbGUgd3JpdGVzIGFyZSBjb21wbGV0ZS4KCiAgICBUaGUgYnVuZGxlIHdyaXRlIHJlc3VsdHMgdGhhdCBhcmUgcGFzc2VkIHRvIGZpbmFsaXplIGFyZSB0aG9zZSByZXR1cm5lZCBieQogICAgYnVuZGxlcyB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEFsdGhvdWdoIGJ1bmRsZXMgbWF5IGhhdmUgYmVlbiBydW4KICAgIG11bHRpcGxlIHRpbWVzIChmb3IgZmF1bHQtdG9sZXJhbmNlKSwgb25seSBvbmUgd3JpdGVyIHJlc3VsdCB3aWxsIGJlIHBhc3NlZAogICAgdG8gZmluYWxpemUgZm9yIGVhY2ggYnVuZGxlLiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBmaW5hbGl6ZSBzaG91bGQgcGVyZm9ybQogICAgY2xlYW4gdXAgb2YgYW55IGZhaWxlZCBhbmQgc3VjY2Vzc2Z1bGx5IHJldHJpZWQgYnVuZGxlcy4gIE5vdGUgdGhhdCB0aGVzZQogICAgZmFpbGVkIGJ1bmRsZXMgd2lsbCBub3QgaGF2ZSB0aGVpciB3cml0ZXIgcmVzdWx0IHBhc3NlZCB0byBmaW5hbGl6ZSwgc28KICAgIGZpbmFsaXplIHNob3VsZCBiZSBjYXBhYmxlIG9mIGxvY2F0aW5nIGFueSB0ZW1wb3JhcnkvcGFydGlhbCBvdXRwdXQgd3JpdHRlbgogICAgYnkgZmFpbGVkIGJ1bmRsZXMuCgogICAgSWYgYWxsIHJldHJpZXMgb2YgYSBidW5kbGUgZmFpbHMsIHRoZSB3aG9sZSBwaXBlbGluZSB3aWxsIGZhaWwgKndpdGhvdXQqCiAgICBmaW5hbGl6ZV93cml0ZSgpIGJlaW5nIGludm9rZWQuCgogICAgQSBiZXN0IHByYWN0aWNlIGlzIHRvIG1ha2UgZmluYWxpemUgYXRvbWljLiBJZiB0aGlzIGlzIGltcG9zc2libGUgZ2l2ZW4gdGhlCiAgICBzZW1hbnRpY3Mgb2YgdGhlIHNpbmssIGZpbmFsaXplIHNob3VsZCBiZSBpZGVtcG90ZW50LCBhcyBpdCBtYXkgYmUgY2FsbGVkCiAgICBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlL3JldHJ5IG9yIGZvciByZWR1bmRhbmN5LgoKICAgIE5vdGUgdGhhdCB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSB3cml0ZXIgcmVzdWx0cyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQogICAgY29uc2lzdGVudCBpZiBmaW5hbGl6ZSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCgogICAgQXJnczoKICAgICAgaW5pdF9yZXN1bHQ6IHRoZSByZXN1bHQgb2YgYGBpbml0aWFsaXplX3dyaXRlKClgYCBpbnZvY2F0aW9uLgogICAgICB3cml0ZXJfcmVzdWx0czogYW4gaXRlcmFibGUgY29udGFpbmluZyByZXN1bHRzIG9mIGBgV3JpdGVyLmNsb3NlKClgYAogICAgICAgIGludm9jYXRpb25zLiBUaGlzIHdpbGwgb25seSBjb250YWluIHJlc3VsdHMgb2Ygc3VjY2Vzc2Z1bCB3cml0ZXMsIGFuZAogICAgICAgIHdpbGwgb25seSBjb250YWluIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUgc3VjY2Vzc2Z1bCB3cml0ZSBmb3IgYSBnaXZlbgogICAgICAgIGJ1bmRsZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFdyaXRlcihvYmplY3QpOgogICIiIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgV3JpdGVzIGEgYnVuZGxlIG9mIGVsZW1lbnRzIGZyb20gYSBgYFBDb2xsZWN0aW9uYGAgdG8gYSBzaW5rLgoKICBBIFdyaXRlciAgYGBpb2Jhc2UuV3JpdGVyLndyaXRlKClgYCB3cml0ZXMgYW5kIGVsZW1lbnRzIHRvIHRoZSBzaW5rIHdoaWxlCiAgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIGVsZW1lbnRzIGluIHRoZSBidW5kbGUgaGF2ZSBiZWVuCiAgd3JpdHRlbi4KCiAgU2VlIGBgaW9iYXNlLlNpbmtgYCBmb3IgbW9yZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBwcm9jZXNzIG9mCiAgd3JpdGluZyB0byBhIHNpbmsuCiAgIiIiCgogIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSB2YWx1ZSB0byB0aGUgc2luayB1c2luZyB0aGUgY3VycmVudCB3cml0ZXIuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjbG9zZShzZWxmKToKICAgICIiIkNsb3NlcyB0aGUgY3VycmVudCB3cml0ZXIuCgogICAgUGxlYXNlIHNlZSBkb2N1bWVudGF0aW9uIGluIGBgaW9iYXNlLlNpbmtgYCBmb3IgYW4gZXhhbXBsZS4KCiAgICBSZXR1cm5zOgogICAgICBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB3cml0ZXMgdGhhdCB3ZXJlIHBlcmZvcm1lZCBieSB0aGUgY3VycmVudAogICAgICB3cml0ZXIuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBSZWFkKHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCByZWFkcyBhIFBDb2xsZWN0aW9uLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlKToKICAgICIiIkluaXRpYWxpemVzIGEgUmVhZCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgc291cmNlOiBEYXRhIHNvdXJjZSB0byByZWFkIGZyb20uCiAgICAiIiIKICAgIHN1cGVyKFJlYWQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuc291cmNlID0gc291cmNlCgogIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHBiZWdpbiwgcHZhbHVlLlBCZWdpbikKICAgIHNlbGYucGlwZWxpbmUgPSBwYmVnaW4ucGlwZWxpbmUKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24oc2VsZi5waXBlbGluZSkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgdW51c2VkX2lucHV0cyk6CiAgICByZXR1cm4gY29yZS5XaW5kb3dpbmcod2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKCiAgZGVmIF9pbmZlcl9vdXRwdXRfY29kZXIoc2VsZiwgaW5wdXRfdHlwZT1Ob25lLCBpbnB1dF9jb2Rlcj1Ob25lKToKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zb3VyY2UsIEJvdW5kZWRTb3VyY2UpOgogICAgICByZXR1cm4gc2VsZi5zb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXIoKQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYuc291cmNlLmNvZGVyCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzb3VyY2UnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5zb3VyY2UuX19jbGFzc19fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdSZWFkIFNvdXJjZScpLAogICAgICAgICAgICAnc291cmNlX2RkJzogc2VsZi5zb3VyY2V9CgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAodXJucy5SRUFEX1RSQU5TRk9STSwKICAgICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5SZWFkUGF5bG9hZCgKICAgICAgICAgICAgICAgIHNvdXJjZT1zZWxmLnNvdXJjZS50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICAgICAgICAgICAgaXNfYm91bmRlZD1iZWFtX3J1bm5lcl9hcGlfcGIyLklzQm91bmRlZC5CT1VOREVECiAgICAgICAgICAgICAgICBpZiBzZWxmLnNvdXJjZS5pc19ib3VuZGVkKCkKICAgICAgICAgICAgICAgIGVsc2UgYmVhbV9ydW5uZXJfYXBpX3BiMi5Jc0JvdW5kZWQuVU5CT1VOREVEKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHBhcmFtZXRlciwgY29udGV4dCk6CiAgICByZXR1cm4gUmVhZChTb3VyY2VCYXNlLmZyb21fcnVubmVyX2FwaShwYXJhbWV0ZXIuc291cmNlLCBjb250ZXh0KSkKCgpwdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgdXJucy5SRUFEX1RSQU5TRk9STSwKICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUmVhZFBheWxvYWQsCiAgICBSZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIpCgoKY2xhc3MgV3JpdGUocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIHRoYXQgd3JpdGVzIHRvIGEgc2luay4KCiAgQSBzaW5rIHNob3VsZCBpbmhlcml0IGBgaW9iYXNlLlNpbmtgYC4gU3VjaCBpbXBsZW1lbnRhdGlvbnMgYXJlCiAgaGFuZGxlZCB1c2luZyBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gdGhhdCBjb25zaXN0cyBvZiB0aHJlZSBgYFBhckRvYGBzIC0KICAoMSkgYSBgYFBhckRvYGAgcGVyZm9ybWluZyBhIGdsb2JhbCBpbml0aWFsaXphdGlvbiAoMikgYSBgYFBhckRvYGAgcGVyZm9ybWluZwogIGEgcGFyYWxsZWwgd3JpdGUgYW5kICgzKSBhIGBgUGFyRG9gYCBwZXJmb3JtaW5nIGEgZ2xvYmFsIGZpbmFsaXphdGlvbi4gSW4gdGhlCiAgY2FzZSBvZiBhbiBlbXB0eSBgYFBDb2xsZWN0aW9uYGAsIG9ubHkgdGhlIGdsb2JhbCBpbml0aWFsaXphdGlvbiBhbmQKICBmaW5hbGl6YXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuIEN1cnJlbnRseSBvbmx5IGJhdGNoIHdvcmtmbG93cyBzdXBwb3J0IGN1c3RvbQogIHNpbmtzLgoKICBFeGFtcGxlIHVzYWdlOjoKCiAgICAgIHBjb2xsZWN0aW9uIHwgYmVhbS5pby5Xcml0ZShNeVNpbmsoKSkKCiAgVGhpcyByZXR1cm5zIGEgYGBwdmFsdWUuUFZhbHVlYGAgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZQogIFBpcGVsaW5lLgoKICBUaGUgc2luayBhcmd1bWVudCBtYXkgYWxzbyBiZSBhIGZ1bGwgUFRyYW5zZm9ybSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCiAgYXBwbGllZCBkaXJlY3RseS4gIFRoaXMgYWxsb3dzIGNvbXBvc2l0ZSBzaW5rLWxpa2UgdHJhbnNmb3JtcyAoZS5nLiBhIHNpbmsKICB3aXRoIHNvbWUgcHJlLXByb2Nlc3NpbmcgRG9GbnMpIHRvIGJlIHVzZWQgdGhlIHNhbWUgYXMgYWxsIG90aGVyIHNpbmtzLgoKICBUaGlzIHRyYW5zZm9ybSBhbHNvIHN1cHBvcnRzIHNpbmtzIHRoYXQgaW5oZXJpdCBgYGlvYmFzZS5OYXRpdmVTaW5rYGAuIFRoZXNlCiAgYXJlIHNpbmtzIHRoYXQgYXJlIGltcGxlbWVudGVkIG5hdGl2ZWx5IGJ5IHRoZSBEYXRhZmxvdyBzZXJ2aWNlIGFuZCBoZW5jZQogIHNob3VsZCBub3QgYmUgdXBkYXRlZCBieSB1c2Vycy4gVGhlc2Ugc2lua3MgYXJlIHByb2Nlc3NlZCB1c2luZyBhIERhdGFmbG93CiAgbmF0aXZlIHdyaXRlIHRyYW5zZm9ybS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmspOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBXcml0ZSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgc2luazogRGF0YSBzaW5rIHRvIHdyaXRlIHRvLgogICAgIiIiCiAgICBzdXBlcihXcml0ZSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2luayc6IHNlbGYuc2luay5fX2NsYXNzX18sCiAgICAgICAgICAgICdzaW5rX2RkJzogc2VsZi5zaW5rfQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwogICAgaWYgaXNpbnN0YW5jZShzZWxmLnNpbmssIGRhdGFmbG93X2lvLk5hdGl2ZVNpbmspOgogICAgICAjIEEgbmF0aXZlIHNpbmsKICAgICAgcmV0dXJuIHBjb2xsIHwgJ05hdGl2ZVdyaXRlJyA+PiBkYXRhZmxvd19pby5fTmF0aXZlV3JpdGUoc2VsZi5zaW5rKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuc2luaywgU2luayk6CiAgICAgICMgQSBjdXN0b20gc2luawogICAgICByZXR1cm4gcGNvbGwgfCBXcml0ZUltcGwoc2VsZi5zaW5rKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuc2luaywgcHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICAgIyBUaGlzIGFsbG93cyAiY29tcG9zaXRlIiBzaW5rcyB0byBiZSB1c2VkIGxpa2Ugbm9uLWNvbXBvc2l0ZSBvbmVzLgogICAgICByZXR1cm4gcGNvbGwgfCBzZWxmLnNpbmsKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Egc2luayBtdXN0IGluaGVyaXQgaW9iYXNlLlNpbmssIGlvYmFzZS5OYXRpdmVTaW5rLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ29yIGJlIGEgUFRyYW5zZm9ybS4gUmVjZWl2ZWQgOiAlcicsIHNlbGYuc2luaykKCgpjbGFzcyBXcml0ZUltcGwocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJJbXBsZW1lbnRzIHRoZSB3cml0aW5nIG9mIGN1c3RvbSBzaW5rcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmspOgogICAgc3VwZXIoV3JpdGVJbXBsLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnNpbmsgPSBzaW5rCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgZG9fb25jZSA9IHBjb2xsLnBpcGVsaW5lIHwgJ0RvT25jZScgPj4gY29yZS5DcmVhdGUoW05vbmVdKQogICAgaW5pdF9yZXN1bHRfY29sbCA9IGRvX29uY2UgfCAnSW5pdGlhbGl6ZVdyaXRlJyA+PiBjb3JlLk1hcCgKICAgICAgICBsYW1iZGEgXywgc2luazogc2luay5pbml0aWFsaXplX3dyaXRlKCksIHNlbGYuc2luaykKICAgIGlmIGdldGF0dHIoc2VsZi5zaW5rLCAnbnVtX3NoYXJkcycsIDApOgogICAgICBtaW5fc2hhcmRzID0gc2VsZi5zaW5rLm51bV9zaGFyZHMKICAgICAgaWYgbWluX3NoYXJkcyA9PSAxOgogICAgICAgIGtleWVkX3Bjb2xsID0gcGNvbGwgfCBjb3JlLk1hcChsYW1iZGEgeDogKE5vbmUsIHgpKQogICAgICBlbHNlOgogICAgICAgIGtleWVkX3Bjb2xsID0gcGNvbGwgfCBjb3JlLlBhckRvKF9Sb3VuZFJvYmluS2V5Rm4obWluX3NoYXJkcykpCiAgICAgIHdyaXRlX3Jlc3VsdF9jb2xsID0gKGtleWVkX3Bjb2xsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29yZS5XaW5kb3dJbnRvKHdpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29yZS5Hcm91cEJ5S2V5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnV3JpdGVCdW5kbGVzJyA+PiBjb3JlLlBhckRvKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuKHNlbGYuc2luayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc1NpbmdsZXRvbihpbml0X3Jlc3VsdF9jb2xsKSkpCiAgICBlbHNlOgogICAgICBtaW5fc2hhcmRzID0gMQogICAgICB3cml0ZV9yZXN1bHRfY29sbCA9IChwY29sbAogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICdXcml0ZUJ1bmRsZXMnID4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuUGFyRG8oX1dyaXRlQnVuZGxlRG9GbihzZWxmLnNpbmspLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzU2luZ2xldG9uKGluaXRfcmVzdWx0X2NvbGwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICdQYWlyJyA+PiBjb3JlLk1hcChsYW1iZGEgeDogKE5vbmUsIHgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvcmUuV2luZG93SW50byh3aW5kb3cuR2xvYmFsV2luZG93cygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvcmUuR3JvdXBCeUtleSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJ0V4dHJhY3QnID4+IGNvcmUuRmxhdE1hcChsYW1iZGEgeDogeFsxXSkpCiAgICByZXR1cm4gZG9fb25jZSB8ICdGaW5hbGl6ZVdyaXRlJyA+PiBjb3JlLkZsYXRNYXAoCiAgICAgICAgX2ZpbmFsaXplX3dyaXRlLAogICAgICAgIHNlbGYuc2luaywKICAgICAgICBBc1NpbmdsZXRvbihpbml0X3Jlc3VsdF9jb2xsKSwKICAgICAgICBBc0l0ZXIod3JpdGVfcmVzdWx0X2NvbGwpLAogICAgICAgIG1pbl9zaGFyZHMpCgoKY2xhc3MgX1dyaXRlQnVuZGxlRG9Gbihjb3JlLkRvRm4pOgogICIiIkEgRG9GbiBmb3Igd3JpdGluZyBlbGVtZW50cyB0byBhbiBpb2Jhc2UuV3JpdGVyLgogIE9wZW5zIGEgd3JpdGVyIGF0IHRoZSBmaXJzdCBlbGVtZW50IGFuZCBjbG9zZXMgdGhlIHdyaXRlciBhdCBmaW5pc2hfYnVuZGxlKCkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHNlbGYud3JpdGVyID0gTm9uZQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2lua19kZCc6IHNlbGYuc2lua30KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgaW5pdF9yZXN1bHQpOgogICAgaWYgc2VsZi53cml0ZXIgaXMgTm9uZToKICAgICAgIyBXZSBpZ25vcmUgVVVJRCBjb2xsaXNpb25zIGhlcmUgc2luY2UgdGhleSBhcmUgZXh0cmVtZWx5IHJhcmUuCiAgICAgIHNlbGYud3JpdGVyID0gc2VsZi5zaW5rLm9wZW5fd3JpdGVyKGluaXRfcmVzdWx0LCBzdHIodXVpZC51dWlkNCgpKSkKICAgIHNlbGYud3JpdGVyLndyaXRlKGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi53cml0ZXIgaXMgbm90IE5vbmU6CiAgICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoc2VsZi53cml0ZXIuY2xvc2UoKSwgd2luZG93Lk1BWF9USU1FU1RBTVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpbmRvdy5HbG9iYWxXaW5kb3coKV0pCgoKY2xhc3MgX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuKGNvcmUuRG9Gbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NpbmtfZGQnOiBzZWxmLnNpbmt9CgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGluaXRfcmVzdWx0KToKICAgIGJ1bmRsZSA9IGVsZW1lbnQKICAgIHdyaXRlciA9IHNlbGYuc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgc3RyKHV1aWQudXVpZDQoKSkpCiAgICBmb3IgZSBpbiBidW5kbGVbMV06ICAjIHZhbHVlcwogICAgICB3cml0ZXIud3JpdGUoZSkKICAgIHJldHVybiBbd2luZG93LlRpbWVzdGFtcGVkVmFsdWUod3JpdGVyLmNsb3NlKCksIHdpbmRvdy5NQVhfVElNRVNUQU1QKV0KCgpkZWYgX2ZpbmFsaXplX3dyaXRlKF8sIHNpbmssIGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzLCBtaW5fc2hhcmRzKToKICB3cml0ZV9yZXN1bHRzID0gbGlzdCh3cml0ZV9yZXN1bHRzKQogIGV4dHJhX3NoYXJkcyA9IFtdCiAgaWYgbGVuKHdyaXRlX3Jlc3VsdHMpIDwgbWluX3NoYXJkczoKICAgIGxvZ2dpbmcuZGVidWcoCiAgICAgICAgJ0NyZWF0aW5nICVzIGVtcHR5IHNoYXJkKHMpLicsIG1pbl9zaGFyZHMgLSBsZW4od3JpdGVfcmVzdWx0cykpCiAgICBmb3IgXyBpbiByYW5nZShtaW5fc2hhcmRzIC0gbGVuKHdyaXRlX3Jlc3VsdHMpKToKICAgICAgd3JpdGVyID0gc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgc3RyKHV1aWQudXVpZDQoKSkpCiAgICAgIGV4dHJhX3NoYXJkcy5hcHBlbmQod3JpdGVyLmNsb3NlKCkpCiAgb3V0cHV0cyA9IHNpbmsuZmluYWxpemVfd3JpdGUoaW5pdF9yZXN1bHQsIHdyaXRlX3Jlc3VsdHMgKyBleHRyYV9zaGFyZHMpCiAgaWYgb3V0cHV0czoKICAgIHJldHVybiAod2luZG93LlRpbWVzdGFtcGVkVmFsdWUodiwgd2luZG93Lk1BWF9USU1FU1RBTVApIGZvciB2IGluIG91dHB1dHMpCgoKY2xhc3MgX1JvdW5kUm9iaW5LZXlGbihjb3JlLkRvRm4pOgoKICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgogICAgc2VsZi5jb3VudCA9IGNvdW50CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmNvdW50ZXIgPSByYW5kb20ucmFuZGludCgwLCBzZWxmLmNvdW50IC0gMSkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmNvdW50ZXIgKz0gMQogICAgaWYgc2VsZi5jb3VudGVyID49IHNlbGYuY291bnQ6CiAgICAgIHNlbGYuY291bnRlciAtPSBzZWxmLmNvdW50CiAgICB5aWVsZCBzZWxmLmNvdW50ZXIsIGVsZW1lbnQKCgpjbGFzcyBSZXN0cmljdGlvblRyYWNrZXIob2JqZWN0KToKICAiIiJNYW5hZ2VzIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgcmVzdHJpY3Rpb24uCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgS2VlcHMgdHJhY2sgb2YgdGhlIHJlc3RyaWN0aW9ucyBjbGFpbWVkIHBhcnQgZm9yIGEgU3BsaXR0YWJsZSBEb0ZuLgoKICBTZWUgZm9sbG93aW5nIGRvY3VtZW50cyBmb3IgbW9yZSBkZXRhaWxzLgogICogaHR0cHM6Ly9zLmFwYWNoZS5vcmcvc3BsaXR0YWJsZS1kby1mbgogICogaHR0cHM6Ly9zLmFwYWNoZS5vcmcvc3BsaXR0YWJsZS1kby1mbi1weXRob24tc2RrCiAgIiIiCgogIGRlZiBjdXJyZW50X3Jlc3RyaWN0aW9uKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCByZXN0cmljdGlvbi4KCiAgICBSZXR1cm5zIGEgcmVzdHJpY3Rpb24gYWNjdXJhdGVseSBkZXNjcmliaW5nIHRoZSBmdWxsIHJhbmdlIG9mIHdvcmsgdGhlCiAgICBjdXJyZW50IGBgRG9Gbi5wcm9jZXNzKClgYCBjYWxsIHdpbGwgZG8sIGluY2x1ZGluZyBhbHJlYWR5IGNvbXBsZXRlZCB3b3JrLgoKICAgIFRoZSBjdXJyZW50IHJlc3RyaWN0aW9uIHJldHVybmVkIGJ5IG1ldGhvZCBtYXkgYmUgdXBkYXRlZCBkeW5hbWljYWxseSBkdWUKICAgIHRvIGR1ZSB0byBjb25jdXJyZW50IGludm9jYXRpb24gb2Ygb3RoZXIgbWV0aG9kcyBvZiB0aGUKICAgIGBgUmVzdHJpY3Rpb25UcmFja2VyYGAsIEZvciBleGFtcGxlLCBgYGNoZWNrcG9pbnQoKWBgLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJlc3RyaWN0aW9uVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0CiAgICBpbnZva2VkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcKICAgIGEgc2luZ2xlIGxvY2sgb2JqZWN0LgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjaGVja3BvaW50KHNlbGYpOgogICAgIiIiUGVyZm9ybXMgYSBjaGVja3BvaW50IG9mIHRoZSBjdXJyZW50IHJlc3RyaWN0aW9uLgoKICAgIFNpZ25hbHMgdGhhdCB0aGUgY3VycmVudCBgYERvRm4ucHJvY2VzcygpYGAgY2FsbCBzaG91bGQgdGVybWluYXRlIGFzIHNvb24gYXMKICAgIHBvc3NpYmxlLiBBZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zLCB0aGUgdHJhY2tlciBNVVNUIHJlZnVzZSBhbGwgZnV0dXJlCiAgICBjbGFpbSBjYWxscywgYW5kIGBgUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmUoKWBgIE1VU1Qgc3VjY2VlZC4KCiAgICBUaGlzIGludm9jYXRpb24gbW9kaWZpZXMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGBgY3VycmVudF9yZXN0cmljdGlvbigpYGAKICAgIGludm9jYXRpb24gYW5kIHJldHVybnMgYSByZXN0cmljdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIHdvcmsuIFRoZQogICAgb2xkIHZhbHVlIG9mIGBgY3VycmVudF9yZXN0cmljdGlvbigpYGAgaXMgZXF1aXZhbGVudCB0byB0aGUgbmV3IHZhbHVlIG9mCiAgICBgYGN1cnJlbnRfcmVzdHJpY3Rpb24oKWBgIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGludm9jYXRpb24KICAgIGNvbWJpbmVkLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJlc3RyaWN0aW9uVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0CiAgICBpbnZva2VkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcKICAgIGEgc2luZ2xlIGxvY2sgb2JqZWN0LgogICAgIiIiCgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2hlY2tfZG9uZShzZWxmKToKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSByZXN0cmljdGlvbiBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQuCgogICAgQ2FsbGVkIGJ5IHRoZSBydW5uZXIgYWZ0ZXIgaXRlcmF0b3IgcmV0dXJuZWQgYnkgYGBEb0ZuLnByb2Nlc3MoKWBgIGhhcyBiZWVuCiAgICBmdWxseSByZWFkLgoKICAgIFRoaXMgbWV0aG9kIG11c3QgcmFpc2UgYSBgVmFsdWVFcnJvcmAgaWYgdGhlcmUgaXMgc3RpbGwgYW55IHVuY2xhaW1lZCB3b3JrCiAgICByZW1haW5pbmcgaW4gdGhlIHJlc3RyaWN0aW9uIHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZC4gRXhjZXB0aW9uIHJhaXNlZAogICAgbXVzdCBoYXZlIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmVzdHJpY3Rpb25UcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQKICAgIGludm9rZWQgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZwogICAgYSBzaW5nbGUgbG9jayBvYmplY3QuCgogICAgUmV0dXJuczogYGBUcnVlYGAgaWYgY3VycmVudCByZXN0cmljdGlvbiBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQuCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIHRoZXJlIGlzIHN0aWxsIGFueSB1bmNsYWltZWQgd29yayByZW1haW5pbmcuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXLZAQAAKFgiAAAAQm91bmRlZFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlclgDAAAAZGVmS8BLx4dYHgAAAFJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZFgDAAAAZGVmTaMBTbIBh1geAAAAUmVhZC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNSgNNTQOHWBkAAABSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzWAMAAABkZWZNswFNJAKHWBUAAABfV3JpdGVLZXllZEJ1bmRsZURvRm5YBQAAAGNsYXNzTc8DTd0Dh1gYAAAAX1JvdW5kUm9iaW5LZXlGbi5wcm9jZXNzWAMAAABkZWZN9QNN+gOHWA4AAABXcml0ZS5fX2luaXRfX1gDAAAAZGVmTXEDTXkDh1gfAAAAQm91bmRlZFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmS5NLoodYMAAAAFJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja1gDAAAAZGVmTSUCTT0Ch1gSAAAAUmVzdHJpY3Rpb25UcmFja2VyWAUAAABjbGFzc038A01FBIdYHQAAAFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50WAMAAABkZWZNGgRNLwSHWBIAAABXcml0ZUltcGwuX19pbml0X19YAwAAAGRlZk2RA02UA4dYHgAAAF9Xcml0ZUtleWVkQnVuZGxlRG9Gbi5fX2luaXRfX1gDAAAAZGVmTdEDTdMDh1gTAAAAU2luay5maW5hbGl6ZV93cml0ZVgDAAAAZGVmTeICTQQDh1gWAAAAUmFuZ2VUcmFja2VyLnRyeV9zcGxpdFgDAAAAZGVmTX4BTaIBh1gYAAAAX1dyaXRlQnVuZGxlRG9Gbi5wcm9jZXNzWAMAAABkZWZNwwNNyAOHWBAAAABTaW5rLm9wZW5fd3JpdGVyWAMAAABkZWZN1gJN4QKHWBgAAABSZWFkLl9pbmZlcl9vdXRwdXRfY29kZXJYAwAAAGRlZk03A008A4dYIgAAAF9Xcml0ZUtleWVkQnVuZGxlRG9Gbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk3UA03WA4dYDAAAAFJhbmdlVHJhY2tlclgFAAAAY2xhc3NLzE09AodYGwAAAFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvblgDAAAAZGVmTT8BTUIBh1gdAAAAX1dyaXRlQnVuZGxlRG9Gbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk3AA03CA4dYEgAAAFJlYWQuZ2V0X3dpbmRvd2luZ1gDAAAAZGVmTTQDTTYDh1gRAAAAUmVhZC5kaXNwbGF5X2RhdGFYAwAAAGRlZk09A01BA4dYEAAAAF9Xcml0ZUJ1bmRsZURvRm5YBQAAAGNsYXNzTbcDTc0Dh1gEAAAAU2lua1gFAAAAY2xhc3NNPwJNBAOHWBIAAABCb3VuZGVkU291cmNlLnJlYWRYAwAAAGRlZkujS7+HWAkAAABXcml0ZUltcGxYBQAAAGNsYXNzTY4DTbUDh1gMAAAAV3JpdGVyLndyaXRlWAMAAABkZWZNEwNNFgOHWAUAAABXcml0ZVgFAAAAY2xhc3NNVQNNjAOHWBgAAABCb3VuZGVkU291cmNlLmlzX2JvdW5kZWRYAwAAAGRlZkvIS8qHWAYAAABXcml0ZXJYBQAAAGNsYXNzTQYDTSEDh1gEAAAAUmVhZFgFAAAAY2xhc3NNIwNNTQOHWAwAAABXcml0ZXIuY2xvc2VYAwAAAGRlZk0XA00hA4dYGgAAAFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZNQwFNRgGHWBwAAABSZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNQgNNSQOHWA8AAABfZmluYWxpemVfd3JpdGVYAwAAAGRlZk3fA03rA4dYGQAAAF9Xcml0ZUJ1bmRsZURvRm4uX19pbml0X19YAwAAAGRlZk28A02/A4dYIQAAAFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvblgDAAAAZGVmTV0BTWkBh1geAAAAX1dyaXRlQnVuZGxlRG9Gbi5maW5pc2hfYnVuZGxlWAMAAABkZWZNyQNNzQOHWB0AAABSZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZVgDAAAAZGVmTTAETUUEh1gQAAAAV3JpdGVJbXBsLmV4cGFuZFgDAAAAZGVmTZUDTbUDh1gMAAAAV3JpdGUuZXhwYW5kWAMAAABkZWZNfgNNjAOHWA0AAABCb3VuZGVkU291cmNlWAUAAABjbGFzc0tRS8qHWA0AAABSZWFkLl9faW5pdF9fWAMAAABkZWZNJgNNLgOHWBkAAABfUm91bmRSb2JpbktleUZuLl9faW5pdF9fWAMAAABkZWZN7wNN8QOHWBAAAABfUm91bmRSb2JpbktleUZuWAUAAABjbGFzc03tA036A4dYCwAAAFJlYWQuZXhwYW5kWAMAAABkZWZNLwNNMwOHWCEAAABSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25YAwAAAGRlZk1qAU19AYdYCgAAAFNvdXJjZUJhc2VYBQAAAGNsYXNzS0tLT4dYFQAAAFNpbmsuaW5pdGlhbGl6ZV93cml0ZVgDAAAAZGVmTccCTdUCh1gWAAAAUmFuZ2VUcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmTUcBTVwBh1gmAAAAUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25YAwAAAGRlZk0IBE0ZBIdYGwAAAEJvdW5kZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZVgDAAAAZGVmS3VLgYdYEgAAAFdyaXRlLmRpc3BsYXlfZGF0YVgDAAAAZGVmTXoDTX0Dh1gdAAAAX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuLnByb2Nlc3NYAwAAAGRlZk3XA03dA4dYEwAAAEJvdW5kZWRTb3VyY2Uuc3BsaXRYAwAAAGRlZkuCS5KHWB0AAABfUm91bmRSb2JpbktleUZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTfIDTfQDh3V9ctoBAAAoWCIAAABCb3VuZGVkU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyWBUAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2Vy2wEAAFgeAAAAUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkatsBAABYHgAAAFJlYWQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmrbAQAAWBkAAABSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzatsBAABYEgAAAFJlYWQuZ2V0X3dpbmRvd2luZ2rbAQAAWDAAAABSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tq2wEAAFgSAAAAUmVzdHJpY3Rpb25UcmFja2VyatsBAABYHQAAAFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50atsBAABYEgAAAEJvdW5kZWRTb3VyY2UucmVhZGrbAQAAWBYAAABSYW5nZVRyYWNrZXIudHJ5X3NwbGl0atsBAABYEAAAAFNpbmsub3Blbl93cml0ZXJq2wEAAFgmAAAAUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25q2wEAAFgMAAAAUmFuZ2VUcmFja2VyatsBAABYGwAAAFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmrbAQAAWA0AAABCb3VuZGVkU291cmNlatsBAABYEQAAAFJlYWQuZGlzcGxheV9kYXRhatsBAABYBAAAAFNpbmtq2wEAAFgTAAAAU2luay5maW5hbGl6ZV93cml0ZWrbAQAAWAwAAABXcml0ZXIud3JpdGVq2wEAAFgFAAAAV3JpdGVq2wEAAFgYAAAAQm91bmRlZFNvdXJjZS5pc19ib3VuZGVkatsBAABYBgAAAFdyaXRlcmrbAQAAWAQAAABSZWFkatsBAABYDAAAAFdyaXRlci5jbG9zZWrbAQAAWBoAAABSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmrbAQAAWBwAAABSZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyatsBAABYIQAAAFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbmrbAQAAWB0AAABSZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZWrbAQAAWAwAAABXcml0ZS5leHBhbmRq2wEAAFgLAAAAUmVhZC5leHBhbmRq2wEAAFghAAAAUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uatsBAABYFQAAAFNpbmsuaW5pdGlhbGl6ZV93cml0ZWrbAQAAWBYAAABSYW5nZVRyYWNrZXIudHJ5X2NsYWltatsBAABYGwAAAEJvdW5kZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZWrbAQAAWBIAAABXcml0ZS5kaXNwbGF5X2RhdGFq2wEAAFgTAAAAQm91bmRlZFNvdXJjZS5zcGxpdGrbAQAAWB8AAABCb3VuZGVkU291cmNlLmdldF9yYW5nZV90cmFja2VyatsBAAB1aIpYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXLcAQAAhYFy3QEAAH1y3gEAAGJ0ct8BAABVG2FwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcChYSRkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGltZXN0YW1wIHV0aWxpdGllcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGRhdGV0aW1lCgoKY2xhc3MgVGltZXN0YW1wKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIFVuaXggc2Vjb25kIHRpbWVzdGFtcCB3aXRoIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5LgoKICBDYW4gYmUgdHJlYXRlZCBpbiBjb21tb24gdGltZXN0YW1wIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcyBhIG51bWVyaWMgdHlwZS4KCiAgSW50ZXJuYWxseSBzdG9yZXMgYSB0aW1lIGludGVydmFsIGFzIGFuIGludCBvZiBtaWNyb3NlY29uZHMuIFRoaXMgc3RyYXRlZ3kKICBpcyBuZWNlc3Nhcnkgc2luY2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGxvc2UgcHJlY2lzaW9uIHdoZW4gc3RvcmluZyB2YWx1ZXMsCiAgZXNwZWNpYWxseSBhZnRlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLCAxMDAwMDAwMCAlIDAuMSBldmFsdWF0ZXMKICB0byAwLjA5OTk5OTk5OTQ0NDg4ODUpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0wLCBtaWNyb3M9MCk6CiAgICBzZWxmLm1pY3JvcyA9IGludChzZWNvbmRzICogMTAwMDAwMCkgKyBpbnQobWljcm9zKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG9mKHNlY29uZHMpOgogICAgIiIiUmV0dXJuIHRoZSBUaW1lc3RhbXAgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4KCiAgICBJZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBhIFRpbWVzdGFtcCwgdGhlIGlucHV0IGl0c2VsZiB3aWxsIGJlIHJldHVybmVkLgoKICAgIEFyZ3M6CiAgICAgIHNlY29uZHM6IE51bWJlciBvZiBzZWNvbmRzIGFzIGludCwgZmxvYXQgb3IgVGltZXN0YW1wLgoKICAgIFJldHVybnM6CiAgICAgIENvcnJlc3BvbmRpbmcgVGltZXN0YW1wIG9iamVjdC4KICAgICIiIgoKICAgIGlmIGlzaW5zdGFuY2Uoc2Vjb25kcywgRHVyYXRpb24pOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0NhblwndCBpbnRlcnByZXQgJXMgYXMgVGltZXN0YW1wLicgJSBzZWNvbmRzKQogICAgaWYgaXNpbnN0YW5jZShzZWNvbmRzLCBUaW1lc3RhbXApOgogICAgICByZXR1cm4gc2Vjb25kcwogICAgcmV0dXJuIFRpbWVzdGFtcChzZWNvbmRzKQoKICBkZWYgcHJlZGVjZXNzb3Ioc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHRpbWVzdGFtcCBzbWFsbGVyIHRoYW4gc2VsZi4iIiIKICAgIHJldHVybiBUaW1lc3RhbXAobWljcm9zPXNlbGYubWljcm9zIC0gMSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgbWljcm9zID0gc2VsZi5taWNyb3MKICAgIHNpZ24gPSAnJwogICAgaWYgbWljcm9zIDwgMDoKICAgICAgc2lnbiA9ICctJwogICAgICBtaWNyb3MgPSAtbWljcm9zCiAgICBpbnRfcGFydCA9IG1pY3JvcyAvIDEwMDAwMDAKICAgIGZyYWNfcGFydCA9IG1pY3JvcyAlIDEwMDAwMDAKICAgIGlmIGZyYWNfcGFydDoKICAgICAgcmV0dXJuICdUaW1lc3RhbXAoJXMlZC4lMDZkKScgJSAoc2lnbiwgaW50X3BhcnQsIGZyYWNfcGFydCkKICAgIHJldHVybiAnVGltZXN0YW1wKCVzJWQpJyAlIChzaWduLCBpbnRfcGFydCkKCiAgZGVmIHRvX3V0Y19kYXRldGltZShzZWxmKToKICAgIGVwb2NoID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgwKQogICAgIyBXZSBjYW4ndCBlYXNpbHkgY29uc3RydWN0IGEgZGF0ZXRpbWUgb2JqZWN0IGZyb20gbWljcm9zZWNvbmRzLCBzbyB3ZQogICAgIyBjcmVhdGUgb25lIGF0IHRoZSBlcG9jaCBhbmQgYWRkIGFuIGFwcHJvcHJpYXRlIHRpbWVkZWx0YSBpbnRlcnZhbC4KICAgIHJldHVybiBlcG9jaCArIGRhdGV0aW1lLnRpbWVkZWx0YShtaWNyb3NlY29uZHM9c2VsZi5taWNyb3MpCgogIGRlZiBpc29mb3JtYXQoc2VsZik6CiAgICAjIEFwcGVuZCAnWicgZm9yIFVUQyB0aW1lem9uZS4KICAgIHJldHVybiBzZWxmLnRvX3V0Y19kYXRldGltZSgpLmlzb2Zvcm1hdCgpICsgJ1onCgogIGRlZiBfX2Zsb2F0X18oc2VsZik6CiAgICAjIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICByZXR1cm4gZmxvYXQoc2VsZi5taWNyb3MpIC8gMTAwMDAwMAoKICBkZWYgX19pbnRfXyhzZWxmKToKICAgICMgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBtYXkgaGF2ZSBsb3N0IHByZWNpc2lvbi4KICAgIHJldHVybiBzZWxmLm1pY3JvcyAvIDEwMDAwMDAKCiAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgogICAgIyBBbGxvdyBjb21wYXJpc29ucyBiZXR3ZWVuIER1cmF0aW9uIGFuZCBUaW1lc3RhbXAgdmFsdWVzLgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIER1cmF0aW9uKToKICAgICAgb3RoZXIgPSBUaW1lc3RhbXAub2Yob3RoZXIpCiAgICByZXR1cm4gY21wKHNlbGYubWljcm9zLCBvdGhlci5taWNyb3MpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYubWljcm9zKQoKICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIFRpbWVzdGFtcChtaWNyb3M9c2VsZi5taWNyb3MgKyBvdGhlci5taWNyb3MpCgogIGRlZiBfX3JhZGRfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZiArIG90aGVyCgogIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gVGltZXN0YW1wKG1pY3Jvcz1zZWxmLm1pY3JvcyAtIG90aGVyLm1pY3JvcykKCiAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIpOgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgJSBvdGhlci5taWNyb3MpCgoKTUlOX1RJTUVTVEFNUCA9IFRpbWVzdGFtcChtaWNyb3M9LTB4N2ZmZmZmZmZmZmZmZmZmZiAtIDEpCk1BWF9USU1FU1RBTVAgPSBUaW1lc3RhbXAobWljcm9zPTB4N2ZmZmZmZmZmZmZmZmZmZikKCgpjbGFzcyBEdXJhdGlvbihvYmplY3QpOgogICIiIlJlcHJlc2VudHMgYSBzZWNvbmQgZHVyYXRpb24gd2l0aCBtaWNyb3NlY29uZCBncmFudWxhcml0eS4KCiAgQ2FuIGJlIHRyZWF0ZWQgaW4gY29tbW9uIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcyBhIG51bWVyaWMgdHlwZS4KCiAgSW50ZXJuYWxseSBzdG9yZXMgYSB0aW1lIGludGVydmFsIGFzIGFuIGludCBvZiBtaWNyb3NlY29uZHMuIFRoaXMgc3RyYXRlZ3kKICBpcyBuZWNlc3Nhcnkgc2luY2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGxvc2UgcHJlY2lzaW9uIHdoZW4gc3RvcmluZyB2YWx1ZXMsCiAgZXNwZWNpYWxseSBhZnRlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLCAxMDAwMDAwMCAlIDAuMSBldmFsdWF0ZXMKICB0byAwLjA5OTk5OTk5OTQ0NDg4ODUpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0wLCBtaWNyb3M9MCk6CiAgICBzZWxmLm1pY3JvcyA9IGludChzZWNvbmRzICogMTAwMDAwMCkgKyBpbnQobWljcm9zKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG9mKHNlY29uZHMpOgogICAgIiIiUmV0dXJuIHRoZSBEdXJhdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guCgogICAgSWYgdGhlIGlucHV0IGlzIGFscmVhZHkgYSBEdXJhdGlvbiwgdGhlIGlucHV0IGl0c2VsZiB3aWxsIGJlIHJldHVybmVkLgoKICAgIEFyZ3M6CiAgICAgIHNlY29uZHM6IE51bWJlciBvZiBzZWNvbmRzIGFzIGludCwgZmxvYXQgb3IgRHVyYXRpb24uCgogICAgUmV0dXJuczoKICAgICAgQ29ycmVzcG9uZGluZyBEdXJhdGlvbiBvYmplY3QuCiAgICAiIiIKCiAgICBpZiBpc2luc3RhbmNlKHNlY29uZHMsIFRpbWVzdGFtcCk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2FuXCd0IGludGVycHJldCAlcyBhcyBEdXJhdGlvbi4nICUgc2Vjb25kcykKICAgIGlmIGlzaW5zdGFuY2Uoc2Vjb25kcywgRHVyYXRpb24pOgogICAgICByZXR1cm4gc2Vjb25kcwogICAgcmV0dXJuIER1cmF0aW9uKHNlY29uZHMpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIG1pY3JvcyA9IHNlbGYubWljcm9zCiAgICBzaWduID0gJycKICAgIGlmIG1pY3JvcyA8IDA6CiAgICAgIHNpZ24gPSAnLScKICAgICAgbWljcm9zID0gLW1pY3JvcwogICAgaW50X3BhcnQgPSBtaWNyb3MgLyAxMDAwMDAwCiAgICBmcmFjX3BhcnQgPSBtaWNyb3MgJSAxMDAwMDAwCiAgICBpZiBmcmFjX3BhcnQ6CiAgICAgIHJldHVybiAnRHVyYXRpb24oJXMlZC4lMDZkKScgJSAoc2lnbiwgaW50X3BhcnQsIGZyYWNfcGFydCkKICAgIHJldHVybiAnRHVyYXRpb24oJXMlZCknICUgKHNpZ24sIGludF9wYXJ0KQoKICBkZWYgX19mbG9hdF9fKHNlbGYpOgogICAgIyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHZhbHVlIG1heSBoYXZlIGxvc3QgcHJlY2lzaW9uLgogICAgcmV0dXJuIGZsb2F0KHNlbGYubWljcm9zKSAvIDEwMDAwMDAKCiAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgogICAgIyBBbGxvdyBjb21wYXJpc29ucyBiZXR3ZWVuIER1cmF0aW9uIGFuZCBUaW1lc3RhbXAgdmFsdWVzLgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVzdGFtcCk6CiAgICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gY21wKHNlbGYubWljcm9zLCBvdGhlci5taWNyb3MpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYubWljcm9zKQoKICBkZWYgX19uZWdfXyhzZWxmKToKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9LXNlbGYubWljcm9zKQoKICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICByZXR1cm4gb3RoZXIgKyBzZWxmCiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvcz1zZWxmLm1pY3JvcyArIG90aGVyLm1pY3JvcykKCiAgZGVmIF9fcmFkZF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmICsgb3RoZXIKCiAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgLSBvdGhlci5taWNyb3MpCgogIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gLShzZWxmIC0gb3RoZXIpCgogIGRlZiBfX211bF9fKHNlbGYsIG90aGVyKToKICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zICogb3RoZXIubWljcm9zIC8gMTAwMDAwMCkKCiAgZGVmIF9fcm11bF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmICogb3RoZXIKCiAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIpOgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgJSBvdGhlci5taWNyb3MpCgoKIyBUaGUgbWluaW11bSBncmFudWxhcml0eSAvIGludGVydmFsIGV4cHJlc3NpYmxlIGluIGEgVGltZXN0YW1wIC8gRHVyYXRpb24KIyBvYmplY3QuClRJTUVfR1JBTlVMQVJJVFkgPSBEdXJhdGlvbihtaWNyb3M9MSkKfXLgAQAAKFgRAAAARHVyYXRpb24uX19yc3ViX19YAwAAAGRlZkvGS8iHWBAAAABEdXJhdGlvbi5fX211bF9fWAMAAABkZWZLyUvMh1gJAAAAVGltZXN0YW1wWAUAAABjbGFzc0scS3aHWBEAAABEdXJhdGlvbi5fX2hhc2hfX1gDAAAAZGVmS7NLtYdYEgAAAER1cmF0aW9uLl9fZmxvYXRfX1gDAAAAZGVmS6lLrIdYEgAAAFRpbWVzdGFtcC5fX2luaXRfX1gDAAAAZGVmSydLKYdYEwAAAFRpbWVzdGFtcC5pc29mb3JtYXRYAwAAAGRlZktTS1aHWBMAAABUaW1lc3RhbXAuX19mbG9hdF9fWAMAAABkZWZLV0tah1gRAAAAVGltZXN0YW1wLl9fbW9kX19YAwAAAGRlZktzS3aHWBEAAABUaW1lc3RhbXAuX19hZGRfX1gDAAAAZGVmS2hLa4dYEQAAAER1cmF0aW9uLl9faW5pdF9fWAMAAABkZWZLh0uJh1gSAAAAVGltZXN0YW1wLl9fcmFkZF9fWAMAAABkZWZLbEtuh1gMAAAAVGltZXN0YW1wLm9mWAMAAABkZWZLKks8h1gRAAAARHVyYXRpb24uX19ybXVsX19YAwAAAGRlZkvNS8+HWBEAAABEdXJhdGlvbi5fX3JhZGRfX1gDAAAAZGVmS79LwYdYEAAAAER1cmF0aW9uLl9fbW9kX19YAwAAAGRlZkvQS9OHWBAAAABEdXJhdGlvbi5fX25lZ19fWAMAAABkZWZLtku4h1gQAAAARHVyYXRpb24uX19hZGRfX1gDAAAAZGVmS7lLvodYEgAAAFRpbWVzdGFtcC5fX2hhc2hfX1gDAAAAZGVmS2VLZ4dYEQAAAFRpbWVzdGFtcC5fX3N1Yl9fWAMAAABkZWZLb0tyh1gZAAAAVGltZXN0YW1wLnRvX3V0Y19kYXRldGltZVgDAAAAZGVmS01LUodYEgAAAFRpbWVzdGFtcC5fX3JlcHJfX1gDAAAAZGVmS0FLTIdYFQAAAFRpbWVzdGFtcC5wcmVkZWNlc3NvclgDAAAAZGVmSz1LQIdYEAAAAER1cmF0aW9uLl9fY21wX19YAwAAAGRlZkutS7KHWBAAAABEdXJhdGlvbi5fX3N1Yl9fWAMAAABkZWZLwkvFh1gRAAAARHVyYXRpb24uX19yZXByX19YAwAAAGRlZkudS6iHWBEAAABUaW1lc3RhbXAuX19jbXBfX1gDAAAAZGVmS19LZIdYCAAAAER1cmF0aW9uWAUAAABjbGFzc0t8S9OHWBEAAABUaW1lc3RhbXAuX19pbnRfX1gDAAAAZGVmS1tLXodYCwAAAER1cmF0aW9uLm9mWAMAAABkZWZLikuch3V9cuEBAAAoWAkAAABUaW1lc3RhbXBYGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcHLiAQAAWAwAAABUaW1lc3RhbXAub2Zq4gEAAFgZAAAAVGltZXN0YW1wLnRvX3V0Y19kYXRldGltZWriAQAAWBUAAABUaW1lc3RhbXAucHJlZGVjZXNzb3Jq4gEAAFgIAAAARHVyYXRpb25q4gEAAFgTAAAAVGltZXN0YW1wLmlzb2Zvcm1hdGriAQAAWAsAAABEdXJhdGlvbi5vZmriAQAAdWiKWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXBy4wEAAIWBcuQBAAB9cuUBAABidHLmAQAAVRJhcGFjaGVfYmVhbS5wdmFsdWUoWPlDAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBWYWx1ZSwgUENvbGxlY3Rpb246IG9uZSBub2RlIG9mIGEgZGF0YWZsb3cgZ3JhcGguCgpBIG5vZGUgb2YgYSBkYXRhZmxvdyBwcm9jZXNzaW5nIGdyYXBoIGlzIGEgUFZhbHVlLiBDdXJyZW50bHksIHRoZXJlIGlzIG9ubHkKb25lIHR5cGU6IFBDb2xsZWN0aW9uIChhIHBvdGVudGlhbGx5IHZlcnkgbGFyZ2Ugc2V0IG9mIGFyYml0cmFyeSB2YWx1ZXMpLgpPbmNlIGNyZWF0ZWQsIGEgUFZhbHVlIGJlbG9uZ3MgdG8gYSBwaXBlbGluZSBhbmQgaGFzIGFuIGFzc29jaWF0ZWQKdHJhbnNmb3JtIChvZiB0eXBlIFBUcmFuc2Zvcm0pLCB3aGljaCBkZXNjcmliZXMgaG93IHRoZSB2YWx1ZSB3aWxsIGJlCnByb2R1Y2VkIHdoZW4gdGhlIHBpcGVsaW5lIGdldHMgZXhlY3V0ZWQuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpdGVydG9vbHMKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCgpfX2FsbF9fID0gWwogICAgJ1BDb2xsZWN0aW9uJywKICAgICdUYWdnZWRPdXRwdXQnLAogICAgJ0FzU2luZ2xldG9uJywKICAgICdBc0l0ZXInLAogICAgJ0FzTGlzdCcsCiAgICAnQXNEaWN0JywKICAgICdFbXB0eVNpZGVJbnB1dCcsCl0KCgpjbGFzcyBQVmFsdWUob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBQQ29sbGVjdGlvbi4KCiAgRGF0YWZsb3cgdXNlcnMgc2hvdWxkIG5vdCBjb25zdHJ1Y3QgUFZhbHVlIG9iamVjdHMgZGlyZWN0bHkgaW4gdGhlaXIKICBwaXBlbGluZXMuCgogIEEgUFZhbHVlIGhhcyB0aGUgZm9sbG93aW5nIG1haW4gY2hhcmFjdGVyaXN0aWNzOgogICAgKDEpIEJlbG9uZ3MgdG8gYSBwaXBlbGluZS4gQWRkZWQgZHVyaW5nIG9iamVjdCBpbml0aWFsaXphdGlvbi4KICAgICgyKSBIYXMgYSB0cmFuc2Zvcm0gdGhhdCBjYW4gY29tcHV0ZSB0aGUgdmFsdWUgaWYgZXhlY3V0ZWQuCiAgICAoMykgSGFzIGEgdmFsdWUgd2hpY2ggaXMgbWVhbmluZ2Z1bCBpZiB0aGUgdHJhbnNmb3JtIHdhcyBleGVjdXRlZC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lLCB0YWc9Tm9uZSwgZWxlbWVudF90eXBlPU5vbmUsIHdpbmRvd2luZz1Ob25lKToKICAgICIiIkluaXRpYWxpemVzIGEgUFZhbHVlIHdpdGggYWxsIGFyZ3VtZW50cyBoaWRkZW4gYmVoaW5kIGtleXdvcmQgYXJndW1lbnRzLgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lOiBQaXBlbGluZSBvYmplY3QgZm9yIHRoaXMgUFZhbHVlLgogICAgICB0YWc6IFRhZyBvZiB0aGlzIFBWYWx1ZS4KICAgICAgZWxlbWVudF90eXBlOiBUaGUgdHlwZSBvZiB0aGlzIFBWYWx1ZS4KICAgICIiIgogICAgc2VsZi5waXBlbGluZSA9IHBpcGVsaW5lCiAgICBzZWxmLnRhZyA9IHRhZwogICAgc2VsZi5lbGVtZW50X3R5cGUgPSBlbGVtZW50X3R5cGUKICAgICMgVGhlIEFwcGxpZWRQVHJhbnNmb3JtIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24gb2YgdGhlIFBUcmFuc2Zvcm0KICAgICMgZ2VuZXJhdGluZyB0aGlzIFBWYWx1ZS4gVGhlIGZpZWxkIGdldHMgaW5pdGlhbGl6ZWQgd2hlbiBhIHRyYW5zZm9ybQogICAgIyBnZXRzIGFwcGxpZWQuCiAgICBzZWxmLnByb2R1Y2VyID0gTm9uZQogICAgaWYgd2luZG93aW5nOgogICAgICBzZWxmLl93aW5kb3dpbmcgPSB3aW5kb3dpbmcKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RyX2ludGVybmFsKCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgYXQgJXM+JyAlIChzZWxmLl9zdHJfaW50ZXJuYWwoKSwgaGV4KGlkKHNlbGYpKSkKCiAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZik6CiAgICByZXR1cm4gIiVzWyVzLiVzXSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9kdWNlci5mdWxsX2xhYmVsIGlmIHNlbGYucHJvZHVjZXIgZWxzZSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFnKQoKICBkZWYgYXBwbHkoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIkFwcGxpZXMgYSB0cmFuc2Zvcm0gb3IgY2FsbGFibGUgdG8gYSBQVmFsdWUuCgogICAgQXJnczoKICAgICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMuCgogICAgVGhlIG1ldGhvZCB3aWxsIGluc2VydCB0aGUgcHZhbHVlIGFzIHRoZSBuZXh0IGFyZ3VtZW50IGZvbGxvd2luZyBhbgogICAgb3B0aW9uYWwgZmlyc3QgbGFiZWwgYW5kIGEgdHJhbnNmb3JtL2NhbGxhYmxlIG9iamVjdC4gSXQgd2lsbCBjYWxsIHRoZQogICAgcGlwZWxpbmUuYXBwbHkoKSBtZXRob2Qgd2l0aCB0aGlzIG1vZGlmaWVkIGFyZ3VtZW50IGxpc3QuCiAgICAiIiIKICAgIGFyZ2xpc3QgPSBsaXN0KGFyZ3MpCiAgICBhcmdsaXN0Lmluc2VydCgxLCBzZWxmKQogICAgcmV0dXJuIHNlbGYucGlwZWxpbmUuYXBwbHkoKmFyZ2xpc3QsICoqa3dhcmdzKQoKICBkZWYgX19vcl9fKHNlbGYsIHB0cmFuc2Zvcm0pOgogICAgcmV0dXJuIHNlbGYucGlwZWxpbmUuYXBwbHkocHRyYW5zZm9ybSwgc2VsZikKCgpjbGFzcyBQQ29sbGVjdGlvbihQVmFsdWUpOgogICIiIkEgbXVsdGlwbGUgdmFsdWVzIChwb3RlbnRpYWxseSBodWdlKSBjb250YWluZXIuCgogIERhdGFmbG93IHVzZXJzIHNob3VsZCBub3QgY29uc3RydWN0IFBDb2xsZWN0aW9uIG9iamVjdHMgZGlyZWN0bHkgaW4gdGhlaXIKICBwaXBlbGluZXMuCiAgIiIiCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgUENvbGxlY3Rpb24pOgogICAgICByZXR1cm4gc2VsZi50YWcgPT0gb3RoZXIudGFnIGFuZCBzZWxmLnByb2R1Y2VyID09IG90aGVyLnByb2R1Y2VyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnRhZywgc2VsZi5wcm9kdWNlcikpCgogIEBwcm9wZXJ0eQogIGRlZiB3aW5kb3dpbmcoc2VsZik6CiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX3dpbmRvd2luZycpOgogICAgICBzZWxmLl93aW5kb3dpbmcgPSBzZWxmLnByb2R1Y2VyLnRyYW5zZm9ybS5nZXRfd2luZG93aW5nKAogICAgICAgICAgc2VsZi5wcm9kdWNlci5pbnB1dHMpCiAgICByZXR1cm4gc2VsZi5fd2luZG93aW5nCgogIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHVudXNlZF92ZXJzaW9uKToKICAgICMgUGlja2xpbmcgYSBQQ29sbGVjdGlvbiBpcyBhbG1vc3QgYWx3YXlzIHRoZSB3cm9uZyB0aGluZyB0byBkbywgYnV0IHdlCiAgICAjIGNhbid0IHByb2hpYml0IGl0IGFzIGl0IG9mdGVuIGdldHMgaW1wbGljaXRseSBwaWNrZWQgdXAgKGUuZy4gYXMgcGFydAogICAgIyBvZiBhIGNsb3N1cmUpLgogICAgcmV0dXJuIF9JbnZhbGlkVW5waWNrbGVkUENvbGxlY3Rpb24sICgpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuUENvbGxlY3Rpb24oCiAgICAgICAgdW5pcXVlX25hbWU9JyVkJXMuJXMnICUgKAogICAgICAgICAgICBsZW4oc2VsZi5wcm9kdWNlci5mdWxsX2xhYmVsKSwgc2VsZi5wcm9kdWNlci5mdWxsX2xhYmVsLCBzZWxmLnRhZyksCiAgICAgICAgY29kZXJfaWQ9cGlja2xlci5kdW1wcyhzZWxmLmVsZW1lbnRfdHlwZSksCiAgICAgICAgaXNfYm91bmRlZD1iZWFtX3J1bm5lcl9hcGlfcGIyLklzQm91bmRlZC5CT1VOREVELAogICAgICAgIHdpbmRvd2luZ19zdHJhdGVneV9pZD1jb250ZXh0LndpbmRvd2luZ19zdHJhdGVnaWVzLmdldF9pZCgKICAgICAgICAgICAgc2VsZi53aW5kb3dpbmcpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICAjIFByb2R1Y2VyIGFuZCB0YWcgd2lsbCBiZSBmaWxsZWQgaW4gbGF0ZXIsIHRoZSBrZXkgcG9pbnQgaXMgdGhhdCB0aGUKICAgICMgc2FtZSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHRoZSBzYW1lIHBjb2xsZWN0aW9uIGlkLgogICAgcmV0dXJuIFBDb2xsZWN0aW9uKAogICAgICAgIE5vbmUsCiAgICAgICAgZWxlbWVudF90eXBlPXBpY2tsZXIubG9hZHMocHJvdG8uY29kZXJfaWQpLAogICAgICAgIHdpbmRvd2luZz1jb250ZXh0LndpbmRvd2luZ19zdHJhdGVnaWVzLmdldF9ieV9pZCgKICAgICAgICAgICAgcHJvdG8ud2luZG93aW5nX3N0cmF0ZWd5X2lkKSkKCgpjbGFzcyBfSW52YWxpZFVucGlja2xlZFBDb2xsZWN0aW9uKG9iamVjdCk6CiAgcGFzcwoKCmNsYXNzIFBCZWdpbihQVmFsdWUpOgogICIiIkEgcGlwZWxpbmUgYmVnaW4gbWFya2VyIHVzZWQgYXMgaW5wdXQgdG8gY3JlYXRlL3JlYWQgdHJhbnNmb3Jtcy4KCiAgVGhlIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSB0byByZXByZXNlbnQgaW5wdXRzIHRvIENyZWF0ZSBhbmQgUmVhZAogIHRyYW5zZm9ybXMuIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUgdHJhbnNmb3JtcyB0aGF0IHVuaWZvcm1seSB0YWtlIFBWYWx1ZShzKQogIGFzIGlucHV0cy4KICAiIiIKICBwYXNzCgoKY2xhc3MgUERvbmUoUFZhbHVlKToKICAiIiJQRG9uZSBpcyB0aGUgb3V0cHV0IG9mIGEgdHJhbnNmb3JtIHRoYXQgaGFzIGEgdHJpdmlhbCByZXN1bHQgc3VjaCBhcyBXcml0ZS4KICAiIiIKICBwYXNzCgoKY2xhc3MgRG9PdXRwdXRzVHVwbGUob2JqZWN0KToKICAiIiJBbiBvYmplY3QgZ3JvdXBpbmcgdGhlIG11bHRpcGxlIG91dHB1dHMgb2YgYSBQYXJEbyBvciBGbGF0TWFwIHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lLCB0cmFuc2Zvcm0sIHRhZ3MsIG1haW5fdGFnKToKICAgIHNlbGYuX3BpcGVsaW5lID0gcGlwZWxpbmUKICAgIHNlbGYuX3RhZ3MgPSB0YWdzCiAgICBzZWxmLl9tYWluX3RhZyA9IG1haW5fdGFnCiAgICBzZWxmLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICMgVGhlIEFwcGx5UFRyYW5zZm9ybSBpbnN0YW5jZSBmb3IgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBtdWx0aSBGbGF0TWFwCiAgICAjIGdlbmVyYXRpbmcgdGhpcyB2YWx1ZS4gVGhlIGZpZWxkIGdldHMgaW5pdGlhbGl6ZWQgd2hlbiBhIHRyYW5zZm9ybQogICAgIyBnZXRzIGFwcGxpZWQuCiAgICBzZWxmLnByb2R1Y2VyID0gTm9uZQogICAgIyBEaWN0aW9uYXJ5IG9mIFBDb2xsZWN0aW9ucyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCB0YWdzLgogICAgc2VsZi5fcGNvbGxzID0ge30KCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcz4nICUgc2VsZi5fc3RyX2ludGVybmFsKCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgYXQgJXM+JyAlIChzZWxmLl9zdHJfaW50ZXJuYWwoKSwgaGV4KGlkKHNlbGYpKSkKCiAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZik6CiAgICByZXR1cm4gJyVzIG1haW5fdGFnPSVzIHRhZ3M9JXMgdHJhbnNmb3JtPSVzJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbWFpbl90YWcsIHNlbGYuX3RhZ3MsIHNlbGYuX3RyYW5zZm9ybSkKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgIiIiSXRlcmF0ZXMgb3ZlciB0YWdzIHJldHVybmluZyBmb3IgZWFjaCBjYWxsIGEgKHRhZywgcHZhbHVlKSBwYWlyLiIiIgogICAgaWYgc2VsZi5fbWFpbl90YWcgaXMgbm90IE5vbmU6CiAgICAgIHlpZWxkIHNlbGZbc2VsZi5fbWFpbl90YWddCiAgICBmb3IgdGFnIGluIHNlbGYuX3RhZ3M6CiAgICAgIHlpZWxkIHNlbGZbdGFnXQoKICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdGFnKToKICAgICMgU3BlY2lhbCBtZXRob2RzIHdoaWNoIG1heSBiZSBhY2Nlc3NlZCBiZWZvcmUgdGhlIG9iamVjdCBpcwogICAgIyBmdWxseSBjb25zdHJ1Y3RlZCAoZS5nLiBpbiB1bnBpY2tsaW5nKS4KICAgIGlmIHRhZ1s6Ml0gPT0gdGFnWy0yOl0gPT0gJ19fJzoKICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCB0YWcpCiAgICByZXR1cm4gc2VsZlt0YWddCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0YWcpOgogICAgIyBBY2NlcHQgaW50IHRhZ3Mgc28gdGhhdCB3ZSBjYW4gbG9vayBhdCBQYXJ0aXRpb24gdGFncyB3aXRoIHRoZQogICAgIyBzYW1lIGludHMgdGhhdCB3ZSB1c2VkIGluIHRoZSBwYXJ0aXRpb24gZnVuY3Rpb24uCiAgICAjIFRPRE8oZ2lsZGVhKTogQ29uc2lkZXIgcmVxdWlyaW5nIHN0cmluZy1iYXNlZCB0YWdzIGV2ZXJ5d2hlcmUuCiAgICAjIFRoaXMgd2lsbCByZXF1aXJlIGEgcGFydGl0aW9uIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmV0dXJuIGludHMuCiAgICBpZiBpc2luc3RhbmNlKHRhZywgaW50KToKICAgICAgdGFnID0gc3RyKHRhZykKICAgIGlmIHRhZyA9PSBzZWxmLl9tYWluX3RhZzoKICAgICAgdGFnID0gTm9uZQogICAgZWxpZiBzZWxmLl90YWdzIGFuZCB0YWcgbm90IGluIHNlbGYuX3RhZ3M6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiVGFnICclcycgaXMgbmVpdGhlciB0aGUgbWFpbiB0YWcgJyVzJyAiCiAgICAgICAgICAibm9yIGFueSBvZiB0aGUgdGFncyAlcyIgJSAoCiAgICAgICAgICAgICAgdGFnLCBzZWxmLl9tYWluX3RhZywgc2VsZi5fdGFncykpCiAgICAjIENoZWNrIGlmIHdlIGFjY2Vzc2VkIHRoaXMgdGFnIGJlZm9yZS4KICAgIGlmIHRhZyBpbiBzZWxmLl9wY29sbHM6CiAgICAgIHJldHVybiBzZWxmLl9wY29sbHNbdGFnXQoKICAgIGlmIHRhZyBpcyBub3QgTm9uZToKICAgICAgc2VsZi5fdHJhbnNmb3JtLm91dHB1dF90YWdzLmFkZCh0YWcpCiAgICAgIHBjb2xsID0gUENvbGxlY3Rpb24oc2VsZi5fcGlwZWxpbmUsIHRhZz10YWcpCiAgICAgICMgVHJhbnNmZXIgdGhlIHByb2R1Y2VyIGZyb20gdGhlIERvT3V0cHV0c1R1cGxlIHRvIHRoZSByZXN1bHRpbmcKICAgICAgIyBQQ29sbGVjdGlvbi4KICAgICAgcGNvbGwucHJvZHVjZXIgPSBzZWxmLnByb2R1Y2VyLnBhcnRzWzBdCiAgICAgICMgQWRkIHRoaXMgYXMgYW4gb3V0cHV0IHRvIGJvdGggdGhlIGlubmVyIFBhckRvIGFuZCB0aGUgb3V0ZXIgX011bHRpUGFyRG8KICAgICAgIyBQVHJhbnNmb3Jtcy4KICAgICAgaWYgdGFnIG5vdCBpbiBzZWxmLnByb2R1Y2VyLnBhcnRzWzBdLm91dHB1dHM6CiAgICAgICAgc2VsZi5wcm9kdWNlci5wYXJ0c1swXS5hZGRfb3V0cHV0KHBjb2xsLCB0YWcpCiAgICAgICAgc2VsZi5wcm9kdWNlci5hZGRfb3V0cHV0KHBjb2xsLCB0YWcpCiAgICBlbHNlOgogICAgICAjIE1haW4gb3V0cHV0IGlzIG91dHB1dCBvZiBpbm5lciBQYXJEby4KICAgICAgcGNvbGwgPSBzZWxmLnByb2R1Y2VyLnBhcnRzWzBdLm91dHB1dHNbTm9uZV0KICAgIHNlbGYuX3Bjb2xsc1t0YWddID0gcGNvbGwKICAgIHJldHVybiBwY29sbAoKCmNsYXNzIFRhZ2dlZE91dHB1dChvYmplY3QpOgogICIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB0YWdnZWQgdmFsdWUuCgogIFBhckRvLCBNYXAsIGFuZCBGbGF0TWFwIHRyYW5zZm9ybXMgY2FuIGVtaXQgdmFsdWVzIG9uIG11bHRpcGxlIG91dHB1dHMgd2hpY2gKICBhcmUgZGlzdGluZ3Vpc2hlZCBieSBzdHJpbmcgdGFncy4gVGhlIERvRm4gd2lsbCByZXR1cm4gcGxhaW4gdmFsdWVzCiAgaWYgaXQgd2FudHMgdG8gZW1pdCBvbiB0aGUgbWFpbiBvdXRwdXQgYW5kIFRhZ2dlZE91dHB1dCBvYmplY3RzCiAgaWYgaXQgd2FudHMgdG8gZW1pdCBhIHZhbHVlIG9uIGEgc3BlY2lmaWMgdGFnZ2VkIG91dHB1dC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgdmFsdWUpOgogICAgaWYgbm90IGlzaW5zdGFuY2UodGFnLCBiYXNlc3RyaW5nKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0F0dGVtcHRpbmcgdG8gY3JlYXRlIGEgVGFnZ2VkT3V0cHV0IHdpdGggbm9uLXN0cmluZyB0YWcgJXMnICUgdGFnKQogICAgc2VsZi50YWcgPSB0YWcKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQoKCmNsYXNzIEFzU2lkZUlucHV0KG9iamVjdCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhIFBDb2xsZWN0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIFdoZW4gYSBQQ29sbGVjdGlvbiBpcyBzdXBwbGllZCBhcyBhIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBpdCBpcwogIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSBob3cgdGhlIFBDb2xsZWN0aW9uIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZQogIGFzIGEgUFRyYW5zZm9ybSBzaWRlIGFyZ3VtZW50IChlLmcuIGluIHRoZSBmb3JtIG9mIGFuIGl0ZXJhYmxlLCBtYXBwaW5nLAogIG9yIHNpbmdsZSB2YWx1ZSkuICBUaGlzIGNsYXNzIGlzIHRoZSBzdXBlcmNsYXNzIG9mIGFsbCB0aGUgdmFyaW91cwogIG9wdGlvbnMsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS4gKFNlZSBpbnN0ZWFkIEFzU2luZ2xldG9uLAogIEFzSXRlciwgZXRjLikKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBjb2xsKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgc2lkZWlucHV0cwogICAgc2VsZi5wdmFsdWUgPSBwY29sbAogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSBzaWRlaW5wdXRzLmRlZmF1bHRfd2luZG93X21hcHBpbmdfZm4oCiAgICAgICAgcGNvbGwud2luZG93aW5nLndpbmRvd2ZuKQoKICBkZWYgX3ZpZXdfb3B0aW9ucyhzZWxmKToKICAgICIiIkludGVybmFsIG9wdGlvbnMgY29ycmVzcG9uZGluZyB0byBzcGVjaWZpYyB2aWV3LgoKICAgIEludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UgYnkgcnVubmVyIGltcGxlbWVudGF0aW9ucy4KCiAgICBSZXR1cm5zOgogICAgICBUdXBsZSBvZiBvcHRpb25zIGZvciB0aGUgZ2l2ZW4gdmlldy4KICAgICIiIgogICAgcmV0dXJuIHsnd2luZG93X21hcHBpbmdfZm4nOiBzZWxmLl93aW5kb3dfbWFwcGluZ19mbn0KCiAgQHByb3BlcnR5CiAgZGVmIGVsZW1lbnRfdHlwZShzZWxmKToKICAgIHJldHVybiB0eXBlaGludHMuQW55CgogICMgVE9ETyhyb2JlcnR3Yik6IEdldCByaWQgb2YgX2Zyb21fcnVudGltZV9pdGVyYWJsZSBhbmQgX3ZpZXdfb3B0aW9ucwogICMgaW4gZmF2b3Igb2YgX3NpZGVfaW5wdXRfZGF0YSgpLgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgdmlld19vcHRpb25zID0gc2VsZi5fdmlld19vcHRpb25zKCkKICAgIGZyb21fcnVudGltZV9pdGVyYWJsZSA9IHR5cGUoc2VsZikuX2Zyb21fcnVudGltZV9pdGVyYWJsZQogICAgcmV0dXJuIFNpZGVJbnB1dERhdGEoCiAgICAgICAgdXJucy5JVEVSQUJMRV9BQ0NFU1MsCiAgICAgICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4sCiAgICAgICAgbGFtYmRhIGl0ZXJhYmxlOiBmcm9tX3J1bnRpbWVfaXRlcmFibGUoaXRlcmFibGUsIHZpZXdfb3B0aW9ucyksCiAgICAgICAgc2VsZi5faW5wdXRfZWxlbWVudF9jb2RlcigpKQoKICBkZWYgX2lucHV0X2VsZW1lbnRfY29kZXIoc2VsZik6CiAgICByZXR1cm4gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHNlbGYucHZhbHVlLmVsZW1lbnRfdHlwZSksCiAgICAgICAgd2luZG93X2NvZGVyPXNlbGYucHZhbHVlLndpbmRvd2luZy53aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIHNlbGYuX3NpZGVfaW5wdXRfZGF0YSgpLnRvX3J1bm5lcl9hcGkoY29udGV4dCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIF9VbnBpY2tsZWRTaWRlSW5wdXQoCiAgICAgICAgU2lkZUlucHV0RGF0YS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpKQoKCmNsYXNzIF9VbnBpY2tsZWRTaWRlSW5wdXQoQXNTaWRlSW5wdXQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaWRlX2lucHV0X2RhdGEpOgogICAgc2VsZi5fZGF0YSA9IHNpZGVfaW5wdXRfZGF0YQogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSBzaWRlX2lucHV0X2RhdGEud2luZG93X21hcHBpbmdfZm4KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIHJldHVybiBvcHRpb25zWydkYXRhJ10udmlld19mbihpdCkKCiAgZGVmIF92aWV3X29wdGlvbnMoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdkYXRhJzogc2VsZi5fZGF0YSwKICAgICAgICAjIEZvciBub24tZm4tYXBpIHJ1bm5lcnMuCiAgICAgICAgJ3dpbmRvd19tYXBwaW5nX2ZuJzogc2VsZi5fZGF0YS53aW5kb3dfbWFwcGluZ19mbiwKICAgIH0KCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGF0YQoKCmNsYXNzIFNpZGVJbnB1dERhdGEob2JqZWN0KToKICAiIiJBbGwgb2YgdGhlIGRhdGEgYWJvdXQgYSBzaWRlIGlucHV0IGV4Y2VwdCBmb3IgdGhlIGJvdW5kIFBDb2xsZWN0aW9uLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBhY2Nlc3NfcGF0dGVybiwgd2luZG93X21hcHBpbmdfZm4sIHZpZXdfZm4sIGNvZGVyKToKICAgIHNlbGYuYWNjZXNzX3BhdHRlcm4gPSBhY2Nlc3NfcGF0dGVybgogICAgc2VsZi53aW5kb3dfbWFwcGluZ19mbiA9IHdpbmRvd19tYXBwaW5nX2ZuCiAgICBzZWxmLnZpZXdfZm4gPSB2aWV3X2ZuCiAgICBzZWxmLmNvZGVyID0gY29kZXIKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuU2lkZUlucHV0KAogICAgICAgIGFjY2Vzc19wYXR0ZXJuPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICB1cm49c2VsZi5hY2Nlc3NfcGF0dGVybiksCiAgICAgICAgdmlld19mbj1iZWFtX3J1bm5lcl9hcGlfcGIyLlNka0Z1bmN0aW9uU3BlYygKICAgICAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHVybj11cm5zLlBJQ0tMRURfUFlUSE9OX1ZJRVdGTiwKICAgICAgICAgICAgICAgIHBheWxvYWQ9cGlja2xlci5kdW1wcygoc2VsZi52aWV3X2ZuLCBzZWxmLmNvZGVyKSkpKSwKICAgICAgICB3aW5kb3dfbWFwcGluZ19mbj1iZWFtX3J1bm5lcl9hcGlfcGIyLlNka0Z1bmN0aW9uU3BlYygKICAgICAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHVybj11cm5zLlBJQ0tMRURfV0lORE9XX01BUFBJTkdfRk4sCiAgICAgICAgICAgICAgICBwYXlsb2FkPXBpY2tsZXIuZHVtcHMoc2VsZi53aW5kb3dfbWFwcGluZ19mbikpKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIHVudXNlZF9jb250ZXh0KToKICAgIGFzc2VydCBwcm90by52aWV3X2ZuLnNwZWMudXJuID09IHVybnMuUElDS0xFRF9QWVRIT05fVklFV0ZOCiAgICBhc3NlcnQgcHJvdG8ud2luZG93X21hcHBpbmdfZm4uc3BlYy51cm4gPT0gdXJucy5QSUNLTEVEX1dJTkRPV19NQVBQSU5HX0ZOCiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICBwcm90by5hY2Nlc3NfcGF0dGVybi51cm4sCiAgICAgICAgcGlja2xlci5sb2Fkcyhwcm90by53aW5kb3dfbWFwcGluZ19mbi5zcGVjLnBheWxvYWQpLAogICAgICAgICpwaWNrbGVyLmxvYWRzKHByb3RvLnZpZXdfZm4uc3BlYy5wYXlsb2FkKSkKCgpjbGFzcyBBc1NpbmdsZXRvbihBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhbiBlbnRpcmUgUENvbGxlY3Rpb24gaXMgdG8gYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIFdoZW4gYSBQQ29sbGVjdGlvbiBpcyBzdXBwbGllZCBhcyBhIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBpdCBpcwogIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBlbnRpcmUgUENvbGxlY3Rpb24gc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlCiAgYXMgYSBQVHJhbnNmb3JtIHNpZGUgYXJndW1lbnQgKGluIHRoZSBmb3JtIG9mIGFuIGl0ZXJhYmxlKSwgb3Igd2hldGhlciBqdXN0CiAgb25lIHZhbHVlIHNob3VsZCBiZSBwdWxsZWQgZnJvbSB0aGUgUENvbGxlY3Rpb24gYW5kIHN1cHBsaWVkIGFzIHRoZSBzaWRlCiAgYXJndW1lbnQgKGFzIGFuIG9yZGluYXJ5IHZhbHVlKS4KCiAgV3JhcHBpbmcgYSBQQ29sbGVjdGlvbiBzaWRlIGlucHV0IGFyZ3VtZW50IHRvIGEgUFRyYW5zZm9ybSBpbiB0aGlzIGNvbnRhaW5lcgogIChlLmcuLCBkYXRhLmFwcGx5KCdsYWJlbCcsIE15UFRyYW5zZm9ybSgpLCBBc1NpbmdsZXRvbihteV9zaWRlX2lucHV0KSApCiAgc2VsZWN0cyB0aGUgbGF0dGVyIGJlaGF2b3IuCgogIFRoZSBpbnB1dCBQQ29sbGVjdGlvbiBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgIHZhbHVlIHBlciB3aW5kb3csIHVubGVzcyBhCiAgZGVmYXVsdCBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgYmUgZW1wdHkuCiAgIiIiCiAgX05PX0RFRkFVTFQgPSBvYmplY3QoKQoKICBkZWYgX19pbml0X18oc2VsZiwgcGNvbGwsIGRlZmF1bHRfdmFsdWU9X05PX0RFRkFVTFQpOgogICAgc3VwZXIoQXNTaW5nbGV0b24sIHNlbGYpLl9faW5pdF9fKHBjb2xsKQogICAgc2VsZi5kZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FzU2luZ2xldG9uKCVzKScgJSBzZWxmLnB2YWx1ZQoKICBkZWYgX3ZpZXdfb3B0aW9ucyhzZWxmKToKICAgIGJhc2UgPSBzdXBlcihBc1NpbmdsZXRvbiwgc2VsZikuX3ZpZXdfb3B0aW9ucygpCiAgICBpZiBzZWxmLmRlZmF1bHRfdmFsdWUgIT0gQXNTaW5nbGV0b24uX05PX0RFRkFVTFQ6CiAgICAgIHJldHVybiBkaWN0KGJhc2UsIGRlZmF1bHQ9c2VsZi5kZWZhdWx0X3ZhbHVlKQogICAgcmV0dXJuIGJhc2UKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIGhlYWQgPSBsaXN0KGl0ZXJ0b29scy5pc2xpY2UoaXQsIDIpKQogICAgaWYgbm90IGhlYWQ6CiAgICAgIHJldHVybiBvcHRpb25zLmdldCgnZGVmYXVsdCcsIEVtcHR5U2lkZUlucHV0KCkpCiAgICBlbGlmIGxlbihoZWFkKSA9PSAxOgogICAgICByZXR1cm4gaGVhZFswXQogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUENvbGxlY3Rpb24gb2Ygc2l6ZSAlZCB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhY2Nlc3NlZCBhcyBhICcKICAgICAgICAnc2luZ2xldG9uIHZpZXcuIEZpcnN0IHR3byBlbGVtZW50cyBlbmNvdW50ZXJlZCBhcmUgIiVzIiwgIiVzIi4nICUgKAogICAgICAgICAgICBsZW4oaGVhZCksIHN0cihoZWFkWzBdKSwgc3RyKGhlYWRbMV0pKSkKCiAgQHByb3BlcnR5CiAgZGVmIGVsZW1lbnRfdHlwZShzZWxmKToKICAgIHJldHVybiBzZWxmLnB2YWx1ZS5lbGVtZW50X3R5cGUKCgpjbGFzcyBBc0l0ZXIoQXNTaWRlSW5wdXQpOgogICIiIk1hcmtlciBzcGVjaWZ5aW5nIHRoYXQgYW4gZW50aXJlIFBDb2xsZWN0aW9uIGlzIHRvIGJlIHVzZWQgYXMgYSBzaWRlIGlucHV0LgoKICBXaGVuIGEgUENvbGxlY3Rpb24gaXMgc3VwcGxpZWQgYXMgYSBzaWRlIGlucHV0IHRvIGEgUFRyYW5zZm9ybSwgaXQgaXMKICBuZWNlc3NhcnkgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZW50aXJlIFBDb2xsZWN0aW9uIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZQogIGFzIGEgUFRyYW5zZm9ybSBzaWRlIGFyZ3VtZW50IChpbiB0aGUgZm9ybSBvZiBhbiBpdGVyYWJsZSksIG9yIHdoZXRoZXIganVzdAogIG9uZSB2YWx1ZSBzaG91bGQgYmUgcHVsbGVkIGZyb20gdGhlIFBDb2xsZWN0aW9uIGFuZCBzdXBwbGllZCBhcyB0aGUgc2lkZQogIGFyZ3VtZW50IChhcyBhbiBvcmRpbmFyeSB2YWx1ZSkuCgogIFdyYXBwaW5nIGEgUENvbGxlY3Rpb24gc2lkZSBpbnB1dCBhcmd1bWVudCB0byBhIFBUcmFuc2Zvcm0gaW4gdGhpcyBjb250YWluZXIKICAoZS5nLiwgZGF0YS5hcHBseSgnbGFiZWwnLCBNeVBUcmFuc2Zvcm0oKSwgQXNJdGVyKG15X3NpZGVfaW5wdXQpICkgc2VsZWN0cyB0aGUKICBmb3JtZXIgYmVoYXZvci4KICAiIiIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdBc0l0ZXIoJXMpJyAlIHNlbGYucHZhbHVlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICByZXR1cm4gaXQKCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICB1cm5zLklURVJBQkxFX0FDQ0VTUywKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsYW1iZGEgaXRlcmFibGU6IGl0ZXJhYmxlLAogICAgICAgIHNlbGYuX2lucHV0X2VsZW1lbnRfY29kZXIoKSkKCiAgQHByb3BlcnR5CiAgZGVmIGVsZW1lbnRfdHlwZShzZWxmKToKICAgIHJldHVybiB0eXBlaGludHMuSXRlcmFibGVbc2VsZi5wdmFsdWUuZWxlbWVudF90eXBlXQoKCmNsYXNzIEFzTGlzdChBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhbiBlbnRpcmUgUENvbGxlY3Rpb24gaXMgdG8gYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIEludGVuZGVkIGZvciB1c2UgaW4gc2lkZS1hcmd1bWVudCBzcGVjaWZpY2F0aW9uLS0tdGhlIHNhbWUgcGxhY2VzIHdoZXJlCiAgQXNTaW5nbGV0b24gYW5kIEFzSXRlciBhcmUgdXNlZCwgYnV0IGZvcmNlcyBtYXRlcmlhbGl6YXRpb24gb2YgdGhpcwogIFBDb2xsZWN0aW9uIGFzIGEgbGlzdC4KCiAgQXJnczoKICAgIHBjb2xsOiBJbnB1dCBwY29sbGVjdGlvbi4KCiAgUmV0dXJuczoKICAgIEFuIEFzTGlzdC13cmFwcGVyIGFyb3VuZCBhIFBDb2xsZWN0aW9uIHdob3NlIG9uZSBlbGVtZW50IGlzIGEgbGlzdAogICAgY29udGFpbmluZyBhbGwgZWxlbWVudHMgaW4gcGNvbGwuCiAgIiIiCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICByZXR1cm4gbGlzdChpdCkKCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICB1cm5zLklURVJBQkxFX0FDQ0VTUywKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsaXN0LAogICAgICAgIHNlbGYuX2lucHV0X2VsZW1lbnRfY29kZXIoKSkKCgpjbGFzcyBBc0RpY3QoQXNTaWRlSW5wdXQpOgogICIiIk1hcmtlciBzcGVjaWZ5aW5nIGEgUENvbGxlY3Rpb24gdG8gYmUgdXNlZCBhcyBhbiBpbmRleGFibGUgc2lkZSBpbnB1dC4KCiAgSW50ZW5kZWQgZm9yIHVzZSBpbiBzaWRlLWFyZ3VtZW50IHNwZWNpZmljYXRpb24tLS10aGUgc2FtZSBwbGFjZXMgd2hlcmUKICBBc1NpbmdsZXRvbiBhbmQgQXNJdGVyIGFyZSB1c2VkLCBidXQgcmV0dXJucyBhbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3MKICBrZXkgbG9va3VwLgoKICBBcmdzOgogICAgcGNvbGw6IElucHV0IHBjb2xsZWN0aW9uLiBBbGwgZWxlbWVudHMgc2hvdWxkIGJlIGtleS12YWx1ZSBwYWlycyAoaS5lLgogICAgICAgMi10dXBsZXMpIHdpdGggdW5pcXVlIGtleXMuCgogIFJldHVybnM6CiAgICBBbiBBc0RpY3Qtd3JhcHBlciBhcm91bmQgYSBQQ29sbGVjdGlvbiB3aG9zZSBvbmUgZWxlbWVudCBpcyBhIGRpY3Qgd2l0aAogICAgICBlbnRyaWVzIGZvciB1bmlxdWVseS1rZXllZCBwYWlycyBpbiBwY29sbC4KICAiIiIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIHJldHVybiBkaWN0KGl0KQoKICBkZWYgX3NpZGVfaW5wdXRfZGF0YShzZWxmKToKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIHVybnMuSVRFUkFCTEVfQUNDRVNTLAogICAgICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIGRpY3QsCiAgICAgICAgc2VsZi5faW5wdXRfZWxlbWVudF9jb2RlcigpKQoKCmNsYXNzIEVtcHR5U2lkZUlucHV0KG9iamVjdCk6CiAgIiIiVmFsdWUgaW5kaWNhdGluZyB3aGVuIGEgc2luZ2xldG9uIHNpZGUgaW5wdXQgd2FzIGVtcHR5LgoKICBJZiBhIFBDb2xsZWN0aW9uIHdhcyBmdXJuaXNoZWQgYXMgYSBzaW5nbGV0b24gc2lkZSBpbnB1dCB0byBhIFBUcmFuc2Zvcm0sIGFuZAogIHRoYXQgUENvbGxlY3Rpb24gd2FzIGVtcHR5LCB0aGVuIHRoaXMgdmFsdWUgaXMgc3VwcGxpZWQgdG8gdGhlIERvRm4gaW4gdGhlCiAgcGxhY2Ugd2hlcmUgYSB2YWx1ZSBmcm9tIGEgbm9uLWVtcHR5IFBDb2xsZWN0aW9uIHdvdWxkIGhhdmUgZ29uZS4gVGhpcyBhbGVydHMKICB0aGUgRG9GbiB0aGF0IHRoZSBzaWRlIGlucHV0IFBDb2xsZWN0aW9uIHdhcyBlbXB0eS4gVXNlcnMgbWF5IHdhbnQgdG8gY2hlY2sKICB3aGV0aGVyIHNpZGUgaW5wdXQgdmFsdWVzIGFyZSBFbXB0eVNpZGVJbnB1dCwgYnV0IHRoZXkgd2lsbCB2ZXJ5IGxpa2VseSBuZXZlcgogIHdhbnQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB0aGVtc2VsdmVzLgogICIiIgogIHBhc3MKfXLnAQAAKFgWAAAAU2lkZUlucHV0RGF0YS5fX2luaXRfX1gDAAAAZGVmTVkBTV4Bh1gXAAAARG9PdXRwdXRzVHVwbGUuX19pdGVyX19YAwAAAGRlZkvIS86HWBcAAABEb091dHB1dHNUdXBsZS5fX3JlcHJfX1gDAAAAZGVmS8FLw4dYCwAAAEFzU2lkZUlucHV0WAUAAABjbGFzc00LAU1BAYdYBQAAAFBEb25lWAUAAABjbGFzc0upS62HWBkAAABBc1NpZGVJbnB1dC5fdmlld19vcHRpb25zWAMAAABkZWZNHAFNJQGHWBQAAABQQ29sbGVjdGlvbi5fX2hhc2hfX1gDAAAAZGVmS3dLeYdYFwAAAEFzSXRlci5fc2lkZV9pbnB1dF9kYXRhWAMAAABkZWZNuwFNwQGHWA0AAABQVmFsdWUuX19vcl9fWAMAAABkZWZLaEtqh1gqAAAAX1VucGlja2xlZFNpZGVJbnB1dC5fZnJvbV9ydW50aW1lX2l0ZXJhYmxlWAMAAABkZWZNSAFNSwGHWCAAAABBc1NpZGVJbnB1dC5faW5wdXRfZWxlbWVudF9jb2RlclgDAAAAZGVmTTUBTTkBh1gcAAAAX0ludmFsaWRVbnBpY2tsZWRQQ29sbGVjdGlvblgFAAAAY2xhc3NLm0udh1giAAAAQXNTaW5nbGV0b24uX2Zyb21fcnVudGltZV9pdGVyYWJsZVgDAAAAZGVmTZUBTaABh1gUAAAAUFZhbHVlLl9zdHJfaW50ZXJuYWxYAwAAAGRlZktUS1iHWAsAAABBc1NpbmdsZXRvblgFAAAAY2xhc3NNdgFNpAGHWBIAAABQQ29sbGVjdGlvbi5fX2VxX19YAwAAAGRlZktzS3aHWBMAAABBc0l0ZXIuZWxlbWVudF90eXBlWAMAAABkZWZNwgFNxQGHWBQAAABBc1NpbmdsZXRvbi5fX3JlcHJfX1gDAAAAZGVmTYwBTY4Bh1gcAAAAX1VucGlja2xlZFNpZGVJbnB1dC5fX2luaXRfX1gDAAAAZGVmTUQBTUcBh1gGAAAAQXNEaWN0WAUAAABjbGFzc03iAU38AYdYDgAAAEVtcHR5U2lkZUlucHV0WAUAAABjbGFzc03+AU0JAodYJAAAAF9VbnBpY2tsZWRTaWRlSW5wdXQuX3NpZGVfaW5wdXRfZGF0YVgDAAAAZGVmTVMBTVUBh1gZAAAAQXNTaWRlSW5wdXQudG9fcnVubmVyX2FwaVgDAAAAZGVmTToBTTwBh1gbAAAAUENvbGxlY3Rpb24uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZLkEuZh1gZAAAAUENvbGxlY3Rpb24uX19yZWR1Y2VfZXhfX1gDAAAAZGVmS4FLhodYGAAAAEFzU2lkZUlucHV0LmVsZW1lbnRfdHlwZVgDAAAAZGVmTSYBTSkBh1gVAAAAVGFnZ2VkT3V0cHV0Ll9faW5pdF9fWAMAAABkZWZNAwFNCQGHWA8AAABBc0l0ZXIuX19yZXByX19YAwAAAGRlZk20AU22AYdYGgAAAERvT3V0cHV0c1R1cGxlLl9fZ2V0aXRlbV9fWAMAAABkZWZL1kv4h1gPAAAAUFZhbHVlLl9faW5pdF9fWAMAAABkZWZLPEtNh1gPAAAAUFZhbHVlLl9fcmVwcl9fWAMAAABkZWZLUUtTh1gTAAAAX1VucGlja2xlZFNpZGVJbnB1dFgFAAAAY2xhc3NNQwFNVQGHWBkAAABBc1NpbmdsZXRvbi5fdmlld19vcHRpb25zWAMAAABkZWZNjwFNlAGHWB0AAABBc0l0ZXIuX2Zyb21fcnVudGltZV9pdGVyYWJsZVgDAAAAZGVmTbcBTboBh1gVAAAAUENvbGxlY3Rpb24ud2luZG93aW5nWAMAAABkZWZLekuAh1gaAAAARG9PdXRwdXRzVHVwbGUuX19nZXRhdHRyX19YAwAAAGRlZkvPS9WHWA0AAABTaWRlSW5wdXREYXRhWAUAAABjbGFzc01XAU10AYdYGwAAAFNpZGVJbnB1dERhdGEudG9fcnVubmVyX2FwaVgDAAAAZGVmTV8BTWsBh1gOAAAARG9PdXRwdXRzVHVwbGVYBQAAAGNsYXNzS69L+IdYCwAAAFBDb2xsZWN0aW9uWAUAAABjbGFzc0tsS5mHWBwAAABEb091dHB1dHNUdXBsZS5fc3RyX2ludGVybmFsWAMAAABkZWZLxEvHh1gdAAAAQXNEaWN0Ll9mcm9tX3J1bnRpbWVfaXRlcmFibGVYAwAAAGRlZk3yAU31AYdYDAAAAFRhZ2dlZE91dHB1dFgFAAAAY2xhc3NL+k0JAYdYBgAAAFBCZWdpblgFAAAAY2xhc3NLn0unh1gYAAAAQXNTaW5nbGV0b24uZWxlbWVudF90eXBlWAMAAABkZWZNoQFNpAGHWBcAAABBc0xpc3QuX3NpZGVfaW5wdXRfZGF0YVgDAAAAZGVmTdoBTeABh1gUAAAAQXNTaWRlSW5wdXQuX19pbml0X19YAwAAAGRlZk0WAU0bAYdYHQAAAEFzTGlzdC5fZnJvbV9ydW50aW1lX2l0ZXJhYmxlWAMAAABkZWZN1gFN2QGHWBkAAABQQ29sbGVjdGlvbi50b19ydW5uZXJfYXBpWAMAAABkZWZLh0uPh1gXAAAAQXNEaWN0Ll9zaWRlX2lucHV0X2RhdGFYAwAAAGRlZk32AU38AYdYDAAAAFBWYWx1ZS5hcHBseVgDAAAAZGVmS1lLZ4dYHAAAAEFzU2lkZUlucHV0Ll9zaWRlX2lucHV0X2RhdGFYAwAAAGRlZk0sAU00AYdYHQAAAFNpZGVJbnB1dERhdGEuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNbAFNdAGHWAYAAABBc0xpc3RYBQAAAGNsYXNzTccBTeABh1gGAAAAUFZhbHVlWAUAAABjbGFzc0swS2qHWAYAAABBc0l0ZXJYBQAAAGNsYXNzTaYBTcUBh1gWAAAARG9PdXRwdXRzVHVwbGUuX19zdHJfX1gDAAAAZGVmS75LwIdYIQAAAF9VbnBpY2tsZWRTaWRlSW5wdXQuX3ZpZXdfb3B0aW9uc1gDAAAAZGVmTUwBTVIBh1gOAAAAUFZhbHVlLl9fc3RyX19YAwAAAGRlZktOS1CHWBQAAABBc1NpbmdsZXRvbi5fX2luaXRfX1gDAAAAZGVmTYgBTYsBh1gbAAAAQXNTaWRlSW5wdXQuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNPQFNQQGHWBcAAABEb091dHB1dHNUdXBsZS5fX2luaXRfX1gDAAAAZGVmS7JLvYd1fXLoAQAAKFgGAAAAQXNEaWN0WBIAAABhcGFjaGVfYmVhbS5wdmFsdWVy6QEAAFgOAAAARW1wdHlTaWRlSW5wdXRq6QEAAFgLAAAAUENvbGxlY3Rpb25q6QEAAFgGAAAAQXNMaXN0aukBAABYGwAAAFBDb2xsZWN0aW9uLmZyb21fcnVubmVyX2FwaWrpAQAAWAYAAABBc0l0ZXJq6QEAAFgZAAAAUENvbGxlY3Rpb24udG9fcnVubmVyX2FwaWrpAQAAWAwAAABUYWdnZWRPdXRwdXRq6QEAAFgLAAAAQXNTaW5nbGV0b25q6QEAAHVoilgSAAAAYXBhY2hlX2JlYW0ucHZhbHVlcuoBAACFgXLrAQAAfXLsAQAAYnRy7QEAAFUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNy7gEAAChYrUoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBsaWJyYXJ5IG9mIGJhc2ljIGNvbWJpbmVyIFBUcmFuc2Zvcm0gc3ViY2xhc3Nlcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IHJhbmRvbQoKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY3lfY29tYmluZXJzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBLVgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgQW55CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBEaWN0CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBMaXN0CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBUdXBsZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHlwZVZhcmlhYmxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBVbmlvbgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9pbnB1dF90eXBlcwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9vdXRwdXRfdHlwZXMKCl9fYWxsX18gPSBbCiAgICAnQ291bnQnLAogICAgJ01lYW4nLAogICAgJ1NhbXBsZScsCiAgICAnVG9wJywKICAgICdUb0RpY3QnLAogICAgJ1RvTGlzdCcsCiAgICBdCgojIFR5cGUgdmFyaWFibGVzClQgPSBUeXBlVmFyaWFibGUoJ1QnKQpLID0gVHlwZVZhcmlhYmxlKCdLJykKViA9IFR5cGVWYXJpYWJsZSgnVicpCgoKY2xhc3MgTWVhbihvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3IgY29tcHV0aW5nIGFyaXRobWV0aWMgbWVhbnMgb2YgZWxlbWVudHMuIiIiCgogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuTWVhbi5HbG9iYWxseSBjb21wdXRlcyB0aGUgYXJpdGhtZXRpYyBtZWFuIG9mIHRoZSBlbGVtZW50cy4iIiIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoTWVhbkNvbWJpbmVGbigpKQoKICBjbGFzcyBQZXJLZXkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiImNvbWJpbmVycy5NZWFuLlBlcktleSBmaW5kcyB0aGUgbWVhbnMgb2YgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkuIiIiCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZVBlcktleShNZWFuQ29tYmluZUZuKCkpCgoKIyBUT0RPKGxhb2x1KTogVGhpcyB0eXBlIHNpZ25hdHVyZSBpcyBvdmVybHkgcmVzdHJpY3RpdmUuIFRoaXMgc2hvdWxkIGJlCiMgbW9yZSBnZW5lcmFsLgpAd2l0aF9pbnB1dF90eXBlcyhVbmlvbltmbG9hdCwgaW50LCBsb25nXSkKQHdpdGhfb3V0cHV0X3R5cGVzKGZsb2F0KQpjbGFzcyBNZWFuQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIGNvbXB1dGluZyBhbiBhcml0aG1ldGljIG1lYW4uIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gKDAsIDApCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgc3VtX2NvdW50LCBlbGVtZW50KToKICAgIChzdW1fLCBjb3VudCkgPSBzdW1fY291bnQKICAgIHJldHVybiBzdW1fICsgZWxlbWVudCwgY291bnQgKyAxCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHN1bXMsIGNvdW50cyA9IHppcCgqYWNjdW11bGF0b3JzKQogICAgcmV0dXJuIHN1bShzdW1zKSwgc3VtKGNvdW50cykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIHN1bV9jb3VudCk6CiAgICAoc3VtXywgY291bnQpID0gc3VtX2NvdW50CiAgICBpZiBjb3VudCA9PSAwOgogICAgICByZXR1cm4gZmxvYXQoJ05hTicpCiAgICByZXR1cm4gc3VtXyAvIGZsb2F0KGNvdW50KQoKICBkZWYgZm9yX2lucHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICBpZiBpbnB1dF90eXBlIGlzIGludDoKICAgICAgcmV0dXJuIGN5X2NvbWJpbmVycy5NZWFuSW50NjRGbigpCiAgICBlbGlmIGlucHV0X3R5cGUgaXMgZmxvYXQ6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuTWVhbkZsb2F0Rm4oKQogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBDb3VudChvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3IgY291bnRpbmcgZWxlbWVudHMuIiIiCgogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuQ291bnQuR2xvYmFsbHkgY291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMuIiIiCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZUdsb2JhbGx5KENvdW50Q29tYmluZUZuKCkpCgogIGNsYXNzIFBlcktleShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgIiIiY29tYmluZXJzLkNvdW50LlBlcktleSBjb3VudHMgaG93IG1hbnkgZWxlbWVudHMgZWFjaCB1bmlxdWUga2V5IGhhcy4iIiIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KENvdW50Q29tYmluZUZuKCkpCgogIGNsYXNzIFBlckVsZW1lbnQocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiImNvbWJpbmVycy5Db3VudC5QZXJFbGVtZW50IGNvdW50cyBob3cgbWFueSB0aW1lcyBlYWNoIGVsZW1lbnQgb2NjdXJzLiIiIgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBwYWlyZWRfd2l0aF92b2lkX3R5cGUgPSBLVltwY29sbC5lbGVtZW50X3R5cGUsIEFueV0KICAgICAgcmV0dXJuIChwY29sbAogICAgICAgICAgICAgIHwgKCclczpQYWlyV2l0aFZvaWQnICUgc2VsZi5sYWJlbCA+PiBjb3JlLk1hcChsYW1iZGEgeDogKHgsIE5vbmUpKQogICAgICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcyhwYWlyZWRfd2l0aF92b2lkX3R5cGUpKQogICAgICAgICAgICAgIHwgY29yZS5Db21iaW5lUGVyS2V5KENvdW50Q29tYmluZUZuKCkpKQoKCkB3aXRoX2lucHV0X3R5cGVzKEFueSkKQHdpdGhfb3V0cHV0X3R5cGVzKGludCkKY2xhc3MgQ291bnRDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgY29tcHV0aW5nIFBDb2xsZWN0aW9uIHNpemUuIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gMAoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIDEKCiAgZGVmIGFkZF9pbnB1dHMoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnRzKToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIGxlbihlbGVtZW50cykKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmV0dXJuIHN1bShhY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBUb3Aob2JqZWN0KToKICAiIiJDb21iaW5lcnMgZm9yIG9idGFpbmluZyBleHRyZW1hbCBlbGVtZW50cy4iIiIKICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLWFyZ3VtZW50CgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIE9mKHBjb2xsLCBuLCBjb21wYXJlPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJPYnRhaW4gYSBsaXN0IG9mIHRoZSBjb21wYXJlLW1vc3QgTiBlbGVtZW50cyBpbiBhIFBDb2xsZWN0aW9uLgoKICAgIFRoaXMgdHJhbnNmb3JtIHdpbGwgcmV0cmlldmUgdGhlIG4gZ3JlYXRlc3QgZWxlbWVudHMgaW4gdGhlIFBDb2xsZWN0aW9uCiAgICB0byB3aGljaCBpdCBpcyBhcHBsaWVkLCB3aGVyZSAiZ3JlYXRlc3QiIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbXBhcmF0b3IKICAgIGZ1bmN0aW9uIHN1cHBsaWVkIGFzIHRoZSBjb21wYXJlIGFyZ3VtZW50LgoKICAgIGNvbXBhcmUgc2hvdWxkIGJlIGFuIGltcGxlbWVudGF0aW9uIG9mICJhIDwgYiIgdGFraW5nIGF0IGxlYXN0IHR3byBhcmd1bWVudHMKICAgIChhIGFuZCBiKS4gQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzIHNwZWNpZmllZCBpbiB0aGUgYXBwbHkgY2FsbAogICAgYmVjb21lIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBjb21wYXJhdG9yLiAgRGVmYXVsdHMgdG8gdGhlIG5hdHVyYWwKICAgIG9yZGVyaW5nIG9mIHRoZSBlbGVtZW50cy4KCiAgICBUaGUgYXJndW1lbnRzICdrZXknIGFuZCAncmV2ZXJzZScgbWF5IGluc3RlYWQgYmUgcGFzc2VkIGFzIGtleXdvcmQKICAgIGFyZ3VtZW50cywgYW5kIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgUHl0aG9uJ3Mgc29ydCBmdW5jdGlvbnMuCgogICAgQXJnczoKICAgICAgcGNvbGw6IFBDb2xsZWN0aW9uIHRvIHByb2Nlc3MuCiAgICAgIG46IG51bWJlciBvZiBlbGVtZW50cyB0byBleHRyYWN0IGZyb20gcGNvbGwuCiAgICAgIGNvbXBhcmU6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgKmFyZ3M6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgKiprd2FyZ3M6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICIiIgogICAga2V5ID0ga3dhcmdzLnBvcCgna2V5JywgTm9uZSkKICAgIHJldmVyc2UgPSBrd2FyZ3MucG9wKCdyZXZlcnNlJywgRmFsc2UpCiAgICByZXR1cm4gcGNvbGwgfCBjb3JlLkNvbWJpbmVHbG9iYWxseSgKICAgICAgICBUb3BDb21iaW5lRm4obiwgY29tcGFyZSwga2V5LCByZXZlcnNlKSwgKmFyZ3MsICoqa3dhcmdzKQoKICBAc3RhdGljbWV0aG9kCiAgQHB0cmFuc2Zvcm0ucHRyYW5zZm9ybV9mbgogIGRlZiBQZXJLZXkocGNvbGwsIG4sIGNvbXBhcmU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIklkZW50aWZpZXMgdGhlIGNvbXBhcmUtbW9zdCBOIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGtleS4KCiAgICBUaGlzIHRyYW5zZm9ybSB3aWxsIHByb2R1Y2UgYSBQQ29sbGVjdGlvbiBtYXBwaW5nIHVuaXF1ZSBrZXlzIGluIHRoZSBpbnB1dAogICAgUENvbGxlY3Rpb24gdG8gdGhlIG4gZ3JlYXRlc3QgZWxlbWVudHMgd2l0aCB3aGljaCB0aGV5IGFyZSBhc3NvY2lhdGVkLCB3aGVyZQogICAgImdyZWF0ZXN0IiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHN1cHBsaWVkIGFzIHRoZSBjb21wYXJlCiAgICBhcmd1bWVudC4KCiAgICBjb21wYXJlIHNob3VsZCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28gYXJndW1lbnRzCiAgICAoYSBhbmQgYikuIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cyBzcGVjaWZpZWQgaW4gdGhlIGFwcGx5IGNhbGwKICAgIGJlY29tZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgY29tcGFyYXRvci4gIERlZmF1bHRzIHRvIHRoZSBuYXR1cmFsCiAgICBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMuCgogICAgVGhlIGFyZ3VtZW50cyAna2V5JyBhbmQgJ3JldmVyc2UnIG1heSBpbnN0ZWFkIGJlIHBhc3NlZCBhcyBrZXl3b3JkCiAgICBhcmd1bWVudHMsIGFuZCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIFB5dGhvbidzIHNvcnQgZnVuY3Rpb25zLgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsOiBQQ29sbGVjdGlvbiB0byBwcm9jZXNzLgogICAgICBuOiBudW1iZXIgb2YgZWxlbWVudHMgdG8gZXh0cmFjdCBmcm9tIHBjb2xsLgogICAgICBjb21wYXJlOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICphcmdzOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICoqa3dhcmdzOiBhcyBkZXNjcmliZWQgYWJvdmUuCgogICAgUmFpc2VzOgogICAgICBUeXBlQ2hlY2tFcnJvcjogSWYgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBpbnB1dCBQQ29sbGVjdGlvbiBpcyBub3QKICAgICAgICBjb21wYXRpYmxlIHdpdGggS1ZbQSwgQl0uCiAgICAiIiIKICAgIGtleSA9IGt3YXJncy5wb3AoJ2tleScsIE5vbmUpCiAgICByZXZlcnNlID0ga3dhcmdzLnBvcCgncmV2ZXJzZScsIEZhbHNlKQogICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KAogICAgICAgIFRvcENvbWJpbmVGbihuLCBjb21wYXJlLCBrZXksIHJldmVyc2UpLCAqYXJncywgKiprd2FyZ3MpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3QocGNvbGwsIG4pOgogICAgIiIiT2J0YWluIGEgbGlzdCBvZiB0aGUgZ3JlYXRlc3QgTiBlbGVtZW50cyBpbiBhIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHBjb2xsIHwgVG9wLk9mKG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0KHBjb2xsLCBuKToKICAgICIiIk9idGFpbiBhIGxpc3Qgb2YgdGhlIGxlYXN0IE4gZWxlbWVudHMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICAgIHJldHVybiBwY29sbCB8IFRvcC5PZihuLCByZXZlcnNlPVRydWUpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3RQZXJLZXkocGNvbGwsIG4pOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBncmVhdGVzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0UGVyS2V5KHBjb2xsLCBuLCByZXZlcnNlPVRydWUpOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBsZWFzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4sIHJldmVyc2U9VHJ1ZSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoTGlzdFtUXSkKY2xhc3MgVG9wQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZG9pbmcgdGhlIGNvbWJpbmluZyBmb3IgYWxsIG9mIHRoZSBUb3AgdHJhbnNmb3Jtcy4KCiAgVGhpcyBDb21iaW5lRm4gdXNlcyBhIGtleSBvciBjb21wYXJpc29uIG9wZXJhdG9yIHRvIHJhbmsgdGhlIGVsZW1lbnRzLgoKICBBcmdzOgogICAgY29tcGFyZTogKG9wdGlvbmFsKSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28KICAgICAgICBhcmd1bWVudHMgKGEgYW5kIGIpLiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIGFwcGx5IGNhbGwgYmVjb21lIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBjb21wYXJhdG9yLgogICAga2V5OiAob3B0aW9uYWwpIGEgbWFwcGluZyBvZiBlbGVtZW50cyB0byBhIGNvbXBhcmFibGUga2V5LCBzaW1pbGFyIHRvCiAgICAgICAgdGhlIGtleSBhcmd1bWVudCBvZiBQeXRob24ncyBzb3J0aW5nIG1ldGhvZHMuCiAgICByZXZlcnNlOiAob3B0aW9uYWwpIHdoZXRoZXIgdG8gb3JkZXIgdGhpbmdzIHNtYWxsZXN0IHRvIGxhcmdlc3QsIHJhdGhlcgogICAgICAgIHRoYW4gbGFyZ2VzdCB0byBzbWFsbGVzdAogICIiIgoKICBfTUlOX0JVRkZFUl9PVkVSU0laRSA9IDEwMAogIF9NQVhfQlVGRkVSX09WRVJTSVpFID0gMTAwMAoKICAjIFRPRE8ocm9iZXJ0d2IpOiBBbGxvdyB0YWtpbmcgYSBrZXkgcmF0aGVyIHRoYW4gYSBjb21wYXJlLgogIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBjb21wYXJlPU5vbmUsIGtleT1Ob25lLCByZXZlcnNlPUZhbHNlKToKICAgIHNlbGYuX24gPSBuCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IG1heCgKICAgICAgICBtaW4oMiAqIG4sIG4gKyBUb3BDb21iaW5lRm4uX01BWF9CVUZGRVJfT1ZFUlNJWkUpLAogICAgICAgIG4gKyBUb3BDb21iaW5lRm4uX01JTl9CVUZGRVJfT1ZFUlNJWkUpCgogICAgaWYgY29tcGFyZSBpcyBvcGVyYXRvci5sdDoKICAgICAgY29tcGFyZSA9IE5vbmUKICAgIGVsaWYgY29tcGFyZSBpcyBvcGVyYXRvci5ndDoKICAgICAgY29tcGFyZSA9IE5vbmUKICAgICAgcmV2ZXJzZSA9IG5vdCByZXZlcnNlCgogICAgaWYgY29tcGFyZToKICAgICAgc2VsZi5fY29tcGFyZSA9ICgKICAgICAgICAgIChsYW1iZGEgYSwgYiwgKmFyZ3MsICoqa3dhcmdzOiBub3QgY29tcGFyZShhLCBiLCAqYXJncywgKiprd2FyZ3MpKQogICAgICAgICAgaWYgcmV2ZXJzZQogICAgICAgICAgZWxzZSBjb21wYXJlKQogICAgZWxzZToKICAgICAgc2VsZi5fY29tcGFyZSA9IG9wZXJhdG9yLmd0IGlmIHJldmVyc2UgZWxzZSBvcGVyYXRvci5sdAoKICAgIHNlbGYuX2tleV9mbiA9IGtleQogICAgc2VsZi5fcmV2ZXJzZSA9IHJldmVyc2UKCiAgZGVmIF9zb3J0X2J1ZmZlcihzZWxmLCBidWZmZXIsIGx0KToKICAgIGlmIGx0IGluIChvcGVyYXRvci5ndCwgb3BlcmF0b3IubHQpOgogICAgICBidWZmZXIuc29ydChrZXk9c2VsZi5fa2V5X2ZuLCByZXZlcnNlPXNlbGYuX3JldmVyc2UpCiAgICBlbHNlOgogICAgICBidWZmZXIuc29ydChjbXA9bGFtYmRhIGEsIGI6IChub3QgbHQoYSwgYikpIC0gKG5vdCBsdChiLCBhKSksCiAgICAgICAgICAgICAgICAgIGtleT1zZWxmLl9rZXlfZm4pCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geyduJzogc2VsZi5fbiwKICAgICAgICAgICAgJ2NvbXBhcmUnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5fY29tcGFyZS5fX25hbWVfXwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2NvbXBhcmUsICdfX25hbWVfXycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5fY29tcGFyZS5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgICAgICAgICAgICAgICAgLmRyb3BfaWZfbm9uZSgpfQoKICAjIFRoZSBhY2N1bXVsYXRvciB0eXBlIGlzIGEgdHVwbGUgKHRocmVzaG9sZCwgYnVmZmVyKSwgd2hlcmUgdGhyZXNob2xkCiAgIyBpcyB0aGUgc21hbGxlc3QgZWxlbWVudCBba2V5XSB0aGF0IGNvdWxkIHBvc3NpYmx5IGJlIGluIHRoZSB0b3AgbiBiYXNlZAogICMgb24gdGhlIGVsZW1lbnRzIG9ic2VydmVkIHNvIGZhciwgYW5kIGJ1ZmZlciBpcyBhIChwZXJpb2RpY2FsbHkgc29ydGVkKQogICMgbGlzdCBvZiBjYW5kaWRhdGVzIG9mIGJvdW5kZWQgc2l6ZS4KCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIE5vbmUsIFtdCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhcmdzIG9yIGt3YXJnczoKICAgICAgbHQgPSBsYW1iZGEgYSwgYjogc2VsZi5fY29tcGFyZShhLCBiLCAqYXJncywgKiprd2FyZ3MpCiAgICBlbHNlOgogICAgICBsdCA9IHNlbGYuX2NvbXBhcmUKCiAgICB0aHJlc2hvbGQsIGJ1ZmZlciA9IGFjY3VtdWxhdG9yCiAgICBlbGVtZW50X2tleSA9IHNlbGYuX2tleV9mbihlbGVtZW50KSBpZiBzZWxmLl9rZXlfZm4gZWxzZSBlbGVtZW50CgogICAgaWYgbGVuKGJ1ZmZlcikgPCBzZWxmLl9uOgogICAgICBpZiBub3QgYnVmZmVyOgogICAgICAgIHJldHVybiBlbGVtZW50X2tleSwgW2VsZW1lbnRdCiAgICAgIGJ1ZmZlci5hcHBlbmQoZWxlbWVudCkKICAgICAgaWYgbHQoZWxlbWVudF9rZXksIHRocmVzaG9sZCk6ICAjIGVsZW1lbnRfa2V5IDwgdGhyZXNob2xkCiAgICAgICAgcmV0dXJuIGVsZW1lbnRfa2V5LCBidWZmZXIKICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICAjIHdpdGggbXV0YXRlZCBidWZmZXIKICAgIGVsaWYgbHQodGhyZXNob2xkLCBlbGVtZW50X2tleSk6ICAjIHRocmVzaG9sZCA8IGVsZW1lbnRfa2V5CiAgICAgIGJ1ZmZlci5hcHBlbmQoZWxlbWVudCkKICAgICAgaWYgbGVuKGJ1ZmZlcikgPCBzZWxmLl9idWZmZXJfc2l6ZToKICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IKICAgICAgc2VsZi5fc29ydF9idWZmZXIoYnVmZmVyLCBsdCkKICAgICAgbWluX2VsZW1lbnQgPSBidWZmZXJbLXNlbGYuX25dCiAgICAgIHRocmVzaG9sZCA9IHNlbGYuX2tleV9mbihtaW5fZWxlbWVudCkgaWYgc2VsZi5fa2V5X2ZuIGVsc2UgbWluX2VsZW1lbnQKICAgICAgcmV0dXJuIHRocmVzaG9sZCwgYnVmZmVyWy1zZWxmLl9uOl0KICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKToKICAgIGFjY3VtdWxhdG9ycyA9IGxpc3QoYWNjdW11bGF0b3JzKQogICAgaWYgYXJncyBvciBrd2FyZ3M6CiAgICAgIGFkZF9pbnB1dCA9IGxhbWJkYSBhY2N1bXVsYXRvciwgZWxlbWVudDogc2VsZi5hZGRfaW5wdXQoCiAgICAgICAgICBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgYWRkX2lucHV0ID0gc2VsZi5hZGRfaW5wdXQKCiAgICB0b3RhbF9hY2N1bXVsYXRvciA9IE5vbmUKICAgIGZvciBhY2N1bXVsYXRvciBpbiBhY2N1bXVsYXRvcnM6CiAgICAgIGlmIHRvdGFsX2FjY3VtdWxhdG9yIGlzIE5vbmU6CiAgICAgICAgdG90YWxfYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcgogICAgICBlbHNlOgogICAgICAgIGZvciBlbGVtZW50IGluIGFjY3VtdWxhdG9yWzFdOgogICAgICAgICAgdG90YWxfYWNjdW11bGF0b3IgPSBhZGRfaW5wdXQodG90YWxfYWNjdW11bGF0b3IsIGVsZW1lbnQpCiAgICByZXR1cm4gdG90YWxfYWNjdW11bGF0b3IKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgYXJncyBvciBrd2FyZ3M6CiAgICAgIGx0ID0gbGFtYmRhIGEsIGI6IHNlbGYuX2NvbXBhcmUoYSwgYiwgKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgbHQgPSBzZWxmLl9jb21wYXJlCgogICAgXywgYnVmZmVyID0gYWNjdW11bGF0b3IKICAgIHNlbGYuX3NvcnRfYnVmZmVyKGJ1ZmZlciwgbHQpCiAgICByZXR1cm4gYnVmZmVyWzotc2VsZi5fbi0xOi0xXSAgIyB0YWlsLCByZXZlcnNlZAoKCmNsYXNzIExhcmdlc3QoVG9wQ29tYmluZUZuKToKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnTGFyZ2VzdCglcyknICUgc2VsZi5fbgoKCmNsYXNzIFNtYWxsZXN0KFRvcENvbWJpbmVGbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgIHN1cGVyKFNtYWxsZXN0LCBzZWxmKS5fX2luaXRfXyhuLCByZXZlcnNlPVRydWUpCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuICdTbWFsbGVzdCglcyknICUgc2VsZi5fbgoKCmNsYXNzIFNhbXBsZShvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3Igc2FtcGxpbmcgbiBlbGVtZW50cyB3aXRob3V0IHJlcGxhY2VtZW50LiIiIgogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtYXJndW1lbnQKCiAgQHN0YXRpY21ldGhvZAogIEBwdHJhbnNmb3JtLnB0cmFuc2Zvcm1fZm4KICBkZWYgRml4ZWRTaXplR2xvYmFsbHkocGNvbGwsIG4pOgogICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoU2FtcGxlQ29tYmluZUZuKG4pKQoKICBAc3RhdGljbWV0aG9kCiAgQHB0cmFuc2Zvcm0ucHRyYW5zZm9ybV9mbgogIGRlZiBGaXhlZFNpemVQZXJLZXkocGNvbGwsIG4pOgogICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KFNhbXBsZUNvbWJpbmVGbihuKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoTGlzdFtUXSkKY2xhc3MgU2FtcGxlQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIGFsbCBTYW1wbGUgdHJhbnNmb3Jtcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgc3VwZXIoU2FtcGxlQ29tYmluZUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICAjIE1vc3Qgb2YgdGhpcyBjb21iaW5lcidzIHdvcmsgaXMgZG9uZSBieSBhIFRvcENvbWJpbmVGbi4gV2UgY291bGQganVzdAogICAgIyBzdWJjbGFzcyBUb3BDb21iaW5lRm4gdG8gbWFrZSB0aGlzIGNsYXNzLCBidXQgc2luY2Ugc2FtcGxpbmcgaXMgbm90CiAgICAjIHJlYWxseSBhIGtpbmQgb2YgVG9wIG9wZXJhdGlvbiwgd2UgdXNlIGEgVG9wQ29tYmluZUZuIGluc3RhbmNlIGFzIGEKICAgICMgaGVscGVyIGluc3RlYWQuCiAgICBzZWxmLl90b3BfY29tYmluZXIgPSBUb3BDb21iaW5lRm4obikKCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBzZWxmLl90b3BfY29tYmluZXIuY3JlYXRlX2FjY3VtdWxhdG9yKCkKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBoZWFwLCBlbGVtZW50KToKICAgICMgQmVmb3JlIHBhc3NpbmcgZWxlbWVudHMgdG8gdGhlIFRvcCBjb21iaW5lciwgd2UgcGFpciB0aGVtIHdpdGggcmFuZG9tCiAgICAjIG51bWJlcnMuIFRoZSBlbGVtZW50cyB3aXRoIHRoZSBuIGxhcmdlc3QgcmFuZG9tIG51bWJlciAia2V5cyIgd2lsbCBiZQogICAgIyBzZWxlY3RlZCBmb3IgdGhlIG91dHB1dC4KICAgIHJldHVybiBzZWxmLl90b3BfY29tYmluZXIuYWRkX2lucHV0KGhlYXAsIChyYW5kb20ucmFuZG9tKCksIGVsZW1lbnQpKQoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGhlYXBzKToKICAgIHJldHVybiBzZWxmLl90b3BfY29tYmluZXIubWVyZ2VfYWNjdW11bGF0b3JzKGhlYXBzKQoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgaGVhcCk6CiAgICAjIEhlcmUgd2Ugc3RyaXAgb2ZmIHRoZSByYW5kb20gbnVtYmVyIGtleXMgd2UgYWRkZWQgaW4gYWRkX2lucHV0LgogICAgcmV0dXJuIFtlIGZvciBfLCBlIGluIHNlbGYuX3RvcF9jb21iaW5lci5leHRyYWN0X291dHB1dChoZWFwKV0KCgpjbGFzcyBfVHVwbGVDb21iaW5lRm5CYXNlKGNvcmUuQ29tYmluZUZuKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsICpjb21iaW5lcnMpOgogICAgc2VsZi5fY29tYmluZXJzID0gW2NvcmUuQ29tYmluZUZuLm1heWJlX2Zyb21fY2FsbGFibGUoYykgZm9yIGMgaW4gY29tYmluZXJzXQogICAgc2VsZi5fbmFtZWRfY29tYmluZXJzID0gY29tYmluZXJzCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICBjb21iaW5lcnMgPSBbYy5fX25hbWVfXyBpZiBoYXNhdHRyKGMsICdfX25hbWVfXycpIGVsc2UgYy5fX2NsYXNzX18uX19uYW1lX18KICAgICAgICAgICAgICAgICBmb3IgYyBpbiBzZWxmLl9uYW1lZF9jb21iaW5lcnNdCiAgICByZXR1cm4geydjb21iaW5lcnMnOiBzdHIoY29tYmluZXJzKX0KCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBbYy5jcmVhdGVfYWNjdW11bGF0b3IoKSBmb3IgYyBpbiBzZWxmLl9jb21iaW5lcnNdCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJldHVybiBbYy5tZXJnZV9hY2N1bXVsYXRvcnMoYSkKICAgICAgICAgICAgZm9yIGMsIGEgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgemlwKCphY2N1bXVsYXRvcnMpKV0KCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiB0dXBsZShbYy5leHRyYWN0X291dHB1dChhKQogICAgICAgICAgICAgICAgICBmb3IgYywgYSBpbiB6aXAoc2VsZi5fY29tYmluZXJzLCBhY2N1bXVsYXRvcildKQoKCmNsYXNzIFR1cGxlQ29tYmluZUZuKF9UdXBsZUNvbWJpbmVGbkJhc2UpOgogICIiIkEgY29tYmluZXIgZm9yIGNvbWJpbmluZyB0dXBsZXMgdmlhIGEgdHVwbGUgb2YgY29tYmluZXJzLgoKICBUYWtlcyBhcyBpbnB1dCBhIHR1cGxlIG9mIE4gQ29tYmluZUZucyBhbmQgY29tYmluZXMgTi10dXBsZXMgYnkKICBjb21iaW5pbmcgdGhlIGstdGggZWxlbWVudCBvZiBlYWNoIHR1cGxlIHdpdGggdGhlIGstdGggQ29tYmluZUZuLAogIG91dHB1dHRpbmcgYSBuZXcgTi10dXBsZSBvZiBjb21iaW5lZCB2YWx1ZXMuCiAgIiIiCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAgcmV0dXJuIFtjLmFkZF9pbnB1dChhLCBlKQogICAgICAgICAgICBmb3IgYywgYSwgZSBpbiB6aXAoc2VsZi5fY29tYmluZXJzLCBhY2N1bXVsYXRvciwgZWxlbWVudCldCgogIGRlZiB3aXRoX2NvbW1vbl9pbnB1dChzZWxmKToKICAgIHJldHVybiBTaW5nbGVJbnB1dFR1cGxlQ29tYmluZUZuKCpzZWxmLl9jb21iaW5lcnMpCgoKY2xhc3MgU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbihfVHVwbGVDb21iaW5lRm5CYXNlKToKICAiIiJBIGNvbWJpbmVyIGZvciBjb21iaW5pbmcgYSBzaW5nbGUgdmFsdWUgdmlhIGEgdHVwbGUgb2YgY29tYmluZXJzLgoKICBUYWtlcyBhcyBpbnB1dCBhIHR1cGxlIG9mIE4gQ29tYmluZUZucyBhbmQgY29tYmluZXMgZWxlbWVudHMgYnkKICBhcHBseWluZyBlYWNoIENvbWJpbmVGbiB0byBlYWNoIGlucHV0LCBwcm9kdWNpbmcgYW4gTi10dXBsZSBvZgogIHRoZSBvdXRwdXRzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBvZiB0aGUgTiBDb21iaW5lRm4ncyBvdXRwdXRzLgogICIiIgoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBbYy5hZGRfaW5wdXQoYSwgZWxlbWVudCkKICAgICAgICAgICAgZm9yIGMsIGEgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgYWNjdW11bGF0b3IpXQoKCmNsYXNzIFRvTGlzdChwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgZ2xvYmFsIENvbWJpbmVGbiB0aGF0IGNvbmRlbnNlcyBhIFBDb2xsZWN0aW9uIGludG8gYSBzaW5nbGUgbGlzdC4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPSdUb0xpc3QnKTogICMgcHlsaW50OiBkaXNhYmxlPXVzZWxlc3Mtc3VwZXItZGVsZWdhdGlvbgogICAgc3VwZXIoVG9MaXN0LCBzZWxmKS5fX2luaXRfXyhsYWJlbCkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBzZWxmLmxhYmVsID4+IGNvcmUuQ29tYmluZUdsb2JhbGx5KFRvTGlzdENvbWJpbmVGbigpKQoKCkB3aXRoX2lucHV0X3R5cGVzKFQpCkB3aXRoX291dHB1dF90eXBlcyhMaXN0W1RdKQpjbGFzcyBUb0xpc3RDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgdG9fbGlzdC4iIiIKCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBbXQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIGFjY3VtdWxhdG9yLmFwcGVuZChlbGVtZW50KQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJldHVybiBzdW0oYWNjdW11bGF0b3JzLCBbXSkKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKCmNsYXNzIFRvRGljdChwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgZ2xvYmFsIENvbWJpbmVGbiB0aGF0IGNvbmRlbnNlcyBhIFBDb2xsZWN0aW9uIGludG8gYSBzaW5nbGUgZGljdC4KCiAgUENvbGxlY3Rpb25zIHNob3VsZCBjb25zaXN0IG9mIDItdHVwbGVzLCBub3Rpb25hbGx5IChrZXksIHZhbHVlKSBwYWlycy4KICBJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXksIG9ubHkgb25lIG9mIHRoZSB2YWx1ZXMKICB3aWxsIGJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdGluZyBkaWN0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWw9J1RvRGljdCcpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlbGVzcy1zdXBlci1kZWxlZ2F0aW9uCiAgICBzdXBlcihUb0RpY3QsIHNlbGYpLl9faW5pdF9fKGxhYmVsKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCB8IHNlbGYubGFiZWwgPj4gY29yZS5Db21iaW5lR2xvYmFsbHkoVG9EaWN0Q29tYmluZUZuKCkpCgoKQHdpdGhfaW5wdXRfdHlwZXMoVHVwbGVbSywgVl0pCkB3aXRoX291dHB1dF90eXBlcyhEaWN0W0ssIFZdKQpjbGFzcyBUb0RpY3RDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgdG9fZGljdC4iIiIKCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBkaWN0KCkKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgYWNjdW11bGF0b3Jba2V5XSA9IHZhbHVlCiAgICByZXR1cm4gYWNjdW11bGF0b3IKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmVzdWx0ID0gZGljdCgpCiAgICBmb3IgYSBpbiBhY2N1bXVsYXRvcnM6CiAgICAgIHJlc3VsdC51cGRhdGUoYSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKCmRlZiBjdXJyeV9jb21iaW5lX2ZuKGZuLCBhcmdzLCBrd2FyZ3MpOgogIGlmIG5vdCBhcmdzIGFuZCBub3Qga3dhcmdzOgogICAgcmV0dXJuIGZuCgogICMgQ3JlYXRlIEN1cnJpZWRGbiBjbGFzcyBmb3IgdGhlIGNvbWJpbmVyCiAgY2xhc3MgQ3VycmllZEZuKGNvcmUuQ29tYmluZUZuKToKICAgICIiIkNvbWJpbmVGbiB0aGF0IGFwcGxpZXMgZXh0cmEgYXJndW1lbnRzLiIiIgoKICAgIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICAgIHJldHVybiBmbi5jcmVhdGVfYWNjdW11bGF0b3IoKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAgICByZXR1cm4gZm4uYWRkX2lucHV0KGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgICByZXR1cm4gZm4ubWVyZ2VfYWNjdW11bGF0b3JzKGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICAgIHJldHVybiBmbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBhcHBseShzZWxmLCBlbGVtZW50cyk6CiAgICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKQoKICByZXR1cm4gQ3VycmllZEZuKCkKCgpjbGFzcyBQaGFzZWRDb21iaW5lRm5FeGVjdXRvcihvYmplY3QpOgogICIiIkV4ZWN1dG9yIGZvciBwaGFzZXMgb2YgY29tYmluZSBvcGVyYXRpb25zLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGhhc2UsIGZuLCBhcmdzLCBrd2FyZ3MpOgoKICAgIHNlbGYuY29tYmluZV9mbiA9IGN1cnJ5X2NvbWJpbmVfZm4oZm4sIGFyZ3MsIGt3YXJncykKCiAgICBpZiBwaGFzZSA9PSAnYWxsJzoKICAgICAgc2VsZi5hcHBseSA9IHNlbGYuZnVsbF9jb21iaW5lCiAgICBlbGlmIHBoYXNlID09ICdhZGQnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5hZGRfb25seQogICAgZWxpZiBwaGFzZSA9PSAnbWVyZ2UnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5tZXJnZV9vbmx5CiAgICBlbGlmIHBoYXNlID09ICdleHRyYWN0JzoKICAgICAgc2VsZi5hcHBseSA9IHNlbGYuZXh0cmFjdF9vbmx5CiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIHBoYXNlOiAlcycgJSBwaGFzZSkKCiAgZGVmIGZ1bGxfY29tYmluZShzZWxmLCBlbGVtZW50cyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgIHJldHVybiBzZWxmLmNvbWJpbmVfZm4uYXBwbHkoZWxlbWVudHMpCgogIGRlZiBhZGRfb25seShzZWxmLCBlbGVtZW50cyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgIHJldHVybiBzZWxmLmNvbWJpbmVfZm4uYWRkX2lucHV0cygKICAgICAgICBzZWxmLmNvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCksIGVsZW1lbnRzKQoKICBkZWYgbWVyZ2Vfb25seShzZWxmLCBhY2N1bXVsYXRvcnMpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgICByZXR1cm4gc2VsZi5jb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycyhhY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X29ubHkoc2VsZiwgYWNjdW11bGF0b3IpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgICByZXR1cm4gc2VsZi5jb21iaW5lX2ZuLmV4dHJhY3Rfb3V0cHV0KGFjY3VtdWxhdG9yKQp9cu8BAAAoWA0AAABNZWFuQ29tYmluZUZuWAUAAABjbGFzc0tIS2SHWBIAAABUb3AuU21hbGxlc3RQZXJLZXlYAwAAAGRlZkvqS++HWA8AAABUb0xpc3RDb21iaW5lRm5YBQAAAGNsYXNzTeIBTfMBh1gUAAAATWVhbi5HbG9iYWxseS5leHBhbmRYAwAAAGRlZks8Sz6HWBkAAABTYW1wbGVDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNlgFNmwGHWCQAAABjdXJyeV9jb21iaW5lX2ZuLkN1cnJpZWRGbi5hZGRfaW5wdXRYAwAAAGRlZk0mAk0oAodYDwAAAFRvRGljdENvbWJpbmVGblgFAAAAY2xhc3NNBAJNGQKHWA4AAABUdXBsZUNvbWJpbmVGblgFAAAAY2xhc3NNuwFNyQGHWCIAAABfVHVwbGVDb21iaW5lRm5CYXNlLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNtgFNuQGHWBgAAABTYW1wbGUuRml4ZWRTaXplR2xvYmFsbHlYAwAAAGRlZk17AU1/AYdYBwAAAExhcmdlc3RYBQAAAGNsYXNzTWkBTWwBh1ggAAAAVHVwbGVDb21iaW5lRm4ud2l0aF9jb21tb25faW5wdXRYAwAAAGRlZk3HAU3JAYdYGQAAAFRvcENvbWJpbmVGbi5fc29ydF9idWZmZXJYAwAAAGRlZk0dAU0jAYdYJAAAAFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yLmZ1bGxfY29tYmluZVgDAAAAZGVmTUcCTUkCh1gfAAAAVG9wQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTTABTTIBh1gOAAAAQ291bnRDb21iaW5lRm5YBQAAAGNsYXNzS4BLk4dYAwAAAFRvcFgFAAAAY2xhc3NLlUvvh1gLAAAAVG9wLkxhcmdlc3RYAwAAAGRlZkvYS92HWA8AAABUb0xpc3QuX19pbml0X19YAwAAAGRlZk3bAU3dAYdYDAAAAFRvcENvbWJpbmVGblgFAAAAY2xhc3NL8U1nAYdYIAAAAFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yLmFkZF9vbmx5WAMAAABkZWZNSgJNTQKHWCEAAABDb3VudENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZkuOS5CHWB4AAABUb0RpY3RDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRYAwAAAGRlZk0XAk0ZAodYGAAAAENvdW50Q29tYmluZUZuLmFkZF9pbnB1dFgDAAAAZGVmS4hLiodYGQAAAFRvRGljdENvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk0MAk0QAodYHQAAAENvdW50Q29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZLkUuTh1giAAAAU2FtcGxlQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTZwBTZ4Bh1gNAAAAVG9EaWN0LmV4cGFuZFgDAAAAZGVmTQACTQICh1gQAAAAY3VycnlfY29tYmluZV9mblgDAAAAZGVmTRsCTTMCh1giAAAAVG9MaXN0Q29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTecBTekBh1gPAAAAU2FtcGxlQ29tYmluZUZuWAUAAABjbGFzc02GAU2iAYdYIgAAAFRvRGljdENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk0RAk0WAodYGQAAAFRvcENvbWJpbmVGbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk0kAU0qAYdYKQAAAGN1cnJ5X2NvbWJpbmVfZm4uQ3VycmllZEZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNLAJNLgKHWA0AAABUb0xpc3QuZXhwYW5kWAMAAABkZWZN3gFN4AGHWAYAAABUb0RpY3RYBQAAAGNsYXNzTfUBTQICh1gXAAAATWVhbkNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZktQS1OHWBkAAABUb0xpc3RDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZN6gFN7QGHWBMAAABDb3VudC5QZXJLZXkuZXhwYW5kWAMAAABkZWZLckt0h1gjAAAAU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk3TAU3WAYdYBQAAAENvdW50WAUAAABjbGFzc0tmS36HWAYAAABUb3AuT2ZYAwAAAGRlZkuZS7WHWCEAAABDb3VudENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZkuFS4eHWBkAAABTaW5nbGVJbnB1dFR1cGxlQ29tYmluZUZuWAUAAABjbGFzc03LAU3WAYdYFQAAAExhcmdlc3QuZGVmYXVsdF9sYWJlbFgDAAAAZGVmTWoBTWwBh1gXAAAAQ291bnQuUGVyRWxlbWVudC5leHBhbmRYAwAAAGRlZkt4S36HWAsAAABNZWFuLlBlcktleVgFAAAAY2xhc3NLP0tEh1ggAAAAY3VycnlfY29tYmluZV9mbi5DdXJyaWVkRm4uYXBwbHlYAwAAAGRlZk0vAk0xAodYLQAAAGN1cnJ5X2NvbWJpbmVfZm4uQ3VycmllZEZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTSkCTSsCh1gcAAAAX1R1cGxlQ29tYmluZUZuQmFzZS5fX2luaXRfX1gDAAAAZGVmTaYBTakBh1gcAAAATWVhbkNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZVgDAAAAZGVmS15LZIdYEgAAAE1lYW4uUGVyS2V5LmV4cGFuZFgDAAAAZGVmS0JLRIdYHgAAAFRvTGlzdENvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmTfEBTfMBh1gVAAAAQ291bnQuR2xvYmFsbHkuZXhwYW5kWAMAAABkZWZLbEtuh1gIAAAAU21hbGxlc3RYBQAAAGNsYXNzTW4BTXUBh1giAAAAUGhhc2VkQ29tYmluZUZuRXhlY3V0b3IubWVyZ2Vfb25seVgDAAAAZGVmTU4CTVACh1gMAAAAVG9wLlNtYWxsZXN0WAMAAABkZWZL3kvjh1ggAAAAUGhhc2VkQ29tYmluZUZuRXhlY3V0b3IuX19pbml0X19YAwAAAGRlZk04Ak1GAodYLQAAAGN1cnJ5X2NvbWJpbmVfZm4uQ3VycmllZEZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTSMCTSUCh1giAAAAVG9EaWN0Q29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTQkCTQsCh1giAAAAU2FtcGxlQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTZMBTZUBh1gNAAAATWVhbi5HbG9iYWxseVgFAAAAY2xhc3NLOUs+h1giAAAAVG9MaXN0Q29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTe4BTfABh1gTAAAAX1R1cGxlQ29tYmluZUZuQmFzZVgFAAAAY2xhc3NNpAFNuQGHWAoAAABUb3AuUGVyS2V5WAMAAABkZWZLtkvXh1ggAAAAX1R1cGxlQ29tYmluZUZuQmFzZS5kaXNwbGF5X2RhdGFYAwAAAGRlZk2qAU2uAYdYDwAAAFRvRGljdC5fX2luaXRfX1gDAAAAZGVmTf0BTf8Bh1gWAAAAU21hbGxlc3QuZGVmYXVsdF9sYWJlbFgDAAAAZGVmTXMBTXUBh1geAAAAU2FtcGxlQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNnwFNogGHWAYAAABTYW1wbGVYBQAAAGNsYXNzTXcBTYQBh1gEAAAATWVhblgFAAAAY2xhc3NLNktEh1gVAAAAVG9wQ29tYmluZUZuLl9faW5pdF9fWAMAAABkZWZNBgFNHAGHWBYAAABUb3BDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNMwFNTAGHWB8AAABUb3BDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzWAMAAABkZWZNTQFNXQGHWBgAAABUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk3DAU3GAYdYIAAAAE1lYW5Db21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZLTUtPh1gkAAAAUGhhc2VkQ29tYmluZUZuRXhlY3V0b3IuZXh0cmFjdF9vbmx5WAMAAABkZWZNUQJNUwKHWBsAAABUb3BDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRYAwAAAGRlZk1eAU1nAYdYEQAAAFNtYWxsZXN0Ll9faW5pdF9fWAMAAABkZWZNcAFNcgGHWBcAAABQaGFzZWRDb21iaW5lRm5FeGVjdXRvclgFAAAAY2xhc3NNNQJNUwKHWBgAAABTYW1wbGVDb21iaW5lRm4uX19pbml0X19YAwAAAGRlZk2LAU2SAYdYIAAAAE1lYW5Db21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzWAMAAABkZWZLVEtXh1gGAAAAVG9MaXN0WAUAAABjbGFzc03YAU3gAYdYHAAAAE1lYW5Db21iaW5lRm4uZXh0cmFjdF9vdXRwdXRYAwAAAGRlZktYS12HWBAAAABDb3VudC5QZXJFbGVtZW50WAUAAABjbGFzc0t1S36HWA4AAABDb3VudC5HbG9iYWxseVgFAAAAY2xhc3NLaUtuh1gZAAAAQ291bnRDb21iaW5lRm4uYWRkX2lucHV0c1gDAAAAZGVmS4tLjYdYGgAAAGN1cnJ5X2NvbWJpbmVfZm4uQ3VycmllZEZuWAUAAABjbGFzc00gAk0xAodYFgAAAFNhbXBsZS5GaXhlZFNpemVQZXJLZXlYAwAAAGRlZk2AAU2EAYdYJgAAAF9UdXBsZUNvbWJpbmVGbkJhc2UuY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZNrwFNsQGHWAwAAABDb3VudC5QZXJLZXlYBQAAAGNsYXNzS29LdIdYEQAAAFRvcC5MYXJnZXN0UGVyS2V5WAMAAABkZWZL5Evph1gmAAAAX1R1cGxlQ29tYmluZUZuQmFzZS5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk2yAU21AYd1fXLwAQAAKFgQAAAAQ291bnQuUGVyRWxlbWVudFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNy8QEAAFgOAAAAQ291bnQuR2xvYmFsbHlq8QEAAFgDAAAAVG9wavEBAABYEwAAAENvdW50LlBlcktleS5leHBhbmRq8QEAAFgSAAAATWVhbi5QZXJLZXkuZXhwYW5kavEBAABYFAAAAE1lYW4uR2xvYmFsbHkuZXhwYW5kavEBAABYBAAAAE1lYW5q8QEAAFgNAAAAVG9EaWN0LmV4cGFuZGrxAQAAWAYAAABUb0xpc3Rq8QEAAFgFAAAAQ291bnRq8QEAAFgMAAAAQ291bnQuUGVyS2V5avEBAABYFQAAAENvdW50Lkdsb2JhbGx5LmV4cGFuZGrxAQAAWA0AAABNZWFuLkdsb2JhbGx5avEBAABYBgAAAFRvRGljdGrxAQAAWAYAAABTYW1wbGVq8QEAAFgXAAAAQ291bnQuUGVyRWxlbWVudC5leHBhbmRq8QEAAFgLAAAATWVhbi5QZXJLZXlq8QEAAFgNAAAAVG9MaXN0LmV4cGFuZGrxAQAAdWiKWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc3LyAQAAhYFy8wEAAH1y9AEAAGJ0cvUBAABVIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrKFgIBgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJDbG9jayBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlYWwgdGltZSBwcm9jZXNzaW5nIGFuZCB0ZXN0aW5nLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB0aW1lCgoKY2xhc3MgQ2xvY2sob2JqZWN0KToKICBkZWYgdGltZShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGVwb2NoLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZV9ieSk6CiAgICAiIiJBZHZhbmNlcyB0aGUgY2xvY2sgYnkgYSBudW1iZXIgb2Ygc2Vjb25kcy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQoKCmNsYXNzIFJlYWxDbG9jayhvYmplY3QpOgogIGRlZiB0aW1lKHNlbGYpOgogICAgcmV0dXJuIHRpbWUudGltZSgpCgoKY2xhc3MgVGVzdENsb2NrKG9iamVjdCk6CiAgIiIiQ2xvY2sgdXNlZCBmb3IgVGVzdGluZyIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50X3RpbWU9MCk6CiAgICBzZWxmLl9jdXJyZW50X3RpbWUgPSBjdXJyZW50X3RpbWUKCiAgZGVmIHRpbWUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY3VycmVudF90aW1lCgogIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZV9ieSk6CiAgICBzZWxmLl9jdXJyZW50X3RpbWUgKz0gYWR2YW5jZV9ieQp9cvYBAAAoWBIAAABDbG9jay5hZHZhbmNlX3RpbWVYAwAAAGRlZksgSyOHWAUAAABDbG9ja1gFAAAAY2xhc3NLG0sjh1gWAAAAVGVzdENsb2NrLmFkdmFuY2VfdGltZVgDAAAAZGVmSzJLNIdYCQAAAFRlc3RDbG9ja1gFAAAAY2xhc3NLKks0h1gKAAAAQ2xvY2sudGltZVgDAAAAZGVmSxxLH4dYDgAAAFRlc3RDbG9jay50aW1lWAMAAABkZWZLL0sxh1gJAAAAUmVhbENsb2NrWAUAAABjbGFzc0slSyiHWA4AAABSZWFsQ2xvY2sudGltZVgDAAAAZGVmSyZLKIdYEgAAAFRlc3RDbG9jay5fX2luaXRfX1gDAAAAZGVmSyxLLod1fXL3AQAAKFgSAAAAQ2xvY2suYWR2YW5jZV90aW1lWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja3L4AQAAWAUAAABDbG9ja2r4AQAAWBYAAABUZXN0Q2xvY2suYWR2YW5jZV90aW1lavgBAABYCQAAAFRlc3RDbG9ja2r4AQAAWAoAAABDbG9jay50aW1lavgBAABYDgAAAFRlc3RDbG9jay50aW1lavgBAABYCQAAAFJlYWxDbG9ja2r4AQAAWA4AAABSZWFsQ2xvY2sudGltZWr4AQAAdWiKWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja3L5AQAAhYFy+gEAAH1y+wEAAGJ0cvwBAABVHWFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzcv0BAAAoWKsHAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBhbnlfcGIyCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzdHJ1Y3RfcGIyCgoKZGVmIHBhY2tfQW55KG1zZyk6CiAgIiIiQ3JlYXRlcyBhIHByb3RvYnVmIEFueSB3aXRoIG1zZyBhcyBpdHMgY29udGVudC4KCiAgUmV0dXJucyBOb25lIGlmIG1zZyBpcyBOb25lLgogICIiIgogIGlmIG1zZyBpcyBOb25lOgogICAgcmV0dXJuIE5vbmUKCiAgcmVzdWx0ID0gYW55X3BiMi5BbnkoKQogIHJlc3VsdC5QYWNrKG1zZykKICByZXR1cm4gcmVzdWx0CgoKZGVmIHVucGFja19BbnkoYW55X21zZywgbXNnX2NsYXNzKToKICAiIiJVbnBhY2tzIGFueV9tc2cgaW50byBtc2dfY2xhc3MuCgogIFJldHVybnMgTm9uZSBpZiBtc2dfY2xhc3MgaXMgTm9uZS4KICAiIiIKICBpZiBtc2dfY2xhc3MgaXMgTm9uZToKICAgIHJldHVybiBOb25lCiAgbXNnID0gbXNnX2NsYXNzKCkKICBhbnlfbXNnLlVucGFjayhtc2cpCiAgcmV0dXJuIG1zZwoKCmRlZiBwYXJzZV9CeXRlcyhieXRlcywgbXNnX2NsYXNzKToKICAiIiJQYXJzZXMgdGhlIFN0cmluZyBvZiBieXRlcyBpbnRvIG1zZ19jbGFzcy4KCiAgUmV0dXJucyB0aGUgaW5wdXQgYnl0ZXMgaWYgbXNnX2NsYXNzIGlzIE5vbmUuIiIiCiAgaWYgbXNnX2NsYXNzIGlzIE5vbmU6CiAgICByZXR1cm4gYnl0ZXMKICBtc2cgPSBtc2dfY2xhc3MoKQogIG1zZy5QYXJzZUZyb21TdHJpbmcoYnl0ZXMpCiAgcmV0dXJuIG1zZwoKCmRlZiBwYWNrX1N0cnVjdCgqKmt3YXJncyk6CiAgIiIiUmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW5kaWNhdGVkIGJ5IGt3YXJncy4KICAiIiIKICBtc2cgPSBzdHJ1Y3RfcGIyLlN0cnVjdCgpCiAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCk6CiAgICBtc2dba2V5XSA9IHZhbHVlICAjIHB5bGludDogZGlzYWJsZT11bnN1YnNjcmlwdGFibGUtb2JqZWN0LCB1bnN1cHBvcnRlZC1hc3NpZ25tZW50LW9wZXJhdGlvbgogIHJldHVybiBtc2cKCgpkZWYgZnJvbV9taWNyb3MoY2xzLCBtaWNyb3MpOgogIHJlc3VsdCA9IGNscygpCiAgcmVzdWx0LkZyb21NaWNyb3NlY29uZHMobWljcm9zKQogIHJldHVybiByZXN1bHQKfXL+AQAAKFgLAAAAcGFja19TdHJ1Y3RYAwAAAGRlZks8S0OHWAgAAABwYWNrX0FueVgDAAAAZGVmSxhLI4dYCwAAAGZyb21fbWljcm9zWAMAAABkZWZLRUtJh1gLAAAAcGFyc2VfQnl0ZXNYAwAAAGRlZksxSzqHWAoAAAB1bnBhY2tfQW55WAMAAABkZWZLJUsvh3V9cv8BAAAoWAsAAABwYWNrX1N0cnVjdFgdAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHNyAAIAAFgIAAAAcGFja19BbnlqAAIAAFgLAAAAZnJvbV9taWNyb3NqAAIAAFgLAAAAcGFyc2VfQnl0ZXNqAAIAAFgKAAAAdW5wYWNrX0FueWoAAgAAdWiKWB0AAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlsc3IBAgAAhYFyAgIAAH1yAwIAAGJ0cgQCAABVHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcnIFAgAAKFgOnAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJTdXBwb3J0IGZvciBEYXRhZmxvdyB0cmlnZ2Vycy4KClRyaWdnZXJzIGNvbnRyb2wgd2hlbiBpbiBwcm9jZXNzaW5nIHRpbWUgd2luZG93cyBnZXQgZW1pdHRlZC4KIiIiCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGNvcHkKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbnVtYmVycwpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBvYnNlcnZhYmxlCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29tYmluZXJzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29yZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwgaW1wb3J0IFRpbWVEb21haW4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgR2xvYmFsV2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcENvbWJpbmVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd2VkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93Rm4KZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1BWF9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1JTl9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRJTUVfR1JBTlVMQVJJVFkKCiMgQWZ0ZXJDb3VudCBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpfX2FsbF9fID0gWwogICAgJ0FjY3VtdWxhdGlvbk1vZGUnLAogICAgJ1RyaWdnZXJGbicsCiAgICAnRGVmYXVsdFRyaWdnZXInLAogICAgJ0FmdGVyV2F0ZXJtYXJrJywKICAgICdBZnRlckNvdW50JywKICAgICdSZXBlYXRlZGx5JywKICAgICdBZnRlckFueScsCiAgICAnQWZ0ZXJBbGwnLAogICAgJ0FmdGVyRWFjaCcsCiAgICAnT3JGaW5hbGx5JywKICAgIF0KCgpjbGFzcyBBY2N1bXVsYXRpb25Nb2RlKG9iamVjdCk6CiAgIiIiQ29udHJvbHMgd2hhdCB0byBkbyB3aXRoIGRhdGEgd2hlbiBhIHRyaWdnZXIgZmlyZXMgbXVsdGlwbGUgdGltZXMuCiAgIiIiCiAgRElTQ0FSRElORyA9IGJlYW1fcnVubmVyX2FwaV9wYjIuQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HCiAgQUNDVU1VTEFUSU5HID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5BY2N1bXVsYXRpb25Nb2RlLkFDQ1VNVUxBVElORwogICMgVE9ETyhyb2JlcnR3Yik6IFByb3ZpZGUgcmV0cmFjdGlvbnMgb2YgcHJldmlvdXMgb3V0cHV0cy4KICAjIFJFVFJBQ1RJTkcgPSAzCgoKY2xhc3MgX1N0YXRlVGFnKG9iamVjdCk6CiAgIiIiQW4gaWRlbnRpZmllciB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSB0eXBlZCwgY29tYmluYWJsZSBzdGF0ZS4KCiAgVGhlIGdpdmVuIHRhZyBtdXN0IGJlIHVuaXF1ZSBmb3IgdGhpcyBzdGFnZS4gIElmIENvbWJpbmVGbiBpcyBOb25lIHRoZW4KICBhbGwgZWxlbWVudHMgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGxpc3QsIG90aGVyd2lzZSB0aGUgZ2l2ZW4gQ29tYmluZUZuCiAgd2lsbCBiZSBhcHBsaWVkIChwb3NzaWJseSBpbmNyZW1lbnRhbGx5IGFuZCBlYWdlcmx5KSB3aGVuIGFkZGluZyBlbGVtZW50cy4KICAiIiIKICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICBkZWYgX19pbml0X18oc2VsZiwgdGFnKToKICAgIHNlbGYudGFnID0gdGFnCgoKY2xhc3MgX1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LiIiIgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1ZhbHVlU3RhdGVUYWcoJXMpJyAlIChzZWxmLnRhZykKCiAgZGVmIHdpdGhfcHJlZml4KHNlbGYsIHByZWZpeCk6CiAgICByZXR1cm4gX1ZhbHVlU3RhdGVUYWcocHJlZml4ICsgc2VsZi50YWcpCgoKY2xhc3MgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LCBhY2N1bXVsYXRlZCB3aXRoIGEgY29tYmluZXIuIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IEFsc28gc3RvcmUgdGhlIGNvZGVyIChwZXJoYXBzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb21iaW5lX2ZuKQogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGNvbWJpbmVfZm4pOgogICAgc3VwZXIoX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcsIHNlbGYpLl9faW5pdF9fKHRhZykKICAgIGlmIG5vdCBjb21iaW5lX2ZuOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21iaW5lX2ZuIG11c3QgYmUgc3BlY2lmaWVkLicpCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb21iaW5lX2ZuLCBjb3JlLkNvbWJpbmVGbik6CiAgICAgIGNvbWJpbmVfZm4gPSBjb3JlLkNvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKGNvbWJpbmVfZm4pCiAgICBzZWxmLmNvbWJpbmVfZm4gPSBjb21iaW5lX2ZuCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyglcywgJXMpJyAlIChzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyhwcmVmaXggKyBzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKCmNsYXNzIF9MaXN0U3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhIGxpc3Qgb2YgZWxlbWVudHMuIiIiCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdMaXN0U3RhdGVUYWcoJXMpJyAlIHNlbGYudGFnCgogIGRlZiB3aXRoX3ByZWZpeChzZWxmLCBwcmVmaXgpOgogICAgcmV0dXJuIF9MaXN0U3RhdGVUYWcocHJlZml4ICsgc2VsZi50YWcpCgoKY2xhc3MgX1dhdGVybWFya0hvbGRTdGF0ZVRhZyhfU3RhdGVUYWcpOgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCB0aW1lc3RhbXBfY29tYmluZXJfaW1wbCk6CiAgICBzdXBlcihfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLCBzZWxmKS5fX2luaXRfXyh0YWcpCiAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsID0gdGltZXN0YW1wX2NvbWJpbmVyX2ltcGwKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdXYXRlcm1hcmtIb2xkU3RhdGVUYWcoJXMsICVzKScgJSAoc2VsZi50YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKHByZWZpeCArIHNlbGYudGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbCkKCgojIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKIyBUT0RPKHJvYmVydHdiKTogUHJvdmlzaW9uYWwgQVBJLCBKYXZhIGxpa2VseSB0byBjaGFuZ2UgYXMgd2VsbC4KY2xhc3MgVHJpZ2dlckZuKG9iamVjdCk6CiAgIiIiQSBUcmlnZ2VyRm4gZGV0ZXJtaW5lcyB3aGVuIHdpbmRvdyAocGFuZXMpIGFyZSBlbWl0dGVkLgoKICBTZWUgaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9wcm9ncmFtbWluZy1ndWlkZS8jdHJpZ2dlcnMKICAiIiIKICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgIiIiQ2FsbGVkIHdoZW4gYSBuZXcgZWxlbWVudCBhcnJpdmVzIGluIGEgd2luZG93LgoKICAgIEFyZ3M6CiAgICAgIGVsZW1lbnQ6IHRoZSBlbGVtZW50IGJlaW5nIGFkZGVkCiAgICAgIHdpbmRvdzogdGhlIHdpbmRvdyB0byB3aGljaCB0aGUgZWxlbWVudCBpcyBiZWluZyBhZGRlZAogICAgICBjb250ZXh0OiBhIGNvbnRleHQgKGUuZy4gYSBUcmlnZ2VyQ29udGV4dCBpbnN0YW5jZSkgZm9yIG1hbmFnaW5nIHN0YXRlCiAgICAgICAgICBhbmQgc2V0dGluZyB0aW1lcnMKICAgICIiIgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIiIiQ2FsbGVkIHdoZW4gbXVsdGlwbGUgd2luZG93cyBhcmUgbWVyZ2VkLgoKICAgIEFyZ3M6CiAgICAgIHRvX2JlX21lcmdlZDogdGhlIHNldCBvZiB3aW5kb3dzIHRvIGJlIG1lcmdlZAogICAgICBtZXJnZV9yZXN1bHQ6IHRoZSB3aW5kb3cgaW50byB3aGljaCB0aGUgd2luZG93cyBhcmUgYmVpbmcgbWVyZ2VkCiAgICAgIGNvbnRleHQ6IGEgY29udGV4dCAoZS5nLiBhIFRyaWdnZXJDb250ZXh0IGluc3RhbmNlKSBmb3IgbWFuYWdpbmcgc3RhdGUKICAgICAgICAgIGFuZCBzZXR0aW5nIHRpbWVycwogICAgIiIiCiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICAiIiJXaGV0aGVyIHRoaXMgdHJpZ2dlciBzaG91bGQgY2F1c2UgdGhlIHdpbmRvdyB0byBmaXJlLgoKICAgIEFyZ3M6CiAgICAgIHdhdGVybWFyazogKGEgbG93ZXIgYm91bmQgb24pIHRoZSB3YXRlcm1hcmsgb2YgdGhlIHN5c3RlbQogICAgICB3aW5kb3c6IHRoZSB3aW5kb3cgd2hvc2UgdHJpZ2dlciBpcyBiZWluZyBjb25zaWRlcmVkCiAgICAgIGNvbnRleHQ6IGEgY29udGV4dCAoZS5nLiBhIFRyaWdnZXJDb250ZXh0IGluc3RhbmNlKSBmb3IgbWFuYWdpbmcgc3RhdGUKICAgICAgICAgIGFuZCBzZXR0aW5nIHRpbWVycwoKICAgIFJldHVybnM6CiAgICAgIHdoZXRoZXIgdGhpcyB0cmlnZ2VyIHNob3VsZCBjYXVzZSBhIGZpcmluZwogICAgIiIiCiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgICIiIkNhbGxlZCB3aGVuIGEgdHJpZ2dlciBhY3R1YWxseSBmaXJlcy4KCiAgICBBcmdzOgogICAgICB3YXRlcm1hcms6IChhIGxvd2VyIGJvdW5kIG9uKSB0aGUgd2F0ZXJtYXJrIG9mIHRoZSBzeXN0ZW0KICAgICAgd2luZG93OiB0aGUgd2luZG93IHdob3NlIHRyaWdnZXIgaXMgYmVpbmcgZmlyZWQKICAgICAgY29udGV4dDogYSBjb250ZXh0IChlLmcuIGEgVHJpZ2dlckNvbnRleHQgaW5zdGFuY2UpIGZvciBtYW5hZ2luZyBzdGF0ZQogICAgICAgICAgYW5kIHNldHRpbmcgdGltZXJzCgogICAgUmV0dXJuczoKICAgICAgd2hldGhlciB0aGlzIHRyaWdnZXIgaXMgZmluaXNoZWQKICAgICIiIgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgICIiIkNsZWFyIGFueSBzdGF0ZSBhbmQgdGltZXJzIHVzZWQgYnkgdGhpcyBUcmlnZ2VyRm4uIiIiCiAgICBwYXNzCiMgcHlsaW50OiBlbmFibGU9dW51c2VkLWFyZ3VtZW50CgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiB7CiAgICAgICAgJ2FmdGVyX2FsbCc6IEFmdGVyQWxsLAogICAgICAgICdhZnRlcl9hbnknOiBBZnRlckFueSwKICAgICAgICAnYWZ0ZXJfZWFjaCc6IEFmdGVyRWFjaCwKICAgICAgICAnYWZ0ZXJfZW5kX29mX3dpbmRvdyc6IEFmdGVyV2F0ZXJtYXJrLAogICAgICAgICMgYWZ0ZXJfcHJvY2Vzc2luZ190aW1lLCBhZnRlcl9zeW5jaHJvbml6ZWRfcHJvY2Vzc2luZ190aW1lCiAgICAgICAgIyBhbHdheXMKICAgICAgICAnZGVmYXVsdCc6IERlZmF1bHRUcmlnZ2VyLAogICAgICAgICdlbGVtZW50X2NvdW50JzogQWZ0ZXJDb3VudCwKICAgICAgICAjIG5ldmVyCiAgICAgICAgJ29yX2ZpbmFsbHknOiBPckZpbmFsbHksCiAgICAgICAgJ3JlcGVhdCc6IFJlcGVhdGVkbHksCiAgICB9W3Byb3RvLldoaWNoT25lb2YoJ3RyaWdnZXInKV0uZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KQoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICBwYXNzCgoKY2xhc3MgRGVmYXVsdFRyaWdnZXIoVHJpZ2dlckZuKToKICAiIiJTZW1hbnRpY2FsbHkgUmVwZWF0ZWRseShBZnRlcldhdGVybWFyaygpKSwgYnV0IG1vcmUgb3B0aW1pemVkLiIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBwYXNzCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRGVmYXVsdFRyaWdnZXIoKScKCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuc2V0X3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgd2luZG93LmVuZCkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgICMgTm90ZTogVGltZXIgY2xlYXJpbmcgc29sZWx5IGFuIG9wdGltaXphdGlvbi4KICAgIGZvciB3aW5kb3cgaW4gdG9fYmVfbWVyZ2VkOgogICAgICBpZiB3aW5kb3cuZW5kICE9IG1lcmdlX3Jlc3VsdC5lbmQ6CiAgICAgICAgY29udGV4dC5jbGVhcl90aW1lcignJywgVGltZURvbWFpbi5XQVRFUk1BUkspCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gd2F0ZXJtYXJrID49IHdpbmRvdy5lbmQKCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiByZXNldChzZWxmLCB3aW5kb3csIGNvbnRleHQpOgogICAgY29udGV4dC5jbGVhcl90aW1lcignJywgVGltZURvbWFpbi5XQVRFUk1BUkspCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIERlZmF1bHRUcmlnZ2VyKCkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICBkZWZhdWx0PWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5EZWZhdWx0KCkpCgoKY2xhc3MgQWZ0ZXJXYXRlcm1hcmsoVHJpZ2dlckZuKToKICAiIiJGaXJlIGV4YWN0bHkgb25jZSB3aGVuIHRoZSB3YXRlcm1hcmsgcGFzc2VzIHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4KCiAgQXJnczoKICAgICAgZWFybHk6IGlmIG5vdCBOb25lLCBhIHNwZWN1bGF0aXZlIHRyaWdnZXIgdG8gcmVwZWF0ZWRseSBldmFsdWF0ZSBiZWZvcmUKICAgICAgICB0aGUgd2F0ZXJtYXJrIHBhc3NlcyB0aGUgZW5kIG9mIHRoZSB3aW5kb3cKICAgICAgbGF0ZTogaWYgbm90IE5vbmUsIGEgc3BlY3VsYXRpdmUgdHJpZ2dlciB0byByZXBlYXRlZGx5IGV2YWx1YXRlIGFmdGVyCiAgICAgICAgdGhlIHdhdGVybWFyayBwYXNzZXMgdGhlIGVuZCBvZiB0aGUgd2luZG93CiAgIiIiCiAgTEFURV9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnaXNfbGF0ZScsIGFueSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVhcmx5PU5vbmUsIGxhdGU9Tm9uZSk6CiAgICBzZWxmLmVhcmx5ID0gUmVwZWF0ZWRseShlYXJseSkgaWYgZWFybHkgZWxzZSBOb25lCiAgICBzZWxmLmxhdGUgPSBSZXBlYXRlZGx5KGxhdGUpIGlmIGxhdGUgZWxzZSBOb25lCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHF1YWxpZmllcnMgPSBbXQogICAgaWYgc2VsZi5lYXJseToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2Vhcmx5PSVzJyAlIHNlbGYuZWFybHkudW5kZXJseWluZykKICAgIGlmIHNlbGYubGF0ZToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2xhdGU9JXMnICUgc2VsZi5sYXRlLnVuZGVybHlpbmcpCiAgICByZXR1cm4gJ0FmdGVyV2F0ZXJtYXJrKCVzKScgJSAnLCAnLmpvaW4ocXVhbGlmaWVycykKCiAgZGVmIGlzX2xhdGUoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi5sYXRlIGFuZCBjb250ZXh0LmdldF9zdGF0ZShzZWxmLkxBVEVfVEFHKQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fZWxlbWVudChlbGVtZW50LCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsc2U6CiAgICAgIGNvbnRleHQuc2V0X3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgd2luZG93LmVuZCkKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX2VsZW1lbnQoZWxlbWVudCwgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyBUT0RPKHJvYmVydHdiKTogRmlndXJlIG91dCB3aGV0aGVyIHRoZSAncmV3aW5kJyBzZW1hbnRpY3MgY291bGQgYmUgdXNlZAogICAgIyBoZXJlLgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fbWVyZ2UoCiAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnbGF0ZScpKQogICAgZWxzZToKICAgICAgIyBOb3RlOiBUaW1lciBjbGVhcmluZyBzb2xlbHkgYW4gb3B0aW1pemF0aW9uLgogICAgICBmb3Igd2luZG93IGluIHRvX2JlX21lcmdlZDoKICAgICAgICBpZiB3aW5kb3cuZW5kICE9IG1lcmdlX3Jlc3VsdC5lbmQ6CiAgICAgICAgICBjb250ZXh0LmNsZWFyX3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSykKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX21lcmdlKAogICAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHNlbGYuaXNfbGF0ZShjb250ZXh0KToKICAgICAgcmV0dXJuIHNlbGYubGF0ZS5zaG91bGRfZmlyZSgKICAgICAgICAgIHdhdGVybWFyaywgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdsYXRlJykpCiAgICBlbGlmIHdhdGVybWFyayA+PSB3aW5kb3cuZW5kOgogICAgICByZXR1cm4gVHJ1ZQogICAgZWxpZiBzZWxmLmVhcmx5OgogICAgICByZXR1cm4gc2VsZi5lYXJseS5zaG91bGRfZmlyZSgKICAgICAgICAgIHdhdGVybWFyaywgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHNlbGYuaXNfbGF0ZShjb250ZXh0KToKICAgICAgcmV0dXJuIHNlbGYubGF0ZS5vbl9maXJlKAogICAgICAgICAgd2F0ZXJtYXJrLCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsaWYgd2F0ZXJtYXJrID49IHdpbmRvdy5lbmQ6CiAgICAgIGNvbnRleHQuYWRkX3N0YXRlKHNlbGYuTEFURV9UQUcsIFRydWUpCiAgICAgIHJldHVybiBub3Qgc2VsZi5sYXRlCiAgICBlbGlmIHNlbGYuZWFybHk6CiAgICAgIHNlbGYuZWFybHkub25fZmlyZSh3YXRlcm1hcmssIHdpbmRvdywgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKICAgICAgcmV0dXJuIEZhbHNlCgogIGRlZiByZXNldChzZWxmLCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi5sYXRlOgogICAgICBjb250ZXh0LmNsZWFyX3N0YXRlKHNlbGYuTEFURV9UQUcpCiAgICBpZiBzZWxmLmVhcmx5OgogICAgICBzZWxmLmVhcmx5LnJlc2V0KHdpbmRvdywgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKICAgIGlmIHNlbGYubGF0ZToKICAgICAgc2VsZi5sYXRlLnJlc2V0KHdpbmRvdywgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnbGF0ZScpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi5lYXJseSA9PSBvdGhlci5lYXJseQogICAgICAgICAgICBhbmQgc2VsZi5sYXRlID09IG90aGVyLmxhdGUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLmVhcmx5LCBzZWxmLmxhdGUpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICByZXR1cm4gQWZ0ZXJXYXRlcm1hcmsoCiAgICAgICAgZWFybHk9VHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgICAgcHJvdG8uYWZ0ZXJfZW5kX29mX3dpbmRvdy5lYXJseV9maXJpbmdzLCBjb250ZXh0KQogICAgICAgIGlmIHByb3RvLmFmdGVyX2VuZF9vZl93aW5kb3cuSGFzRmllbGQoJ2Vhcmx5X2ZpcmluZ3MnKQogICAgICAgIGVsc2UgTm9uZSwKICAgICAgICBsYXRlPVRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICAgIHByb3RvLmFmdGVyX2VuZF9vZl93aW5kb3cubGF0ZV9maXJpbmdzLCBjb250ZXh0KQogICAgICAgIGlmIHByb3RvLmFmdGVyX2VuZF9vZl93aW5kb3cuSGFzRmllbGQoJ2xhdGVfZmlyaW5ncycpCiAgICAgICAgZWxzZSBOb25lKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIGVhcmx5X3Byb3RvID0gc2VsZi5lYXJseS51bmRlcmx5aW5nLnRvX3J1bm5lcl9hcGkoCiAgICAgICAgY29udGV4dCkgaWYgc2VsZi5lYXJseSBlbHNlIE5vbmUKICAgIGxhdGVfcHJvdG8gPSBzZWxmLmxhdGUudW5kZXJseWluZy50b19ydW5uZXJfYXBpKAogICAgICAgIGNvbnRleHQpIGlmIHNlbGYubGF0ZSBlbHNlIE5vbmUKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgYWZ0ZXJfZW5kX29mX3dpbmRvdz1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJFbmRPZldpbmRvdygKICAgICAgICAgICAgZWFybHlfZmlyaW5ncz1lYXJseV9wcm90bywKICAgICAgICAgICAgbGF0ZV9maXJpbmdzPWxhdGVfcHJvdG8pKQoKCmNsYXNzIEFmdGVyQ291bnQoVHJpZ2dlckZuKToKICAiIiJGaXJlIHdoZW4gdGhlcmUgYXJlIGF0IGxlYXN0IGNvdW50IGVsZW1lbnRzIGluIHRoaXMgd2luZG93IHBhbmUuCgogIEFmdGVyQ291bnQgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgoKICBDT1VOVF9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnY291bnQnLCBjb21iaW5lcnMuQ291bnRDb21iaW5lRm4oKSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50KToKICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvdW50LCBudW1iZXJzLkludGVncmFsKSBvciBjb3VudCA8IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvdW50ICglZCkgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIiAlIGNvdW50KQogICAgc2VsZi5jb3VudCA9IGNvdW50CgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQWZ0ZXJDb3VudCglcyknICUgc2VsZi5jb3VudAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50CgogIGRlZiBvbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCk6CiAgICBjb250ZXh0LmFkZF9zdGF0ZShzZWxmLkNPVU5UX1RBRywgMSkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgICMgc3RhdGVzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkCiAgICBwYXNzCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gY29udGV4dC5nZXRfc3RhdGUoc2VsZi5DT1VOVF9UQUcpID49IHNlbGYuY291bnQKCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIHJlc2V0KHNlbGYsIHdpbmRvdywgY29udGV4dCk6CiAgICBjb250ZXh0LmNsZWFyX3N0YXRlKHNlbGYuQ09VTlRfVEFHKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIEFmdGVyQ291bnQocHJvdG8uZWxlbWVudF9jb3VudC5lbGVtZW50X2NvdW50KQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyKAogICAgICAgIGVsZW1lbnRfY291bnQ9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLkVsZW1lbnRDb3VudCgKICAgICAgICAgICAgZWxlbWVudF9jb3VudD1zZWxmLmNvdW50KSkKCgpjbGFzcyBSZXBlYXRlZGx5KFRyaWdnZXJGbik6CiAgIiIiUmVwZWF0ZWRseSBpbnZva2UgdGhlIGdpdmVuIHRyaWdnZXIsIG5ldmVyIGZpbmlzaGluZy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVuZGVybHlpbmcpOgogICAgc2VsZi51bmRlcmx5aW5nID0gdW5kZXJseWluZwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1JlcGVhdGVkbHkoJXMpJyAlIHNlbGYudW5kZXJseWluZwoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLnVuZGVybHlpbmcgPT0gb3RoZXIudW5kZXJseWluZwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOiAgIyBnZXQgd2luZG93IGZyb20gY29udGV4dD8KICAgIHNlbGYudW5kZXJseWluZy5vbl9lbGVtZW50KGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgIHNlbGYudW5kZXJseWluZy5vbl9tZXJnZSh0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIHJldHVybiBzZWxmLnVuZGVybHlpbmcuc2hvdWxkX2ZpcmUod2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHNlbGYudW5kZXJseWluZy5vbl9maXJlKHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgICAgc2VsZi51bmRlcmx5aW5nLnJlc2V0KHdpbmRvdywgY29udGV4dCkKICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIHNlbGYudW5kZXJseWluZy5yZXNldCh3aW5kb3csIGNvbnRleHQpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBSZXBlYXRlZGx5KAogICAgICAgIFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkocHJvdG8ucmVwZWF0LnN1YnRyaWdnZXIsIGNvbnRleHQpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgcmVwZWF0PWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5SZXBlYXQoCiAgICAgICAgICAgIHN1YnRyaWdnZXI9c2VsZi51bmRlcmx5aW5nLnRvX3J1bm5lcl9hcGkoY29udGV4dCkpKQoKCmNsYXNzIF9QYXJhbGxlbFRyaWdnZXJGbihUcmlnZ2VyRm4pOgoKICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICBkZWYgX19pbml0X18oc2VsZiwgKnRyaWdnZXJzKToKICAgIHNlbGYudHJpZ2dlcnMgPSB0cmlnZ2VycwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cih0KSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi50cmlnZ2VycyA9PSBvdGhlci50cmlnZ2VycwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY29tYmluZV9vcChzZWxmLCB0cmlnZ2VyX3Jlc3VsdHMpOgogICAgcGFzcwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9lbGVtZW50KGVsZW1lbnQsIHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9tZXJnZSgKICAgICAgICAgIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi5jb21iaW5lX29wKAogICAgICAgIHRyaWdnZXIuc2hvdWxkX2ZpcmUod2F0ZXJtYXJrLCB3aW5kb3csIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKICAgICAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpKQoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBmaW5pc2hlZCA9IFtdCiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICBuZXN0ZWRfY29udGV4dCA9IHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KQogICAgICBpZiB0cmlnZ2VyLnNob3VsZF9maXJlKHdhdGVybWFyaywgd2luZG93LCBuZXN0ZWRfY29udGV4dCk6CiAgICAgICAgZmluaXNoZWQuYXBwZW5kKHRyaWdnZXIub25fZmlyZSh3YXRlcm1hcmssIHdpbmRvdywgbmVzdGVkX2NvbnRleHQpKQogICAgcmV0dXJuIHNlbGYuY29tYmluZV9vcChmaW5pc2hlZCkKCiAgZGVmIHJlc2V0KHNlbGYsIHdpbmRvdywgY29udGV4dCk6CiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICB0cmlnZ2VyLnJlc2V0KHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdWJfY29udGV4dChjb250ZXh0LCBpbmRleCk6CiAgICByZXR1cm4gTmVzdGVkQ29udGV4dChjb250ZXh0LCAnJWQvJyAlIGluZGV4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHN1YnRyaWdnZXIsIGNvbnRleHQpCiAgICAgICAgZm9yIHN1YnRyaWdnZXIKICAgICAgICBpbiBwcm90by5hZnRlcl9hbGwuc3VidHJpZ2dlcnMgb3IgcHJvdG8uYWZ0ZXJfYW55LnN1YnRyaWdnZXJzXQogICAgaWYgcHJvdG8uYWZ0ZXJfYWxsLnN1YnRyaWdnZXJzOgogICAgICByZXR1cm4gQWZ0ZXJBbGwoKnN1YnRyaWdnZXJzKQogICAgZWxzZToKICAgICAgcmV0dXJuIEFmdGVyQW55KCpzdWJ0cmlnZ2VycykKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBzdWJ0cmlnZ2VyLnRvX3J1bm5lcl9hcGkoY29udGV4dCkgZm9yIHN1YnRyaWdnZXIgaW4gc2VsZi50cmlnZ2Vyc10KICAgIGlmIHNlbGYuY29tYmluZV9vcCA9PSBhbGw6CiAgICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgICBhZnRlcl9hbGw9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLkFmdGVyQWxsKAogICAgICAgICAgICAgIHN1YnRyaWdnZXJzPXN1YnRyaWdnZXJzKSkKICAgIGVsaWYgc2VsZi5jb21iaW5lX29wID09IGFueToKICAgICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICAgIGFmdGVyX2FueT1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJBbnkoCiAgICAgICAgICAgICAgc3VidHJpZ2dlcnM9c3VidHJpZ2dlcnMpKQogICAgZWxzZToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmKQoKCmNsYXNzIEFmdGVyQW55KF9QYXJhbGxlbFRyaWdnZXJGbik6CiAgIiIiRmlyZXMgd2hlbiBhbnkgc3VidHJpZ2dlciBmaXJlcy4KCiAgQWxzbyBmaW5pc2hlcyB3aGVuIGFueSBzdWJ0cmlnZ2VyIGZpbmlzaGVzLgogICIiIgogIGNvbWJpbmVfb3AgPSBhbnkKCgpjbGFzcyBBZnRlckFsbChfUGFyYWxsZWxUcmlnZ2VyRm4pOgogICIiIkZpcmVzIHdoZW4gYWxsIHN1YnRyaWdnZXJzIGhhdmUgZmlyZWQuCgogIEFsc28gZmluaXNoZXMgd2hlbiBhbGwgc3VidHJpZ2dlcnMgaGF2ZSBmaW5pc2hlZC4KICAiIiIKICBjb21iaW5lX29wID0gYWxsCgoKY2xhc3MgQWZ0ZXJFYWNoKFRyaWdnZXJGbik6CgogIElOREVYX1RBRyA9IF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKCdpbmRleCcsICgKICAgICAgbGFtYmRhIGluZGljZXM6IDAgaWYgbm90IGluZGljZXMgZWxzZSBtYXgoaW5kaWNlcykpKQoKICBkZWYgX19pbml0X18oc2VsZiwgKnRyaWdnZXJzKToKICAgIHNlbGYudHJpZ2dlcnMgPSB0cmlnZ2VycwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cih0KSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi50cmlnZ2VycyA9PSBvdGhlci50cmlnZ2VycwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgaXggPSBjb250ZXh0LmdldF9zdGF0ZShzZWxmLklOREVYX1RBRykKICAgIGlmIGl4IDwgbGVuKHNlbGYudHJpZ2dlcnMpOgogICAgICBzZWxmLnRyaWdnZXJzW2l4XS5vbl9lbGVtZW50KAogICAgICAgICAgZWxlbWVudCwgd2luZG93LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICAjIFRoaXMgdGFrZXMgdGhlIGZ1cnRoZXN0IHdpbmRvdyBvbiBtZXJnaW5nLgogICAgIyBUT0RPKHJvYmVydHdiKTogUmV2aXNpdCB0aGlzIHdoZW4gbWVyZ2luZyB3aW5kb3dzIGxvZ2ljIGlzIHNldHRsZWQgZm9yCiAgICAjIGFsbCBwb3NzaWJsZSBtZXJnaW5nIHNpdHVhdGlvbnMuCiAgICBpeCA9IGNvbnRleHQuZ2V0X3N0YXRlKHNlbGYuSU5ERVhfVEFHKQogICAgaWYgaXggPCBsZW4oc2VsZi50cmlnZ2Vycyk6CiAgICAgIHNlbGYudHJpZ2dlcnNbaXhdLm9uX21lcmdlKAogICAgICAgICAgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGl4ID0gY29udGV4dC5nZXRfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBpZiBpeCA8IGxlbihzZWxmLnRyaWdnZXJzKToKICAgICAgcmV0dXJuIHNlbGYudHJpZ2dlcnNbaXhdLnNob3VsZF9maXJlKAogICAgICAgICAgd2F0ZXJtYXJrLCB3aW5kb3csIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgaXggPSBjb250ZXh0LmdldF9zdGF0ZShzZWxmLklOREVYX1RBRykKICAgIGlmIGl4IDwgbGVuKHNlbGYudHJpZ2dlcnMpOgogICAgICBpZiBzZWxmLnRyaWdnZXJzW2l4XS5vbl9maXJlKAogICAgICAgICAgd2F0ZXJtYXJrLCB3aW5kb3csIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSk6CiAgICAgICAgaXggKz0gMQogICAgICAgIGNvbnRleHQuYWRkX3N0YXRlKHNlbGYuSU5ERVhfVEFHLCBpeCkKICAgICAgcmV0dXJuIGl4ID09IGxlbihzZWxmLnRyaWdnZXJzKQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICB0cmlnZ2VyLnJlc2V0KHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdWJfY29udGV4dChjb250ZXh0LCBpbmRleCk6CiAgICByZXR1cm4gTmVzdGVkQ29udGV4dChjb250ZXh0LCAnJWQvJyAlIGluZGV4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICByZXR1cm4gQWZ0ZXJFYWNoKCpbCiAgICAgICAgVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaShzdWJ0cmlnZ2VyLCBjb250ZXh0KQogICAgICAgIGZvciBzdWJ0cmlnZ2VyIGluIHByb3RvLmFmdGVyX2VhY2guc3VidHJpZ2dlcnNdKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgYWZ0ZXJfZWFjaD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJFYWNoKAogICAgICAgICAgICBzdWJ0cmlnZ2Vycz1bCiAgICAgICAgICAgICAgICBzdWJ0cmlnZ2VyLnRvX3J1bm5lcl9hcGkoY29udGV4dCkKICAgICAgICAgICAgICAgIGZvciBzdWJ0cmlnZ2VyIGluIHNlbGYudHJpZ2dlcnNdKSkKCgpjbGFzcyBPckZpbmFsbHkoQWZ0ZXJBbnkpOgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICByZXR1cm4gT3JGaW5hbGx5KAogICAgICAgIFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkocHJvdG8ub3JfZmluYWxseS5tYWluLCBjb250ZXh0KSwKICAgICAgICAjIGdldGF0dHIgaXMgdXNlZCBhcyBmaW5hbGx5IGlzIGEga2V5d29yZCBpbiBQeXRob24KICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKGdldGF0dHIocHJvdG8ub3JfZmluYWxseSwgJ2ZpbmFsbHknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgb3JfZmluYWxseT1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuT3JGaW5hbGx5KAogICAgICAgICAgICBtYWluPXNlbGYudHJpZ2dlcnNbMF0udG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgICAgICAgIyBkaWN0IGtleXdvcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBmaW5hbGx5IGlzIGEga2V5d29yZCBpbiBQeXRob24KICAgICAgICAgICAgKip7J2ZpbmFsbHknOiBzZWxmLnRyaWdnZXJzWzFdLnRvX3J1bm5lcl9hcGkoY29udGV4dCl9KSkKCgpjbGFzcyBUcmlnZ2VyQ29udGV4dChvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgb3V0ZXIsIHdpbmRvdyk6CiAgICBzZWxmLl9vdXRlciA9IG91dGVyCiAgICBzZWxmLl93aW5kb3cgPSB3aW5kb3cKCiAgZGVmIHNldF90aW1lcihzZWxmLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKToKICAgIHNlbGYuX291dGVyLnNldF90aW1lcihzZWxmLl93aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApCgogIGRlZiBjbGVhcl90aW1lcihzZWxmLCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBzZWxmLl9vdXRlci5jbGVhcl90aW1lcihzZWxmLl93aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluKQoKICBkZWYgYWRkX3N0YXRlKHNlbGYsIHRhZywgdmFsdWUpOgogICAgc2VsZi5fb3V0ZXIuYWRkX3N0YXRlKHNlbGYuX3dpbmRvdywgdGFnLCB2YWx1ZSkKCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB0YWcpOgogICAgcmV0dXJuIHNlbGYuX291dGVyLmdldF9zdGF0ZShzZWxmLl93aW5kb3csIHRhZykKCiAgZGVmIGNsZWFyX3N0YXRlKHNlbGYsIHRhZyk6CiAgICByZXR1cm4gc2VsZi5fb3V0ZXIuY2xlYXJfc3RhdGUoc2VsZi5fd2luZG93LCB0YWcpCgoKY2xhc3MgTmVzdGVkQ29udGV4dChvYmplY3QpOgogICIiIk5hbWVzcGFjZWQgY29udGV4dCB1c2VmdWwgZm9yIGRlZmluaW5nIGNvbXBvc2l0ZSB0cmlnZ2Vycy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG91dGVyLCBwcmVmaXgpOgogICAgc2VsZi5fb3V0ZXIgPSBvdXRlcgogICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CgogIGRlZiBzZXRfdGltZXIoc2VsZiwgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLl9vdXRlci5zZXRfdGltZXIoc2VsZi5fcHJlZml4ICsgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCkKCiAgZGVmIGNsZWFyX3RpbWVyKHNlbGYsIG5hbWUsIHRpbWVfZG9tYWluKToKICAgIHNlbGYuX291dGVyLmNsZWFyX3RpbWVyKHNlbGYuX3ByZWZpeCArIG5hbWUsIHRpbWVfZG9tYWluKQoKICBkZWYgYWRkX3N0YXRlKHNlbGYsIHRhZywgdmFsdWUpOgogICAgc2VsZi5fb3V0ZXIuYWRkX3N0YXRlKHRhZy53aXRoX3ByZWZpeChzZWxmLl9wcmVmaXgpLCB2YWx1ZSkKCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB0YWcpOgogICAgcmV0dXJuIHNlbGYuX291dGVyLmdldF9zdGF0ZSh0YWcud2l0aF9wcmVmaXgoc2VsZi5fcHJlZml4KSkKCiAgZGVmIGNsZWFyX3N0YXRlKHNlbGYsIHRhZyk6CiAgICBzZWxmLl9vdXRlci5jbGVhcl9zdGF0ZSh0YWcud2l0aF9wcmVmaXgoc2VsZi5fcHJlZml4KSkKCgojIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKY2xhc3MgU2ltcGxlU3RhdGUob2JqZWN0KToKICAiIiJCYXNpYyBzdGF0ZSBzdG9yYWdlIGludGVyZmFjZSB1c2VkIGZvciB0cmlnZ2VyaW5nLgoKICBPbmx5IHRpbWVycyBtdXN0IGhvbGQgdGhlIHdhdGVybWFyayAoYnkgdGhlaXIgdGltZXN0YW1wKS4KICAiIiIKCiAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X3dpbmRvdyhzZWxmLCB3aW5kb3dfaWQpOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIGRlZiBhdChzZWxmLCB3aW5kb3cpOgogICAgcmV0dXJuIFRyaWdnZXJDb250ZXh0KHNlbGYsIHdpbmRvdykKCgpjbGFzcyBVbm1lcmdlZFN0YXRlKFNpbXBsZVN0YXRlKToKICAiIiJTdGF0ZSBzdWl0YWJsZSBmb3IgdXNlIGluIFRyaWdnZXJEcml2ZXIuCgogIFRoaXMgY2xhc3MgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGJhY2tlbmQuCiAgIiIiCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBzZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgdmFsdWUpOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB0YWcsIGRlZmF1bHQ9Tm9uZSk6CiAgICBwYXNzCiMgcHlsaW50OiBlbmFibGU9dW51c2VkLWFyZ3VtZW50CgoKY2xhc3MgTWVyZ2VhYmxlU3RhdGVBZGFwdGVyKFNpbXBsZVN0YXRlKToKICAiIiJXcmFwcyBhbiBVbm1lcmdlZFN0YXRlLCB0cmFja2luZyBtZXJnZWQgd2luZG93cy4iIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBBIHNpbWlsYXIgaW5kaXJlY3Rpb24gY291bGQgYmUgdXNlZCBmb3Igc2xpZGluZyB3aW5kb3dzCiAgIyBvciBvdGhlciB3aW5kb3dfZm5zIHdoZW4gYSBzaW5nbGUgZWxlbWVudCB0eXBpY2FsbHkgYmVsb25ncyB0byBtYW55IHdpbmRvd3MuCgogIFdJTkRPV19JRFMgPSBfVmFsdWVTdGF0ZVRhZygnd2luZG93X2lkcycpCgogIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfc3RhdGUpOgogICAgc2VsZi5yYXdfc3RhdGUgPSByYXdfc3RhdGUKICAgIHNlbGYud2luZG93X2lkcyA9IHNlbGYucmF3X3N0YXRlLmdldF9nbG9iYWxfc3RhdGUoc2VsZi5XSU5ET1dfSURTLCB7fSkKICAgIHNlbGYuY291bnRlciA9IE5vbmUKCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgc2VsZi5yYXdfc3RhdGUuc2V0X3RpbWVyKHNlbGYuX2dldF9pZCh3aW5kb3cpLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKQoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBmb3Igd2luZG93X2lkIGluIHNlbGYuX2dldF9pZHMod2luZG93KToKICAgICAgc2VsZi5yYXdfc3RhdGUuY2xlYXJfdGltZXIod2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbikKCiAgZGVmIGFkZF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZywgdmFsdWUpOgogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9WYWx1ZVN0YXRlVGFnKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNZXJnaW5nIHJlcXVlc3RlZCBmb3Igbm9uLW1lcmdlYWJsZSBzdGF0ZSB0YWc6ICVyLicgJSB0YWcpCiAgICBzZWxmLnJhd19zdGF0ZS5hZGRfc3RhdGUoc2VsZi5fZ2V0X2lkKHdpbmRvdyksIHRhZywgdmFsdWUpCgogIGRlZiBnZXRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcpOgogICAgdmFsdWVzID0gW3NlbGYucmF3X3N0YXRlLmdldF9zdGF0ZSh3aW5kb3dfaWQsIHRhZykKICAgICAgICAgICAgICBmb3Igd2luZG93X2lkIGluIHNlbGYuX2dldF9pZHMod2luZG93KV0KICAgIGlmIGlzaW5zdGFuY2UodGFnLCBfVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTWVyZ2luZyByZXF1ZXN0ZWQgZm9yIG5vbi1tZXJnZWFibGUgc3RhdGUgdGFnOiAlci4nICUgdGFnKQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcpOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBTdHJpcCBjb21iaW5lX2ZuLmV4dHJhY3Rfb3V0cHV0IGZyb20gcmF3X3N0YXRlIHRhZy4KICAgICAgaWYgbm90IHZhbHVlczoKICAgICAgICBhY2N1bXVsYXRvciA9IHRhZy5jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcigpCiAgICAgIGVsaWYgbGVuKHZhbHVlcykgPT0gMToKICAgICAgICBhY2N1bXVsYXRvciA9IHZhbHVlc1swXQogICAgICBlbHNlOgogICAgICAgIGFjY3VtdWxhdG9yID0gdGFnLmNvbWJpbmVfZm4ubWVyZ2VfYWNjdW11bGF0b3JzKHZhbHVlcykKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBTdG9yZSB0aGUgbWVyZ2VkIHZhbHVlIGluIHRoZSBmaXJzdCB0YWcuCiAgICAgIHJldHVybiB0YWcuY29tYmluZV9mbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvcikKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9MaXN0U3RhdGVUYWcpOgogICAgICByZXR1cm4gW3YgZm9yIHZzIGluIHZhbHVlcyBmb3IgdiBpbiB2c10KICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcpOgogICAgICByZXR1cm4gdGFnLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsLmNvbWJpbmVfYWxsKHZhbHVlcykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFnLicsIHRhZykKCiAgZGVmIGNsZWFyX3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnKToKICAgIGZvciB3aW5kb3dfaWQgaW4gc2VsZi5fZ2V0X2lkcyh3aW5kb3cpOgogICAgICBzZWxmLnJhd19zdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3dfaWQsIHRhZykKICAgIGlmIHRhZyBpcyBOb25lOgogICAgICBkZWwgc2VsZi53aW5kb3dfaWRzW3dpbmRvd10KICAgICAgc2VsZi5fcGVyc2lzdF93aW5kb3dfaWRzKCkKCiAgZGVmIG1lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0KToKICAgIGZvciB3aW5kb3cgaW4gdG9fYmVfbWVyZ2VkOgogICAgICBpZiB3aW5kb3cgIT0gbWVyZ2VfcmVzdWx0OgogICAgICAgIGlmIHdpbmRvdyBpbiBzZWxmLndpbmRvd19pZHM6CiAgICAgICAgICBpZiBtZXJnZV9yZXN1bHQgaW4gc2VsZi53aW5kb3dfaWRzOgogICAgICAgICAgICBtZXJnZV93aW5kb3dfaWRzID0gc2VsZi53aW5kb3dfaWRzW21lcmdlX3Jlc3VsdF0KICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1lcmdlX3dpbmRvd19pZHMgPSBzZWxmLndpbmRvd19pZHNbbWVyZ2VfcmVzdWx0XSA9IFtdCiAgICAgICAgICBtZXJnZV93aW5kb3dfaWRzLmV4dGVuZChzZWxmLndpbmRvd19pZHMucG9wKHdpbmRvdykpCiAgICAgICAgICBzZWxmLl9wZXJzaXN0X3dpbmRvd19pZHMoKQoKICBkZWYga25vd25fd2luZG93cyhzZWxmKToKICAgIHJldHVybiBzZWxmLndpbmRvd19pZHMua2V5cygpCgogIGRlZiBnZXRfd2luZG93KHNlbGYsIHdpbmRvd19pZCk6CiAgICBmb3Igd2luZG93LCBpZHMgaW4gc2VsZi53aW5kb3dfaWRzLml0ZW1zKCk6CiAgICAgIGlmIHdpbmRvd19pZCBpbiBpZHM6CiAgICAgICAgcmV0dXJuIHdpbmRvdwogICAgcmFpc2UgVmFsdWVFcnJvcignTm8gd2luZG93IGZvciAlcycgJSB3aW5kb3dfaWQpCgogIGRlZiBfZ2V0X2lkKHNlbGYsIHdpbmRvdyk6CiAgICBpZiB3aW5kb3cgaW4gc2VsZi53aW5kb3dfaWRzOgogICAgICByZXR1cm4gc2VsZi53aW5kb3dfaWRzW3dpbmRvd11bMF0KCiAgICB3aW5kb3dfaWQgPSBzZWxmLl9nZXRfbmV4dF9jb3VudGVyKCkKICAgIHNlbGYud2luZG93X2lkc1t3aW5kb3ddID0gW3dpbmRvd19pZF0KICAgIHNlbGYuX3BlcnNpc3Rfd2luZG93X2lkcygpCiAgICByZXR1cm4gd2luZG93X2lkCgogIGRlZiBfZ2V0X2lkcyhzZWxmLCB3aW5kb3cpOgogICAgcmV0dXJuIHNlbGYud2luZG93X2lkcy5nZXQod2luZG93LCBbXSkKCiAgZGVmIF9nZXRfbmV4dF9jb3VudGVyKHNlbGYpOgogICAgaWYgbm90IHNlbGYud2luZG93X2lkczoKICAgICAgc2VsZi5jb3VudGVyID0gMAogICAgZWxpZiBzZWxmLmNvdW50ZXIgaXMgTm9uZToKICAgICAgc2VsZi5jb3VudGVyID0gbWF4KGsgZm9yIGlkcyBpbiBzZWxmLndpbmRvd19pZHMudmFsdWVzKCkgZm9yIGsgaW4gaWRzKQogICAgc2VsZi5jb3VudGVyICs9IDEKICAgIHJldHVybiBzZWxmLmNvdW50ZXIKCiAgZGVmIF9wZXJzaXN0X3dpbmRvd19pZHMoc2VsZik6CiAgICBzZWxmLnJhd19zdGF0ZS5zZXRfZ2xvYmFsX3N0YXRlKHNlbGYuV0lORE9XX0lEUywgc2VsZi53aW5kb3dfaWRzKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1xuXHQnLmpvaW4oW3JlcHIoc2VsZi53aW5kb3dfaWRzKV0gKwogICAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2VsZi5yYXdfc3RhdGUpLnNwbGl0KCdcbicpKQoKCmRlZiBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIod2luZG93aW5nLCBpc19iYXRjaD1GYWxzZSwgcGhhc2VkX2NvbWJpbmVfZm49Tm9uZSk6CiAgIiIiQ3JlYXRlIHRoZSBUcmlnZ2VyRHJpdmVyIGZvciB0aGUgZ2l2ZW4gd2luZG93aW5nIGFuZCBvcHRpb25zLiIiIgoKICAjIFRPRE8ocm9iZXJ0d2IpOiBXZSBjYW4gZG8gbW9yZSBpZiB3ZSBrbm93IGVsZW1lbnRzIGFyZSBpbiB0aW1lc3RhbXAKICAjIHNvcnRlZCBvcmRlci4KICBpZiB3aW5kb3dpbmcuaXNfZGVmYXVsdCgpIGFuZCBpc19iYXRjaDoKICAgIGRyaXZlciA9IERlZmF1bHRHbG9iYWxCYXRjaFRyaWdnZXJEcml2ZXIoKQogIGVsc2U6CiAgICBkcml2ZXIgPSBHZW5lcmFsVHJpZ2dlckRyaXZlcih3aW5kb3dpbmcpCgogIGlmIHBoYXNlZF9jb21iaW5lX2ZuOgogICAgIyBUT0RPKGNjeSk6IFJlZmFjdG9yIEdlbmVyYWxUcmlnZ2VyRHJpdmVyIHRvIGNvbWJpbmUgdmFsdWVzIGVhZ2VybHkgdXNpbmcKICAgICMgdGhlIGtub3duIHBoYXNlZF9jb21iaW5lX2ZuIGhlcmUuCiAgICBkcml2ZXIgPSBDb21iaW5pbmdUcmlnZ2VyRHJpdmVyKHBoYXNlZF9jb21iaW5lX2ZuLCBkcml2ZXIpCiAgcmV0dXJuIGRyaXZlcgoKCmNsYXNzIFRyaWdnZXJEcml2ZXIob2JqZWN0KToKICAiIiJCcmVha3MgYSBzZXJpZXMgb2YgYnVuZGxlIGFuZCB0aW1lciBmaXJpbmdzIGludG8gd2luZG93IChwYW5lKXMuIiIiCgogIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKHNlbGYsIHN0YXRlLCB3aW5kb3dlZF92YWx1ZXMsIG91dHB1dF93YXRlcm1hcmspOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgcHJvY2Vzc190aW1lcihzZWxmLCB3aW5kb3dfaWQsIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXAsIHN0YXRlKToKICAgIHBhc3MKCiAgZGVmIHByb2Nlc3NfZW50aXJlX2tleSgKICAgICAgc2VsZiwga2V5LCB3aW5kb3dlZF92YWx1ZXMsIG91dHB1dF93YXRlcm1hcms9TUlOX1RJTUVTVEFNUCk6CiAgICBzdGF0ZSA9IEluTWVtb3J5VW5tZXJnZWRTdGF0ZSgpCiAgICBmb3Igd3ZhbHVlIGluIHNlbGYucHJvY2Vzc19lbGVtZW50cygKICAgICAgICBzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLCBvdXRwdXRfd2F0ZXJtYXJrKToKICAgICAgeWllbGQgd3ZhbHVlLndpdGhfdmFsdWUoKGtleSwgd3ZhbHVlLnZhbHVlKSkKICAgIHdoaWxlIHN0YXRlLnRpbWVyczoKICAgICAgZmlyZWQgPSBzdGF0ZS5nZXRfYW5kX2NsZWFyX3RpbWVycygpCiAgICAgIGZvciB0aW1lcl93aW5kb3csIChuYW1lLCB0aW1lX2RvbWFpbiwgZmlyZV90aW1lKSBpbiBmaXJlZDoKICAgICAgICBmb3Igd3ZhbHVlIGluIHNlbGYucHJvY2Vzc190aW1lcigKICAgICAgICAgICAgdGltZXJfd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbiwgZmlyZV90aW1lLCBzdGF0ZSk6CiAgICAgICAgICB5aWVsZCB3dmFsdWUud2l0aF92YWx1ZSgoa2V5LCB3dmFsdWUudmFsdWUpKQoKCmNsYXNzIF9VbndpbmRvd2VkVmFsdWVzKG9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluKToKICAiIiJFeHBvc2VzIGl0ZXJhYmxlIG9mIHdpbmRvd2VkIHZhbHVlcyBhcyBpdGVyYWJsZSBvZiB1bndpbmRvd2VkIHZhbHVlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2VkX3ZhbHVlcyk6CiAgICBzdXBlcihfVW53aW5kb3dlZFZhbHVlcywgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fd2luZG93ZWRfdmFsdWVzID0gd2luZG93ZWRfdmFsdWVzCgogIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgIGZvciB3diBpbiBzZWxmLl93aW5kb3dlZF92YWx1ZXM6CiAgICAgIHVud2luZG93ZWRfdmFsdWUgPSB3di52YWx1ZQogICAgICBzZWxmLm5vdGlmeV9vYnNlcnZlcnModW53aW5kb3dlZF92YWx1ZSkKICAgICAgeWllbGQgdW53aW5kb3dlZF92YWx1ZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzxfVW53aW5kb3dlZFZhbHVlcyBvZiAlcz4nICUgc2VsZi5fd2luZG93ZWRfdmFsdWVzCgogIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgcmV0dXJuIGxpc3QsIChsaXN0KHNlbGYpLCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CiAgICAgIHJldHVybiBhbGwoCiAgICAgICAgICBhID09IGIKICAgICAgICAgIGZvciBhLCBiIGluIGl0ZXJ0b29scy5pemlwX2xvbmdlc3Qoc2VsZiwgb3RoZXIsIGZpbGx2YWx1ZT1vYmplY3QoKSkpCiAgICBlbHNlOgogICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCgpjbGFzcyBEZWZhdWx0R2xvYmFsQmF0Y2hUcmlnZ2VyRHJpdmVyKFRyaWdnZXJEcml2ZXIpOgogICIiIkJyZWFrcyBhIGJ1bmRsZXMgaW50byB3aW5kb3cgKHBhbmUpcyBhY2NvcmRpbmcgdG8gdGhlIGRlZmF1bHQgdHJpZ2dlcmluZy4KICAiIiIKICBHTE9CQUxfV0lORE9XX1RVUExFID0gKEdsb2JhbFdpbmRvdygpLCkKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgcGFzcwoKICBkZWYgcHJvY2Vzc19lbGVtZW50cyhzZWxmLCBzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLCB1bnVzZWRfb3V0cHV0X3dhdGVybWFyayk6CiAgICB5aWVsZCBXaW5kb3dlZFZhbHVlKAogICAgICAgIF9VbndpbmRvd2VkVmFsdWVzKHdpbmRvd2VkX3ZhbHVlcyksCiAgICAgICAgTUlOX1RJTUVTVEFNUCwKICAgICAgICBzZWxmLkdMT0JBTF9XSU5ET1dfVFVQTEUpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHdpbmRvd19pZCwgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCwgc3RhdGUpOgogICAgcmFpc2UgVHlwZUVycm9yKCdUcmlnZ2VycyBuZXZlciBzZXQgb3IgY2FsbGVkIGZvciBiYXRjaCBkZWZhdWx0IHdpbmRvd2luZy4nKQoKCmNsYXNzIENvbWJpbmluZ1RyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiVXNlcyBhIHBoYXNlZF9jb21iaW5lX2ZuIHRvIHByb2Nlc3Mgb3V0cHV0IG9mIHdyYXBwZWQgVHJpZ2dlckRyaXZlci4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBoYXNlZF9jb21iaW5lX2ZuLCB1bmRlcmx5aW5nKToKICAgIHNlbGYucGhhc2VkX2NvbWJpbmVfZm4gPSBwaGFzZWRfY29tYmluZV9mbgogICAgc2VsZi51bmRlcmx5aW5nID0gdW5kZXJseWluZwoKICBkZWYgcHJvY2Vzc19lbGVtZW50cyhzZWxmLCBzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLCBvdXRwdXRfd2F0ZXJtYXJrKToKICAgIHVuY29tYmluZWQgPSBzZWxmLnVuZGVybHlpbmcucHJvY2Vzc19lbGVtZW50cyhzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF93YXRlcm1hcmspCiAgICBmb3Igb3V0cHV0IGluIHVuY29tYmluZWQ6CiAgICAgIHlpZWxkIG91dHB1dC53aXRoX3ZhbHVlKHNlbGYucGhhc2VkX2NvbWJpbmVfZm4uYXBwbHkob3V0cHV0LnZhbHVlKSkKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgd2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wLCBzdGF0ZSk6CiAgICB1bmNvbWJpbmVkID0gc2VsZi51bmRlcmx5aW5nLnByb2Nlc3NfdGltZXIod2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsIHN0YXRlKQogICAgZm9yIG91dHB1dCBpbiB1bmNvbWJpbmVkOgogICAgICB5aWVsZCBvdXRwdXQud2l0aF92YWx1ZShzZWxmLnBoYXNlZF9jb21iaW5lX2ZuLmFwcGx5KG91dHB1dC52YWx1ZSkpCgoKY2xhc3MgR2VuZXJhbFRyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiQnJlYWtzIGEgc2VyaWVzIG9mIGJ1bmRsZSBhbmQgdGltZXIgZmlyaW5ncyBpbnRvIHdpbmRvdyAocGFuZSlzLgoKICBTdWl0YWJsZSBmb3IgYWxsIHZhcmlhbnRzIG9mIFdpbmRvd2luZy4KICAiIiIKICBFTEVNRU5UUyA9IF9MaXN0U3RhdGVUYWcoJ2VsZW1lbnRzJykKICBUT01CU1RPTkUgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygndG9tYnN0b25lJywgY29tYmluZXJzLkNvdW50Q29tYmluZUZuKCkpCgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dpbmcpOgogICAgc2VsZi53aW5kb3dfZm4gPSB3aW5kb3dpbmcud2luZG93Zm4KICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwgPSBUaW1lc3RhbXBDb21iaW5lci5nZXRfaW1wbCgKICAgICAgICB3aW5kb3dpbmcudGltZXN0YW1wX2NvbWJpbmVyLCBzZWxmLndpbmRvd19mbikKICAgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgc2VsZi5XQVRFUk1BUktfSE9MRCA9IF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcoCiAgICAgICAgJ3dhdGVybWFyaycsIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwpCiAgICAjIHB5bGludDogZW5hYmxlPWludmFsaWQtbmFtZQogICAgc2VsZi50cmlnZ2VyX2ZuID0gd2luZG93aW5nLnRyaWdnZXJmbgogICAgc2VsZi5hY2N1bXVsYXRpb25fbW9kZSA9IHdpbmRvd2luZy5hY2N1bXVsYXRpb25fbW9kZQogICAgc2VsZi5pc19tZXJnaW5nID0gVHJ1ZQoKICBkZWYgcHJvY2Vzc19lbGVtZW50cyhzZWxmLCBzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLCBvdXRwdXRfd2F0ZXJtYXJrKToKICAgIGlmIHNlbGYuaXNfbWVyZ2luZzoKICAgICAgc3RhdGUgPSBNZXJnZWFibGVTdGF0ZUFkYXB0ZXIoc3RhdGUpCgogICAgd2luZG93c190b19lbGVtZW50cyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBmb3Igd3YgaW4gd2luZG93ZWRfdmFsdWVzOgogICAgICBmb3Igd2luZG93IGluIHd2LndpbmRvd3M6CiAgICAgICAgd2luZG93c190b19lbGVtZW50c1t3aW5kb3ddLmFwcGVuZCgod3YudmFsdWUsIHd2LnRpbWVzdGFtcCkpCgogICAgIyBGaXJzdCBoYW5kbGUgbWVyZ2luZy4KICAgIGlmIHNlbGYuaXNfbWVyZ2luZzoKICAgICAgb2xkX3dpbmRvd3MgPSBzZXQoc3RhdGUua25vd25fd2luZG93cygpKQogICAgICBhbGxfd2luZG93cyA9IG9sZF93aW5kb3dzLnVuaW9uKHdpbmRvd3NfdG9fZWxlbWVudHMua2V5cygpKQoKICAgICAgaWYgYWxsX3dpbmRvd3MgIT0gb2xkX3dpbmRvd3M6CiAgICAgICAgbWVyZ2VkX2F3YXkgPSB7fQoKICAgICAgICBjbGFzcyBUcmlnZ2VyTWVyZ2VDb250ZXh0KFdpbmRvd0ZuLk1lcmdlQ29udGV4dCk6CgogICAgICAgICAgZGVmIG1lcmdlKF8sIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0KTogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtYXJndW1lbnQKICAgICAgICAgICAgZm9yIHdpbmRvdyBpbiB0b19iZV9tZXJnZWQ6CiAgICAgICAgICAgICAgaWYgd2luZG93ICE9IG1lcmdlX3Jlc3VsdDoKICAgICAgICAgICAgICAgIG1lcmdlZF9hd2F5W3dpbmRvd10gPSBtZXJnZV9yZXN1bHQKICAgICAgICAgICAgc3RhdGUubWVyZ2UodG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQpCiAgICAgICAgICAgICMgdXNpbmcgdGhlIG91dGVyIHNlbGYgYXJndW1lbnQuCiAgICAgICAgICAgIHNlbGYudHJpZ2dlcl9mbi5vbl9tZXJnZSgKICAgICAgICAgICAgICAgIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBzdGF0ZS5hdChtZXJnZV9yZXN1bHQpKQoKICAgICAgICBzZWxmLndpbmRvd19mbi5tZXJnZShUcmlnZ2VyTWVyZ2VDb250ZXh0KGFsbF93aW5kb3dzKSkKCiAgICAgICAgbWVyZ2VkX3dpbmRvd3NfdG9fZWxlbWVudHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogICAgICAgIGZvciB3aW5kb3csIHZhbHVlcyBpbiB3aW5kb3dzX3RvX2VsZW1lbnRzLml0ZW1zKCk6CiAgICAgICAgICB3aGlsZSB3aW5kb3cgaW4gbWVyZ2VkX2F3YXk6CiAgICAgICAgICAgIHdpbmRvdyA9IG1lcmdlZF9hd2F5W3dpbmRvd10KICAgICAgICAgIG1lcmdlZF93aW5kb3dzX3RvX2VsZW1lbnRzW3dpbmRvd10uZXh0ZW5kKHZhbHVlcykKICAgICAgICB3aW5kb3dzX3RvX2VsZW1lbnRzID0gbWVyZ2VkX3dpbmRvd3NfdG9fZWxlbWVudHMKCiAgICAgICAgZm9yIHdpbmRvdyBpbiBtZXJnZWRfYXdheToKICAgICAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5XQVRFUk1BUktfSE9MRCkKCiAgICAjIE5leHQgaGFuZGxlIGVsZW1lbnQgYWRkaW5nLgogICAgZm9yIHdpbmRvdywgZWxlbWVudHMgaW4gd2luZG93c190b19lbGVtZW50cy5pdGVtcygpOgogICAgICBpZiBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLlRPTUJTVE9ORSk6CiAgICAgICAgY29udGludWUKICAgICAgIyBBZGQgd2F0ZXJtYXJrIGhvbGQuCiAgICAgICMgVE9ETyhjY3kpOiBBZGQgbGF0ZSBkYXRhIGFuZCBnYXJiYWdlLWNvbGxlY3Rpb24gaG9sZCBzdXBwb3J0LgogICAgICBvdXRwdXRfdGltZSA9IHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwubWVyZ2UoCiAgICAgICAgICB3aW5kb3csCiAgICAgICAgICAoZWxlbWVudF9vdXRwdXRfdGltZSBmb3IgZWxlbWVudF9vdXRwdXRfdGltZSBpbgogICAgICAgICAgIChzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsLmFzc2lnbl9vdXRwdXRfdGltZSh3aW5kb3csIHRpbWVzdGFtcCkKICAgICAgICAgICAgZm9yIHVudXNlZF92YWx1ZSwgdGltZXN0YW1wIGluIGVsZW1lbnRzKQogICAgICAgICAgIGlmIGVsZW1lbnRfb3V0cHV0X3RpbWUgPj0gb3V0cHV0X3dhdGVybWFyaykpCiAgICAgIGlmIG91dHB1dF90aW1lIGlzIG5vdCBOb25lOgogICAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQsIG91dHB1dF90aW1lKQoKICAgICAgY29udGV4dCA9IHN0YXRlLmF0KHdpbmRvdykKICAgICAgZm9yIHZhbHVlLCB1bnVzZWRfdGltZXN0YW1wIGluIGVsZW1lbnRzOgogICAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYuRUxFTUVOVFMsIHZhbHVlKQogICAgICAgIHNlbGYudHJpZ2dlcl9mbi5vbl9lbGVtZW50KHZhbHVlLCB3aW5kb3csIGNvbnRleHQpCgogICAgICAjIE1heWJlIGZpcmUgdGhpcyB3aW5kb3cuCiAgICAgIHdhdGVybWFyayA9IE1JTl9USU1FU1RBTVAKICAgICAgaWYgc2VsZi50cmlnZ2VyX2ZuLnNob3VsZF9maXJlKHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgICAgICBmaW5pc2hlZCA9IHNlbGYudHJpZ2dlcl9mbi5vbl9maXJlKHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KQogICAgICAgIHlpZWxkIHNlbGYuX291dHB1dCh3aW5kb3csIGZpbmlzaGVkLCBzdGF0ZSkKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgd2luZG93X2lkLCB1bnVzZWRfbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICBzdGF0ZSk6CiAgICBpZiBzZWxmLmlzX21lcmdpbmc6CiAgICAgIHN0YXRlID0gTWVyZ2VhYmxlU3RhdGVBZGFwdGVyKHN0YXRlKQogICAgd2luZG93ID0gc3RhdGUuZ2V0X3dpbmRvdyh3aW5kb3dfaWQpCiAgICBpZiBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLlRPTUJTVE9ORSk6CiAgICAgIHJldHVybgogICAgaWYgdGltZV9kb21haW4gPT0gVGltZURvbWFpbi5XQVRFUk1BUks6CiAgICAgIGlmIG5vdCBzZWxmLmlzX21lcmdpbmcgb3Igd2luZG93IGluIHN0YXRlLmtub3duX3dpbmRvd3MoKToKICAgICAgICBjb250ZXh0ID0gc3RhdGUuYXQod2luZG93KQogICAgICAgIGlmIHNlbGYudHJpZ2dlcl9mbi5zaG91bGRfZmlyZSh0aW1lc3RhbXAsIHdpbmRvdywgY29udGV4dCk6CiAgICAgICAgICBmaW5pc2hlZCA9IHNlbGYudHJpZ2dlcl9mbi5vbl9maXJlKHRpbWVzdGFtcCwgd2luZG93LCBjb250ZXh0KQogICAgICAgICAgeWllbGQgc2VsZi5fb3V0cHV0KHdpbmRvdywgZmluaXNoZWQsIHN0YXRlKQogICAgZWxzZToKICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIHRpbWUgZG9tYWluOiAlcycgJSB0aW1lX2RvbWFpbikKCiAgZGVmIF9vdXRwdXQoc2VsZiwgd2luZG93LCBmaW5pc2hlZCwgc3RhdGUpOgogICAgIiIiT3V0cHV0IHdpbmRvdyBhbmQgY2xlYW4gdXAgaWYgYXBwcm9wcmlhdGUuIiIiCgogICAgdmFsdWVzID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5FTEVNRU5UUykKICAgIGlmIGZpbmlzaGVkOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBhbGxvd2VkIGxhdGVuZXNzCiAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5FTEVNRU5UUykKICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5UT01CU1RPTkUsIDEpCiAgICBlbGlmIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPT0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HOgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuRUxFTUVOVFMpCgogICAgdGltZXN0YW1wID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5XQVRFUk1BUktfSE9MRCkKICAgIGlmIHRpbWVzdGFtcCBpcyBOb25lOgogICAgICAjIElmIG5vIHdhdGVybWFyayBob2xkIHdhcyBzZXQsIG91dHB1dCBhdCBlbmQgb2Ygd2luZG93LgogICAgICB0aW1lc3RhbXAgPSB3aW5kb3cuZW5kCiAgICBlbHNlOgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCgogICAgcmV0dXJuIFdpbmRvd2VkVmFsdWUodmFsdWVzLCB0aW1lc3RhbXAsICh3aW5kb3csKSkKCgpjbGFzcyBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoVW5tZXJnZWRTdGF0ZSk6CiAgIiIiSW4tbWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIFVubWVyZ2VkU3RhdGUuCgogIFVzZWQgZm9yIGJhdGNoIGFuZCB0ZXN0aW5nLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZlbnNpdmVfY29weT1UcnVlKToKICAgICMgVE9ETyhyb2JlcnR3Yik6IFNraXAgZGVmZW5zaXZlX2NvcHkgaW4gcHJvZHVjdGlvbiBpZiBpdCdzIHRvbyBleHBlbnNpdmUuCiAgICBzZWxmLnRpbWVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGRpY3QpCiAgICBzZWxmLnN0YXRlID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KSkKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0ge30KICAgIHNlbGYuZGVmZW5zaXZlX2NvcHkgPSBkZWZlbnNpdmVfY29weQoKICBkZWYgY29weShzZWxmKToKICAgIGNsb25lZF9vYmplY3QgPSBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoZGVmZW5zaXZlX2NvcHk9c2VsZi5kZWZlbnNpdmVfY29weSkKICAgIGNsb25lZF9vYmplY3QudGltZXJzID0gY29weS5kZWVwY29weShzZWxmLnRpbWVycykKICAgIGNsb25lZF9vYmplY3QuZ2xvYmFsX3N0YXRlID0gY29weS5kZWVwY29weShzZWxmLmdsb2JhbF9zdGF0ZSkKICAgIGZvciB3aW5kb3cgaW4gc2VsZi5zdGF0ZToKICAgICAgZm9yIHRhZyBpbiBzZWxmLnN0YXRlW3dpbmRvd106CiAgICAgICAgY2xvbmVkX29iamVjdC5zdGF0ZVt3aW5kb3ddW3RhZ10gPSBjb3B5LmNvcHkoc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZ10pCiAgICByZXR1cm4gY2xvbmVkX29iamVjdAoKICBkZWYgc2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB0YWcsIHZhbHVlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHRhZywgX1ZhbHVlU3RhdGVUYWcpCiAgICBpZiBzZWxmLmRlZmVuc2l2ZV9jb3B5OgogICAgICB2YWx1ZSA9IGNvcHkuZGVlcGNvcHkodmFsdWUpCiAgICBzZWxmLmdsb2JhbF9zdGF0ZVt0YWcudGFnXSA9IHZhbHVlCgogIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgZGVmYXVsdD1Ob25lKToKICAgIHJldHVybiBzZWxmLmdsb2JhbF9zdGF0ZS5nZXQodGFnLnRhZywgZGVmYXVsdCkKCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgc2VsZi50aW1lcnNbd2luZG93XVsobmFtZSwgdGltZV9kb21haW4pXSA9IHRpbWVzdGFtcAoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBzZWxmLnRpbWVyc1t3aW5kb3ddLnBvcCgobmFtZSwgdGltZV9kb21haW4pLCBOb25lKQogICAgaWYgbm90IHNlbGYudGltZXJzW3dpbmRvd106CiAgICAgIGRlbCBzZWxmLnRpbWVyc1t3aW5kb3ddCgogIGRlZiBnZXRfd2luZG93KHNlbGYsIHdpbmRvd19pZCk6CiAgICByZXR1cm4gd2luZG93X2lkCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIGlmIHNlbGYuZGVmZW5zaXZlX2NvcHk6CiAgICAgIHZhbHVlID0gY29weS5kZWVwY29weSh2YWx1ZSkKICAgIGlmIGlzaW5zdGFuY2UodGFnLCBfVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXSA9IHZhbHVlCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXS5hcHBlbmQodmFsdWUpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfTGlzdFN0YXRlVGFnKToKICAgICAgc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZy50YWddLmFwcGVuZCh2YWx1ZSkKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcpOgogICAgICBzZWxmLnN0YXRlW3dpbmRvd11bdGFnLnRhZ10uYXBwZW5kKHZhbHVlKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB0YWcuJywgdGFnKQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnKToKICAgIHZhbHVlcyA9IHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXQogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9WYWx1ZVN0YXRlVGFnKToKICAgICAgcmV0dXJuIHZhbHVlcwogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcpOgogICAgICByZXR1cm4gdGFnLmNvbWJpbmVfZm4uYXBwbHkodmFsdWVzKQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0xpc3RTdGF0ZVRhZyk6CiAgICAgIHJldHVybiB2YWx1ZXMKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcpOgogICAgICByZXR1cm4gdGFnLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsLmNvbWJpbmVfYWxsKHZhbHVlcykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFnLicsIHRhZykKCiAgZGVmIGNsZWFyX3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnKToKICAgIHNlbGYuc3RhdGVbd2luZG93XS5wb3AodGFnLnRhZywgTm9uZSkKICAgIGlmIG5vdCBzZWxmLnN0YXRlW3dpbmRvd106CiAgICAgIHNlbGYuc3RhdGUucG9wKHdpbmRvdywgTm9uZSkKCiAgZGVmIGdldF90aW1lcnMoc2VsZiwgY2xlYXI9RmFsc2UsIHdhdGVybWFyaz1NQVhfVElNRVNUQU1QLAogICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdfdGltZT1Ob25lKToKICAgICIiIkdldHMgZXhwaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgaWYgdGhlcmUKICAgIGFyZSBhbnkgcmVhbHRpbWUgdGltZXJzIHNldCBwZXIgc3RhdGUuCgogICAgRXhwaXJhdGlvbiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSB3YXRlcm1hcmsgZm9yIGV2ZW50LXRpbWUgdGltZXJzLAogICAgYW5kIGFnYWluc3QgYSB3YWxsIGNsb2NrIGZvciBwcm9jZXNzaW5nLXRpbWUgdGltZXJzLgogICAgIiIiCiAgICBleHBpcmVkID0gW10KICAgIGhhc19yZWFsdGltZV90aW1lciA9IEZhbHNlCiAgICBmb3Igd2luZG93LCB0aW1lcnMgaW4gbGlzdChzZWxmLnRpbWVycy5pdGVtcygpKToKICAgICAgZm9yIChuYW1lLCB0aW1lX2RvbWFpbiksIHRpbWVzdGFtcCBpbiBsaXN0KHRpbWVycy5pdGVtcygpKToKICAgICAgICBpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLlJFQUxfVElNRToKICAgICAgICAgIHRpbWVfbWFya2VyID0gcHJvY2Vzc2luZ190aW1lCiAgICAgICAgICBoYXNfcmVhbHRpbWVfdGltZXIgPSBUcnVlCiAgICAgICAgZWxpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLldBVEVSTUFSSzoKICAgICAgICAgIHRpbWVfbWFya2VyID0gd2F0ZXJtYXJrCiAgICAgICAgZWxzZToKICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAgICAgJ1RpbWVEb21haW4gZXJyb3I6IE5vIHRpbWVycyBkZWZpbmVkIGZvciB0aW1lIGRvbWFpbiAlcy4nLAogICAgICAgICAgICAgIHRpbWVfZG9tYWluKQogICAgICAgIGlmIHRpbWVzdGFtcCA8PSB0aW1lX21hcmtlcjoKICAgICAgICAgIGV4cGlyZWQuYXBwZW5kKCh3aW5kb3csIChuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSkpCiAgICAgICAgICBpZiBjbGVhcjoKICAgICAgICAgICAgZGVsIHRpbWVyc1sobmFtZSwgdGltZV9kb21haW4pXQogICAgICBpZiBub3QgdGltZXJzIGFuZCBjbGVhcjoKICAgICAgICBkZWwgc2VsZi50aW1lcnNbd2luZG93XQogICAgcmV0dXJuIGV4cGlyZWQsIGhhc19yZWFsdGltZV90aW1lcgoKICBkZWYgZ2V0X2FuZF9jbGVhcl90aW1lcnMoc2VsZiwgd2F0ZXJtYXJrPU1BWF9USU1FU1RBTVApOgogICAgcmV0dXJuIHNlbGYuZ2V0X3RpbWVycyhjbGVhcj1UcnVlLCB3YXRlcm1hcms9d2F0ZXJtYXJrKVswXQoKICBkZWYgZ2V0X2VhcmxpZXN0X2hvbGQoc2VsZik6CiAgICBlYXJsaWVzdF9ob2xkID0gTUFYX1RJTUVTVEFNUAogICAgZm9yIHVudXNlZF93aW5kb3csIHRhZ2dlZF9zdGF0ZXMgaW4gc2VsZi5zdGF0ZS5pdGVyaXRlbXMoKToKICAgICAgIyBUT0RPKEJFQU0tMjUxOSk6IGN1cnJlbnRseSwgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIHdhdGVybWFyayBob2xkIHRhZyBpcwogICAgICAjIG5hbWVkICJ3YXRlcm1hcmsiLiAgVGhpcyBpcyBjdXJyZW50bHkgb25seSB0cnVlIGJlY2F1c2UgdGhlIG9ubHkgcGxhY2UKICAgICAgIyB3YXRlcm1hcmsgaG9sZHMgYXJlIHNldCBpcyBpbiB0aGUgR2VuZXJhbFRyaWdnZXJEcml2ZXIsIHdoZXJlIHdlIHVzZQogICAgICAjIHRoaXMgbmFtZS4gIFdlIHNob3VsZCBmaXggdGhpcyBieSBhbGxvd2luZyBlbnVtZXJhdGlvbiBvZiB0aGUgdGFnIHR5cGVzCiAgICAgICMgdXNlZCBpbiBhZGRpbmcgc3RhdGUuCiAgICAgIGlmICd3YXRlcm1hcmsnIGluIHRhZ2dlZF9zdGF0ZXMgYW5kIHRhZ2dlZF9zdGF0ZXNbJ3dhdGVybWFyayddOgogICAgICAgIGhvbGQgPSBtaW4odGFnZ2VkX3N0YXRlc1snd2F0ZXJtYXJrJ10pIC0gVElNRV9HUkFOVUxBUklUWQogICAgICAgIGVhcmxpZXN0X2hvbGQgPSBtaW4oZWFybGllc3RfaG9sZCwgaG9sZCkKICAgIHJldHVybiBlYXJsaWVzdF9ob2xkCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHN0YXRlX3N0ciA9ICdcbicuam9pbignJXM6ICVzJyAlIChrZXksIGRpY3Qoc3RhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHN0YXRlIGluIHNlbGYuc3RhdGUuaXRlbXMoKSkKICAgIHJldHVybiAndGltZXJzOiAlc1xuc3RhdGU6ICVzJyAlIChkaWN0KHNlbGYudGltZXJzKSwgc3RhdGVfc3RyKQp9cgYCAAAoWBcAAABBZnRlcldhdGVybWFyay5vbl9tZXJnZVgDAAAAZGVmTSkBTTcBh1geAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLl9faW5pdF9fWAMAAABkZWZNNARNOgSHWBgAAABUcmlnZ2VyQ29udGV4dC5hZGRfc3RhdGVYAwAAAGRlZk2GAk2IAodYDgAAAERlZmF1bHRUcmlnZ2VyWAUAAABjbGFzc0vgTQUBh1gaAAAARGVmYXVsdFRyaWdnZXIuc2hvdWxkX2ZpcmVYAwAAAGRlZkvyS/SHWBUAAABBZnRlckNvdW50Lm9uX2VsZW1lbnRYAwAAAGRlZk2IAU2KAYdYCAAAAEFmdGVyQWxsWAUAAABjbGFzc00cAk0iAodYEwAAAEFmdGVyQ291bnQuX19pbml0X19YAwAAAGRlZk19AU2BAYdYFAAAAEFmdGVyV2F0ZXJtYXJrLnJlc2V0WAMAAABkZWZNTgFNVQGHWCAAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuZ2V0X3dpbmRvd1gDAAAAZGVmTVUETVcEh1gjAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmtub3duX3dpbmRvd3NYAwAAAGRlZk0eA00gA4dYEAAAAFJlcGVhdGVkbHkucmVzZXRYAwAAAGRlZk28AU2+AYdYIQAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5jbGVhcl9zdGF0ZVgDAAAAZGVmTXMETXcEh1gaAAAAX1BhcmFsbGVsVHJpZ2dlckZuLm9uX2ZpcmVYAwAAAGRlZk3qAU3xAYdYGgAAAF9VbndpbmRvd2VkVmFsdWVzLl9faW5pdF9fWAMAAABkZWZNcgNNdQOHWCcAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9uZXh0X2NvdW50ZXJYAwAAAGRlZk0zA006A4dYEgAAAF9TdGF0ZVRhZy5fX2luaXRfX1gDAAAAZGVmS01LT4dYHAAAAEFmdGVyV2F0ZXJtYXJrLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk1qAU1zAYdYFgAAAENvbWJpbmluZ1RyaWdnZXJEcml2ZXJYBQAAAGNsYXNzTaADTbIDh1gXAAAAVHJpZ2dlckNvbnRleHQuX19pbml0X19YAwAAAGRlZk18Ak1/AodYHwAAAERlZmF1bHRHbG9iYWxCYXRjaFRyaWdnZXJEcml2ZXJYBQAAAGNsYXNzTY4DTZ4Dh1gSAAAAUmVwZWF0ZWRseS5vbl9maXJlWAMAAABkZWZNtwFNuwGHWA4AAABfVmFsdWVTdGF0ZVRhZ1gFAAAAY2xhc3NLUUtZh1gTAAAAUmVwZWF0ZWRseS5vbl9tZXJnZVgDAAAAZGVmTbEBTbMBh1ggAAAAX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcuX19pbml0X19YAwAAAGRlZktfS2aHWCEAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuY2xlYXJfdGltZXJYAwAAAGRlZk3rAk3uAodYHgAAAFVubWVyZ2VkU3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZVgDAAAAZGVmTdYCTdkCh1gkAAAAQ29tYmluaW5nVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNrQNNsgOHWBgAAABUcmlnZ2VyQ29udGV4dC5zZXRfdGltZXJYAwAAAGRlZk2AAk2CAodYFQAAAFNpbXBsZVN0YXRlLnNldF90aW1lclgDAAAAZGVmTbACTbMCh1gfAAAAQ29tYmluaW5nVHJpZ2dlckRyaXZlci5fX2luaXRfX1gDAAAAZGVmTaMDTaYDh1gQAAAAQWZ0ZXJDb3VudC5yZXNldFgDAAAAZGVmTZUBTZcBh1gWAAAAQWZ0ZXJDb3VudC5zaG91bGRfZmlyZVgDAAAAZGVmTY8BTZEBh1gKAAAAUmVwZWF0ZWRseVgFAAAAY2xhc3NNogFNyAGHWBgAAABfVW53aW5kb3dlZFZhbHVlcy5fX2VxX19YAwAAAGRlZk2CA02JA4dYFgAAAEFmdGVyV2F0ZXJtYXJrLm9uX2ZpcmVYAwAAAGRlZk1DAU1NAYdYGgAAAFRyaWdnZXJDb250ZXh0LmNsZWFyX3N0YXRlWAMAAABkZWZNjAJNjgKHWBwAAABEZWZhdWx0VHJpZ2dlci50b19ydW5uZXJfYXBpWAMAAABkZWZNAgFNBQGHWBgAAABUcmlnZ2VyQ29udGV4dC5nZXRfc3RhdGVYAwAAAGRlZk2JAk2LAodYGAAAAF9VbndpbmRvd2VkVmFsdWVzLl9fbmVfX1gDAAAAZGVmTYoDTYwDh1gTAAAAQWZ0ZXJDb3VudC5fX3JlcHJfX1gDAAAAZGVmTYIBTYQBh1gfAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLnNldF90aW1lclgDAAAAZGVmTU0ETU8Eh1gTAAAAUmVwZWF0ZWRseS5fX3JlcHJfX1gDAAAAZGVmTagBTaoBh1gdAAAAR2VuZXJhbFRyaWdnZXJEcml2ZXIuX19pbml0X19YAwAAAGRlZk28A03HA4dYEgAAAEFmdGVyRWFjaC5fX2luaXRfX1gDAAAAZGVmTSkCTSsCh1gSAAAAQWZ0ZXJDb3VudC5vbl9maXJlWAMAAABkZWZNkgFNlAGHWBMAAABBZnRlckNvdW50Lm9uX21lcmdlWAMAAABkZWZNiwFNjgGHWB8AAABfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLl9fcmVwcl9fWAMAAABkZWZLfUuAh1gJAAAAVHJpZ2dlckZuWAUAAABjbGFzc0uIS96HWCYAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuc2V0X2dsb2JhbF9zdGF0ZVgDAAAAZGVmTUQETUkEh1gfAAAAX1BhcmFsbGVsVHJpZ2dlckZuLl9zdWJfY29udGV4dFgDAAAAZGVmTfYBTfkBh1gfAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmdldF9zdGF0ZVgDAAAAZGVmTfUCTQsDh1gKAAAAQWZ0ZXJDb3VudFgFAAAAY2xhc3NNdQFNoAGHWBcAAABUcmlnZ2VyRm4udG9fcnVubmVyX2FwaVgDAAAAZGVmS9tL3odYHgAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5fX2luaXRfX1gDAAAAZGVmTeMCTecCh1gIAAAAQWZ0ZXJBbnlYBQAAAGNsYXNzTRQCTRoCh1giAAAAR2VuZXJhbFRyaWdnZXJEcml2ZXIucHJvY2Vzc190aW1lclgDAAAAZGVmTQoETRkEh1gdAAAAX1BhcmFsbGVsVHJpZ2dlckZuLmNvbWJpbmVfb3BYAwAAAGRlZk3YAU3bAYdYEQAAAFRyaWdnZXJGbi5vbl9maXJlWAMAAABkZWZLtkvEh1gZAAAAT3JGaW5hbGx5LmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTWoCTXECh1gYAAAAQWZ0ZXJDb3VudC50b19ydW5uZXJfYXBpWAMAAABkZWZNnAFNoAGHWBYAAABfTGlzdFN0YXRlVGFnLl9fcmVwcl9fWAMAAABkZWZLcEtyh1gRAAAAX1Vud2luZG93ZWRWYWx1ZXNYBQAAAGNsYXNzTW8DTYwDh1gYAAAAX1BhcmFsbGVsVHJpZ2dlckZuLnJlc2V0WAMAAABkZWZN8gFN9QGHWCkAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX3BlcnNpc3Rfd2luZG93X2lkc1gDAAAAZGVmTTsDTT0Dh1gaAAAAX1Vud2luZG93ZWRWYWx1ZXMuX19yZXByX19YAwAAAGRlZk18A01+A4dYEQAAAEFmdGVyRWFjaC5vbl9maXJlWAMAAABkZWZNSAJNUAKHWA4AAABUcmlnZ2VyQ29udGV4dFgFAAAAY2xhc3NNegJNjgKHWBQAAABHZW5lcmFsVHJpZ2dlckRyaXZlclgFAAAAY2xhc3NNtANNLQSHWCYAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZVgDAAAAZGVmTUoETUwEh1gWAAAAUmVwZWF0ZWRseS5zaG91bGRfZmlyZVgDAAAAZGVmTbQBTbYBh1gJAAAAT3JGaW5hbGx5WAUAAABjbGFzc01oAk14AodYGQAAAF9QYXJhbGxlbFRyaWdnZXJGbi5fX2VxX19YAwAAAGRlZk3VAU3XAYdYFwAAAFNpbXBsZVN0YXRlLmNsZWFyX3RpbWVyWAMAAABkZWZNuAJNuwKHWBUAAABSZXBlYXRlZGx5Lm9uX2VsZW1lbnRYAwAAAGRlZk2uAU2wAYdYLQAAAERlZmF1bHRHbG9iYWxCYXRjaFRyaWdnZXJEcml2ZXIucHJvY2Vzc190aW1lclgDAAAAZGVmTZwDTZ4Dh1gXAAAAX1ZhbHVlU3RhdGVUYWcuX19yZXByX19YAwAAAGRlZktUS1aHWB4AAABBZnRlcldhdGVybWFyay5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk1eAU1pAYdYIAAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfdGltZXJzWAMAAABkZWZNeARNlASHWCIAAABfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLndpdGhfcHJlZml4WAMAAABkZWZLgUuEh1gVAAAAQWZ0ZXJXYXRlcm1hcmsuX19lcV9fWAMAAABkZWZNVgFNWgGHWBcAAABBZnRlcldhdGVybWFyay5fX3JlcHJfX1gDAAAAZGVmTRYBTR0Bh1gUAAAAVHJpZ2dlckZuLm9uX2VsZW1lbnRYAwAAAGRlZkuPS5qHWBQAAABEZWZhdWx0VHJpZ2dlci5yZXNldFgDAAAAZGVmS/hL+odYGQAAAFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZkvLS9qHWBwAAABfVW53aW5kb3dlZFZhbHVlcy5fX3JlZHVjZV9fWAMAAABkZWZNfwNNgQOHWBIAAABfUGFyYWxsZWxUcmlnZ2VyRm5YBQAAAGNsYXNzTcoBTRICh1giAAAAX1BhcmFsbGVsVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTfoBTQQCh1gjAAAAX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcud2l0aF9wcmVmaXhYAwAAAGRlZktqS2yHWBcAAABEZWZhdWx0VHJpZ2dlci5fX2luaXRfX1gDAAAAZGVmS+NL5YdYDgAAAEFmdGVyV2F0ZXJtYXJrWAUAAABjbGFzc00HAU1zAYdYEgAAAEFmdGVyRWFjaC5vbl9tZXJnZVgDAAAAZGVmTTkCTUECh1gXAAAARGVmYXVsdFRyaWdnZXIub25fbWVyZ2VYAwAAAGRlZkvsS/GHWA8AAABUcmlnZ2VyRm4ucmVzZXRYAwAAAGRlZkvFS8mHWBsAAABfUGFyYWxsZWxUcmlnZ2VyRm4uX19pbml0X19YAwAAAGRlZk3OAU3QAYdYKAAAAERlZmF1bHRHbG9iYWxCYXRjaFRyaWdnZXJEcml2ZXIuX19pbml0X19YAwAAAGRlZk2TA02VA4dYFwAAAEFmdGVyV2F0ZXJtYXJrLl9faGFzaF9fWAMAAABkZWZNWwFNXQGHWBoAAABfVmFsdWVTdGF0ZVRhZy53aXRoX3ByZWZpeFgDAAAAZGVmS1dLWYdYGQAAAEFmdGVyV2F0ZXJtYXJrLm9uX2VsZW1lbnRYAwAAAGRlZk0hAU0oAYdYHQAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5fZ2V0X2lkWAMAAABkZWZNJwNNLwOHWB4AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9pZHNYAwAAAGRlZk0wA00yA4dYGgAAAFRyaWdnZXJDb250ZXh0LmNsZWFyX3RpbWVyWAMAAABkZWZNgwJNhQKHWAkAAABfU3RhdGVUYWdYBQAAAGNsYXNzS0RLT4dYHwAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5hZGRfc3RhdGVYAwAAAGRlZk1YBE1lBIdYDwAAAEFmdGVyRWFjaC5yZXNldFgDAAAAZGVmTVECTVUCh1gXAAAAQWZ0ZXJXYXRlcm1hcmsuX19pbml0X19YAwAAAGRlZk0SAU0VAYdYFwAAAEFmdGVyRWFjaC50b19ydW5uZXJfYXBpWAMAAABkZWZNYAJNZgKHWB8AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuc2V0X3RpbWVyWAMAAABkZWZN6AJN6gKHWB4AAABVbm1lcmdlZFN0YXRlLnNldF9nbG9iYWxfc3RhdGVYAwAAAGRlZk3SAk3VAodYOQAAAEdlbmVyYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHMuVHJpZ2dlck1lcmdlQ29udGV4dFgFAAAAY2xhc3NN2QNN4wOHWBkAAABBZnRlckVhY2guZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNWgJNXwKHWB8AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuYWRkX3N0YXRlWAMAAABkZWZN7wJN9AKHWBoAAABBZnRlckNvdW50LmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTZgBTZsBh1gNAAAAVW5tZXJnZWRTdGF0ZVgFAAAAY2xhc3NNzAJN2QKHWBUAAABTaW1wbGVTdGF0ZS5nZXRfc3RhdGVYAwAAAGRlZk3AAk3DAodYGQAAAF9MaXN0U3RhdGVUYWcud2l0aF9wcmVmaXhYAwAAAGRlZktzS3WHWCAAAABfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZy5fX3JlcHJfX1gDAAAAZGVmS2dLaYdYCwAAAFNpbXBsZVN0YXRlWAUAAABjbGFzc02oAk3KAodYFgAAAE5lc3RlZENvbnRleHQuX19pbml0X19YAwAAAGRlZk2TAk2WAodYGgAAAF9VbndpbmRvd2VkVmFsdWVzLl9faXRlcl9fWAMAAABkZWZNdgNNewOHWBUAAABjcmVhdGVfdHJpZ2dlcl9kcml2ZXJYAwAAAGRlZk1DA01SA4dYJQAAAEdlbmVyYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHNYAwAAAGRlZk3IA00JBIdYFwAAAE9yRmluYWxseS50b19ydW5uZXJfYXBpWAMAAABkZWZNcgJNeAKHWBYAAABEZWZhdWx0VHJpZ2dlci5vbl9maXJlWAMAAABkZWZL9Uv3h1gVAAAARGVmYXVsdFRyaWdnZXIuX19lcV9fWAMAAABkZWZL+0v9h1gUAAAAQWZ0ZXJFYWNoLm9uX2VsZW1lbnRYAwAAAGRlZk0zAk04AodYGAAAAFJlcGVhdGVkbHkudG9fcnVubmVyX2FwaVgDAAAAZGVmTcQBTcgBh1gfAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF9zdGF0ZVgDAAAAZGVmTWYETXIEh1gaAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLmNvcHlYAwAAAGRlZk07BE1DBIdYIAAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5nZXRfd2luZG93WAMAAABkZWZNIQNNJgOHWBkAAABOZXN0ZWRDb250ZXh0LmNsZWFyX3RpbWVyWAMAAABkZWZNmgJNnAKHWB4AAABEZWZhdWx0VHJpZ2dlci5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZkv+TQEBh1ghAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLmNsZWFyX3RpbWVyWAMAAABkZWZNUARNVASHWBUAAABUcmlnZ2VyRm4uc2hvdWxkX2ZpcmVYAwAAAGRlZkunS7WHWBUAAABTaW1wbGVTdGF0ZS5hZGRfc3RhdGVYAwAAAGRlZk28Ak2/AodYJwAAAENvbWJpbmluZ1RyaWdnZXJEcml2ZXIucHJvY2Vzc19lbGVtZW50c1gDAAAAZGVmTacDTawDh1gRAAAAQWZ0ZXJDb3VudC5fX2VxX19YAwAAAGRlZk2FAU2HAYdYEgAAAEFmdGVyRWFjaC5fX3JlcHJfX1gDAAAAZGVmTSwCTS8Ch1gVAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlWAUAAABjbGFzc00vBE2pBIdYEAAAAEFjY3VtdWxhdGlvbk1vZGVYBQAAAGNsYXNzSztLQIdYGQAAAE5lc3RlZENvbnRleHQuY2xlYXJfc3RhdGVYAwAAAGRlZk2jAk2lAodYFgAAAEFmdGVyV2F0ZXJtYXJrLmlzX2xhdGVYAwAAAGRlZk0eAU0gAYdYKgAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfYW5kX2NsZWFyX3RpbWVyc1gDAAAAZGVmTZUETZcEh1gWAAAAU2ltcGxlU3RhdGUuZ2V0X3dpbmRvd1gDAAAAZGVmTbQCTbcCh1gXAAAARGVmYXVsdFRyaWdnZXIuX19yZXByX19YAwAAAGRlZkvmS+iHWBcAAABOZXN0ZWRDb250ZXh0LmdldF9zdGF0ZVgDAAAAZGVmTaACTaICh1gdAAAAX1BhcmFsbGVsVHJpZ2dlckZuLm9uX2VsZW1lbnRYAwAAAGRlZk3cAU3fAYdYEAAAAEFmdGVyRWFjaC5fX2VxX19YAwAAAGRlZk0wAk0yAodYDQAAAE5lc3RlZENvbnRleHRYBQAAAGNsYXNzTZACTaUCh1gRAAAAUmVwZWF0ZWRseS5fX2VxX19YAwAAAGRlZk2rAU2tAYdYEwAAAFJlcGVhdGVkbHkuX19pbml0X19YAwAAAGRlZk2lAU2nAYdYJwAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfZWFybGllc3RfaG9sZFgDAAAAZGVmTZgETaQEh1gXAAAATmVzdGVkQ29udGV4dC5hZGRfc3RhdGVYAwAAAGRlZk2dAk2fAodYDQAAAF9MaXN0U3RhdGVUYWdYBQAAAGNsYXNzS25LdYdYIQAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5jbGVhcl9zdGF0ZVgDAAAAZGVmTQwDTRIDh1gbAAAAX1BhcmFsbGVsVHJpZ2dlckZuLm9uX21lcmdlWAMAAABkZWZN4AFN5AGHWAkAAABBZnRlckVhY2hYBQAAAGNsYXNzTSQCTWYCh1gbAAAAVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNXQNNYAOHWBcAAABOZXN0ZWRDb250ZXh0LnNldF90aW1lclgDAAAAZGVmTZcCTZkCh1geAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLl9fcmVwcl9fWAMAAABkZWZNPgNNQQOHWBoAAABBZnRlcldhdGVybWFyay5zaG91bGRfZmlyZVgDAAAAZGVmTTgBTUIBh1gaAAAAUmVwZWF0ZWRseS5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk2/AU3DAYdYIAAAAF9QYXJhbGxlbFRyaWdnZXJGbi50b19ydW5uZXJfYXBpWAMAAABkZWZNBQJNEgKHWD8AAABHZW5lcmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzLlRyaWdnZXJNZXJnZUNvbnRleHQubWVyZ2VYAwAAAGRlZk3bA03jA4dYHgAAAF9QYXJhbGxlbFRyaWdnZXJGbi5zaG91bGRfZmlyZVgDAAAAZGVmTeUBTekBh1gVAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyWAUAAABjbGFzc03cAk1BA4dYEgAAAFRyaWdnZXJGbi5vbl9tZXJnZVgDAAAAZGVmS5tLpodYGwAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5tZXJnZVgDAAAAZGVmTRMDTR0Dh1gWAAAAX1dhdGVybWFya0hvbGRTdGF0ZVRhZ1gFAAAAY2xhc3NLd0uEh1gOAAAAU2ltcGxlU3RhdGUuYXRYAwAAAGRlZk3IAk3KAodYFgAAAEFmdGVyRWFjaC5fc3ViX2NvbnRleHRYAwAAAGRlZk1WAk1ZAodYIAAAAFRyaWdnZXJEcml2ZXIucHJvY2Vzc19lbnRpcmVfa2V5WAMAAABkZWZNYQNNbQOHWBkAAABEZWZhdWx0VHJpZ2dlci5vbl9lbGVtZW50WAMAAABkZWZL6Uvrh1gfAAAAX1dhdGVybWFya0hvbGRTdGF0ZVRhZy5fX2luaXRfX1gDAAAAZGVmS3lLfIdYFQAAAEFmdGVyRWFjaC5zaG91bGRfZmlyZVgDAAAAZGVmTUICTUcCh1geAAAAVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzWAMAAABkZWZNWQNNXAOHWBwAAABHZW5lcmFsVHJpZ2dlckRyaXZlci5fb3V0cHV0WAMAAABkZWZNGgRNLQSHWA0AAABUcmlnZ2VyRHJpdmVyWAUAAABjbGFzc01UA01tA4dYFwAAAFNpbXBsZVN0YXRlLmNsZWFyX3N0YXRlWAMAAABkZWZNxAJNxwKHWBsAAABfUGFyYWxsZWxUcmlnZ2VyRm4uX19yZXByX19YAwAAAGRlZk3RAU3UAYdYMAAAAERlZmF1bHRHbG9iYWxCYXRjaFRyaWdnZXJEcml2ZXIucHJvY2Vzc19lbGVtZW50c1gDAAAAZGVmTZYDTZsDh1geAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLl9fcmVwcl9fWAMAAABkZWZNpQRNqQSHWBcAAABfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZ1gFAAAAY2xhc3NLW0tsh3V9cgcCAAAoWBcAAABBZnRlcldhdGVybWFyay5vbl9tZXJnZVgeAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VycggCAABYGQAAAEFmdGVyV2F0ZXJtYXJrLm9uX2VsZW1lbnRqCAIAAFgJAAAAVHJpZ2dlckZuaggCAABYDgAAAERlZmF1bHRUcmlnZ2VyaggCAABYGgAAAERlZmF1bHRUcmlnZ2VyLnNob3VsZF9maXJlaggCAABYFQAAAFJlcGVhdGVkbHkub25fZWxlbWVudGoIAgAAWBYAAABBZnRlcldhdGVybWFyay5pc19sYXRlaggCAABYCgAAAEFmdGVyQ291bnRqCAIAAFgXAAAAVHJpZ2dlckZuLnRvX3J1bm5lcl9hcGlqCAIAAFgIAAAAQWZ0ZXJBbnlqCAIAAFgUAAAAQWZ0ZXJXYXRlcm1hcmsucmVzZXRqCAIAAFgZAAAARGVmYXVsdFRyaWdnZXIub25fZWxlbWVudGoIAgAAWBEAAABUcmlnZ2VyRm4ub25fZmlyZWoIAgAAWBUAAABBZnRlckVhY2guc2hvdWxkX2ZpcmVqCAIAAFgPAAAAQWZ0ZXJFYWNoLnJlc2V0aggCAABYFwAAAEFmdGVyRWFjaC50b19ydW5uZXJfYXBpaggCAABYEAAAAFJlcGVhdGVkbHkucmVzZXRqCAIAAFgZAAAAT3JGaW5hbGx5LmZyb21fcnVubmVyX2FwaWoIAgAAWA4AAABBZnRlcldhdGVybWFya2oIAgAAWBkAAABBZnRlckVhY2guZnJvbV9ydW5uZXJfYXBpaggCAABYGgAAAEFmdGVyQ291bnQuZnJvbV9ydW5uZXJfYXBpaggCAABYEQAAAEFmdGVyRWFjaC5vbl9maXJlaggCAABYHAAAAEFmdGVyV2F0ZXJtYXJrLnRvX3J1bm5lcl9hcGlqCAIAAFgTAAAAUmVwZWF0ZWRseS5vbl9tZXJnZWoIAgAAWBIAAABSZXBlYXRlZGx5Lm9uX2ZpcmVqCAIAAFgJAAAAQWZ0ZXJFYWNoaggCAABYFgAAAFJlcGVhdGVkbHkuc2hvdWxkX2ZpcmVqCAIAAFgJAAAAT3JGaW5hbGx5aggCAABYFAAAAERlZmF1bHRUcmlnZ2VyLnJlc2V0aggCAABYCAAAAEFmdGVyQWxsaggCAABYGgAAAEFmdGVyV2F0ZXJtYXJrLnNob3VsZF9maXJlaggCAABYGgAAAFJlcGVhdGVkbHkuZnJvbV9ydW5uZXJfYXBpaggCAABYFwAAAE9yRmluYWxseS50b19ydW5uZXJfYXBpaggCAABYFgAAAERlZmF1bHRUcmlnZ2VyLm9uX2ZpcmVqCAIAAFgeAAAAQWZ0ZXJXYXRlcm1hcmsuZnJvbV9ydW5uZXJfYXBpaggCAABYEgAAAFRyaWdnZXJGbi5vbl9tZXJnZWoIAgAAWBAAAABBZnRlckNvdW50LnJlc2V0aggCAABYFgAAAEFmdGVyQ291bnQuc2hvdWxkX2ZpcmVqCAIAAFgZAAAAVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaWoIAgAAWAoAAABSZXBlYXRlZGx5aggCAABYGAAAAFJlcGVhdGVkbHkudG9fcnVubmVyX2FwaWoIAgAAWBQAAABUcmlnZ2VyRm4ub25fZWxlbWVudGoIAgAAWBYAAABBZnRlcldhdGVybWFyay5vbl9maXJlaggCAABYFAAAAEFmdGVyRWFjaC5vbl9lbGVtZW50aggCAABYHgAAAERlZmF1bHRUcmlnZ2VyLmZyb21fcnVubmVyX2FwaWoIAgAAWBAAAABBY2N1bXVsYXRpb25Nb2RlaggCAABYHAAAAERlZmF1bHRUcmlnZ2VyLnRvX3J1bm5lcl9hcGlqCAIAAFgTAAAAQWZ0ZXJDb3VudC5vbl9tZXJnZWoIAgAAWBUAAABUcmlnZ2VyRm4uc2hvdWxkX2ZpcmVqCAIAAFgSAAAAQWZ0ZXJDb3VudC5vbl9maXJlaggCAABYFQAAAEFmdGVyQ291bnQub25fZWxlbWVudGoIAgAAWBcAAABEZWZhdWx0VHJpZ2dlci5vbl9tZXJnZWoIAgAAWBgAAABBZnRlckNvdW50LnRvX3J1bm5lcl9hcGlqCAIAAFgSAAAAQWZ0ZXJFYWNoLm9uX21lcmdlaggCAABYDwAAAFRyaWdnZXJGbi5yZXNldGoIAgAAdWiKWB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXJyCQIAAIWBcgoCAAB9cgsCAABidHIMAgAAVRlhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvcg0CAAAoWCYpAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiVEZSZWNvcmQgc291cmNlcyBhbmQgc2lua3MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN0cnVjdAoKaW1wb3J0IGNyY21vZAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGViYXNlZHNpbmsKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc291cmNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVhZApmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgV3JpdGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCgpfX2FsbF9fID0gWydSZWFkRnJvbVRGUmVjb3JkJywgJ1dyaXRlVG9URlJlY29yZCddCgoKZGVmIF9kZWZhdWx0X2NyYzMyY19mbih2YWx1ZSk6CiAgIiIiQ2FsY3VsYXRlcyBjcmMzMmMgYnkgZWl0aGVyIHNuYXBweSBvciBjcmNtb2QgYmFzZWQgb24gaW5zdGFsbGF0aW9uLiIiIgoKICBpZiBub3QgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuOgogICAgdHJ5OgogICAgICBpbXBvcnQgc25hcHB5ICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKICAgICAgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuID0gc25hcHB5Ll9jcmMzMmMgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgbG9nZ2luZy53YXJuaW5nKCdDb3VsZG5cJ3QgZmluZCBweXRob24tc25hcHB5IHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAnX1RGUmVjb3JkVXRpbC5fbWFza2VkX2NyYzMyYyBpcyBub3QgYXMgZmFzdCBhcyBpdCBjb3VsZCAnCiAgICAgICAgICAgICAgICAgICAgICAnYmUuJykKICAgICAgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuID0gY3JjbW9kLnByZWRlZmluZWQubWtQcmVkZWZpbmVkQ3JjRnVuKCdjcmMtMzJjJykKICByZXR1cm4gX2RlZmF1bHRfY3JjMzJjX2ZuLmZuKHZhbHVlKQoKCl9kZWZhdWx0X2NyYzMyY19mbi5mbiA9IE5vbmUKCgpjbGFzcyBfVEZSZWNvcmRVdGlsKG9iamVjdCk6CiAgIiIiUHJvdmlkZXMgYmFzaWMgVEZSZWNvcmQgZW5jb2RpbmcvZGVjb2Rpbmcgd2l0aCBjb25zaXN0ZW5jeSBjaGVja3MuCgogIEZvciBkZXRhaWxlZCBURlJlY29yZCBmb3JtYXQgZGVzY3JpcHRpb24gc2VlOgogICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvdmVyc2lvbnMvbWFzdGVyL2FwaV9kb2NzL3B5dGhvbi9weXRob25faW8uaHRtbCN0ZnJlY29yZHMtZm9ybWF0LWRldGFpbHMKCiAgTm90ZSB0aGF0IG1hc2tzIGFuZCBsZW5ndGggYXJlIHJlcHJlc2VudGVkIGluIExpdHRsZUVuZGlhbiBvcmRlci4KICAiIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9tYXNrZWRfY3JjMzJjKGNscywgdmFsdWUsIGNyYzMyY19mbj1fZGVmYXVsdF9jcmMzMmNfZm4pOgogICAgIiIiQ29tcHV0ZSBhIG1hc2tlZCBjcmMzMmMgY2hlY2tzdW0gZm9yIGEgdmFsdWUuCgogICAgQXJnczoKICAgICAgdmFsdWU6IEEgc3RyaW5nIGZvciB3aGljaCB3ZSBjb21wdXRlIHRoZSBjcmMuCiAgICAgIGNyYzMyY19mbjogQSBmdW5jdGlvbiB0aGF0IGNhbiBjb21wdXRlIGEgY3JjMzJjLgogICAgICAgIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBob29rIHRoYXQgYWxzbyBoZWxwcyB3aXRoIHRlc3RpbmcuIENhbGxlcnMgYXJlCiAgICAgICAgbm90IGV4cGVjdGVkIHRvIG1ha2UgdXNlIG9mIGl0IGRpcmVjdGx5LgogICAgUmV0dXJuczoKICAgICAgTWFza2VkIGNyYzMyYyBjaGVja3N1bS4KICAgICIiIgoKICAgIGNyYyA9IGNyYzMyY19mbih2YWx1ZSkKICAgIHJldHVybiAoKChjcmMgPj4gMTUpIHwgKGNyYyA8PCAxNykpICsgMHhhMjgyZWFkOCkgJiAweGZmZmZmZmZmCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZW5jb2RlZF9udW1fYnl0ZXMocmVjb3JkKToKICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGJ5IGEgcmVjb3JkIGluIGl0cyBlbmNvZGVkIGZvcm0uIiIiCiAgICAjIDE2ID0gOCAoTGVuZ3RoKSArIDQgKGNyYyBvZiBsZW5ndGgpICsgNCAoY3JjIG9mIGRhdGEpCiAgICByZXR1cm4gbGVuKHJlY29yZCkgKyAxNgoKICBAY2xhc3NtZXRob2QKICBkZWYgd3JpdGVfcmVjb3JkKGNscywgZmlsZV9oYW5kbGUsIHZhbHVlKToKICAgICIiIkVuY29kZSBhIHZhbHVlIGFzIGEgVEZSZWNvcmQuCgogICAgQXJnczoKICAgICAgZmlsZV9oYW5kbGU6IFRoZSBmaWxlIHRvIHdyaXRlIHRvLgogICAgICB2YWx1ZTogQSBzdHJpbmcgY29udGVudCBvZiB0aGUgcmVjb3JkLgogICAgIiIiCiAgICBlbmNvZGVkX2xlbmd0aCA9IHN0cnVjdC5wYWNrKCc8UScsIGxlbih2YWx1ZSkpCiAgICBmaWxlX2hhbmRsZS53cml0ZSgne317fXt9e30nLmZvcm1hdCgKICAgICAgICBlbmNvZGVkX2xlbmd0aCwKICAgICAgICBzdHJ1Y3QucGFjaygnPEknLCBjbHMuX21hc2tlZF9jcmMzMmMoZW5jb2RlZF9sZW5ndGgpKSwgICMKICAgICAgICB2YWx1ZSwKICAgICAgICBzdHJ1Y3QucGFjaygnPEknLCBjbHMuX21hc2tlZF9jcmMzMmModmFsdWUpKSkpCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWFkX3JlY29yZChjbHMsIGZpbGVfaGFuZGxlKToKICAgICIiIlJlYWQgYSByZWNvcmQgZnJvbSBhIFRGUmVjb3JkcyBmaWxlLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfaGFuZGxlOiBUaGUgZmlsZSB0byByZWFkIGZyb20uCiAgICBSZXR1cm5zOgogICAgICBOb25lIGlmIEVPRiBpcyByZWFjaGVkOyB0aGUgcGF5bG9kIG9mIHRoZSByZWNvcmQgb3RoZXJ3aXNlLgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBJZiBmaWxlIGFwcGVhcnMgdG8gbm90IGJlIGEgdmFsaWQgVEZSZWNvcmRzIGZpbGUuCiAgICAiIiIKICAgIGJ1Zl9sZW5ndGhfZXhwZWN0ZWQgPSAxMgogICAgYnVmID0gZmlsZV9oYW5kbGUucmVhZChidWZfbGVuZ3RoX2V4cGVjdGVkKQogICAgaWYgbm90IGJ1ZjoKICAgICAgcmV0dXJuIE5vbmUgICMgRU9GIFJlYWNoZWQuCgogICAgIyBWYWxpZGF0ZSBhbGwgbGVuZ3RoIHJlbGF0ZWQgcGF5bG9hZHMuCiAgICBpZiBsZW4oYnVmKSAhPSBidWZfbGVuZ3RoX2V4cGVjdGVkOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb3QgYSB2YWxpZCBURlJlY29yZC4gRmV3ZXIgdGhhbiAlZCBieXRlczogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAoYnVmX2xlbmd0aF9leHBlY3RlZCwgYnVmLmVuY29kZSgnaGV4JykpKQogICAgbGVuZ3RoLCBsZW5ndGhfbWFza19leHBlY3RlZCA9IHN0cnVjdC51bnBhY2soJzxRSScsIGJ1ZikKICAgIGxlbmd0aF9tYXNrX2FjdHVhbCA9IGNscy5fbWFza2VkX2NyYzMyYyhidWZbOjhdKQogICAgaWYgbGVuZ3RoX21hc2tfYWN0dWFsICE9IGxlbmd0aF9tYXNrX2V4cGVjdGVkOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb3QgYSB2YWxpZCBURlJlY29yZC4gTWlzbWF0Y2ggb2YgbGVuZ3RoIG1hc2s6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgYnVmLmVuY29kZSgnaGV4JykpCgogICAgIyBWYWxpZGF0ZSBhbGwgZGF0YSByZWxhdGVkIHBheWxvYWRzLgogICAgYnVmX2xlbmd0aF9leHBlY3RlZCA9IGxlbmd0aCArIDQKICAgIGJ1ZiA9IGZpbGVfaGFuZGxlLnJlYWQoYnVmX2xlbmd0aF9leHBlY3RlZCkKICAgIGlmIGxlbihidWYpICE9IGJ1Zl9sZW5ndGhfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFRGUmVjb3JkLiBGZXdlciB0aGFuICVkIGJ5dGVzOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgIChidWZfbGVuZ3RoX2V4cGVjdGVkLCBidWYuZW5jb2RlKCdoZXgnKSkpCiAgICBkYXRhLCBkYXRhX21hc2tfZXhwZWN0ZWQgPSBzdHJ1Y3QudW5wYWNrKCc8JWRzSScgJSBsZW5ndGgsIGJ1ZikKICAgIGRhdGFfbWFza19hY3R1YWwgPSBjbHMuX21hc2tlZF9jcmMzMmMoZGF0YSkKICAgIGlmIGRhdGFfbWFza19hY3R1YWwgIT0gZGF0YV9tYXNrX2V4cGVjdGVkOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb3QgYSB2YWxpZCBURlJlY29yZC4gTWlzbWF0Y2ggb2YgZGF0YSBtYXNrOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5lbmNvZGUoJ2hleCcpKQoKICAgICMgQWxsIHZhbGlkYXRpb24gY2hlY2tzIHBhc3NlZC4KICAgIHJldHVybiBkYXRhCgoKY2xhc3MgX1RGUmVjb3JkU291cmNlKGZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UpOgogICIiIkEgRmlsZSBzb3VyY2UgZm9yIHJlYWRpbmcgZmlsZXMgb2YgVEZSZWNvcmRzLgoKICBGb3IgZGV0YWlsZWQgVEZSZWNvcmRzIGZvcm1hdCBkZXNjcmlwdGlvbiBzZWU6CiAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy92ZXJzaW9ucy9tYXN0ZXIvYXBpX2RvY3MvcHl0aG9uL3B5dGhvbl9pby5odG1sI3RmcmVjb3Jkcy1mb3JtYXQtZGV0YWlscwogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBjb2RlciwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZSwKICAgICAgICAgICAgICAgdmFsaWRhdGUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIFRGUmVjb3JkU291cmNlLiAgU2VlIFJlYWRGcm9tVEZSZWNvcmQgZm9yIGRldGFpbHMuIiIiCiAgICBzdXBlcihfVEZSZWNvcmRTb3VyY2UsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIHNwbGl0dGFibGU9RmFsc2UsCiAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUpCiAgICBzZWxmLl9jb2RlciA9IGNvZGVyCgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCBvZmZzZXRfcmFuZ2VfdHJhY2tlcik6CiAgICBpZiBvZmZzZXRfcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdGFydCBwb3NpdGlvbiBub3QgMDolcycgJQogICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkpCgogICAgY3VycmVudF9vZmZzZXQgPSBvZmZzZXRfcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCiAgICB3aXRoIHNlbGYub3Blbl9maWxlKGZpbGVfbmFtZSkgYXMgZmlsZV9oYW5kbGU6CiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgaWYgbm90IG9mZnNldF9yYW5nZV90cmFja2VyLnRyeV9jbGFpbShjdXJyZW50X29mZnNldCk6CiAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBjbGFpbSBwb3NpdGlvbjogJXMnICUgY3VycmVudF9vZmZzZXQpCiAgICAgICAgcmVjb3JkID0gX1RGUmVjb3JkVXRpbC5yZWFkX3JlY29yZChmaWxlX2hhbmRsZSkKICAgICAgICBpZiByZWNvcmQgaXMgTm9uZToKICAgICAgICAgIHJldHVybiAgIyBSZWFjaGVkIEVPRgogICAgICAgIGVsc2U6CiAgICAgICAgICBjdXJyZW50X29mZnNldCArPSBfVEZSZWNvcmRVdGlsLmVuY29kZWRfbnVtX2J5dGVzKHJlY29yZCkKICAgICAgICAgIHlpZWxkIHNlbGYuX2NvZGVyLmRlY29kZShyZWNvcmQpCgoKY2xhc3MgUmVhZEZyb21URlJlY29yZChQVHJhbnNmb3JtKToKICAiIiJUcmFuc2Zvcm0gZm9yIHJlYWRpbmcgVEZSZWNvcmQgc291cmNlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICAgICAgICAgY29kZXI9Y29kZXJzLkJ5dGVzQ29kZXIoKSwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgICAgICAgIHZhbGlkYXRlPVRydWUsCiAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgYSBSZWFkRnJvbVRGUmVjb3JkIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm46IEEgZmlsZSBnbG9iIHBhdHRlcm4gdG8gcmVhZCBURlJlY29yZHMgZnJvbS4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggcmVjb3JkLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIGlucHV0IGZpbGVzLiBEZWZhdWx0IHZhbHVlCiAgICAgICAgICBpcyBDb21wcmVzc2lvblR5cGVzLkFVVE8sIGluIHdoaWNoIGNhc2UgdGhlIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsCiAgICAgICAgICBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHZhbGlkYXRlOiBCb29sZWFuIGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICAgIGNyZWF0aW9uIHRpbWUuCiAgICAgICoqa3dhcmdzOiBvcHRpb25hbCBhcmdzIGRpY3Rpb25hcnkuIFRoZXNlIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBwYXJlbnQKICAgICAgICBjb25zdHJ1Y3Rvci4KCiAgICBSZXR1cm5zOgogICAgICBBIFJlYWRGcm9tVEZSZWNvcmQgdHJhbnNmb3JtIG9iamVjdC4KICAgICIiIgogICAgc3VwZXIoUmVhZEZyb21URlJlY29yZCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zb3VyY2UgPSBfVEZSZWNvcmRTb3VyY2UoZmlsZV9wYXR0ZXJuLCBjb2RlciwgY29tcHJlc3Npb25fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKCmNsYXNzIF9URlJlY29yZFNpbmsoZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rKToKICAiIiJTaW5rIGZvciB3cml0aW5nIFRGUmVjb3JkcyBmaWxlcy4KCiAgRm9yIGRldGFpbGVkIFRGUmVjb3JkIGZvcm1hdCBkZXNjcmlwdGlvbiBzZWU6CiAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy92ZXJzaW9ucy9tYXN0ZXIvYXBpX2RvY3MvcHl0aG9uL3B5dGhvbl9pby5odG1sI3RmcmVjb3Jkcy1mb3JtYXQtZGV0YWlscwogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXRoX3ByZWZpeCwgY29kZXIsIGZpbGVfbmFtZV9zdWZmaXgsIG51bV9zaGFyZHMsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsIGNvbXByZXNzaW9uX3R5cGUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIFRGUmVjb3JkU2luay4gU2VlIFdyaXRlVG9URlJlY29yZCBmb3IgZGV0YWlscy4iIiIKCiAgICBzdXBlcihfVEZSZWNvcmRTaW5rLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBmaWxlX3BhdGhfcHJlZml4PWZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgY29kZXI9Y29kZXIsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD1maWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPXNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Y29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIHdyaXRlX2VuY29kZWRfcmVjb3JkKHNlbGYsIGZpbGVfaGFuZGxlLCB2YWx1ZSk6CiAgICBfVEZSZWNvcmRVdGlsLndyaXRlX3JlY29yZChmaWxlX2hhbmRsZSwgdmFsdWUpCgoKY2xhc3MgV3JpdGVUb1RGUmVjb3JkKFBUcmFuc2Zvcm0pOgogICIiIlRyYW5zZm9ybSBmb3Igd3JpdGluZyB0byBURlJlY29yZCBzaW5rcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIGNvZGVyPWNvZGVycy5CeXRlc0NvZGVyKCksCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9JycsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHM9MCwKICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1Ob25lLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgICAgICAgICAgKiprd2FyZ3MpOgogICAgIiIiSW5pdGlhbGl6ZSBXcml0ZVRvVEZSZWNvcmQgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZW5jb2RlIGVhY2ggcmVjb3JkLgogICAgICBmaWxlX25hbWVfc3VmZml4OiBTdWZmaXggZm9yIHRoZSBmaWxlcyB3cml0dGVuLgogICAgICBudW1fc2hhcmRzOiBUaGUgbnVtYmVyIG9mIGZpbGVzIChzaGFyZHMpIHVzZWQgZm9yIG91dHB1dC4gSWYgbm90IHNldCwgdGhlCiAgICAgICAgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhCiAgICAgICAgcGFydGljdWxhciBzaGFyZCBudW1iZXIsIHRoZSB1cHBlci1jYXNlIGxldHRlcnMgJ1MnIGFuZCAnTicgYXJlCiAgICAgICAgcmVwbGFjZWQgd2l0aCB0aGUgMC1wYWRkZWQgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudCByZXNwZWN0aXZlbHkuCiAgICAgICAgVGhpcyBhcmd1bWVudCBjYW4gYmUgJycgaW4gd2hpY2ggY2FzZSBpdCBiZWhhdmVzIGFzIGlmIG51bV9zaGFyZHMgd2FzCiAgICAgICAgc2V0IHRvIDEgYW5kIG9ubHkgb25lIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gdXNlZAogICAgICAgIGlzICctU1NTU1Mtb2YtTk5OTk4nIGlmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBzaGFyZF9uYW1lX3RlbXBsYXRlLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIG91dHB1dCBmaWxlcy4gVHlwaWNhbCB2YWx1ZQogICAgICAgICAgaXMgQ29tcHJlc3Npb25UeXBlcy5BVVRPLCBpbiB3aGljaCBjYXNlIHRoZSBmaWxlX3BhdGgncyBleHRlbnNpb24gd2lsbAogICAgICAgICAgYmUgdXNlZCB0byBkZXRlY3QgdGhlIGNvbXByZXNzaW9uLgogICAgICAqKmt3YXJnczogT3B0aW9uYWwgYXJncyBkaWN0aW9uYXJ5LiBUaGVzZSBhcmUgcGFzc2VkIHRocm91Z2ggdG8gcGFyZW50CiAgICAgICAgY29uc3RydWN0b3IuCgogICAgUmV0dXJuczoKICAgICAgQSBXcml0ZVRvVEZSZWNvcmQgdHJhbnNmb3JtIG9iamVjdC4KICAgICIiIgogICAgc3VwZXIoV3JpdGVUb1RGUmVjb3JkLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgIHNlbGYuX3NpbmsgPSBfVEZSZWNvcmRTaW5rKGZpbGVfcGF0aF9wcmVmaXgsIGNvZGVyLCBmaWxlX25hbWVfc3VmZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3NoYXJkcywgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgV3JpdGUoc2VsZi5fc2luaykKfXIOAgAAKFgcAAAAX1RGUmVjb3JkVXRpbC5fbWFza2VkX2NyYzMyY1gDAAAAZGVmS0BLT4dYHwAAAF9URlJlY29yZFV0aWwuZW5jb2RlZF9udW1fYnl0ZXNYAwAAAGRlZktQS1WHWBgAAABXcml0ZVRvVEZSZWNvcmQuX19pbml0X19YAwAAAGRlZkvxTRcBh1gNAAAAX1RGUmVjb3JkU2lua1gFAAAAY2xhc3NL1kvsh1gaAAAAX1RGUmVjb3JkVXRpbC53cml0ZV9yZWNvcmRYAwAAAGRlZktWS2SHWA8AAABfVEZSZWNvcmRTb3VyY2VYBQAAAGNsYXNzS49Ls4dYGQAAAFJlYWRGcm9tVEZSZWNvcmQuX19pbml0X19YAwAAAGRlZku4S9GHWBYAAABXcml0ZVRvVEZSZWNvcmQuZXhwYW5kWAMAAABkZWZNGAFNGgGHWA8AAABXcml0ZVRvVEZSZWNvcmRYBQAAAGNsYXNzS+5NGgGHWA0AAABfVEZSZWNvcmRVdGlsWAUAAABjbGFzc0s3S42HWBIAAABfZGVmYXVsdF9jcmMzMmNfZm5YAwAAAGRlZkslSzKHWCIAAABfVEZSZWNvcmRTaW5rLndyaXRlX2VuY29kZWRfcmVjb3JkWAMAAABkZWZL6kvsh1gXAAAAUmVhZEZyb21URlJlY29yZC5leHBhbmRYAwAAAGRlZkvSS9SHWBYAAABfVEZSZWNvcmRTaW5rLl9faW5pdF9fWAMAAABkZWZL3Uvph1gcAAAAX1RGUmVjb3JkU291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmS6NLs4dYGQAAAF9URlJlY29yZFV0aWwucmVhZF9yZWNvcmRYAwAAAGRlZktlS42HWBgAAABfVEZSZWNvcmRTb3VyY2UuX19pbml0X19YAwAAAGRlZkuWS6KHWBAAAABSZWFkRnJvbVRGUmVjb3JkWAUAAABjbGFzc0u1S9SHdX1yDwIAAChYFwAAAFJlYWRGcm9tVEZSZWNvcmQuZXhwYW5kWBkAAABhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvchACAABYEAAAAFJlYWRGcm9tVEZSZWNvcmRqEAIAAFgPAAAAV3JpdGVUb1RGUmVjb3JkahACAABYFgAAAFdyaXRlVG9URlJlY29yZC5leHBhbmRqEAIAAHVoilgZAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpb3IRAgAAhYFyEgIAAH1yEwIAAGJ0chQCAABVJGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dHIVAgAAKFiHDgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IGNsYXNzIGZvciBzZXJpYWxpemluZyBwaXBlbGluZXMgdmlhIHRoZSBydW5uZXIgQVBJLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCgoKY2xhc3MgX1BpcGVsaW5lQ29udGV4dE1hcChvYmplY3QpOgogICIiIlRoaXMgaXMgYSBiaS1kaXJlY3Rpb25hbCBtYXAgYmV0d2VlbiBvYmplY3RzIGFuZCBpZHMuCgogIFVuZGVyIHRoZSBob29kIGl0IGVuY29kZXMgYW5kIGRlY29kZXMgdGhlc2Ugb2JqZWN0cyBpbnRvIHJ1bm5lciBBUEkKICByZXByZXNlbnRhdGlvbnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQsIG9ial90eXBlLCBwcm90b19tYXA9Tm9uZSk6CiAgICBzZWxmLl9waXBlbGluZV9jb250ZXh0ID0gY29udGV4dAogICAgc2VsZi5fb2JqX3R5cGUgPSBvYmpfdHlwZQogICAgc2VsZi5fb2JqX3RvX2lkID0ge30KICAgIHNlbGYuX2lkX3RvX29iaiA9IHt9CiAgICBzZWxmLl9pZF90b19wcm90byA9IGRpY3QocHJvdG9fbWFwKSBpZiBwcm90b19tYXAgZWxzZSB7fQogICAgc2VsZi5fY291bnRlciA9IDAKCiAgZGVmIF91bmlxdWVfcmVmKHNlbGYsIG9iaj1Ob25lLCBsYWJlbD1Ob25lKToKICAgIHNlbGYuX2NvdW50ZXIgKz0gMQogICAgcmV0dXJuICJyZWZfJXNfJXNfJXMiICUgKAogICAgICAgIHNlbGYuX29ial90eXBlLl9fbmFtZV9fLCBsYWJlbCBvciB0eXBlKG9iaikuX19uYW1lX18sIHNlbGYuX2NvdW50ZXIpCgogIGRlZiBwb3B1bGF0ZV9tYXAoc2VsZiwgcHJvdG9fbWFwKToKICAgIGZvciBpZCwgcHJvdG8gaW4gc2VsZi5faWRfdG9fcHJvdG8uaXRlbXMoKToKICAgICAgcHJvdG9fbWFwW2lkXS5Db3B5RnJvbShwcm90bykKCiAgZGVmIGdldF9pZChzZWxmLCBvYmosIGxhYmVsPU5vbmUpOgogICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9vYmpfdG9faWQ6CiAgICAgIGlkID0gc2VsZi5fdW5pcXVlX3JlZihvYmosIGxhYmVsKQogICAgICBzZWxmLl9pZF90b19vYmpbaWRdID0gb2JqCiAgICAgIHNlbGYuX29ial90b19pZFtvYmpdID0gaWQKICAgICAgc2VsZi5faWRfdG9fcHJvdG9baWRdID0gb2JqLnRvX3J1bm5lcl9hcGkoc2VsZi5fcGlwZWxpbmVfY29udGV4dCkKICAgIHJldHVybiBzZWxmLl9vYmpfdG9faWRbb2JqXQoKICBkZWYgZ2V0X2J5X2lkKHNlbGYsIGlkKToKICAgIGlmIGlkIG5vdCBpbiBzZWxmLl9pZF90b19vYmo6CiAgICAgIHNlbGYuX2lkX3RvX29ialtpZF0gPSBzZWxmLl9vYmpfdHlwZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICBzZWxmLl9pZF90b19wcm90b1tpZF0sIHNlbGYuX3BpcGVsaW5lX2NvbnRleHQpCiAgICByZXR1cm4gc2VsZi5faWRfdG9fb2JqW2lkXQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaWQpOgogICAgcmV0dXJuIHNlbGYuZ2V0X2J5X2lkKGlkKQoKICBkZWYgX19jb250YWluc19fKHNlbGYsIGlkKToKICAgIHJldHVybiBpZCBpbiBzZWxmLl9pZF90b19wcm90bwoKCmNsYXNzIFBpcGVsaW5lQ29udGV4dChvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVXNlZCBmb3IgYWNjZXNzaW5nIGFuZCBjb25zdHJ1Y3RpbmcgdGhlIHJlZmVyZW5jZWQgb2JqZWN0cyBvZiBhIFBpcGVsaW5lLgogICIiIgoKICBfQ09NUE9ORU5UX1RZUEVTID0gewogICAgICAndHJhbnNmb3Jtcyc6IHBpcGVsaW5lLkFwcGxpZWRQVHJhbnNmb3JtLAogICAgICAncGNvbGxlY3Rpb25zJzogcHZhbHVlLlBDb2xsZWN0aW9uLAogICAgICAnY29kZXJzJzogY29kZXJzLkNvZGVyLAogICAgICAnd2luZG93aW5nX3N0cmF0ZWdpZXMnOiBjb3JlLldpbmRvd2luZywKICAgICAgIyBUT0RPOiBlbnZpcm9ubWVudAogIH0KCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3RvPU5vbmUpOgogICAgaWYgaXNpbnN0YW5jZShwcm90bywgYmVhbV9mbl9hcGlfcGIyLlByb2Nlc3NCdW5kbGVEZXNjcmlwdG9yKToKICAgICAgcHJvdG8gPSBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbXBvbmVudHMoCiAgICAgICAgICBjb2RlcnM9ZGljdChwcm90by5jb2RlcnMuaXRlbXMoKSksCiAgICAgICAgICB3aW5kb3dpbmdfc3RyYXRlZ2llcz1kaWN0KHByb3RvLndpbmRvd2luZ19zdHJhdGVnaWVzLml0ZW1zKCkpLAogICAgICAgICAgZW52aXJvbm1lbnRzPWRpY3QocHJvdG8uZW52aXJvbm1lbnRzLml0ZW1zKCkpKQogICAgZm9yIG5hbWUsIGNscyBpbiBzZWxmLl9DT01QT05FTlRfVFlQRVMuaXRlbXMoKToKICAgICAgc2V0YXR0cigKICAgICAgICAgIHNlbGYsIG5hbWUsIF9QaXBlbGluZUNvbnRleHRNYXAoCiAgICAgICAgICAgICAgc2VsZiwgY2xzLCBnZXRhdHRyKHByb3RvLCBuYW1lLCBOb25lKSkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvKToKICAgIHJldHVybiBQaXBlbGluZUNvbnRleHQocHJvdG8pCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYpOgogICAgY29udGV4dF9wcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tcG9uZW50cygpCiAgICBmb3IgbmFtZSBpbiBzZWxmLl9DT01QT05FTlRfVFlQRVM6CiAgICAgIGdldGF0dHIoc2VsZiwgbmFtZSkucG9wdWxhdGVfbWFwKGdldGF0dHIoY29udGV4dF9wcm90bywgbmFtZSkpCiAgICByZXR1cm4gY29udGV4dF9wcm90bwp9chYCAAAoWA8AAABQaXBlbGluZUNvbnRleHRYBQAAAGNsYXNzS0xLbodYIAAAAF9QaXBlbGluZUNvbnRleHRNYXAucG9wdWxhdGVfbWFwWAMAAABkZWZLM0s2h1gdAAAAUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGlYAwAAAGRlZktpS26HWB0AAABfUGlwZWxpbmVDb250ZXh0TWFwLmdldF9ieV9pZFgDAAAAZGVmSz9LRIdYHwAAAFBpcGVsaW5lQ29udGV4dC5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZktlS2iHWBgAAABQaXBlbGluZUNvbnRleHQuX19pbml0X19YAwAAAGRlZktaS2SHWB8AAABfUGlwZWxpbmVDb250ZXh0TWFwLl91bmlxdWVfcmVmWAMAAABkZWZLLksyh1gfAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5fX2dldGl0ZW1fX1gDAAAAZGVmS0VLR4dYEwAAAF9QaXBlbGluZUNvbnRleHRNYXBYBQAAAGNsYXNzSyBLSodYGgAAAF9QaXBlbGluZUNvbnRleHRNYXAuZ2V0X2lkWAMAAABkZWZLN0s+h1ggAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5fX2NvbnRhaW5zX19YAwAAAGRlZktIS0qHWBwAAABfUGlwZWxpbmVDb250ZXh0TWFwLl9faW5pdF9fWAMAAABkZWZLJksth3V9chcCAAAoWB0AAABQaXBlbGluZUNvbnRleHQudG9fcnVubmVyX2FwaVgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0chgCAABYDwAAAFBpcGVsaW5lQ29udGV4dGoYAgAAWB8AAABQaXBlbGluZUNvbnRleHQuZnJvbV9ydW5uZXJfYXBpahgCAAB1aIpYJAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dHIZAgAAhYFyGgIAAH1yGwIAAGJ0chwCAABVL2FwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5ch0CAAAoWIsUAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byBjb252ZXJ0IFB5dGhvbidzIG5hdGl2ZSB0eXBpbmcgdHlwZXMgdG8gQmVhbSB0eXBlcy4iIiIKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgdHlwaW5nCgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHlwZWhpbnRzCgojIERlc2NyaWJlcyBhbiBlbnRyeSBpbiB0aGUgdHlwZSBtYXAgaW4gY29udmVydF90b19iZWFtX3R5cGUuCiMgbWF0Y2ggaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdXNlciB0eXBlIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGNvbnZlcnNpb24KIyBzaG91bGQgdHJpZ2dlci4KIyBhcml0eSBpcyB0aGUgZXhwZWN0ZWQgYXJpdHkgb2YgdGhlIHVzZXIgdHlwZS4gLTEgbWVhbnMgaXQncyB2YXJpYWRpYy4KIyBiZWFtX3R5cGUgaXMgdGhlIEJlYW0gdHlwZSB0aGUgdXNlciB0eXBlIHNob3VsZCBtYXAgdG8uCl9UeXBlTWFwRW50cnkgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ19UeXBlTWFwRW50cnknLCBbJ21hdGNoJywgJ2FyaXR5JywgJ2JlYW1fdHlwZSddKQoKCmRlZiBfZ2V0X2FyZyh0eXAsIGluZGV4KToKICAiIiJSZXR1cm5zIHRoZSBpbmRleC10aCBhcmd1bWVudCB0byB0aGUgZ2l2ZW4gdHlwZS4iIiIKICByZXR1cm4gdHlwLl9fYXJnc19fW2luZGV4XQoKCmRlZiBfbGVuX2FyZyh0eXApOgogICIiIlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBnaXZlbiB0eXBlLiIiIgogIHRyeToKICAgIHJldHVybiBsZW4odHlwLl9fYXJnc19fKQogIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICMgRm9yIEFueSB0eXBlLCB3aGljaCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICByZXR1cm4gMAoKCmRlZiBfc2FmZV9pc3N1YmNsYXNzKGRlcml2ZWQsIHBhcmVudCk6CiAgIiIiTGlrZSBpc3N1YmNsYXNzLCBidXQgc3dhbGxvd3MgVHlwZUVycm9ycy4KCiAgVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4gZWl0aGVyIHBhcmFtZXRlciBtaWdodCBub3QgYWN0dWFsbHkgYmUgYSBjbGFzcywKICBlLmcuIHR5cGluZy5VbmlvbiBpc24ndCBhY3R1YWxseSBhIGNsYXNzLgoKICBBcmdzOgogICAgZGVyaXZlZDogQXMgaW4gaXNzdWJjbGFzcy4KICAgIHBhcmVudDogQXMgaW4gaXNzdWJjbGFzcy4KCiAgUmV0dXJuczoKICAgIGlzc3ViY2xhc3MoZGVyaXZlZCwgcGFyZW50KSwgb3IgRmFsc2UgaWYgYSBUeXBlRXJyb3Igd2FzIHJhaXNlZC4KICAiIiIKICB0cnk6CiAgICByZXR1cm4gaXNzdWJjbGFzcyhkZXJpdmVkLCBwYXJlbnQpCiAgZXhjZXB0IFR5cGVFcnJvcjoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBfbWF0Y2hfaXNzdWJjbGFzcyhtYXRjaF9hZ2FpbnN0KToKICByZXR1cm4gbGFtYmRhIHVzZXJfdHlwZTogX3NhZmVfaXNzdWJjbGFzcyh1c2VyX3R5cGUsIG1hdGNoX2FnYWluc3QpCgoKZGVmIF9tYXRjaF9zYW1lX3R5cGUobWF0Y2hfYWdhaW5zdCk6CiAgIyBGb3IgVW5pb24gdHlwZXMuIFRoZXkgY2FuJ3QgYmUgY29tcGFyZWQgd2l0aCBpc2luc3RhbmNlIGVpdGhlciwgc28gd2UKICAjIGhhdmUgdG8gY29tcGFyZSB0aGVpciB0eXBlcyBkaXJlY3RseS4KICByZXR1cm4gbGFtYmRhIHVzZXJfdHlwZTogdHlwZSh1c2VyX3R5cGUpID09IHR5cGUobWF0Y2hfYWdhaW5zdCkKCgpkZWYgX21hdGNoX2lzX25hbWVkX3R1cGxlKHVzZXJfdHlwZSk6CiAgcmV0dXJuIChfc2FmZV9pc3N1YmNsYXNzKHVzZXJfdHlwZSwgdHlwaW5nLlR1cGxlKSBhbmQKICAgICAgICAgIGhhc2F0dHIodXNlcl90eXBlLCAnX2ZpZWxkX3R5cGVzJykpCgoKZGVmIGNvbnZlcnRfdG9fYmVhbV90eXBlKHR5cCk6CiAgIiIiQ29udmVydCBhIGdpdmVuIHR5cGluZyB0eXBlIHRvIGEgQmVhbSB0eXBlLgoKICBBcmdzOgogICAgdHlwICh0eXBlKTogdHlwaW5nIHR5cGUuCgogIFJldHVybnM6CiAgICB0eXBlOiBUaGUgZ2l2ZW4gdHlwZSBjb252ZXJ0ZWQgdG8gYSBCZWFtIHR5cGUgYXMgZmFyIGFzIHdlIGNhbiBkbyB0aGUKICAgIGNvbnZlcnNpb24uCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IFRoZSB0eXBlIHdhcyBtYWxmb3JtZWQuCiAgIiIiCgogIHR5cGVfbWFwID0gWwogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX3NhbWVfdHlwZSh0eXBpbmcuQW55KSwKICAgICAgICAgIGFyaXR5PTAsCiAgICAgICAgICBiZWFtX3R5cGU9dHlwZWhpbnRzLkFueSksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfaXNzdWJjbGFzcyh0eXBpbmcuRGljdCksCiAgICAgICAgICBhcml0eT0yLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5EaWN0KSwKICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5MaXN0KSwKICAgICAgICAgIGFyaXR5PTEsCiAgICAgICAgICBiZWFtX3R5cGU9dHlwZWhpbnRzLkxpc3QpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLlNldCksCiAgICAgICAgICBhcml0eT0xLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5TZXQpLAogICAgICAjIE5hbWVkVHVwbGUgaXMgYSBzdWJjbGFzcyBvZiBUdXBsZSwgYnV0IGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuCiAgICAgICMgV2UganVzdCBjb252ZXJ0IGl0IHRvIEFueSBmb3Igbm93LgogICAgICAjIFRoaXMgTVVTVCBhcHBlYXIgYmVmb3JlIHRoZSBlbnRyeSBmb3IgdGhlIG5vcm1hbCBUdXBsZS4KICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc19uYW1lZF90dXBsZSwgYXJpdHk9MCwgYmVhbV90eXBlPXR5cGVoaW50cy5BbnkpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLlR1cGxlKSwKICAgICAgICAgIGFyaXR5PS0xLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5UdXBsZSksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfc2FtZV90eXBlKHR5cGluZy5VbmlvbiksCiAgICAgICAgICBhcml0eT0tMSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuVW5pb24pCiAgXQoKICAjIEZpbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGVudHJ5LgogIG1hdGNoZWRfZW50cnkgPSBuZXh0KChlbnRyeSBmb3IgZW50cnkgaW4gdHlwZV9tYXAgaWYgZW50cnkubWF0Y2godHlwKSksIE5vbmUpCiAgaWYgbm90IG1hdGNoZWRfZW50cnk6CiAgICAjIE5vIG1hdGNoOiByZXR1cm4gb3JpZ2luYWwgdHlwZS4KICAgIHJldHVybiB0eXAKCiAgaWYgbWF0Y2hlZF9lbnRyeS5hcml0eSA9PSAtMToKICAgIGFyaXR5ID0gX2xlbl9hcmcodHlwKQogIGVsc2U6CiAgICBhcml0eSA9IG1hdGNoZWRfZW50cnkuYXJpdHkKICAgIGlmIF9sZW5fYXJnKHR5cCkgIT0gYXJpdHk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2V4cGVjdGluZyB0eXBlICVzIHRvIGhhdmUgYXJpdHkgJWQsIGhhZCBhcml0eSAlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQnICUgKHN0cih0eXApLCBhcml0eSwgX2xlbl9hcmcodHlwKSkpCiAgdHlwcyA9IFtjb252ZXJ0X3RvX2JlYW1fdHlwZShfZ2V0X2FyZyh0eXAsIGkpKSBmb3IgaSBpbiB4cmFuZ2UoYXJpdHkpXQogIGlmIGFyaXR5ID09IDA6CiAgICAjIE51bGxhcnkgdHlwZXMgKGUuZy4gQW55KSBkb24ndCBhY2NlcHQgZW1wdHkgdHVwbGVzIGFzIGFyZ3VtZW50cy4KICAgIHJldHVybiBtYXRjaGVkX2VudHJ5LmJlYW1fdHlwZQogIGVsaWYgYXJpdHkgPT0gMToKICAgICMgVW5hcnkgdHlwZXMgKGUuZy4gU2V0KSBkb24ndCBhY2NlcHQgMS10dXBsZXMgYXMgYXJndW1lbnRzCiAgICByZXR1cm4gbWF0Y2hlZF9lbnRyeS5iZWFtX3R5cGVbdHlwc1swXV0KICBlbHNlOgogICAgcmV0dXJuIG1hdGNoZWRfZW50cnkuYmVhbV90eXBlW3R1cGxlKHR5cHMpXQoKCmRlZiBjb252ZXJ0X3RvX2JlYW1fdHlwZXMoYXJncyk6CiAgIiIiQ29udmVydCB0aGUgZ2l2ZW4gbGlzdCBvciBkaWN0aW9uYXJ5IG9mIGFyZ3MgdG8gQmVhbSB0eXBlcy4KCiAgQXJnczoKICAgIGFyZ3M6IEVpdGhlciBhbiBpdGVyYWJsZSBvZiB0eXBlcywgb3IgYSBkaWN0aW9uYXJ5IHdoZXJlIHRoZSB2YWx1ZXMgYXJlCiAgICB0eXBlcy4KCiAgUmV0dXJuczoKICAgIElmIGdpdmVuIGFuIGl0ZXJhYmxlLCBhIGxpc3Qgb2YgY29udmVydGVkIHR5cGVzLiBJZiBnaXZlbiBhIGRpY3Rpb25hcnksCiAgICBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgc2FtZSBrZXlzLCBhbmQgdmFsdWVzIHdoaWNoIGhhdmUgYmVlbiBjb252ZXJ0ZWQuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShhcmdzLCBkaWN0KToKICAgIHJldHVybiB7azogY29udmVydF90b19iZWFtX3R5cGUodikgZm9yIGssIHYgaW4gYXJncy5pdGVyaXRlbXMoKX0KICBlbHNlOgogICAgcmV0dXJuIFtjb252ZXJ0X3RvX2JlYW1fdHlwZSh2KSBmb3IgdiBpbiBhcmdzXQp9ch4CAAAoWBEAAABfbWF0Y2hfaXNzdWJjbGFzc1gDAAAAZGVmS0NLRYdYEAAAAF9zYWZlX2lzc3ViY2xhc3NYAwAAAGRlZkswS0GHWAgAAABfbGVuX2FyZ1gDAAAAZGVmSydLLodYEAAAAF9tYXRjaF9zYW1lX3R5cGVYAwAAAGRlZktHS0uHWBQAAABjb252ZXJ0X3RvX2JlYW1fdHlwZVgDAAAAZGVmS1JLlodYCAAAAF9nZXRfYXJnWAMAAABkZWZLIkslh1gVAAAAY29udmVydF90b19iZWFtX3R5cGVzWAMAAABkZWZLmEunh1gVAAAAX21hdGNoX2lzX25hbWVkX3R1cGxlWAMAAABkZWZLTUtQh3V9ch8CAAAoWBQAAABjb252ZXJ0X3RvX2JlYW1fdHlwZVgvAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHlyIAIAAFgVAAAAY29udmVydF90b19iZWFtX3R5cGVzaiACAAB1aIpYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5ciECAACFgXIiAgAAfXIjAgAAYnRyJAIAAFUXYXBhY2hlX2JlYW0udXRpbHMucmV0cnlyJQIAAChYVyAAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUmV0cnkgZGVjb3JhdG9ycyBmb3IgY2FsbHMgcmFpc2luZyBleGNlcHRpb25zLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKVGhpcyBtb2R1bGUgaXMgdXNlZCBtb3N0bHkgdG8gZGVjb3JhdGUgYWxsIGludGVncmF0aW9uIHBvaW50cyB3aGVyZSB0aGUgY29kZQptYWtlcyBjYWxscyB0byByZW1vdGUgc2VydmljZXMuIFNlYXJjaGluZyB0aHJvdWdoIHRoZSBjb2RlIGJhc2UgZm9yIEByZXRyeQpzaG91bGQgZmluZCBhbGwgc3VjaCBwbGFjZXMuIEZvciB0aGlzIHJlYXNvbiBldmVuIHBsYWNlcyB3aGVyZSByZXRyeSBpcyBub3QKbmVlZGVkIHJpZ2h0IG5vdyB1c2UgYSBAcmV0cnkubm9fcmV0cmllcyBkZWNvcmF0b3IuCiIiIgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQmVhbUlPRXJyb3IKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBhcGl0b29scyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiMgVE9ETyhzb3VyYWJoYmFqYWopOiBSZW1vdmUgdGhlIEdDUCBzcGVjaWZpYyBlcnJvciBjb2RlIHRvIGEgc3VibW9kdWxlCnRyeToKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkuZXhjZXB0aW9ucyBpbXBvcnQgSHR0cEVycm9yCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBIdHRwRXJyb3IgPSBOb25lCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KCgpjbGFzcyBQZXJtYW5lbnRFeGNlcHRpb24oRXhjZXB0aW9uKToKICAiIiJCYXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSByZXRyaWVkLiIiIgogIHBhc3MKCgpjbGFzcyBGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscyhvYmplY3QpOgogICIiIkl0ZXJhYmxlIGZvciBpbnRlcnZhbHMgdGhhdCBhcmUgZXhwb25lbnRpYWxseSBzcGFjZWQsIHdpdGggZnV6emluZy4KCiAgT24gaXRlcmF0aW9uLCB5aWVsZHMgcmV0cnkgaW50ZXJ2YWwgbGVuZ3RocywgaW4gc2Vjb25kcy4gRXZlcnkgaXRlcmF0aW9uIG92ZXIKICB0aGlzIGl0ZXJhYmxlIHdpbGwgeWllbGQgZGlmZmVyZW50bHkgZnV6emVkIGludGVydmFsIGxlbmd0aHMsIGFzIGxvbmcgYXMgZnV6egogIGlzIG5vbnplcm8uCgogIEFyZ3M6CiAgICBpbml0aWFsX2RlbGF5X3NlY3M6IFRoZSBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHJldHJ5LCBpbiBzZWNvbmRzLgogICAgbnVtX3JldHJpZXM6IFRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkuCiAgICBmYWN0b3I6IFRoZSBleHBvbmVudGlhbCBmYWN0b3IgdG8gdXNlIG9uIHN1YnNlcXVlbnQgcmV0cmllcy4KICAgICAgRGVmYXVsdCBpcyAyIChkb3VibGluZykuCiAgICBmdXp6OiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaW5kaWNhdGluZyB0aGUgZnJhY3Rpb24gb2YgZnV6ei4gRm9yIGEKICAgICAgZ2l2ZW4gZGVsYXkgZCwgdGhlIGZ1enplZCBkZWxheSBpcyByYW5kb21seSBjaG9zZW4gYmV0d2VlbgogICAgICBbKDEgLSBmdXp6KSAqIGQsIGRdLgogICAgbWF4X2RlbGF5X3NlY3M6IE1heGltdW0gZGVsYXkgKGluIHNlY29uZHMpLiBBZnRlciB0aGlzIGxpbWl0IGlzIHJlYWNoZWQsCiAgICAgIGZ1cnRoZXIgdHJpZXMgdXNlIG1heF9kZWxheV9zZWMgaW5zdGVhZCBvZiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcKICAgICAgdGhlIHRpbWUuIERlZmF1bHRzIHRvIDEgaG91ci4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfZGVsYXlfc2VjcywgbnVtX3JldHJpZXMsIGZhY3Rvcj0yLCBmdXp6PTAuNSwKICAgICAgICAgICAgICAgbWF4X2RlbGF5X3NlY3M9NjAgKiA2MCAqIDEpOgogICAgc2VsZi5faW5pdGlhbF9kZWxheV9zZWNzID0gaW5pdGlhbF9kZWxheV9zZWNzCiAgICBzZWxmLl9udW1fcmV0cmllcyA9IG51bV9yZXRyaWVzCiAgICBzZWxmLl9mYWN0b3IgPSBmYWN0b3IKICAgIGlmIG5vdCAwIDw9IGZ1enogPD0gMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRnV6eiBwYXJhbWV0ZXIgZXhwZWN0ZWQgdG8gYmUgaW4gWzAsIDFdIHJhbmdlLicpCiAgICBzZWxmLl9mdXp6ID0gZnV6egogICAgc2VsZi5fbWF4X2RlbGF5X3NlY3MgPSBtYXhfZGVsYXlfc2VjcwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBjdXJyZW50X2RlbGF5X3NlY3MgPSBtaW4oc2VsZi5fbWF4X2RlbGF5X3NlY3MsIHNlbGYuX2luaXRpYWxfZGVsYXlfc2VjcykKICAgIGZvciBfIGluIHhyYW5nZShzZWxmLl9udW1fcmV0cmllcyk6CiAgICAgIGZ1enpfbXVsdGlwbGllciA9IDEgLSBzZWxmLl9mdXp6ICsgcmFuZG9tLnJhbmRvbSgpICogc2VsZi5fZnV6egogICAgICB5aWVsZCBjdXJyZW50X2RlbGF5X3NlY3MgKiBmdXp6X211bHRpcGxpZXIKICAgICAgY3VycmVudF9kZWxheV9zZWNzID0gbWluKAogICAgICAgICAgc2VsZi5fbWF4X2RlbGF5X3NlY3MsIGN1cnJlbnRfZGVsYXlfc2VjcyAqIHNlbGYuX2ZhY3RvcikKCgpkZWYgcmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIoZXhjZXB0aW9uKToKICAiIiJGaWx0ZXIgYWxsb3dpbmcgcmV0cmllcyBvbiBzZXJ2ZXIgZXJyb3JzIGFuZCBub24tSHR0cEVycm9ycy4iIiIKICBpZiAoSHR0cEVycm9yIGlzIG5vdCBOb25lKSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIEh0dHBFcnJvcik6CiAgICByZXR1cm4gZXhjZXB0aW9uLnN0YXR1c19jb2RlID49IDUwMAogIHJldHVybiBub3QgaXNpbnN0YW5jZShleGNlcHRpb24sIFBlcm1hbmVudEV4Y2VwdGlvbikKCgpkZWYgcmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIoZXhjZXB0aW9uKToKICBpZiBIdHRwRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpOgogICAgaWYgZXhjZXB0aW9uLnN0YXR1c19jb2RlID09IDQwODogICMgNDA4IFJlcXVlc3QgVGltZW91dAogICAgICByZXR1cm4gVHJ1ZQogIHJldHVybiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcihleGNlcHRpb24pCgoKZGVmIHJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVyKGV4Y2VwdGlvbik6CiAgIiIiRmlsdGVyIGFsbG93aW5nIHJldHJpZXMgb24gQmVhbSBJTyBlcnJvcnMuIiIiCiAgcmV0dXJuIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBCZWFtSU9FcnJvcikKCgpTRVJWRVJfRVJST1JfT1JfVElNRU9VVF9DT0RFUyA9IFs0MDgsIDUwMCwgNTAyLCA1MDMsIDUwNCwgNTk4LCA1OTldCgoKY2xhc3MgQ2xvY2sob2JqZWN0KToKICAiIiJBIHNpbXBsZSBjbG9jayBpbXBsZW1lbnRpbmcgc2xlZXAoKS4iIiIKCiAgZGVmIHNsZWVwKHNlbGYsIHZhbHVlKToKICAgIHRpbWUuc2xlZXAodmFsdWUpCgoKZGVmIG5vX3JldHJpZXMoZnVuKToKICAiIiJBIHJldHJ5IGRlY29yYXRvciBmb3IgcGxhY2VzIHdoZXJlIHdlIGRvIG5vdCB3YW50IHJldHJpZXMuIiIiCiAgcmV0dXJuIHdpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPWxhbWJkYSBfOiBGYWxzZSwgY2xvY2s9Tm9uZSkoZnVuKQoKCmRlZiB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICBudW1fcmV0cmllcz03LCBpbml0aWFsX2RlbGF5X3NlY3M9NS4wLCBsb2dnZXI9bG9nZ2luZy53YXJuaW5nLAogICAgcmV0cnlfZmlsdGVyPXJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVyLAogICAgY2xvY2s9Q2xvY2soKSwgZnV6ej1UcnVlLCBmYWN0b3I9MiwgbWF4X2RlbGF5X3NlY3M9NjAgKiA2MCk6CiAgIiIiRGVjb3JhdG9yIHdpdGggYXJndW1lbnRzIHRoYXQgY29udHJvbCB0aGUgcmV0cnkgbG9naWMuCgogIEFyZ3M6CiAgICBudW1fcmV0cmllczogVGhlIHRvdGFsIG51bWJlciBvZiB0aW1lcyB0byByZXRyeS4KICAgIGluaXRpYWxfZGVsYXlfc2VjczogVGhlIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgcmV0cnksIGluIHNlY29uZHMuCiAgICBsb2dnZXI6IEEgY2FsbGFibGUgdXNlZCB0byByZXBvcnQgYW4gZXhjZXB0aW9uLiBNdXN0IGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlCiAgICAgIGFzIGZ1bmN0aW9ucyBpbiB0aGUgc3RhbmRhcmQgbG9nZ2luZyBtb2R1bGUuIFRoZSBkZWZhdWx0IGlzCiAgICAgIGxvZ2dpbmcud2FybmluZy4KICAgIHJldHJ5X2ZpbHRlcjogQSBjYWxsYWJsZSBnZXR0aW5nIHRoZSBleGNlcHRpb24gcmFpc2VkIGFuZCByZXR1cm5pbmcgVHJ1ZQogICAgICBpZiB0aGUgcmV0cnkgc2hvdWxkIGhhcHBlbi4gRm9yIGluc3RhbmNlIHdlIGRvIG5vdCB3YW50IHRvIHJldHJ5IG9uCiAgICAgIDQwNCBIdHRwIGVycm9ycyBtb3N0IG9mIHRoZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSB3aWxsIHJldHVybiB0cnVlCiAgICAgIGZvciBzZXJ2ZXIgZXJyb3JzIChIVFRQIHN0YXR1cyBjb2RlID49IDUwMCkgYW5kIG5vbiBIdHRwIGVycm9ycy4KICAgIGNsb2NrOiBBIGNsb2NrIG9iamVjdCBpbXBsZW1lbnRpbmcgYSBzbGVlcCBtZXRob2QuIFRoZSBkZWZhdWx0IGNsb2NrIHdpbGwKICAgICAgdXNlIHRpbWUuc2xlZXAoKS4KICAgIGZ1eno6IFRydWUgaWYgdGhlIGRlbGF5IHNob3VsZCBiZSBmdXp6ZWQgKGRlZmF1bHQpLiBEdXJpbmcgdGVzdGluZyBGYWxzZQogICAgICBjYW4gYmUgdXNlZCBzbyB0aGF0IHRoZSBkZWxheXMgYXJlIG5vdCByYW5kb21pemVkLgogICAgZmFjdG9yOiBUaGUgZXhwb25lbnRpYWwgZmFjdG9yIHRvIHVzZSBvbiBzdWJzZXF1ZW50IHJldHJpZXMuCiAgICAgIERlZmF1bHQgaXMgMiAoZG91YmxpbmcpLgogICAgbWF4X2RlbGF5X3NlY3M6IE1heGltdW0gZGVsYXkgKGluIHNlY29uZHMpLiBBZnRlciB0aGlzIGxpbWl0IGlzIHJlYWNoZWQsCiAgICAgIGZ1cnRoZXIgdHJpZXMgdXNlIG1heF9kZWxheV9zZWMgaW5zdGVhZCBvZiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcKICAgICAgdGhlIHRpbWUuIERlZmF1bHRzIHRvIDEgaG91ci4KCiAgUmV0dXJuczoKICAgIEFzIHBlciBQeXRob24gZGVjb3JhdG9ycyB3aXRoIGFyZ3VtZW50cyBwYXR0ZXJuIHJldHVybnMgYSBkZWNvcmF0b3IKICAgIGZvciB0aGUgZnVuY3Rpb24gd2hpY2ggaW4gdHVybiB3aWxsIHJldHVybiB0aGUgd3JhcHBlZCAoZGVjb3JhdGVkKSBmdW5jdGlvbi4KCiAgVGhlIGRlY29yYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIGNhbGxhYmxlcyB0aGF0IG1ha2UgSFRUUCBvciBSUEMKICByZXF1ZXN0cyB0aGF0IGNhbiB0ZW1wb3JhcmlseSB0aW1lb3V0IG9yIGhhdmUgdHJhbnNpZW50IGVycm9ycy4gRm9yIGluc3RhbmNlCiAgdGhlIG1ha2VfaHR0cF9yZXF1ZXN0KCkgY2FsbCBiZWxvdyB3aWxsIGJlIHJldHJpZWQgMTYgdGltZXMgd2l0aCBleHBvbmVudGlhbAogIGJhY2tvZmYgYW5kIGZ1enppbmcgb2YgdGhlIGRlbGF5IGludGVydmFsIChkZWZhdWx0IHNldHRpbmdzKS4KCiAgZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKICAjIC4uLgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoKQogIG1ha2VfaHR0cF9yZXF1ZXN0KGFyZ3MpCiAgIiIiCgogIGRlZiByZWFsX2RlY29yYXRvcihmdW4pOgogICAgIiIiVGhlIHJlYWwgZGVjb3JhdG9yIHdob3NlIHB1cnBvc2UgaXMgdG8gcmV0dXJuIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLiIiIgogICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgcmV0cnlfaW50ZXJ2YWxzID0gaXRlcigKICAgICAgICAgIEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzKAogICAgICAgICAgICAgIGluaXRpYWxfZGVsYXlfc2VjcywgbnVtX3JldHJpZXMsIGZhY3RvciwKICAgICAgICAgICAgICBmdXp6PTAuNSBpZiBmdXp6IGVsc2UgMCwgbWF4X2RlbGF5X3NlY3M9bWF4X2RlbGF5X3NlY3MpKQogICAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgIHJldHVybiBmdW4oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhuOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgICBpZiBub3QgcmV0cnlfZmlsdGVyKGV4bik6CiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAjIEdldCB0aGUgdHJhY2ViYWNrIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiBUaGUKICAgICAgICAgICMgc3lzLmV4Y19pbmZvKCkgZnVuY3Rpb24gcmV0dXJucyBhIHR1cGxlIHdpdGggdGhyZWUgZWxlbWVudHM6CiAgICAgICAgICAjIGV4Y2VwdGlvbiB0eXBlLCBleGNlcHRpb24gdmFsdWUsIGFuZCBleGNlcHRpb24gdHJhY2ViYWNrLgogICAgICAgICAgZXhuX3RyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgICB0cnk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICBzbGVlcF9pbnRlcnZhbCA9IG5leHQocmV0cnlfaW50ZXJ2YWxzKQogICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gc2luY2Ugd2UgZmluaXNoZWQgdGhlIHJldHJpZXMuCiAgICAgICAgICAgICAgcmFpc2UgZXhuLCBOb25lLCBleG5fdHJhY2ViYWNrICAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCgogICAgICAgICAgICBsb2dnZXIoCiAgICAgICAgICAgICAgICAnUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmOiB3YWl0aW5nIGZvciAlcyBzZWNvbmRzIGJlZm9yZSAnCiAgICAgICAgICAgICAgICAncmV0cnlpbmcgJXMgYmVjYXVzZSB3ZSBjYXVnaHQgZXhjZXB0aW9uOiAlcyAnCiAgICAgICAgICAgICAgICAnVHJhY2ViYWNrIGZvciBhYm92ZSBleGNlcHRpb24gKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4lcycsCiAgICAgICAgICAgICAgICBzbGVlcF9pbnRlcnZhbCwKICAgICAgICAgICAgICAgIGdldGF0dHIoZnVuLCAnX19uYW1lX18nLCBzdHIoZnVuKSksCiAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhuLl9fY2xhc3NfXywgZXhuKSksCiAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIoZXhuX3RyYWNlYmFjaykpKQogICAgICAgICAgICBjbG9jay5zbGVlcChzbGVlcF9pbnRlcnZhbCkKICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICMgVHJhY2ViYWNrIG9iamVjdHMgaW4gbG9jYWxzIGNhbiBjYXVzZSByZWZlcmVuY2UgY3ljbGVzIHRoYXQgd2lsbAogICAgICAgICAgICAjIHByZXZlbnQgZ2FyYmFnZSBjb2xsZWN0aW9uLiBDbGVhciBpdCBub3cgc2luY2Ugd2UgZG8gbm90IG5lZWQKICAgICAgICAgICAgIyBpdCBhbnltb3JlLgogICAgICAgICAgICBzeXMuZXhjX2NsZWFyKCkKICAgICAgICAgICAgZXhuX3RyYWNlYmFjayA9IE5vbmUKCiAgICByZXR1cm4gd3JhcHBlcgoKICByZXR1cm4gcmVhbF9kZWNvcmF0b3IKfXImAgAAKFgSAAAAUGVybWFuZW50RXhjZXB0aW9uWAUAAABjbGFzc0suSzGHWB0AAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlclgDAAAAZGVmS1pLX4dYGAAAAHdpdGhfZXhwb25lbnRpYWxfYmFja29mZlgDAAAAZGVmS31L0YdYHQAAAHJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVyWAMAAABkZWZLaEtrh1gFAAAAQ2xvY2tYBQAAAGNsYXNzS3BLdYdYKQAAAHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyWAMAAABkZWZLYUtmh1gaAAAARnV6emVkRXhwb25lbnRpYWxJbnRlcnZhbHNYBQAAAGNsYXNzSzNLWIdYIwAAAEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzLl9faW5pdF9fWAMAAABkZWZLR0tQh1gKAAAAbm9fcmV0cmllc1gDAAAAZGVmS3dLe4dYLwAAAHdpdGhfZXhwb25lbnRpYWxfYmFja29mZi5yZWFsX2RlY29yYXRvci53cmFwcGVyWAMAAABkZWZLqEvNh1gnAAAAd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmLnJlYWxfZGVjb3JhdG9yWAMAAABkZWZLpkvPh1gLAAAAQ2xvY2suc2xlZXBYAwAAAGRlZktzS3WHWCMAAABGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscy5fX2l0ZXJfX1gDAAAAZGVmS1FLWId1fXInAgAAKFgSAAAAUGVybWFuZW50RXhjZXB0aW9ucigCAABYFwAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5cikCAABYHQAAAHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVyaikCAABYGAAAAHdpdGhfZXhwb25lbnRpYWxfYmFja29mZmopAgAAWB0AAAByZXRyeV9vbl9iZWFtX2lvX2Vycm9yX2ZpbHRlcmopAgAAWAUAAABDbG9ja2opAgAAWCkAAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcmopAgAAWBoAAABGdXp6ZWRFeHBvbmVudGlhbEludGVydmFsc2opAgAAWAoAAABub19yZXRyaWVzaikCAABYCwAAAENsb2NrLnNsZWVwaikCAAB1aIpYFwAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5cioCAACFgXIrAgAAfXIsAgAAYnRyLQIAAFUYYXBhY2hlX2JlYW0udGVzdGluZy51dGlsci4CAAAoWHAVAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdGllcyBmb3IgdGVzdGluZyBCZWFtIHBpcGVsaW5lcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGdsb2IKaW1wb3J0IHRlbXBmaWxlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENyZWF0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgTWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgV2luZG93SW50bwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCBpbXBvcnQgQ29Hcm91cEJ5S2V5CmZyb20gYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMgaW1wb3J0IGV4cGVyaW1lbnRhbAoKX19hbGxfXyA9IFsKICAgICdhc3NlcnRfdGhhdCcsCiAgICAnZXF1YWxfdG8nLAogICAgJ2lzX2VtcHR5JywKICAgICMgb3Blbl9zaGFyZHMgaXMgaW50ZXJuYWwgYW5kIGhhcyBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICAgJ29wZW5fc2hhcmRzJywKICAgICdUZXN0V2luZG93ZWRWYWx1ZScsCiAgICBdCgoKY2xhc3MgQmVhbUFzc2VydEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICIiIkV4Y2VwdGlvbiByYWlzZWQgYnkgbWF0Y2hlciBjbGFzc2VzIHVzZWQgYnkgYXNzZXJ0X3RoYXQgdHJhbnNmb3JtLiIiIgoKICBwYXNzCgoKIyBVc2VkIGZvciByZWlmeWluZyB0aW1lc3RhbXBzIGFuZCB3aW5kb3dzIGZvciBhc3NlcnRfdGhhdCBtYXRjaGVycy4KVGVzdFdpbmRvd2VkVmFsdWUgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ1Rlc3RXaW5kb3dlZFZhbHVlJywgJ3ZhbHVlIHRpbWVzdGFtcCB3aW5kb3dzJykKCgpkZWYgY29udGFpbnNfaW5fYW55X29yZGVyKGl0ZXJhYmxlKToKICAiIiJDcmVhdGVzIGFuIG9iamVjdCB0aGF0IG1hdGNoZXMgYW5vdGhlciBpdGVyYWJsZSBpZiB0aGV5IGJvdGggaGF2ZSB0aGUKICBzYW1lIGNvdW50IG9mIGl0ZW1zLgoKICBBcmd1bWVudHM6CiAgICBpdGVyYWJsZTogQW4gaXRlcmFibGUgb2YgaGFzaGFibGUgb2JqZWN0cy4KICAiIiIKICBjbGFzcyBJbkFueU9yZGVyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgogICAgICBzZWxmLl9jb3VudGVyID0gY29sbGVjdGlvbnMuQ291bnRlcihpdGVyYWJsZSkKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgcmV0dXJuIHNlbGYuX2NvdW50ZXIgPT0gY29sbGVjdGlvbnMuQ291bnRlcihvdGhlcikKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAiSW5BbnlPcmRlciglcykiICUgc2VsZi5fY291bnRlcgoKICByZXR1cm4gSW5BbnlPcmRlcihpdGVyYWJsZSkKCgojIE5vdGUgdGhhdCBlcXVhbF90byBhbHdheXMgc29ydHMgdGhlIGV4cGVjdGVkIGFuZCBhY3R1YWwgc2luY2Ugd2hhdCB3ZQojIGNvbXBhcmUgYXJlIFBDb2xsZWN0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gZ3VhcmFudGVlZCBvcmRlci4KIyBIb3dldmVyIHRoZSBzb3J0aW5nIGRvZXMgbm90IGdvIGJleW9uZCB0b3AgbGV2ZWwgdGhlcmVmb3JlIFsxLDJdIGFuZCBbMiwxXQojIGFyZSBjb25zaWRlcmVkIGVxdWFsIGFuZCBbWzEsMl1dIGFuZCBbWzIsMV1dIGFyZSBub3QuCmRlZiBlcXVhbF90byhleHBlY3RlZCk6CiAgZXhwZWN0ZWQgPSBsaXN0KGV4cGVjdGVkKQoKICBkZWYgX2VxdWFsKGFjdHVhbCk6CiAgICBzb3J0ZWRfZXhwZWN0ZWQgPSBzb3J0ZWQoZXhwZWN0ZWQpCiAgICBzb3J0ZWRfYWN0dWFsID0gc29ydGVkKGFjdHVhbCkKICAgIGlmIHNvcnRlZF9leHBlY3RlZCAhPSBzb3J0ZWRfYWN0dWFsOgogICAgICByYWlzZSBCZWFtQXNzZXJ0RXhjZXB0aW9uKAogICAgICAgICAgJ0ZhaWxlZCBhc3NlcnQ6ICVyID09ICVyJyAlIChzb3J0ZWRfZXhwZWN0ZWQsIHNvcnRlZF9hY3R1YWwpKQogIHJldHVybiBfZXF1YWwKCgpkZWYgaXNfZW1wdHkoKToKICBkZWYgX2VtcHR5KGFjdHVhbCk6CiAgICBhY3R1YWwgPSBsaXN0KGFjdHVhbCkKICAgIGlmIGFjdHVhbDoKICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICdGYWlsZWQgYXNzZXJ0OiBbXSA9PSAlcicgJSBhY3R1YWwpCiAgcmV0dXJuIF9lbXB0eQoKCmRlZiBhc3NlcnRfdGhhdChhY3R1YWwsIG1hdGNoZXIsIGxhYmVsPSdhc3NlcnRfdGhhdCcsIHJlaWZ5X3dpbmRvd3M9RmFsc2UpOgogICIiIkEgUFRyYW5zZm9ybSB0aGF0IGNoZWNrcyBhIFBDb2xsZWN0aW9uIGhhcyBhbiBleHBlY3RlZCB2YWx1ZS4KCiAgTm90ZSB0aGF0IGFzc2VydF90aGF0IHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcgcGlwZWxpbmVzIHNpbmNlIHRoZQogIGNoZWNrIHJlbGllcyBvbiBtYXRlcmlhbGl6aW5nIHRoZSBlbnRpcmUgUENvbGxlY3Rpb24gYmVpbmcgY2hlY2tlZC4KCiAgQXJnczoKICAgIGFjdHVhbDogQSBQQ29sbGVjdGlvbi4KICAgIG1hdGNoZXI6IEEgbWF0Y2hlciBmdW5jdGlvbiB0YWtpbmcgYXMgYXJndW1lbnQgdGhlIGFjdHVhbCB2YWx1ZSBvZiBhCiAgICAgIG1hdGVyaWFsaXplZCBQQ29sbGVjdGlvbi4gVGhlIG1hdGNoZXIgdmFsaWRhdGVzIHRoaXMgYWN0dWFsIHZhbHVlIGFnYWluc3QKICAgICAgZXhwZWN0YXRpb25zIGFuZCByYWlzZXMgQmVhbUFzc2VydEV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgbWV0LgogICAgbGFiZWw6IE9wdGlvbmFsIHN0cmluZyBsYWJlbC4gVGhpcyBpcyBuZWVkZWQgaW4gY2FzZSBzZXZlcmFsIGFzc2VydF90aGF0CiAgICAgIHRyYW5zZm9ybXMgYXJlIGludHJvZHVjZWQgaW4gdGhlIHNhbWUgcGlwZWxpbmUuCiAgICByZWlmeV93aW5kb3dzOiBJZiBUcnVlLCBtYXRjaGVyIGlzIHBhc3NlZCBhIGxpc3Qgb2YgVGVzdFdpbmRvd2VkVmFsdWUuCgogIFJldHVybnM6CiAgICBJZ25vcmVkLgogICIiIgogIGFzc2VydCBpc2luc3RhbmNlKGFjdHVhbCwgcHZhbHVlLlBDb2xsZWN0aW9uKQoKICBjbGFzcyBSZWlmeVRpbWVzdGFtcFdpbmRvdyhEb0ZuKToKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtLAogICAgICAgICAgICAgICAgd2luZG93PURvRm4uV2luZG93UGFyYW0pOgogICAgICAjIFRoaXMgcmV0dXJucyBUZXN0V2luZG93ZWRWYWx1ZSBpbnN0ZWFkIG9mCiAgICAgICMgYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlIGJlY2F1c2UgUGFyRG8gd2lsbCBleHRyYWN0CiAgICAgICMgdGhlIHRpbWVzdGFtcCBhbmQgd2luZG93IG91dCBvZiB0aGUgbGF0dGVyLgogICAgICByZXR1cm4gW1Rlc3RXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIHRpbWVzdGFtcCwgW3dpbmRvd10pXQoKICBjbGFzcyBBc3NlcnRUaGF0KFBUcmFuc2Zvcm0pOgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBpZiByZWlmeV93aW5kb3dzOgogICAgICAgIHBjb2xsID0gcGNvbGwgfCBQYXJEbyhSZWlmeVRpbWVzdGFtcFdpbmRvdygpKQoKICAgICAgIyBXZSBtdXN0IGhhdmUgYXQgbGVhc3QgYSBzaW5nbGUgZWxlbWVudCB0byBlbnN1cmUgdGhlIG1hdGNoZXIKICAgICAgIyBjb2RlIGdldHMgcnVuIGV2ZW4gaWYgdGhlIGlucHV0IHBjb2xsZWN0aW9uIGlzIGVtcHR5LgogICAgICBrZXllZF9zaW5nbGV0b24gPSBwY29sbC5waXBlbGluZSB8IENyZWF0ZShbKE5vbmUsIE5vbmUpXSkKICAgICAga2V5ZWRfYWN0dWFsID0gKAogICAgICAgICAgcGNvbGwKICAgICAgICAgIHwgV2luZG93SW50byh3aW5kb3cuR2xvYmFsV2luZG93cygpKQogICAgICAgICAgfCAiVG9Wb2lkS2V5IiA+PiBNYXAobGFtYmRhIHY6IChOb25lLCB2KSkpCiAgICAgIF8gPSAoKGtleWVkX3NpbmdsZXRvbiwga2V5ZWRfYWN0dWFsKQogICAgICAgICAgIHwgIkdyb3VwIiA+PiBDb0dyb3VwQnlLZXkoKQogICAgICAgICAgIHwgIlVua2V5IiA+PiBNYXAobGFtYmRhIGtfX19hY3R1YWxfdmFsdWVzOiBrX19fYWN0dWFsX3ZhbHVlc1sxXVsxXSkKICAgICAgICAgICB8ICJNYXRjaCIgPj4gTWFwKG1hdGNoZXIpKQoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gbGFiZWwKCiAgYWN0dWFsIHwgQXNzZXJ0VGhhdCgpICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAoKCkBleHBlcmltZW50YWwoKQpkZWYgb3Blbl9zaGFyZHMoZ2xvYl9wYXR0ZXJuKToKICAiIiJSZXR1cm5zIGEgY29tcG9zaXRlIGZpbGUgb2YgYWxsIHNoYXJkcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZ2xvYiBwYXR0ZXJuLiIiIgogIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKICAgIGZvciBzaGFyZCBpbiBnbG9iLmdsb2IoZ2xvYl9wYXR0ZXJuKToKICAgICAgZi53cml0ZShmaWxlKHNoYXJkKS5yZWFkKCkpCiAgICBjb25jYXRlbmF0ZWRfZmlsZV9uYW1lID0gZi5uYW1lCiAgcmV0dXJuIGZpbGUoY29uY2F0ZW5hdGVkX2ZpbGVfbmFtZSwgJ3JiJykKfXIvAgAAKFggAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXJYBQAAAGNsYXNzS0FLSodYDwAAAGlzX2VtcHR5Ll9lbXB0eVgDAAAAZGVmS19LZIdYCAAAAGVxdWFsX3RvWAMAAABkZWZLUktch1gVAAAAY29udGFpbnNfaW5fYW55X29yZGVyWAMAAABkZWZLOktMh1gWAAAAYXNzZXJ0X3RoYXQuQXNzZXJ0VGhhdFgFAAAAY2xhc3NLg0uXh1gkAAAAYXNzZXJ0X3RoYXQuQXNzZXJ0VGhhdC5kZWZhdWx0X2xhYmVsWAMAAABkZWZLlUuXh1gTAAAAQmVhbUFzc2VydEV4Y2VwdGlvblgFAAAAY2xhc3NLL0szh1goAAAAYXNzZXJ0X3RoYXQuUmVpZnlUaW1lc3RhbXBXaW5kb3cucHJvY2Vzc1gDAAAAZGVmS3xLgodYCwAAAG9wZW5fc2hhcmRzWAMAAABkZWZLm0ujh1gpAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19yZXByX19YAwAAAGRlZktIS0qHWCAAAABhc3NlcnRfdGhhdC5SZWlmeVRpbWVzdGFtcFdpbmRvd1gFAAAAY2xhc3NLe0uCh1gpAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19pbml0X19YAwAAAGRlZktCS0SHWCcAAABjb250YWluc19pbl9hbnlfb3JkZXIuSW5BbnlPcmRlci5fX2VxX19YAwAAAGRlZktFS0eHWAsAAABhc3NlcnRfdGhhdFgDAAAAZGVmS2dLmYdYCAAAAGlzX2VtcHR5WAMAAABkZWZLXktlh1gPAAAAZXF1YWxfdG8uX2VxdWFsWAMAAABkZWZLVUtbh1gdAAAAYXNzZXJ0X3RoYXQuQXNzZXJ0VGhhdC5leHBhbmRYAwAAAGRlZkuFS5SHdX1yMAIAAChYCAAAAGVxdWFsX3RvWBgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxyMQIAAFgLAAAAb3Blbl9zaGFyZHNqMQIAAFgIAAAAaXNfZW1wdHlqMQIAAFgLAAAAYXNzZXJ0X3RoYXRqMQIAAHVoilgYAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlscjICAACFgXIzAgAAfXI0AgAAYnRyNQIAAFUjYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUoWFQXAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkpTT04gY29udmVyc2lvbiB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBhcGl0b29scyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkgaW1wb3J0IGV4dHJhX3R5cGVzCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBleHRyYV90eXBlcyA9IE5vbmUKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCgpfTUFYSU5UNjQgPSAoMSA8PCA2MykgLSAxCl9NSU5JTlQ2NCA9IC0gKDEgPDwgNjMpCgoKZGVmIGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKG9iaik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb252ZXJ0cyBhIGJhc2ljIHR5cGUgaW50byBhIEB0eXBlL3ZhbHVlIGRpY3Rpb25hcnkuCgogIEFyZ3M6CiAgICBvYmo6IEEgYmFzZXN0cmluZywgYm9vbCwgaW50LCBvciBmbG9hdCB0byBiZSBjb252ZXJ0ZWQuCgogIFJldHVybnM6CiAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUga2V5cyBgYEB0eXBlYGAgYW5kIGBgdmFsdWVgYCB3aXRoIHRoZSB2YWx1ZSBmb3IKICAgIHRoZSBgYEB0eXBlYGAgb2YgYXBwcm9wcmlhdGUgdHlwZS4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiB0aGUgUHl0aG9uIG9iamVjdCBoYXMgYSB0eXBlIHRoYXQgaXMgbm90CiAgICAgIHN1cHBvcnRlZC4KICAiIiIKICBpZiBpc2luc3RhbmNlKG9iaiwgYmFzZXN0cmluZyk6CiAgICB0eXBlX25hbWUgPSAnVGV4dCcKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBib29sKToKICAgIHR5cGVfbmFtZSA9ICdCb29sZWFuJwogIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCk6CiAgICB0eXBlX25hbWUgPSAnSW50ZWdlcicKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBmbG9hdCk6CiAgICB0eXBlX25hbWUgPSAnRmxvYXQnCiAgZWxzZToKICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGdldCBhIHR5cGUgZGVzY3JpcHRvciBmb3IgJXMuJyAlIHJlcHIob2JqKSkKICByZXR1cm4geydAdHlwZSc6ICdodHRwOi8vc2NoZW1hLm9yZy8lcycgJSB0eXBlX25hbWUsICd2YWx1ZSc6IG9ian0KCgpkZWYgdG9fanNvbl92YWx1ZShvYmosIHdpdGhfdHlwZT1GYWxzZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb252ZXJ0cyBQeXRob24gb2JqZWN0cyBpbnRvIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSBvYmplY3RzLgoKICBBcmdzOgogICAgb2JqOiBQeXRob24gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC4gQ2FuIGJlIDpkYXRhOmBOb25lYC4KICAgIHdpdGhfdHlwZTogSWYgdHJ1ZSB0aGVuIHRoZSBiYXNpYyB0eXBlcyAoYGBzdHJpbmdgYCwgYGBpbnRgYCwgYGBmbG9hdGBgLAogICAgICBgYGJvb2xgYCkgd2lsbCBiZSB3cmFwcGVkIGluIGBgQHR5cGU6dmFsdWVgYCBkaWN0aW9uYXJpZXMuIE90aGVyd2lzZSB0aGUKICAgICAgc3RyYWlnaHQgdmFsdWUgaXMgZW5jb2RlZCBpbnRvIGEgYGBKc29uVmFsdWVgYC4KCiAgUmV0dXJuczoKICAgIEEgYGBKc29uVmFsdWVgYCBvYmplY3QgdXNpbmcgYGBKc29uVmFsdWVgYCwgYGBKc29uQXJyYXlgYCBhbmQgYGBKc29uT2JqZWN0YGAKICAgIHR5cGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMsIGxpc3RzLCBvciBkaWN0aW9uYXJpZXMuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIFB5dGhvbiBvYmplY3QgY29udGFpbnMgYSB0eXBlIHRoYXQgaXMgbm90CiAgICAgIHN1cHBvcnRlZC4KCiAgVGhlIHR5cGVzIHN1cHBvcnRlZCBhcmUgYGBzdHJgYCwgYGBib29sYGAsIGBgbGlzdGBgLCBgYHR1cGxlYGAsIGBgZGljdGBgLCBhbmQKICBgYE5vbmVgYC4gVGhlIERhdGFmbG93IEFQSSByZXF1aXJlcyBKc29uVmFsdWUocykgaW4gbWFueSBwbGFjZXMsIGFuZCBpdCBpcwogIHF1aXRlIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IHRoZXNlIGhpZXJhcmNoaWNhbCBvYmplY3RzIHVzaW5nCiAgUHl0aG9uIHN5bnRheC4KICAiIiIKICBpZiBvYmogaXMgTm9uZToKICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoaXNfbnVsbD1UcnVlKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSkpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSgKICAgICAgICBhcnJheV92YWx1ZT1leHRyYV90eXBlcy5Kc29uQXJyYXkoCiAgICAgICAgICAgIGVudHJpZXM9W3RvX2pzb25fdmFsdWUobywgd2l0aF90eXBlPXdpdGhfdHlwZSkgZm9yIG8gaW4gb2JqXSkpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICBqc29uX29iamVjdCA9IGV4dHJhX3R5cGVzLkpzb25PYmplY3QoKQogICAgZm9yIGssIHYgaW4gb2JqLml0ZXJpdGVtcygpOgogICAgICBqc29uX29iamVjdC5wcm9wZXJ0aWVzLmFwcGVuZCgKICAgICAgICAgIGV4dHJhX3R5cGVzLkpzb25PYmplY3QuUHJvcGVydHkoCiAgICAgICAgICAgICAga2V5PWssIHZhbHVlPXRvX2pzb25fdmFsdWUodiwgd2l0aF90eXBlPXdpdGhfdHlwZSkpKQogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShvYmplY3RfdmFsdWU9anNvbl9vYmplY3QpCiAgZWxpZiB3aXRoX3R5cGU6CiAgICByZXR1cm4gdG9fanNvbl92YWx1ZShnZXRfdHlwZWRfdmFsdWVfZGVzY3JpcHRvcihvYmopLCB3aXRoX3R5cGU9RmFsc2UpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYmFzZXN0cmluZyk6CiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKHN0cmluZ192YWx1ZT1vYmopCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYm9vbCk6CiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKGJvb2xlYW5fdmFsdWU9b2JqKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCk6CiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKGludGVnZXJfdmFsdWU9b2JqKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIGxvbmcpOgogICAgaWYgX01JTklOVDY0IDw9IG9iaiA8PSBfTUFYSU5UNjQ6CiAgICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoaW50ZWdlcl92YWx1ZT1vYmopCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0NhbiBub3QgZW5jb2RlIHt9IGFzIGEgNjQtYml0IGludGVnZXInLmZvcm1hdChvYmopKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIGZsb2F0KToKICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoZG91YmxlX3ZhbHVlPW9iaikKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBWYWx1ZVByb3ZpZGVyKToKICAgIGlmIG9iai5pc19hY2Nlc3NpYmxlKCk6CiAgICAgIHJldHVybiB0b19qc29uX3ZhbHVlKG9iai5nZXQoKSkKICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoaXNfbnVsbD1UcnVlKQogIGVsc2U6CiAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICVzIHRvIGEgSlNPTiB2YWx1ZS4nICUgcmVwcihvYmopKQoKCmRlZiBmcm9tX2pzb25fdmFsdWUodik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb252ZXJ0cyBgYGV4dHJhX3R5cGVzLkpzb25WYWx1ZWBgIG9iamVjdHMgaW50byBQeXRob24gb2JqZWN0cy4KCiAgQXJnczoKICAgIHY6IGBgSnNvblZhbHVlYGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC4KCiAgUmV0dXJuczoKICAgIEEgUHl0aG9uIG9iamVjdCBzdHJ1Y3R1cmVkIGFzIHZhbHVlcywgbGlzdHMsIGFuZCBkaWN0aW9uYXJpZXMgY29ycmVzcG9uZGluZwogICAgdG8gYGBKc29uVmFsdWVgYCwgYGBKc29uQXJyYXlgYCBhbmQgYGBKc29uT2JqZWN0YGAgdHlwZXMuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIGBgSnNvblZhbHVlYGAgb2JqZWN0IGNvbnRhaW5zIGEgdHlwZSB0aGF0IGlzCiAgICAgIG5vdCBzdXBwb3J0ZWQuCgogIFRoZSB0eXBlcyBzdXBwb3J0ZWQgYXJlIGBgc3RyYGAsIGBgYm9vbGBgLCBgYGxpc3RgYCwgYGBkaWN0YGAsIGFuZCBgYE5vbmVgYC4KICBUaGUgRGF0YWZsb3cgQVBJIHJldHVybnMgSnNvblZhbHVlKHMpIGluIG1hbnkgcGxhY2VzIGFuZCBpdCBpcyBxdWl0ZQogIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byBjb252ZXJ0IHRoZXNlIGhpZXJhcmNoaWNhbCBvYmplY3RzIHRvIG11Y2ggc2ltcGxlcgogIFB5dGhvbiBvYmplY3RzLgogICIiIgogIGlmIGlzaW5zdGFuY2UodiwgZXh0cmFfdHlwZXMuSnNvblZhbHVlKToKICAgIGlmIHYuc3RyaW5nX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5zdHJpbmdfdmFsdWUKICAgIGVsaWYgdi5ib29sZWFuX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5ib29sZWFuX3ZhbHVlCiAgICBlbGlmIHYuaW50ZWdlcl92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIHYuaW50ZWdlcl92YWx1ZQogICAgZWxpZiB2LmRvdWJsZV92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIHYuZG91YmxlX3ZhbHVlCiAgICBlbGlmIHYuYXJyYXlfdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBmcm9tX2pzb25fdmFsdWUodi5hcnJheV92YWx1ZSkKICAgIGVsaWYgdi5vYmplY3RfdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBmcm9tX2pzb25fdmFsdWUodi5vYmplY3RfdmFsdWUpCiAgICBlbGlmIHYuaXNfbnVsbDoKICAgICAgcmV0dXJuIE5vbmUKICBlbGlmIGlzaW5zdGFuY2UodiwgZXh0cmFfdHlwZXMuSnNvbkFycmF5KToKICAgIHJldHVybiBbZnJvbV9qc29uX3ZhbHVlKGUpIGZvciBlIGluIHYuZW50cmllc10KICBlbGlmIGlzaW5zdGFuY2UodiwgZXh0cmFfdHlwZXMuSnNvbk9iamVjdCk6CiAgICByZXR1cm4ge3Aua2V5OiBmcm9tX2pzb25fdmFsdWUocC52YWx1ZSkgZm9yIHAgaW4gdi5wcm9wZXJ0aWVzfQogIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJXMgZnJvbSBhIEpTT04gdmFsdWUuJyAlIHJlcHIodikpCn1yNgIAAChYGgAAAGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yWAMAAABkZWZLIks9h1gNAAAAdG9fanNvbl92YWx1ZVgDAAAAZGVmSz9LeYdYDwAAAGZyb21fanNvbl92YWx1ZVgDAAAAZGVmS3tLpId1fXI3AgAAKFgaAAAAZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3JYIwAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlcjgCAABYDQAAAHRvX2pzb25fdmFsdWVqOAIAAFgPAAAAZnJvbV9qc29uX3ZhbHVlajgCAAB1aIpYIwAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlcjkCAACFgXI6AgAAfXI7AgAAYnRyPAIAAFVLYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVycj0CAAAoWDQPAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgcnVubmVyIGltcGxlbWVudGF0aW9uIHRoYXQgc3VibWl0cyBhIGpvYiBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4KIiIiCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmFuZG9tCmltcG9ydCBzdHJpbmcKCmltcG9ydCBncnBjCgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9qb2JfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iIGltcG9ydCB1dGlscyBhcyBqb2JfdXRpbHMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyIGltcG9ydCBEb2NrZXJSUENNYW5hZ2VyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lUnVubmVyCgpfX2FsbF9fID0gWydQeXRob25SUENEaXJlY3RSdW5uZXInXQoKCmNsYXNzIFB5dGhvblJQQ0RpcmVjdFJ1bm5lcihQaXBlbGluZVJ1bm5lcik6CiAgIiIiRXhlY3V0ZXMgYSBzaW5nbGUgcGlwZWxpbmUgb24gdGhlIGxvY2FsIG1hY2hpbmUgaW5zaWRlIGEgY29udGFpbmVyLiIiIgoKICAjIEEgbGlzdCBvZiBQVHJhbnNmb3JtT3ZlcnJpZGUgb2JqZWN0cyB0byBiZSBhcHBsaWVkIGJlZm9yZSBydW5uaW5nIGEgcGlwZWxpbmUKICAjIHVzaW5nIERpcmVjdFJ1bm5lci4KICAjIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgZm9yIG92ZXJyaWRlcyB3aGVyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBkbwogICMgbm90IGNoYW5nZS4KICAjIEZvciBpbnRlcm5hbCBTREsgdXNlIG9ubHkuIFRoaXMgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGJ5IEJlYW0gcGlwZWxpbmUKICAjIGF1dGhvcnMuCiAgX1BUUkFOU0ZPUk1fT1ZFUlJJREVTID0gW10KCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fY2FjaGUgPSBOb25lCgogIGRlZiBydW4oc2VsZiwgcGlwZWxpbmUpOgogICAgIiIiUmVtb3RlbHkgZXhlY3V0ZXMgZW50aXJlIHBpcGVsaW5lIG9yIHBhcnRzIHJlYWNoYWJsZSBmcm9tIG5vZGUuIiIiCgogICAgIyBQZXJmb3JtaW5nIGNvbmZpZ3VyZWQgUFRyYW5zZm9ybSBvdmVycmlkZXMuCiAgICBwaXBlbGluZS5yZXBsYWNlX2FsbChQeXRob25SUENEaXJlY3RSdW5uZXIuX1BUUkFOU0ZPUk1fT1ZFUlJJREVTKQoKICAgICMgU3RhcnQgdGhlIFJQQyBjby1wcm9jZXNzCiAgICBtYW5hZ2VyID0gRG9ja2VyUlBDTWFuYWdlcigpCgogICAgIyBTdWJtaXQgdGhlIGpvYiB0byB0aGUgUlBDIGNvLXByb2Nlc3MKICAgIGpvYk5hbWUgPSAoJ0pvYi0nICsKICAgICAgICAgICAgICAgJycuam9pbihyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV91cHBlcmNhc2UpIGZvciBfIGluIHJhbmdlKDYpKSkKICAgIG9wdGlvbnMgPSB7azogdiBmb3IgaywgdiBpbiBwaXBlbGluZS5fb3B0aW9ucy5nZXRfYWxsX29wdGlvbnMoKS5pdGVyaXRlbXMoKQogICAgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lfQoKICAgIHRyeToKICAgICAgcmVzcG9uc2UgPSBtYW5hZ2VyLnNlcnZpY2UucnVuKGJlYW1fam9iX2FwaV9wYjIuU3VibWl0Sm9iUmVxdWVzdCgKICAgICAgICAgIHBpcGVsaW5lPXBpcGVsaW5lLnRvX3J1bm5lcl9hcGkoKSwKICAgICAgICAgIHBpcGVsaW5lT3B0aW9ucz1qb2JfdXRpbHMuZGljdF90b19zdHJ1Y3Qob3B0aW9ucyksCiAgICAgICAgICBqb2JOYW1lPWpvYk5hbWUpKQoKICAgICAgbG9nZ2luZy5pbmZvKCdTdWJtaXR0ZWQgYSBqb2Igd2l0aCBpZDogJXMnLCByZXNwb25zZS5qb2JJZCkKCiAgICAgICMgUmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgbWFuYWdlciBpbnN0YW5jZQogICAgICByZXN1bHQgPSBQeXRob25SUENEaXJlY3RQaXBlbGluZVJlc3VsdChyZXNwb25zZS5qb2JJZCwgbWFuYWdlcikKICAgICAgcmV0dXJuIHJlc3VsdAogICAgZXhjZXB0IGdycGMuUnBjRXJyb3I6CiAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ZhaWxlZCB0byBydW4gdGhlIGpvYiB3aXRoIG5hbWU6ICVzJywgam9iTmFtZSkKICAgICAgcmFpc2UKCgpjbGFzcyBQeXRob25SUENEaXJlY3RQaXBlbGluZVJlc3VsdChQaXBlbGluZVJlc3VsdCk6CiAgIiIiUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBwaXBlbGluZSBydW4gb24gdGhlIERhdGFmbG93IHNlcnZpY2UuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JfaWQsIGpvYl9tYW5hZ2VyKToKICAgIHNlbGYuam9iX2lkID0gam9iX2lkCiAgICBzZWxmLm1hbmFnZXIgPSBqb2JfbWFuYWdlcgoKICBAcHJvcGVydHkKICBkZWYgc3RhdGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5tYW5hZ2VyLnNlcnZpY2UuZ2V0U3RhdGUoCiAgICAgICAgYmVhbV9qb2JfYXBpX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3Qoam9iSWQ9c2VsZi5qb2JfaWQpKQoKICBkZWYgd2FpdF91bnRpbF9maW5pc2goc2VsZik6CiAgICBtZXNzYWdlc19yZXF1ZXN0ID0gYmVhbV9qb2JfYXBpX3BiMi5Kb2JNZXNzYWdlc1JlcXVlc3Qoam9iSWQ9c2VsZi5qb2JfaWQpCiAgICBmb3IgbWVzc2FnZSBpbiBzZWxmLm1hbmFnZXIuc2VydmljZS5nZXRNZXNzYWdlU3RyZWFtKG1lc3NhZ2VzX3JlcXVlc3QpOgogICAgICBpZiBtZXNzYWdlLkhhc0ZpZWxkKCdzdGF0ZVJlc3BvbnNlJyk6CiAgICAgICAgbG9nZ2luZy5pbmZvKAogICAgICAgICAgICAnQ3VycmVudCBzdGF0ZSBvZiBqb2I6ICVzJywKICAgICAgICAgICAgYmVhbV9qb2JfYXBpX3BiMi5Kb2JTdGF0ZS5FbnVtLk5hbWUoCiAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXRlUmVzcG9uc2Uuc3RhdGUpKQogICAgICBlbHNlOgogICAgICAgIGxvZ2dpbmcuaW5mbygnTWVzc2FnZSAlcycsIG1lc3NhZ2UubWVzc2FnZVJlc3BvbnNlKQogICAgbG9nZ2luZy5pbmZvKCdKb2Igd2l0aCBpZDogJXMgaW4gdGVybWluYWwgc3RhdGUgbm93LicsIHNlbGYuam9iX2lkKQoKICBkZWYgY2FuY2VsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYubWFuYWdlci5zZXJ2aWNlLmNhbmNlbCgKICAgICAgICBiZWFtX2pvYl9hcGlfcGIyLkNhbmNlbEpvYlJlcXVlc3Qoam9iSWQ9c2VsZi5qb2JfaWQpKQoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXI+AgAAKFgVAAAAUHl0aG9uUlBDRGlyZWN0UnVubmVyWAUAAABjbGFzc0skS0+HWBkAAABQeXRob25SUENEaXJlY3RSdW5uZXIucnVuWAMAAABkZWZLMktPh1gvAAAAUHl0aG9uUlBDRGlyZWN0UGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2hYAwAAAGRlZktdS2iHWB4AAABQeXRob25SUENEaXJlY3RSdW5uZXIuX19pbml0X19YAwAAAGRlZksvSzGHWCQAAABQeXRob25SUENEaXJlY3RQaXBlbGluZVJlc3VsdC5jYW5jZWxYAwAAAGRlZktpS2yHWCYAAABQeXRob25SUENEaXJlY3RQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmS1RLV4dYIwAAAFB5dGhvblJQQ0RpcmVjdFBpcGVsaW5lUmVzdWx0LnN0YXRlWAMAAABkZWZLWEtch1glAAAAUHl0aG9uUlBDRGlyZWN0UGlwZWxpbmVSZXN1bHQubWV0cmljc1gDAAAAZGVmS21Lb4dYHQAAAFB5dGhvblJQQ0RpcmVjdFBpcGVsaW5lUmVzdWx0WAUAAABjbGFzc0tRS2+HdX1yPwIAAChYFQAAAFB5dGhvblJQQ0RpcmVjdFJ1bm5lclhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVyckACAABYGQAAAFB5dGhvblJQQ0RpcmVjdFJ1bm5lci5ydW5qQAIAAHVoilhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVyckECAACFgXJCAgAAfXJDAgAAYnRyRAIAAFUbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlckUCAAAoWGEJAQAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNvcmUgUFRyYW5zZm9ybSBzdWJjbGFzc2VzLCBzdWNoIGFzIEZsYXRNYXAsIEdyb3VwQnlLZXksIGFuZCBNYXAuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvcHkKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHR5cGVzCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgd3JhcHBlcnNfcGIyCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgdHlwZWNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFR5cGVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBIYXNEaXNwbGF5RGF0YQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wQ29tYmluZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBXaW5kb3dlZFZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd0ZuCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBLVgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgQW55CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBJdGVyYWJsZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVW5pb24KZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHRyaXZpYWxfaW5mZXJlbmNlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFdpdGhUeXBlSGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgZ2V0X3R5cGVfaGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IGVsZW1lbnRfdHlwZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IGlzX2NvbnNpc3RlbnRfd2l0aApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCgpfX2FsbF9fID0gWwogICAgJ0RvRm4nLAogICAgJ0NvbWJpbmVGbicsCiAgICAnUGFydGl0aW9uRm4nLAogICAgJ1BhckRvJywKICAgICdGbGF0TWFwJywKICAgICdNYXAnLAogICAgJ0ZpbHRlcicsCiAgICAnQ29tYmluZUdsb2JhbGx5JywKICAgICdDb21iaW5lUGVyS2V5JywKICAgICdDb21iaW5lVmFsdWVzJywKICAgICdHcm91cEJ5S2V5JywKICAgICdQYXJ0aXRpb24nLAogICAgJ1dpbmRvd2luZycsCiAgICAnV2luZG93SW50bycsCiAgICAnRmxhdHRlbicsCiAgICAnQ3JlYXRlJywKICAgIF0KCgojIFR5cGUgdmFyaWFibGVzClQgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJykKSyA9IHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0snKQpWID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnVicpCgoKY2xhc3MgRG9GbkNvbnRleHQob2JqZWN0KToKICAiIiJBIGNvbnRleHQgYXZhaWxhYmxlIHRvIGFsbCBtZXRob2RzIG9mIERvRm4gaW5zdGFuY2UuIiIiCiAgcGFzcwoKCmNsYXNzIERvRm5Qcm9jZXNzQ29udGV4dChEb0ZuQ29udGV4dCk6CiAgIiIiQSBwcm9jZXNzaW5nIGNvbnRleHQgcGFzc2VkIHRvIERvRm4gcHJvY2VzcygpIGR1cmluZyBleGVjdXRpb24uCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgTW9zdCBpbXBvcnRhbnRseSwgYSBEb0ZuLnByb2Nlc3MgbWV0aG9kIHdpbGwgYWNjZXNzIGNvbnRleHQuZWxlbWVudAogIHRvIGdldCB0aGUgZWxlbWVudCBpdCBpcyBzdXBwb3NlZCB0byBwcm9jZXNzLgoKICBBdHRyaWJ1dGVzOgogICAgbGFiZWw6IGxhYmVsIG9mIHRoZSBQYXJEbyB3aG9zZSBlbGVtZW50IGlzIGJlaW5nIHByb2Nlc3NlZC4KICAgIGVsZW1lbnQ6IGVsZW1lbnQgYmVpbmcgcHJvY2Vzc2VkCiAgICAgIChpbiBwcm9jZXNzIG1ldGhvZCBvbmx5OyBhbHdheXMgTm9uZSBpbiBzdGFydF9idW5kbGUgYW5kIGZpbmlzaF9idW5kbGUpCiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCBvZiB0aGUgZWxlbWVudAogICAgICAoaW4gcHJvY2VzcyBtZXRob2Qgb25seTsgYWx3YXlzIE5vbmUgaW4gc3RhcnRfYnVuZGxlIGFuZCBmaW5pc2hfYnVuZGxlKQogICAgd2luZG93czogd2luZG93cyBvZiB0aGUgZWxlbWVudAogICAgICAoaW4gcHJvY2VzcyBtZXRob2Qgb25seTsgYWx3YXlzIE5vbmUgaW4gc3RhcnRfYnVuZGxlIGFuZCBmaW5pc2hfYnVuZGxlKQogICAgc3RhdGU6IGEgRG9GblN0YXRlIG9iamVjdCwgd2hpY2ggaG9sZHMgdGhlIHJ1bm5lcidzIGludGVybmFsIHN0YXRlCiAgICAgIGZvciB0aGlzIGVsZW1lbnQuCiAgICAgIE5vdCB1c2VkIGJ5IHRoZSBwaXBlbGluZSBjb2RlLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGVsZW1lbnQ9Tm9uZSwgc3RhdGU9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgcHJvY2Vzc2luZyBjb250ZXh0IG9iamVjdCB3aXRoIGFuIGVsZW1lbnQgYW5kIHN0YXRlLgoKICAgIFRoZSBlbGVtZW50IHJlcHJlc2VudHMgb25lIHZhbHVlIGZyb20gYSBQQ29sbGVjdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzZWQKICAgIGJ5IGEgRG9GbiBvYmplY3QgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbiwgYW5kIHN0YXRlIGlzIGFuIGFyYml0cmFyeSBvYmplY3QKICAgIHdoZXJlIGNvdW50ZXJzIGFuZCBvdGhlciBwaXBlbGluZSBzdGF0ZSBpbmZvcm1hdGlvbiBjYW4gYmUgcGFzc2VkIGluLgoKICAgIERvRm5Qcm9jZXNzQ29udGV4dCBvYmplY3RzIGFyZSBhbHNvIHVzZWQgYXMgaW5wdXRzIHRvIFBhcnRpdGlvbkZuIGluc3RhbmNlcy4KCiAgICBBcmdzOgogICAgICBsYWJlbDogbGFiZWwgb2YgdGhlIFBDb2xsZWN0aW9uIHdob3NlIGVsZW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLgogICAgICBlbGVtZW50OiBlbGVtZW50IG9mIGEgUENvbGxlY3Rpb24gYmVpbmcgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgY29udGV4dC4KICAgICAgc3RhdGU6IGEgRG9GblN0YXRlIG9iamVjdCB3aXRoIHN0YXRlIHRvIGJlIHBhc3NlZCBpbiB0byB0aGUgRG9GbiBvYmplY3QuCiAgICAiIiIKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5zdGF0ZSA9IHN0YXRlCiAgICBpZiBlbGVtZW50IGlzIG5vdCBOb25lOgogICAgICBzZWxmLnNldF9lbGVtZW50KGVsZW1lbnQpCgogIGRlZiBzZXRfZWxlbWVudChzZWxmLCB3aW5kb3dlZF92YWx1ZSk6CiAgICBpZiB3aW5kb3dlZF92YWx1ZSBpcyBOb25lOgogICAgICAjIE5vdCBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBlbGVtZW50LgogICAgICBpZiBoYXNhdHRyKHNlbGYsICdlbGVtZW50Jyk6CiAgICAgICAgZGVsIHNlbGYuZWxlbWVudAogICAgICAgIGRlbCBzZWxmLnRpbWVzdGFtcAogICAgICAgIGRlbCBzZWxmLndpbmRvd3MKICAgIGVsc2U6CiAgICAgIHNlbGYuZWxlbWVudCA9IHdpbmRvd2VkX3ZhbHVlLnZhbHVlCiAgICAgIHNlbGYudGltZXN0YW1wID0gd2luZG93ZWRfdmFsdWUudGltZXN0YW1wCiAgICAgIHNlbGYud2luZG93cyA9IHdpbmRvd2VkX3ZhbHVlLndpbmRvd3MKCgpjbGFzcyBQcm9jZXNzQ29udGludWF0aW9uKG9iamVjdCk6CiAgIiIiQW4gb2JqZWN0IHRoYXQgbWF5IGJlIHByb2R1Y2VkIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYSBwcm9jZXNzIG1ldGhvZAogICAgaW52b2NhdGlvbi4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBJZiBwcm9kdWNlZCwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmUgZm9yIHRoZSBjdXJyZW50CiAgaW5wdXQgZWxlbWVudC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VtZV9kZWxheT0wKToKICAgICIiIkluaXRpYWxpemVzIGEgUHJvY2Vzc0NvbnRpbnVhdGlvbiBvYmplY3QuCgogICAgQXJnczoKICAgICAgcmVzdW1lX2RlbGF5OiBpbmRpY2F0ZXMgdGhlIG1pbmltdW0gdGltZSwgaW4gc2Vjb25kcywgdGhhdCBzaG91bGQgZWxhcHNlCiAgICAgICAgYmVmb3JlIHJlLWludm9raW5nIHByb2Nlc3MoKSBtZXRob2QgZm9yIHJlc3VtaW5nIHRoZSBpbnZvY2F0aW9uIG9mIHRoZQogICAgICAgIGN1cnJlbnQgZWxlbWVudC4KICAgICIiIgogICAgc2VsZi5yZXN1bWVfZGVsYXkgPSByZXN1bWVfZGVsYXkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZXN1bWUocmVzdW1lX2RlbGF5PTApOgogICAgIiIiQSBjb252ZW5pZW50IG1ldGhvZCB0aGF0IHByb2R1Y2VzIGEgYGBQcm9jZXNzQ29udGludWF0aW9uYGAuCgogICAgQXJnczoKICAgICAgcmVzdW1lX2RlbGF5OiBkZWxheSBhZnRlciB3aGljaCBwcm9jZXNzaW5nIGN1cnJlbnQgZWxlbWVudCBzaG91bGQgYmUKICAgICAgICByZXN1bWVkLgogICAgUmV0dXJuczogYSBgYFByb2Nlc3NDb250aW51YXRpb25gYCBmb3Igc2lnbmFsbGluZyB0aGUgcnVubmVyIHRoYXQgY3VycmVudAogICAgICBpbnB1dCBlbGVtZW50IGhhcyBub3QgYmVlbiBmdWxseSBwcm9jZXNzZWQgYW5kIHNob3VsZCBiZSByZXN1bWVkIGxhdGVyLgogICAgIiIiCiAgICByZXR1cm4gUHJvY2Vzc0NvbnRpbnVhdGlvbihyZXN1bWVfZGVsYXk9cmVzdW1lX2RlbGF5KQoKCmNsYXNzIFJlc3RyaWN0aW9uUHJvdmlkZXIob2JqZWN0KToKICAiIiJQcm92aWRlcyBtZXRob2RzIGZvciBnZW5lcmF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgcmVzdHJpY3Rpb25zLgoKICBUaGlzIGNsYXNzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBzdXBwb3J0IFNwbGl0dGFibGUgYGBEb0ZuYGBzIGluIFB5dGhvbgogIFNESy4gU2VlIGh0dHBzOi8vcy5hcGFjaGUub3JnL3NwbGl0dGFibGUtZG8tZm4gZm9yIG1vcmUgZGV0YWlscyBhYm91dAogIFNwbGl0dGFibGUgYGBEb0ZuYGBzLgoKICBUbyBkZW5vdGUgYSBgYERvRm5gYCBjbGFzcyB0byBiZSBTcGxpdHRhYmxlIGBgRG9GbmBgLCBgYERvRm4ucHJvY2VzcygpYGAKICBtZXRob2Qgb2YgdGhhdCBjbGFzcyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIgd2hvc2UgZGVmYXVsdCB2YWx1ZSBpcwogIGFuIGluc3RhbmNlIG9mIGBgUmVzdHJpY3Rpb25Qcm92aWRlcmBgLgoKICBUaGUgcHJvdmlkZWQgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgaW5zdGFuY2UgbXVzdCBwcm92aWRlIHN1aXRhYmxlIG92ZXJyaWRlcwogIGZvciB0aGUgZm9sbG93aW5nIG1ldGhvZHMuCiAgKiBjcmVhdGVfdHJhY2tlcigpCiAgKiBpbml0aWFsX3Jlc3RyaWN0aW9uKCkKCiAgT3B0aW9uYWxseSwgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgbWF5IG92ZXJyaWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mCiAgZm9sbG93aW5nIG1ldGhvZHMuCiAgKiByZXN0cmljdGlvbl9jb2RlcigpCiAgKiBzcGxpdCgpCgogICoqIFBhdXNpbmcgYW5kIHJlc3VtaW5nIHByb2Nlc3Npbmcgb2YgYW4gZWxlbWVudCAqKgoKICBBcyB0aGUgbGFzdCBlbGVtZW50IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvciByZXR1cm5lZCBieSB0aGUKICBgYERvRm4ucHJvY2VzcygpYGAgbWV0aG9kLCBhIFNwbGl0dGFibGUgYGBEb0ZuYGAgbWF5IHJldHVybiBhbiBvYmplY3Qgb2YgdHlwZQogIGBgUHJvY2Vzc0NvbnRpbnVhdGlvbmBgLgoKICBJZiBwcm92aWRlZCwgYGBQcm9jZXNzQ29udGludWF0aW9uYGAgb2JqZWN0IHNwZWNpZmllcyB0aGF0IHJ1bm5lciBzaG91bGQKICBsYXRlciByZS1pbnZva2UgYGBEb0ZuLnByb2Nlc3MoKWBgIG1ldGhvZCB0byByZXN1bWUgcHJvY2Vzc2luZyB0aGUgY3VycmVudAogIGVsZW1lbnQgYW5kIHRoZSBtYW5uZXIgaW4gd2hpY2ggdGhlIHJlLWludm9jYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZC4gQQogIGBgUHJvY2Vzc0NvbnRpbnVhdGlvbmBgIG9iamVjdCBtdXN0IG9ubHkgYmUgc3BlY2lmaWVkIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YKICB0aGUgaXRlcmF0b3IuIElmIGEgYGBQcm9jZXNzQ29udGludWF0aW9uYGAgb2JqZWN0IGlzIG5vdCBwcm92aWRlZCB0aGUgcnVubmVyCiAgd2lsbCBhc3N1bWUgdGhhdCB0aGUgY3VycmVudCBpbnB1dCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4KCiAgKiogVXBkYXRpbmcgb3V0cHV0IHdhdGVybWFyayAqKgoKICBgYERvRm4ucHJvY2VzcygpYGAgbWV0aG9kIG9mIFNwbGl0dGFibGUgYGBEb0ZuYGBzIGNvdWxkIGNvbnRhaW4gYSBwYXJhbWV0ZXIKICB3aXRoIGRlZmF1bHQgdmFsdWUgYGBEb0ZuLldhdGVybWFya1JlcG9ydGVyUGFyYW1gYC4gSWYgc3BlY2lmaWVkIHRoaXMgYXNrcyB0aGUKICBydW5uZXIgdG8gcHJvdmlkZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgcnVubmVyIGEKICAoYmVzdC1lZmZvcnQpIGxvd2VyIGJvdW5kIGFib3V0IHRoZSB0aW1lc3RhbXBzIG9mIGZ1dHVyZSBvdXRwdXQgYXNzb2NpYXRlZAogIHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9jZXNzZWQgYnkgdGhlIGBgRG9GbmBgLiBJZiB0aGUgYGBEb0ZuYGAgaGFzCiAgbXVsdGlwbGUgb3V0cHV0cywgdGhlIHdhdGVybWFyayBhcHBsaWVzIHRvIGFsbCBvZiB0aGVtLiBQcm92aWRlZCBmdW5jdGlvbiBtdXN0CiAgYmUgaW52b2tlZCB3aXRoIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBgVGltZXN0YW1wYGAgb3IgYXMgYW4gaW50ZWdlciB0aGF0CiAgZ2l2ZXMgdGhlIHdhdGVybWFyayBpbiBudW1iZXIgb2Ygc2Vjb25kcy4KICAiIiIKCiAgZGVmIGNyZWF0ZV90cmFja2VyKHNlbGYsIHJlc3RyaWN0aW9uKToKICAgICIiIlByb2R1Y2VzIGEgbmV3IGBgUmVzdHJpY3Rpb25UcmFja2VyYGAgZm9yIHRoZSBnaXZlbiByZXN0cmljdGlvbi4KCiAgICBBcmdzOgogICAgICByZXN0cmljdGlvbjogYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyBhIHJlc3RyaWN0aW9uIGFzIGlkZW50aWZpZWQgYnkgYQogICAgICAgIFNwbGl0dGFibGUgYGBEb0ZuYGAgdGhhdCB1dGlsaXplcyB0aGUgY3VycmVudCBgYFJlc3RyaWN0aW9uUHJvdmlkZXJgYC4KICAgICAgICBGb3IgZXhhbXBsZSwgYSB0dXBsZSB0aGF0IGdpdmVzIGEgcmFuZ2Ugb2YgcG9zaXRpb25zIGZvciBhIFNwbGl0dGFibGUKICAgICAgICBgYERvRm5gYCB0aGF0IHJlYWRzIGZpbGVzIGJhc2VkIG9uIGJ5dGUgcG9zaXRpb25zLgogICAgUmV0dXJuczogYW4gb2JqZWN0IG9mIHR5cGUgYGBSZXN0cmljdGlvblRyYWNrZXJgYC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaW5pdGlhbF9yZXN0cmljdGlvbihzZWxmLCBlbGVtZW50KToKICAgICIiIlByb2R1Y2VzIGFuIGluaXRpYWwgcmVzdHJpY3Rpb24gZm9yIHRoZSBnaXZlbiBlbGVtZW50LiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXQoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBlbGVtZW50IGFuZCByZXN0cmljdGlvbi4KCiAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIHJlc3RyaWN0aW9ucy4gVGhlIHRvdGFsIHNldCBvZiBlbGVtZW50cyBwcm9kdWNlZCBieQogICAgcmVhZGluZyBpbnB1dCBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSByZXR1cm5lZCByZXN0cmljdGlvbnMgc2hvdWxkIGJlIHRoZQogICAgc2FtZSBhcyB0aGUgdG90YWwgc2V0IG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHJlYWRpbmcgdGhlIGlucHV0IGVsZW1lbnQgZm9yCiAgICB0aGUgaW5wdXQgcmVzdHJpY3Rpb24uCgogICAgVE9ETyhjaGFtaWthcmEpOiBnaXZlIHN1aXRhYmxlIGhpbnRzIGZvciBwZXJmb3JtaW5nIHNwbGl0dGluZywgZm9yIGV4YW1wbGUKICAgIG51bWJlciBvZiBwYXJ0cyBvciBzaXplIGluIGJ5dGVzLgogICAgIiIiCiAgICB5aWVsZCByZXN0cmljdGlvbgoKICBkZWYgcmVzdHJpY3Rpb25fY29kZXIoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgYGBDb2RlcmBgIGZvciByZXN0cmljdGlvbnMuCgogICAgUmV0dXJuZWRgYENvZGVyYGAgd2lsbCBiZSB1c2VkIGZvciB0aGUgcmVzdHJpY3Rpb25zIHByb2R1Y2VkIGJ5IHRoZSBjdXJyZW50CiAgICBgYFJlc3RyaWN0aW9uUHJvdmlkZXJgYC4KCiAgICBSZXR1cm5zOgogICAgICBhbiBvYmplY3Qgb2YgdHlwZSBgYENvZGVyYGAuCiAgICAiIiIKICAgIHJldHVybiBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKG9iamVjdCkKCgpkZWYgZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cyhvYmosIGZ1bmMpOgogICIiIlJldHVybiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGJhc2VkIG9uIHRoZSBuYW1lIHByb3ZpZGVkLiBJZiB0aGV5IGhhdmUKICBhIF9pbnNwZWN0X2Z1bmN0aW9uIGF0dGFjaGVkIHRvIHRoZSBjbGFzcyB0aGVuIHVzZSB0aGF0IG90aGVyd2lzZSBkZWZhdWx0CiAgdG8gdGhlIHB5dGhvbiBpbnNwZWN0IGxpYnJhcnkuCiAgIiIiCiAgZnVuY19uYW1lID0gJ19pbnNwZWN0XyVzJyAlIGZ1bmMKICBpZiBoYXNhdHRyKG9iaiwgZnVuY19uYW1lKToKICAgIGYgPSBnZXRhdHRyKG9iaiwgZnVuY19uYW1lKQogICAgcmV0dXJuIGYoKQogIGYgPSBnZXRhdHRyKG9iaiwgZnVuYykKICByZXR1cm4gaW5zcGVjdC5nZXRhcmdzcGVjKGYpCgoKY2xhc3MgRG9GbihXaXRoVHlwZUhpbnRzLCBIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIHRyYW5zZm9ybSB3aXRoIGN1c3RvbSBwcm9jZXNzaW5nLgoKICBUaGUgUGFyRG8gdHJhbnNmb3JtIGlzIHN1Y2ggYSB0cmFuc2Zvcm0uIFRoZSBQYXJEby5hcHBseQogIG1ldGhvZCB3aWxsIHRha2UgYW4gb2JqZWN0IG9mIHR5cGUgRG9GbiBhbmQgYXBwbHkgaXQgdG8gYWxsIGVsZW1lbnRzIG9mIGEKICBQQ29sbGVjdGlvbiBvYmplY3QuCgogIEluIG9yZGVyIHRvIGhhdmUgY29uY3JldGUgRG9GbiBvYmplY3RzIG9uZSBoYXMgdG8gc3ViY2xhc3MgZnJvbSBEb0ZuIGFuZAogIGRlZmluZSB0aGUgZGVzaXJlZCBiZWhhdmlvciAoc3RhcnRfYnVuZGxlL2ZpbmlzaF9idW5kbGUgYW5kIHByb2Nlc3MpIG9yIHdyYXAgYQogIGNhbGxhYmxlIG9iamVjdCB1c2luZyB0aGUgQ2FsbGFibGVXcmFwcGVyRG9GbiBjbGFzcy4KICAiIiIKCiAgRWxlbWVudFBhcmFtID0gJ0VsZW1lbnRQYXJhbScKICBTaWRlSW5wdXRQYXJhbSA9ICdTaWRlSW5wdXRQYXJhbScKICBUaW1lc3RhbXBQYXJhbSA9ICdUaW1lc3RhbXBQYXJhbScKICBXaW5kb3dQYXJhbSA9ICdXaW5kb3dQYXJhbScKICBXYXRlcm1hcmtSZXBvcnRlclBhcmFtID0gJ1dhdGVybWFya1JlcG9ydGVyUGFyYW0nCgogIERvRm5QYXJhbXMgPSBbRWxlbWVudFBhcmFtLCBTaWRlSW5wdXRQYXJhbSwgVGltZXN0YW1wUGFyYW0sIFdpbmRvd1BhcmFtXQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fY2FsbGFibGUoZm4pOgogICAgcmV0dXJuIENhbGxhYmxlV3JhcHBlckRvRm4oZm4pCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJNZXRob2QgdG8gdXNlIGZvciBwcm9jZXNzaW5nIGVsZW1lbnRzLgoKICAgIFRoaXMgaXMgaW52b2tlZCBieSBgYERvRm5SdW5uZXJgYCBmb3IgZWFjaCBlbGVtZW50IG9mIGEgaW5wdXQKICAgIGBgUENvbGxlY3Rpb25gYC4KCiAgICBJZiBzcGVjaWZpZWQsIGZvbGxvd2luZyBkZWZhdWx0IGFyZ3VtZW50cyBhcmUgdXNlZCBieSB0aGUgYGBEb0ZuUnVubmVyYGAgdG8KICAgIGJlIGFibGUgdG8gcGFzcyB0aGUgcGFyYW1ldGVycyBjb3JyZWN0bHkuCgogICAgYGBEb0ZuLkVsZW1lbnRQYXJhbWBgOiBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KICAgIGBgRG9Gbi5TaWRlSW5wdXRQYXJhbWBgOiBhIHNpZGUgaW5wdXQgdGhhdCBtYXkgYmUgdXNlZCB3aGVuIHByb2Nlc3NpbmcuCiAgICBgYERvRm4uVGltZXN0YW1wUGFyYW1gYDogdGltZXN0YW1wIG9mIHRoZSBpbnB1dCBlbGVtZW50LgogICAgYGBEb0ZuLldpbmRvd1BhcmFtYGA6IGBgV2luZG93YGAgdGhlIGlucHV0IGVsZW1lbnQgYmVsb25ncyB0by4KICAgIEEgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgaW5zdGFuY2U6IGFuIGBgaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlcmBgIHdpbGwgYmUKICAgIHByb3ZpZGVkIGhlcmUgdG8gYWxsb3cgdHJlYXRtZW50IGFzIGEgU3BsaXR0YWJsZSBgRG9GbmBgLgogICAgYGBEb0ZuLldhdGVybWFya1JlcG9ydGVyUGFyYW1gYDogYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcG9ydAogICAgb3V0cHV0IHdhdGVybWFyayBvZiBTcGxpdHRhYmxlIGBgRG9GbmBgIGltcGxlbWVudGF0aW9ucy4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiBUaGUgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKICAgICAgKmFyZ3M6IHNpZGUgaW5wdXRzCiAgICAgICoqa3dhcmdzOiBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgIiIiQ2FsbGVkIGJlZm9yZSBhIGJ1bmRsZSBvZiBlbGVtZW50cyBpcyBwcm9jZXNzZWQgb24gYSB3b3JrZXIuCgogICAgRWxlbWVudHMgdG8gYmUgcHJvY2Vzc2VkIGFyZSBzcGxpdCBpbnRvIGJ1bmRsZXMgYW5kIGRpc3RyaWJ1dGVkCiAgICB0byB3b3JrZXJzLiBCZWZvcmUgYSB3b3JrZXIgY2FsbHMgcHJvY2VzcygpIG9uIHRoZSBmaXJzdCBlbGVtZW50CiAgICBvZiBpdHMgYnVuZGxlLCBpdCBjYWxscyB0aGlzIG1ldGhvZC4KICAgICIiIgogICAgcGFzcwoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgICIiIkNhbGxlZCBhZnRlciBhIGJ1bmRsZSBvZiBlbGVtZW50cyBpcyBwcm9jZXNzZWQgb24gYSB3b3JrZXIuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIGdldF9mdW5jdGlvbl9hcmd1bWVudHMoc2VsZiwgZnVuYyk6CiAgICByZXR1cm4gZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cyhzZWxmLCBmdW5jKQoKICAjIFRPRE8oc291cmFiaGJhamFqKTogRG8gd2Ugd2FudCB0byByZW1vdmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZXNlIGZyb20KICAjIHRoZSBEb0ZuIG9yIG1heWJlIHRoZSBydW5uZXIKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBTaWRlIGlucHV0cyB0eXBlcy4KICAgICMgVE9ETyhyb2JlcnR3Yik6IEFzc2VydCBjb21wYXRpYmlsaXR5IHdpdGggaW5wdXQgdHlwZSBoaW50PwogICAgcmV0dXJuIHNlbGYuX3N0cmlwX291dHB1dF9hbm5vdGF0aW9ucygKICAgICAgICB0cml2aWFsX2luZmVyZW5jZS5pbmZlcl9yZXR1cm5fdHlwZShzZWxmLnByb2Nlc3MsIFtpbnB1dF90eXBlXSkpCgogIGRlZiBfc3RyaXBfb3V0cHV0X2Fubm90YXRpb25zKHNlbGYsIHR5cGVfaGludCk6CiAgICBhbm5vdGF0aW9ucyA9IChUaW1lc3RhbXBlZFZhbHVlLCBXaW5kb3dlZFZhbHVlLCBwdmFsdWUuVGFnZ2VkT3V0cHV0KQogICAgIyBUT0RPKHJvYmVydHdiKTogVGhlc2Ugc2hvdWxkIGJlIHBhcmFtZXRlcml6ZWQgdHlwZXMgdGhhdCB0aGUKICAgICMgdHlwZSBpbmZlcmVuY2VyIHVuZGVyc3RhbmRzLgogICAgaWYgKHR5cGVfaGludCBpbiBhbm5vdGF0aW9ucwogICAgICAgIG9yIHRyaXZpYWxfaW5mZXJlbmNlLmVsZW1lbnRfdHlwZSh0eXBlX2hpbnQpIGluIGFubm90YXRpb25zKToKICAgICAgcmV0dXJuIEFueQogICAgcmV0dXJuIHR5cGVfaGludAoKICBkZWYgX3Byb2Nlc3NfYXJnc3BlY19mbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIFB5dGhvbiBjYWxsYWJsZSB0aGF0IHdpbGwgZXZlbnR1YWxseSBiZSBpbnZva2VkLgoKICAgIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgdGhlIHVzZXItbGV2ZWwgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aAogICAgdGhlIG1haW4gYW5kIChpZiBhbnkpIHNpZGUgaW5wdXRzLCBhbmQgaXMgdXNlZCB0byByZWxhdGUgdGhlIHR5cGUKICAgIGhpbnQgcGFyYW1ldGVycyB3aXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIChlLmcuLCBieSBhcmd1bWVudCBuYW1lKS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYucHJvY2VzcwoKICBkZWYgaXNfcHJvY2Vzc19ib3VuZGVkKHNlbGYpOgogICAgIiIiQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhIGJvdW5kIG1ldGhvZCBvbiBhbiBpbnN0YW5jZS4iIiIKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYucHJvY2VzcywgdHlwZXMuTWV0aG9kVHlwZSk6CiAgICAgIHJldHVybiBGYWxzZSAjIE5vdCBhIG1ldGhvZAogICAgaWYgc2VsZi5wcm9jZXNzLl9fc2VsZl9fIGlzIE5vbmU6CiAgICAgIHJldHVybiBGYWxzZSAjIE1ldGhvZCBpcyBub3QgYm91bmQKICAgIGlmIGlzc3ViY2xhc3Moc2VsZi5wcm9jZXNzLl9fc2VsZl9fLl9fY2xhc3NfXywgdHlwZSkgb3IgXAogICAgICAgIHNlbGYucHJvY2Vzcy5fX3NlbGZfXy5fX2NsYXNzX18gaXMgdHlwZToKICAgICAgcmV0dXJuIEZhbHNlICMgTWV0aG9kIGlzIGEgY2xhc3NtZXRob2QKICAgIHJldHVybiBUcnVlCgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3Vybih1cm5zLlBJQ0tMRURfRE9fRk4pCgoKZGVmIF9mbl90YWtlc19zaWRlX2lucHV0cyhmbik6CiAgdHJ5OgogICAgYXJnc3BlYyA9IGluc3BlY3QuZ2V0YXJnc3BlYyhmbikKICBleGNlcHQgVHlwZUVycm9yOgogICAgIyBXZSBjYW4ndCB0ZWxsOyBtYXliZSBpdCBkb2VzLgogICAgcmV0dXJuIFRydWUKICBpc19ib3VuZCA9IGlzaW5zdGFuY2UoZm4sIHR5cGVzLk1ldGhvZFR5cGUpIGFuZCBmbi5fX3NlbGZfXyBpcyBub3QgTm9uZQogIHJldHVybiBsZW4oYXJnc3BlYy5hcmdzKSA+IDEgKyBpc19ib3VuZCBvciBhcmdzcGVjLnZhcmFyZ3Mgb3IgYXJnc3BlYy5rZXl3b3JkcwoKCmNsYXNzIENhbGxhYmxlV3JhcHBlckRvRm4oRG9Gbik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIERvRm4gKGZ1bmN0aW9uKSBvYmplY3Qgd3JhcHBpbmcgYSBjYWxsYWJsZSBvYmplY3QuCgogIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gY29udmVuaWVudGx5IHdyYXAgc2ltcGxlIGZ1bmN0aW9ucyBhbmQgdXNlCiAgdGhlbSBpbiB0cmFuc2Zvcm1zLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDYWxsYWJsZVdyYXBwZXJEb0ZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdC4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZm4gcGFyYW1ldGVyIGlzIG5vdCBhIGNhbGxhYmxlIHR5cGUuCiAgICAiIiIKICAgIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgYSBjYWxsYWJsZSBvYmplY3QgaW5zdGVhZCBvZjogJXInICUgZm4pCgogICAgc2VsZi5fZm4gPSBmbgogICAgaWYgaXNpbnN0YW5jZShmbiwgKAogICAgICAgIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUsIHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSkpOgogICAgICBzZWxmLnByb2Nlc3MgPSBmbgogICAgZWxzZToKICAgICAgIyBGb3IgY2FzZXMgc3VjaCBhcyBzZXQgLyBsaXN0IHdoZXJlIGZuIGlzIGNhbGxhYmxlIGJ1dCBub3QgYSBmdW5jdGlvbgogICAgICBzZWxmLnByb2Nlc3MgPSBsYW1iZGEgZWxlbWVudDogZm4oZWxlbWVudCkKCiAgICBzdXBlcihDYWxsYWJsZVdyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXygpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICAjIElmIHRoZSBjYWxsYWJsZSBoYXMgYSBuYW1lLCB0aGVuIGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24sIGFuZAogICAgIyB3ZSBzaG93IGl0cyBuYW1lLgogICAgIyBPdGhlcndpc2UsIGl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlIG9mIGEgY2FsbGFibGUgY2xhc3MuIFdlCiAgICAjIHNob3cgaXRzIGNsYXNzLgogICAgZGlzcGxheV9kYXRhX3ZhbHVlID0gKHNlbGYuX2ZuLl9fbmFtZV9fIGlmIGhhc2F0dHIoc2VsZi5fZm4sICdfX25hbWVfXycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLl9mbi5fX2NsYXNzX18pCiAgICByZXR1cm4geydmbic6IERpc3BsYXlEYXRhSXRlbShkaXNwbGF5X2RhdGFfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nVHJhbnNmb3JtIEZ1bmN0aW9uJyl9CgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQ2FsbGFibGVXcmFwcGVyRG9GbiglcyknICUgc2VsZi5fZm4KCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIHR5cGVfaGludHMgPSBnZXRfdHlwZV9oaW50cyhzZWxmLl9mbikKICAgICMgSWYgdGhlIGZuIHdhcyBhIERvRm4gYW5ub3RhdGVkIHdpdGggYSB0eXBlLWhpbnQgdGhhdCBoaW50ZWQgYSByZXR1cm4KICAgICMgdHlwZSBjb21wYXRpYmxlIHdpdGggSXRlcmFibGVbQW55XSwgdGhlbiB3ZSBzdHJpcCBvZmYgdGhlIG91dGVyCiAgICAjIGNvbnRhaW5lciB0eXBlIGR1ZSB0byB0aGUgJ2ZsYXR0ZW4nIHBvcnRpb24gb2YgRmxhdE1hcC4KICAgICMgVE9ETyhyb2JlcnR3Yik6IFNob3VsZCB3ZSByZXF1aXJlIGFuIGl0ZXJhYmxlIHNwZWNpZmljYXRpb24gZm9yIEZsYXRNYXA/CiAgICBpZiB0eXBlX2hpbnRzLm91dHB1dF90eXBlczoKICAgICAgYXJncywga3dhcmdzID0gdHlwZV9oaW50cy5vdXRwdXRfdHlwZXMKICAgICAgaWYgbGVuKGFyZ3MpID09IDEgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChhcmdzWzBdLCBJdGVyYWJsZVtBbnldKToKICAgICAgICB0eXBlX2hpbnRzID0gdHlwZV9oaW50cy5jb3B5KCkKICAgICAgICB0eXBlX2hpbnRzLnNldF9vdXRwdXRfdHlwZXMoZWxlbWVudF90eXBlKGFyZ3NbMF0pLCAqKmt3YXJncykKICAgIHJldHVybiB0eXBlX2hpbnRzCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCBpbnB1dF90eXBlKToKICAgIHJldHVybiBzZWxmLl9zdHJpcF9vdXRwdXRfYW5ub3RhdGlvbnMoCiAgICAgICAgdHJpdmlhbF9pbmZlcmVuY2UuaW5mZXJfcmV0dXJuX3R5cGUoc2VsZi5fZm4sIFtpbnB1dF90eXBlXSkpCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZm4sICdfYXJnc3BlY19mbicsIHNlbGYuX2ZuKQoKCmNsYXNzIENvbWJpbmVGbihXaXRoVHlwZUhpbnRzLCBIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIENvbWJpbmUgdHJhbnNmb3JtIHdpdGggY3VzdG9tIHByb2Nlc3NpbmcuCgogIEEgQ29tYmluZUZuIHNwZWNpZmllcyBob3cgbXVsdGlwbGUgdmFsdWVzIGluIGFsbCBvciBwYXJ0IG9mIGEgUENvbGxlY3Rpb24gY2FuCiAgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdmFsdWUtLS1lc3NlbnRpYWxseSBwcm92aWRpbmcgdGhlIHNhbWUga2luZCBvZgogIGluZm9ybWF0aW9uIGFzIHRoZSBhcmd1bWVudHMgdG8gdGhlIFB5dGhvbiAicmVkdWNlIiBidWlsdGluIChleGNlcHQgZm9yIHRoZQogIGlucHV0IGFyZ3VtZW50LCB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZiBDb21iaW5lRm5Qcm9jZXNzQ29udGV4dCkuIFRoZQogIGNvbWJpbmluZyBwcm9jZXNzIHByb2NlZWRzIGFzIGZvbGxvd3M6CgogIDEuIElucHV0IHZhbHVlcyBhcmUgcGFydGl0aW9uZWQgaW50byBvbmUgb3IgbW9yZSBiYXRjaGVzLgogIDIuIEZvciBlYWNoIGJhdGNoLCB0aGUgY3JlYXRlX2FjY3VtdWxhdG9yIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNyZWF0ZSBhIGZyZXNoCiAgICAgaW5pdGlhbCAiYWNjdW11bGF0b3IiIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YgemVybyB2YWx1ZXMuCiAgMy4gRm9yIGVhY2ggaW5wdXQgdmFsdWUgaW4gdGhlIGJhdGNoLCB0aGUgYWRkX2lucHV0IG1ldGhvZCBpcyBpbnZva2VkIHRvCiAgICAgY29tYmluZSBtb3JlIHZhbHVlcyB3aXRoIHRoZSBhY2N1bXVsYXRvciBmb3IgdGhhdCBiYXRjaC4KICA0LiBUaGUgbWVyZ2VfYWNjdW11bGF0b3JzIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNvbWJpbmUgYWNjdW11bGF0b3JzIGZyb20KICAgICBzZXBhcmF0ZSBiYXRjaGVzIGludG8gYSBzaW5nbGUgY29tYmluZWQgb3V0cHV0IGFjY3VtdWxhdG9yIHZhbHVlLCBvbmNlIGFsbAogICAgIG9mIHRoZSBhY2N1bXVsYXRvcnMgaGF2ZSBoYWQgYWxsIHRoZSBpbnB1dCB2YWx1ZSBpbiB0aGVpciBiYXRjaGVzIGFkZGVkIHRvCiAgICAgdGhlbS4gVGhpcyBvcGVyYXRpb24gaXMgaW52b2tlZCByZXBlYXRlZGx5LCB1bnRpbCB0aGVyZSBpcyBvbmx5IG9uZQogICAgIGFjY3VtdWxhdG9yIHZhbHVlIGxlZnQuCiAgNS4gVGhlIGV4dHJhY3Rfb3V0cHV0IG9wZXJhdGlvbiBpcyBpbnZva2VkIG9uIHRoZSBmaW5hbCBhY2N1bXVsYXRvciB0byBnZXQKICAgICB0aGUgb3V0cHV0IHZhbHVlLgoKICBOb3RlOiBJZiB0aGlzICoqQ29tYmluZUZuKiogaXMgdXNlZCB3aXRoIGEgdHJhbnNmb3JtIHRoYXQgaGFzIGRlZmF1bHRzLAogICoqYXBwbHkqKiB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGxpc3QgYXQgZXhwYW5zaW9uIHRpbWUgdG8gZ2V0IHRoZQogIGRlZmF1bHQgdmFsdWUuCiAgIiIiCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybiBhIGZyZXNoLCBlbXB0eSBhY2N1bXVsYXRvciBmb3IgdGhlIGNvbWJpbmUgb3BlcmF0aW9uLgoKICAgIEFyZ3M6CiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Ioc3RyKHNlbGYpKQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiUmV0dXJuIHJlc3VsdCBvZiBmb2xkaW5nIGVsZW1lbnQgaW50byBhY2N1bXVsYXRvci4KCiAgICBDb21iaW5lRm4gaW1wbGVtZW50b3JzIG11c3Qgb3ZlcnJpZGUgYWRkX2lucHV0LgoKICAgIEFyZ3M6CiAgICAgIGFjY3VtdWxhdG9yOiB0aGUgY3VycmVudCBhY2N1bXVsYXRvcgogICAgICBlbGVtZW50OiB0aGUgZWxlbWVudCB0byBhZGQKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhZGRfaW5wdXRzKHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBmb2xkaW5nIGVhY2ggZWxlbWVudCBpbiBlbGVtZW50cyBpbnRvIGFjY3VtdWxhdG9yLgoKICAgIFRoaXMgaXMgcHJvdmlkZWQgaW4gY2FzZSB0aGUgaW1wbGVtZW50YXRpb24gYWZmb3JkcyBtb3JlIGVmZmljaWVudAogICAgYnVsayBhZGRpdGlvbiBvZiBlbGVtZW50cy4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGxvb3BzCiAgICBvdmVyIHRoZSBpbnB1dHMgaW52b2tpbmcgYWRkX2lucHV0IGZvciBlYWNoIG9uZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcjogdGhlIGN1cnJlbnQgYWNjdW11bGF0b3IKICAgICAgZWxlbWVudHM6IHRoZSBlbGVtZW50cyB0byBhZGQKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGFjY3VtdWxhdG9yID0gc2VsZi5hZGRfaW5wdXQoYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncykKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIHNldmVyYWwgYWNjdW11bGF0b3JzCiAgICB0byBhIHNpbmdsZSBhY2N1bXVsYXRvciB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcnM6IHRoZSBhY2N1bXVsYXRvcnMgdG8gbWVyZ2UKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybiByZXN1bHQgb2YgY29udmVydGluZyBhY2N1bXVsYXRvciBpbnRvIHRoZSBvdXRwdXQgdmFsdWUuCgogICAgQXJnczoKICAgICAgYWNjdW11bGF0b3I6IHRoZSBmaW5hbCBhY2N1bXVsYXRvciB2YWx1ZSBjb21wdXRlZCBieSB0aGlzIENvbWJpbmVGbgogICAgICAgIGZvciB0aGUgZW50aXJlIGlucHV0IGtleSBvciBQQ29sbGVjdGlvbi4KICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhcHBseShzZWxmLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgcmVzdWx0IG9mIGFwcGx5aW5nIHRoaXMgQ29tYmluZUZuIHRvIHRoZSBpbnB1dCB2YWx1ZXMuCgogICAgQXJnczoKICAgICAgZWxlbWVudHM6IHRoZSBzZXQgb2YgdmFsdWVzIHRvIGNvbWJpbmUuCiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLmV4dHJhY3Rfb3V0cHV0KAogICAgICAgIHNlbGYuYWRkX2lucHV0cygKICAgICAgICAgICAgc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKmFyZ3MsICoqa3dhcmdzKSwgZWxlbWVudHMsCiAgICAgICAgICAgICphcmdzLCAqKmt3YXJncyksCiAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgZm9yX2lucHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAiIiJSZXR1cm5zIGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24gb2Ygc2VsZiwgaWYgaXQgZXhpc3RzLgoKICAgIE90aGVyd2lzZSwgcmV0dXJucyBzZWxmLgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X3R5cGU6IHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnRzLgogICAgIiIiCiAgICByZXR1cm4gc2VsZgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fY2FsbGFibGUoZm4pOgogICAgcmV0dXJuIENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbihmbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBtYXliZV9mcm9tX2NhbGxhYmxlKGZuKToKICAgIHJldHVybiBmbiBpZiBpc2luc3RhbmNlKGZuLCBDb21iaW5lRm4pIGVsc2UgQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuKGZuKQoKICBkZWYgZ2V0X2FjY3VtdWxhdG9yX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIob2JqZWN0KQoKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4odXJucy5QSUNLTEVEX0NPTUJJTkVfRk4pCgoKY2xhc3MgQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuKENvbWJpbmVGbik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIENvbWJpbmVGbiAoZnVuY3Rpb24pIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlIG9iamVjdC4KCiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBjb252ZW5pZW50bHkgd3JhcCBzaW1wbGUgZnVuY3Rpb25zIGFuZCB1c2UKICB0aGVtIGluIENvbWJpbmUgdHJhbnNmb3Jtcy4KICAiIiIKICBfRU1QVFkgPSBvYmplY3QoKQoKICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDYWxsYWJsZUZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdCB0aGF0IHJlZHVjZXMgZWxlbWVudHMgb2YgYW4gaXRlcmFibGUgdG8gYSBzaW5nbGUKICAgICAgICB2YWx1ZSAobGlrZSB0aGUgYnVpbHRpbnMgc3VtIGFuZCBtYXgpLiBUaGlzIGNhbGxhYmxlIG11c3QgYmUgY2FwYWJsZSBvZgogICAgICAgIHJlY2VpdmluZyB0aGUga2luZCBvZiB2YWx1ZXMgaXQgZ2VuZXJhdGVzIGFzIG91dHB1dCBpbiBpdHMgaW5wdXQsIGFuZAogICAgICAgIGZvciBiZXN0IHJlc3VsdHMsIGl0cyBvcGVyYXRpb24gbXVzdCBiZSBjb21tdXRhdGl2ZSBhbmQgYXNzb2NpYXRpdmUuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IGlmIGZuIHBhcmFtZXRlciBpcyBub3QgYSBjYWxsYWJsZSB0eXBlLgogICAgIiIiCiAgICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgY2FsbGFibGUgb2JqZWN0IGluc3RlYWQgb2Y6ICVyJyAlIGZuKQoKICAgIHN1cGVyKENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZm4gPSBmbgoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnZm5fZGQnOiBzZWxmLl9mbn0KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICJDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4oJXMpIiAlIHNlbGYuX2ZuCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBzZWxmLl9FTVBUWQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgYWNjdW11bGF0b3IgaXMgc2VsZi5fRU1QVFk6CiAgICAgIHJldHVybiBlbGVtZW50CiAgICByZXR1cm4gc2VsZi5fZm4oW2FjY3VtdWxhdG9yLCBlbGVtZW50XSwgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgYWRkX2lucHV0cyhzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudHMsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhY2N1bXVsYXRvciBpcyBzZWxmLl9FTVBUWToKICAgICAgcmV0dXJuIHNlbGYuX2ZuKGVsZW1lbnRzLCAqYXJncywgKiprd2FyZ3MpCiAgICBlbGlmIGlzaW5zdGFuY2UoZWxlbWVudHMsIChsaXN0LCB0dXBsZSkpOgogICAgICByZXR1cm4gc2VsZi5fZm4oW2FjY3VtdWxhdG9yXSArIGxpc3QoZWxlbWVudHMpLCAqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIHVuaW9uKCk6CiAgICAgIHlpZWxkIGFjY3VtdWxhdG9yCiAgICAgIGZvciBlIGluIGVsZW1lbnRzOgogICAgICAgIHlpZWxkIGUKICAgIHJldHVybiBzZWxmLl9mbih1bmlvbigpLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyBJdCdzICh3ZWFrbHkpIGFzc3VtZWQgdGhhdCBzZWxmLl9mbiBpcyBhc3NvY2lhdGl2ZS4KICAgIHJldHVybiBzZWxmLl9mbihhY2N1bXVsYXRvcnMsICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYuX2ZuKCgpKSBpZiBhY2N1bXVsYXRvciBpcyBzZWxmLl9FTVBUWSBlbHNlIGFjY3VtdWxhdG9yCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBmbl9oaW50cyA9IGdldF90eXBlX2hpbnRzKHNlbGYuX2ZuKQogICAgaWYgZm5faGludHMuaW5wdXRfdHlwZXMgaXMgTm9uZToKICAgICAgcmV0dXJuIGZuX2hpbnRzCiAgICBlbHNlOgogICAgICAjIGZuKEl0ZXJhYmxlW1ZdKSAtPiBWIGJlY29tZXMgQ29tYmluZUZuKFYpIC0+IFYKICAgICAgaW5wdXRfYXJncywgaW5wdXRfa3dhcmdzID0gZm5faGludHMuaW5wdXRfdHlwZXMKICAgICAgaWYgbm90IGlucHV0X2FyZ3M6CiAgICAgICAgaWYgbGVuKGlucHV0X2t3YXJncykgPT0gMToKICAgICAgICAgIGlucHV0X2FyZ3MsIGlucHV0X2t3YXJncyA9IHR1cGxlKGlucHV0X2t3YXJncy52YWx1ZXMoKSksIHt9CiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ29tYmluZXIgaW5wdXQgdHlwZSBtdXN0IGJlIHNwZWNpZmllZCBwb3NpdGlvbmFsbHkuJykKICAgICAgaWYgbm90IGlzX2NvbnNpc3RlbnRfd2l0aChpbnB1dF9hcmdzWzBdLCBJdGVyYWJsZVtBbnldKToKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICAgJ0FsbCBmdW5jdGlvbnMgZm9yIGEgQ29tYmluZSBQVHJhbnNmb3JtIG11c3QgYWNjZXB0IGEgJwogICAgICAgICAgICAnc2luZ2xlIGFyZ3VtZW50IGNvbXBhdGlibGUgd2l0aDogSXRlcmFibGVbQW55XS4gJwogICAgICAgICAgICAnSW5zdGVhZCBhIGZ1bmN0aW9uIHdpdGggaW5wdXQgdHlwZTogJXMgd2FzIHJlY2VpdmVkLicKICAgICAgICAgICAgJSBpbnB1dF9hcmdzWzBdKQogICAgICBpbnB1dF9hcmdzID0gKGVsZW1lbnRfdHlwZShpbnB1dF9hcmdzWzBdKSwpICsgaW5wdXRfYXJnc1sxOl0KICAgICAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0IG91dHB1dCB0eXBlIGlzIGNvbnNpc3RlbnQgd2l0aCBpbnB1dCB0eXBlPwogICAgICBoaW50cyA9IGZuX2hpbnRzLmNvcHkoKQogICAgICBoaW50cy5zZXRfaW5wdXRfdHlwZXMoKmlucHV0X2FyZ3MsICoqaW5wdXRfa3dhcmdzKQogICAgICByZXR1cm4gaGludHMKCiAgZGVmIGZvcl9pbnB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgIyBBdm9pZCBjaXJjdWxhciBpbXBvcnRzLgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjeV9jb21iaW5lcnMKICAgIGlmIHNlbGYuX2ZuIGlzIGFueToKICAgICAgcmV0dXJuIGN5X2NvbWJpbmVycy5BbnlDb21iaW5lRm4oKQogICAgZWxpZiBzZWxmLl9mbiBpcyBhbGw6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuQWxsQ29tYmluZUZuKCkKICAgIGVsc2U6CiAgICAgIGtub3duX3R5cGVzID0gewogICAgICAgICAgKHN1bSwgaW50KTogY3lfY29tYmluZXJzLlN1bUludDY0Rm4oKSwKICAgICAgICAgIChtaW4sIGludCk6IGN5X2NvbWJpbmVycy5NaW5JbnQ2NEZuKCksCiAgICAgICAgICAobWF4LCBpbnQpOiBjeV9jb21iaW5lcnMuTWF4SW50NjRGbigpLAogICAgICAgICAgKHN1bSwgZmxvYXQpOiBjeV9jb21iaW5lcnMuU3VtRmxvYXRGbigpLAogICAgICAgICAgKG1pbiwgZmxvYXQpOiBjeV9jb21iaW5lcnMuTWluRmxvYXRGbigpLAogICAgICAgICAgKG1heCwgZmxvYXQpOiBjeV9jb21iaW5lcnMuTWF4RmxvYXRGbigpLAogICAgICB9CiAgICByZXR1cm4ga25vd25fdHlwZXMuZ2V0KChzZWxmLl9mbiwgaW5wdXRfdHlwZSksIHNlbGYpCgoKY2xhc3MgUGFydGl0aW9uRm4oV2l0aFR5cGVIaW50cyk6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIFBhcnRpdGlvbiB0cmFuc2Zvcm0uCgogIEEgUGFydGl0aW9uRm4gc3BlY2lmaWVzIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBpbiBhIFBDb2xsZWN0aW9uIHdpbGwgYmUgcGxhY2VkCiAgaW50byBzZXBhcmF0ZSBwYXJ0aXRpb25zLCBpbmRleGVkIGJ5IGFuIGludGVnZXIuCiAgIiIiCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBwYXJ0aXRpb25fZm9yKHNlbGYsIGVsZW1lbnQsIG51bV9wYXJ0aXRpb25zLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiU3BlY2lmeSB3aGljaCBwYXJ0aXRpb24gd2lsbCByZWNlaXZlIHRoaXMgZWxlbWVudC4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiBBbiBlbGVtZW50IG9mIHRoZSBpbnB1dCBQQ29sbGVjdGlvbi4KICAgICAgbnVtX3BhcnRpdGlvbnM6IE51bWJlciBvZiBwYXJ0aXRpb25zLCBpLmUuLCBvdXRwdXQgUENvbGxlY3Rpb25zLgogICAgICAqYXJnczogb3B0aW9uYWwgcGFyYW1ldGVycyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBvcHRpb25hbCBwYXJhbWV0ZXJzIGFuZCBzaWRlIGlucHV0cy4KCiAgICBSZXR1cm5zOgogICAgICBBbiBpbnRlZ2VyIGluIFswLCBudW1fcGFydGl0aW9ucykuCiAgICAiIiIKICAgIHBhc3MKCgpjbGFzcyBDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25GbihQYXJ0aXRpb25Gbik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIFBhcnRpdGlvbkZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlIG9iamVjdC4KCiAgSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgd3JhcCBzaW1wbGUgZnVuY3Rpb25zIGZvciB1c2UgaW4gUGFydGl0aW9uIG9wZXJhdGlvbnMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbik6CiAgICAiIiJJbml0aWFsaXplcyBhIFBhcnRpdGlvbkZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdCwgd2hpY2ggc2hvdWxkIGFjY2VwdCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKICAgICAgICAgICAgZWxlbWVudCAtIGVsZW1lbnQgdG8gYXNzaWduIHRvIGEgcGFydGl0aW9uLgogICAgICAgICAgICBudW1fcGFydGl0aW9ucyAtIG51bWJlciBvZiBvdXRwdXQgcGFydGl0aW9ucy4KICAgICAgICAgIGFuZCBtYXkgYWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZm4gaXMgbm90IGEgY2FsbGFibGUgdHlwZS4KICAgICIiIgogICAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGNhbGxhYmxlIG9iamVjdCBpbnN0ZWFkIG9mOiAlcicgJSBmbikKICAgIHNlbGYuX2ZuID0gZm4KCiAgZGVmIHBhcnRpdGlvbl9mb3Ioc2VsZiwgZWxlbWVudCwgbnVtX3BhcnRpdGlvbnMsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi5fZm4oZWxlbWVudCwgbnVtX3BhcnRpdGlvbnMsICphcmdzLCAqKmt3YXJncykKCgpjbGFzcyBQYXJEbyhQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIkEgOmNsYXNzOmBQYXJEb2AgdHJhbnNmb3JtLgoKICBQcm9jZXNzZXMgYW4gaW5wdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBieSBhcHBseWluZyBhCiAgOmNsYXNzOmBEb0ZuYCB0byBlYWNoIGVsZW1lbnQgYW5kIHJldHVybmluZyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0cyBpbnRvIGFuCiAgb3V0cHV0IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAuIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpcwogIG5vdCBmaXhlZCBhcyBsb25nIGFzIHRoZSA6Y2xhc3M6YERvRm5gIGNhbiBkZWFsIHdpdGggaXQuIEluIHJlYWxpdHkgdGhlIHR5cGUKICBpcyByZXN0cmFpbmVkIHRvIHNvbWUgZXh0ZW50IGJlY2F1c2UgdGhlIGVsZW1lbnRzIHNvbWV0aW1lcyBtdXN0IGJlIHBlcnNpc3RlZAogIHRvIGV4dGVybmFsIHN0b3JhZ2UuIFNlZSB0aGUgOm1ldGg6YC5leHBhbmQoKWAgbWV0aG9kIGNvbW1lbnRzIGZvciBhCiAgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYWxsIHBvc3NpYmxlIGFyZ3VtZW50cy4KCiAgTm90ZSB0aGF0IHRoZSA6Y2xhc3M6YERvRm5gIG11c3QgcmV0dXJuIGFuIGl0ZXJhYmxlIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlCiAgaW5wdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYC4gQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0bwogIHVzZSB0aGUgYGB5aWVsZGBgIGtleXdvcmQgaW4gdGhlIHByb2Nlc3MgbWV0aG9kLgoKICBBcmdzOgogICAgcGNvbGwgKH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOgogICAgICBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgdG8gYmUgcHJvY2Vzc2VkLgogICAgZm4gKERvRm4pOiBhIDpjbGFzczpgRG9GbmAgb2JqZWN0IHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBlbGVtZW50CiAgICAgIG9mICoqcGNvbGwqKiBhcmd1bWVudC4KICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgRG9GbmAgb2JqZWN0LgogICAgKiprd2FyZ3M6ICBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgRG9GbmAgb2JqZWN0LgoKICBOb3RlIHRoYXQgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGluIG9yZGVyCiAgdG8gZGV0ZWN0IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYXMKICBzaWRlIGlucHV0cyB0byB0aGUgdHJhbnNmb3JtLiBEdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uIHdoZW5ldmVyIHRoZQogIDpjbGFzczpgRG9GbmAgb2JqZWN0IGdldHMgZXhlY3V0ZWQgKGl0cyA6bWV0aDpgRG9Gbi5wcm9jZXNzKClgIG1ldGhvZCBnZXRzCiAgY2FsbGVkKSB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBhcmd1bWVudHMgd2lsbCBiZQogIHJlcGxhY2VkIGJ5IHZhbHVlcyBmcm9tIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGluIHRoZQogIGV4YWN0IHBvc2l0aW9ucyB3aGVyZSB0aGV5IGFwcGVhciBpbiB0aGUgYXJndW1lbnQgbGlzdHMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHN1cGVyKFBhckRvLCBzZWxmKS5fX2luaXRfXyhmbiwgKmFyZ3MsICoqa3dhcmdzKQogICAgIyBUT0RPKHJvYmVydHdiKTogQ2hhbmdlIGFsbCB1c2VzIG9mIHRoZSBkb2ZuIGF0dHJpYnV0ZSB0byB1c2UgZm4gaW5zdGVhZC4KICAgIHNlbGYuZG9mbiA9IHNlbGYuZm4KICAgIHNlbGYub3V0cHV0X3RhZ3MgPSBzZXQoKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuZm4sIERvRm4pOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1BhckRvIG11c3QgYmUgY2FsbGVkIHdpdGggYSBEb0ZuIGluc3RhbmNlLicpCgogICAgIyBWYWxpZGF0ZSB0aGUgRG9GbiBieSBjcmVhdGluZyBhIERvRm5TaWduYXR1cmUKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKICAgIERvRm5TaWduYXR1cmUoc2VsZi5mbikKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIHJldHVybiBzZWxmLmZuLmdldF90eXBlX2hpbnRzKCkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIHRyaXZpYWxfaW5mZXJlbmNlLmVsZW1lbnRfdHlwZSgKICAgICAgICBzZWxmLmZuLmluZmVyX291dHB1dF90eXBlKGlucHV0X3R5cGUpKQoKICBkZWYgbWFrZV9mbihzZWxmLCBmbik6CiAgICBpZiBpc2luc3RhbmNlKGZuLCBEb0ZuKToKICAgICAgcmV0dXJuIGZuCiAgICByZXR1cm4gQ2FsbGFibGVXcmFwcGVyRG9GbihmbikKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICByZXR1cm4gc2VsZi5mbi5fcHJvY2Vzc19hcmdzcGVjX2ZuKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J2ZuJzogRGlzcGxheURhdGFJdGVtKHNlbGYuZm4uX19jbGFzc19fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1RyYW5zZm9ybSBGdW5jdGlvbicpLAogICAgICAgICAgICAnZm5fZGQnOiBzZWxmLmZufQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24ocGNvbGwucGlwZWxpbmUpCgogIGRlZiB3aXRoX291dHB1dHMoc2VsZiwgKnRhZ3MsICoqbWFpbl9rdyk6CiAgICAiIiJSZXR1cm5zIGEgdGFnZ2VkIHR1cGxlIGFsbG93aW5nIGFjY2VzcyB0byB0aGUgb3V0cHV0cyBvZiBhCiAgICA6Y2xhc3M6YFBhckRvYC4KCiAgICBUaGUgcmVzdWx0aW5nIG9iamVjdCBzdXBwb3J0cyBhY2Nlc3MgdG8gdGhlCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGFzc29jaWF0ZWQgd2l0aCBhIHRhZwogICAgKGUuZy4gYGBvLnRhZ2BgLCBgYG9bdGFnXWBgKSBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIGF2YWlsYWJsZSB0YWdzCiAgICAoZS5nLiBgYGZvciB0YWcgaW4gbzogLi4uYGApLgoKICAgIEFyZ3M6CiAgICAgICp0YWdzOiBpZiBub24tZW1wdHksIGxpc3Qgb2YgdmFsaWQgdGFncy4gSWYgYSBsaXN0IG9mIHZhbGlkIHRhZ3MgaXMgZ2l2ZW4sCiAgICAgICAgaXQgd2lsbCBiZSBhbiBlcnJvciB0byB1c2UgYW4gdW5kZWNsYXJlZCB0YWcgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lLgogICAgICAqKm1haW5fa3c6IGRpY3Rpb25hcnkgZW1wdHkgb3Igd2l0aCBvbmUga2V5IGBgJ21haW4nYGAgZGVmaW5pbmcgdGhlIHRhZyB0bwogICAgICAgIGJlIHVzZWQgZm9yIHRoZSBtYWluIG91dHB1dCAod2hpY2ggd2lsbCBub3QgaGF2ZSBhIHRhZyBhc3NvY2lhdGVkIHdpdGgKICAgICAgICBpdCkuCgogICAgUmV0dXJuczoKICAgICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5Eb091dHB1dHNUdXBsZTogQW4gb2JqZWN0IG9mIHR5cGUKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLkRvT3V0cHV0c1R1cGxlYCB0aGF0IGJ1bmRsZXMgdG9nZXRoZXIgYWxsCiAgICAgIHRoZSBvdXRwdXRzIG9mIGEgOmNsYXNzOmBQYXJEb2AgdHJhbnNmb3JtIGFuZCBhbGxvd3MgYWNjZXNzaW5nIHRoZQogICAgICBpbmRpdmlkdWFsIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgcyBmb3IgZWFjaCBvdXRwdXQKICAgICAgdXNpbmcgYW4gYGBvYmplY3QudGFnYGAgc3ludGF4LgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiB0aGUgKipzZWxmKiogb2JqZWN0IGlzIG5vdCBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYQogICAgICAgIDpjbGFzczpgUGFyRG9gIHRyYW5zZm9ybS4KICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogaWYgKiptYWluX2t3KiogY29udGFpbnMgYW55IGtleSBvdGhlciB0aGFuCiAgICAgICAgYGAnbWFpbidgYC4KICAgICIiIgogICAgbWFpbl90YWcgPSBtYWluX2t3LnBvcCgnbWFpbicsIE5vbmUpCiAgICBpZiBtYWluX2t3OgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnRzOiAlcycgJSBtYWluX2t3LmtleXMoKSkKICAgIHJldHVybiBfTXVsdGlQYXJEbyhzZWxmLCB0YWdzLCBtYWluX3RhZykKCiAgZGVmIF9wYXJkb19mbl9kYXRhKHNlbGYpOgogICAgc2lfdGFnc19hbmRfdHlwZXMgPSBOb25lCiAgICB3aW5kb3dpbmcgPSBOb25lCiAgICByZXR1cm4gc2VsZi5mbiwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncywgc2lfdGFnc19hbmRfdHlwZXMsIHdpbmRvd2luZwoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQYXJEbyksIFwKICAgICAgICAiZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgUGFyRG8sIGJ1dCBnb3QgJXMiICUgc2VsZi5fX2NsYXNzX18KICAgIHBpY2tlZF9wYXJkb19mbl9kYXRhID0gcGlja2xlci5kdW1wcyhzZWxmLl9wYXJkb19mbl9kYXRhKCkpCiAgICByZXR1cm4gKAogICAgICAgIHVybnMuUEFSRE9fVFJBTlNGT1JNLAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUGFyRG9QYXlsb2FkKAogICAgICAgICAgICBkb19mbj1iZWFtX3J1bm5lcl9hcGlfcGIyLlNka0Z1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHNwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgICAgICAgICAgICAgdXJuPXVybnMuUElDS0xFRF9ET19GTl9JTkZPLAogICAgICAgICAgICAgICAgICAgIHBheWxvYWQ9cGlja2VkX3BhcmRvX2ZuX2RhdGEpKSwKICAgICAgICAgICAgIyBJdCdkIGJlIG5pY2UgdG8gbmFtZSB0aGVzZSBhY2NvcmRpbmcgdG8gdGhlaXIgYWN0dWFsCiAgICAgICAgICAgICMgbmFtZXMvcG9zaXRpb25zIGluIHRoZSBvcmlnbmFsIGFyZ3VtZW50IGxpc3QsIGJ1dCBzdWNoIGEKICAgICAgICAgICAgIyB0cmFuc2Zvcm1hdGlvbiBpcyBjdXJyZW50bHkgaXJyZXZlcnNpYmxlIGdpdmVuIGhvdwogICAgICAgICAgICAjIHJlbW92ZV9vYmplY3RzX2Zyb21fYXJncyBhbmQgaW5zZXJ0X3ZhbHVlc19pbl9hcmdzCiAgICAgICAgICAgICMgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAgICAgICAgICAgc2lkZV9pbnB1dHM9ewogICAgICAgICAgICAgICAgInNpZGUlcyIgJSBpeDogc2kudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIGl4LCBzaSBpbiBlbnVtZXJhdGUoc2VsZi5zaWRlX2lucHV0cyl9KSkKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICB1cm5zLlBBUkRPX1RSQU5TRk9STSwgYmVhbV9ydW5uZXJfYXBpX3BiMi5QYXJEb1BheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGFyZG9fcGF5bG9hZCwgY29udGV4dCk6CiAgICBhc3NlcnQgcGFyZG9fcGF5bG9hZC5kb19mbi5zcGVjLnVybiA9PSB1cm5zLlBJQ0tMRURfRE9fRk5fSU5GTwogICAgZm4sIGFyZ3MsIGt3YXJncywgc2lfdGFnc19hbmRfdHlwZXMsIHdpbmRvd2luZyA9IHBpY2tsZXIubG9hZHMoCiAgICAgICAgcGFyZG9fcGF5bG9hZC5kb19mbi5zcGVjLnBheWxvYWQpCiAgICBpZiBzaV90YWdzX2FuZF90eXBlczoKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignZXhwbGljaXQgc2lkZSBpbnB1dCBkYXRhJykKICAgIGVsaWYgd2luZG93aW5nOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdleHBsaWNpdCB3aW5kb3dpbmcnKQogICAgcmVzdWx0ID0gUGFyRG8oZm4sICphcmdzLCAqKmt3YXJncykKICAgICMgVGhpcyBpcyBhbiBvcmRlcmVkIGxpc3Qgc3RvcmVkIGFzIGEgZGljdCAoc2VlIHRoZSBjb21tZW50cyBpbgogICAgIyB0b19ydW5uZXJfYXBpX3BhcmFtZXRlciBhYm92ZSkuCiAgICBpbmRleGVkX3NpZGVfaW5wdXRzID0gWwogICAgICAgIChpbnQoaXhbNDpdKSwgcHZhbHVlLkFzU2lkZUlucHV0LmZyb21fcnVubmVyX2FwaShzaSwgY29udGV4dCkpCiAgICAgICAgZm9yIGl4LCBzaSBpbiBwYXJkb19wYXlsb2FkLnNpZGVfaW5wdXRzLml0ZW1zKCldCiAgICByZXN1bHQuc2lkZV9pbnB1dHMgPSBbc2kgZm9yIF8sIHNpIGluIHNvcnRlZChpbmRleGVkX3NpZGVfaW5wdXRzKV0KICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBfTXVsdGlQYXJEbyhQVHJhbnNmb3JtKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGRvX3RyYW5zZm9ybSwgdGFncywgbWFpbl90YWcpOgogICAgc3VwZXIoX011bHRpUGFyRG8sIHNlbGYpLl9faW5pdF9fKGRvX3RyYW5zZm9ybS5sYWJlbCkKICAgIHNlbGYuX2RvX3RyYW5zZm9ybSA9IGRvX3RyYW5zZm9ybQogICAgc2VsZi5fdGFncyA9IHRhZ3MKICAgIHNlbGYuX21haW5fdGFnID0gbWFpbl90YWcKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBfID0gcGNvbGwgfCBzZWxmLl9kb190cmFuc2Zvcm0KICAgIHJldHVybiBwdmFsdWUuRG9PdXRwdXRzVHVwbGUoCiAgICAgICAgcGNvbGwucGlwZWxpbmUsIHNlbGYuX2RvX3RyYW5zZm9ybSwgc2VsZi5fdGFncywgc2VsZi5fbWFpbl90YWcpCgoKZGVmIEZsYXRNYXAoZm4sICphcmdzLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAiIiI6ZnVuYzpgRmxhdE1hcGAgaXMgbGlrZSA6Y2xhc3M6YFBhckRvYCBleGNlcHQgaXQgdGFrZXMgYSBjYWxsYWJsZSB0bwogIHNwZWNpZnkgdGhlIHRyYW5zZm9ybWF0aW9uLgoKICBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYW4gaXRlcmFibGUgZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgaW5wdXQKICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gLiBUaGUgZWxlbWVudHMgb2YgdGhlc2UgaXRlcmFibGVzIHdpbGwKICBiZSBmbGF0dGVuZWQgaW50byB0aGUgb3V0cHV0IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAuCgogIEFyZ3M6CiAgICBmbiAoY2FsbGFibGUpOiBhIGNhbGxhYmxlIG9iamVjdC4KICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KICAgICoqa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KCiAgUmV0dXJuczoKICAgIH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb246CiAgICBBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgY29udGFpbmluZyB0aGUKICAgIDpmdW5jOmBGbGF0TWFwYCBvdXRwdXRzLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5UeXBlRXJyb3I6IElmIHRoZSAqKmZuKiogcGFzc2VkIGFzIGFyZ3VtZW50IGlzIG5vdCBhIGNhbGxhYmxlLgogICAgICBUeXBpY2FsIGVycm9yIGlzIHRvIHBhc3MgYSA6Y2xhc3M6YERvRm5gIGluc3RhbmNlIHdoaWNoIGlzIHN1cHBvcnRlZCBvbmx5CiAgICAgIGZvciA6Y2xhc3M6YFBhckRvYC4KICAiIiIKICBsYWJlbCA9ICdGbGF0TWFwKCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCiAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAnRmxhdE1hcCBjYW4gYmUgdXNlZCBvbmx5IHdpdGggY2FsbGFibGUgb2JqZWN0cy4gJwogICAgICAgICdSZWNlaXZlZCAlciBpbnN0ZWFkLicgJSAoZm4pKQoKICBwYXJkbyA9IFBhckRvKENhbGxhYmxlV3JhcHBlckRvRm4oZm4pLCAqYXJncywgKiprd2FyZ3MpCiAgcGFyZG8ubGFiZWwgPSBsYWJlbAogIHJldHVybiBwYXJkbwoKCmRlZiBNYXAoZm4sICphcmdzLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAiIiI6ZnVuYzpgTWFwYCBpcyBsaWtlIDpmdW5jOmBGbGF0TWFwYCBleGNlcHQgaXRzIGNhbGxhYmxlIHJldHVybnMgb25seSBhCiAgc2luZ2xlIGVsZW1lbnQuCgogIEFyZ3M6CiAgICBmbiAoY2FsbGFibGUpOiBhIGNhbGxhYmxlIG9iamVjdC4KICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KICAgICoqa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KCiAgUmV0dXJuczoKICAgIH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb246CiAgICBBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgY29udGFpbmluZyB0aGUKICAgIDpmdW5jOmBNYXBgIG91dHB1dHMuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogSWYgdGhlICoqZm4qKiBwYXNzZWQgYXMgYXJndW1lbnQgaXMgbm90IGEgY2FsbGFibGUuCiAgICAgIFR5cGljYWwgZXJyb3IgaXMgdG8gcGFzcyBhIDpjbGFzczpgRG9GbmAgaW5zdGFuY2Ugd2hpY2ggaXMgc3VwcG9ydGVkIG9ubHkKICAgICAgZm9yIDpjbGFzczpgUGFyRG9gLgogICIiIgogIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgJ01hcCBjYW4gYmUgdXNlZCBvbmx5IHdpdGggY2FsbGFibGUgb2JqZWN0cy4gJwogICAgICAgICdSZWNlaXZlZCAlciBpbnN0ZWFkLicgJSAoZm4pKQogIGlmIF9mbl90YWtlc19zaWRlX2lucHV0cyhmbik6CiAgICB3cmFwcGVyID0gbGFtYmRhIHgsICphcmdzLCAqKmt3YXJnczogW2ZuKHgsICphcmdzLCAqKmt3YXJncyldCiAgZWxzZToKICAgIHdyYXBwZXIgPSBsYW1iZGEgeDogW2ZuKHgpXQoKICBsYWJlbCA9ICdNYXAoJXMpJyAlIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShmbikKCiAgIyBUT0RPLiBXaGF0IGFib3V0IGNhbGxhYmxlIGNsYXNzZXM/CiAgaWYgaGFzYXR0cihmbiwgJ19fbmFtZV9fJyk6CiAgICB3cmFwcGVyLl9fbmFtZV9fID0gZm4uX19uYW1lX18KCiAgIyBQcm94eSB0aGUgdHlwZS1oaW50IGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHRvIHRoaXMgbmV3CiAgIyB3cmFwcGVkIGZ1bmN0aW9uLgogIGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLmlucHV0X3R5cGVzID0gZ2V0X3R5cGVfaGludHMoZm4pLmlucHV0X3R5cGVzCiAgb3V0cHV0X2hpbnQgPSBnZXRfdHlwZV9oaW50cyhmbikuc2ltcGxlX291dHB1dF90eXBlKGxhYmVsKQogIGlmIG91dHB1dF9oaW50OgogICAgZ2V0X3R5cGVfaGludHMod3JhcHBlcikuc2V0X291dHB1dF90eXBlcyh0eXBlaGludHMuSXRlcmFibGVbb3V0cHV0X2hpbnRdKQogICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICB3cmFwcGVyLl9hcmdzcGVjX2ZuID0gZm4KICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgcGFyZG8gPSBGbGF0TWFwKHdyYXBwZXIsICphcmdzLCAqKmt3YXJncykKICBwYXJkby5sYWJlbCA9IGxhYmVsCiAgcmV0dXJuIHBhcmRvCgoKZGVmIEZpbHRlcihmbiwgKmFyZ3MsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIjpmdW5jOmBGaWx0ZXJgIGlzIGEgOmZ1bmM6YEZsYXRNYXBgIHdpdGggaXRzIGNhbGxhYmxlIGZpbHRlcmluZyBvdXQKICBlbGVtZW50cy4KCiAgQXJnczoKICAgIGZuIChjYWxsYWJsZSk6IGEgY2FsbGFibGUgb2JqZWN0LgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgogICAgKiprd2FyZ3M6IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgoKICBSZXR1cm5zOgogICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbjoKICAgIEEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBjb250YWluaW5nIHRoZQogICAgOmZ1bmM6YEZpbHRlcmAgb3V0cHV0cy4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiB0aGUgKipmbioqIHBhc3NlZCBhcyBhcmd1bWVudCBpcyBub3QgYSBjYWxsYWJsZS4KICAgICAgVHlwaWNhbCBlcnJvciBpcyB0byBwYXNzIGEgOmNsYXNzOmBEb0ZuYCBpbnN0YW5jZSB3aGljaCBpcyBzdXBwb3J0ZWQgb25seQogICAgICBmb3IgOmNsYXNzOmBQYXJEb2AuCiAgIiIiCiAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAnRmlsdGVyIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBjYWxsYWJsZSBvYmplY3RzLiAnCiAgICAgICAgJ1JlY2VpdmVkICVyIGluc3RlYWQuJyAlIChmbikpCiAgd3JhcHBlciA9IGxhbWJkYSB4LCAqYXJncywgKiprd2FyZ3M6IFt4XSBpZiBmbih4LCAqYXJncywgKiprd2FyZ3MpIGVsc2UgW10KCiAgbGFiZWwgPSAnRmlsdGVyKCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCgogICMgVE9ETzogV2hhdCBhYm91dCBjYWxsYWJsZSBjbGFzc2VzPwogIGlmIGhhc2F0dHIoZm4sICdfX25hbWVfXycpOgogICAgd3JhcHBlci5fX25hbWVfXyA9IGZuLl9fbmFtZV9fCiAgIyBQcm94eSB0aGUgdHlwZS1oaW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQsIHNldHRpbmcgdGhlCiAgIyBvdXRwdXQgdHlwZSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgaW5wdXQgdHlwZS4KICBnZXRfdHlwZV9oaW50cyh3cmFwcGVyKS5pbnB1dF90eXBlcyA9IGdldF90eXBlX2hpbnRzKGZuKS5pbnB1dF90eXBlcwogIG91dHB1dF9oaW50ID0gZ2V0X3R5cGVfaGludHMoZm4pLnNpbXBsZV9vdXRwdXRfdHlwZShsYWJlbCkKICBpZiAob3V0cHV0X2hpbnQgaXMgTm9uZQogICAgICBhbmQgZ2V0X3R5cGVfaGludHMod3JhcHBlcikuaW5wdXRfdHlwZXMKICAgICAgYW5kIGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLmlucHV0X3R5cGVzWzBdKToKICAgIG91dHB1dF9oaW50ID0gZ2V0X3R5cGVfaGludHMod3JhcHBlcikuaW5wdXRfdHlwZXNbMF0KICBpZiBvdXRwdXRfaGludDoKICAgIGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLnNldF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLkl0ZXJhYmxlW291dHB1dF9oaW50XSkKICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgd3JhcHBlci5fYXJnc3BlY19mbiA9IGZuCiAgIyBweWxpbnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogIHBhcmRvID0gRmxhdE1hcCh3cmFwcGVyLCAqYXJncywgKiprd2FyZ3MpCiAgcGFyZG8ubGFiZWwgPSBsYWJlbAogIHJldHVybiBwYXJkbwoKCmRlZiBfY29tYmluZV9wYXlsb2FkKGNvbWJpbmVfZm4sIGNvbnRleHQpOgogIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbWJpbmVQYXlsb2FkKAogICAgICBjb21iaW5lX2ZuPWNvbWJpbmVfZm4udG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgYWNjdW11bGF0b3JfY29kZXJfaWQ9Y29udGV4dC5jb2RlcnMuZ2V0X2lkKAogICAgICAgICAgY29tYmluZV9mbi5nZXRfYWNjdW11bGF0b3JfY29kZXIoKSkpCgoKY2xhc3MgQ29tYmluZUdsb2JhbGx5KFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmBDb21iaW5lR2xvYmFsbHlgIHRyYW5zZm9ybS4KCiAgUmVkdWNlcyBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgdG8gYSBzaW5nbGUgdmFsdWUgYnkKICBwcm9ncmVzc2l2ZWx5IGFwcGx5aW5nIGEgOmNsYXNzOmBDb21iaW5lRm5gIHRvIHBvcnRpb25zIG9mIHRoZQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgKGFuZCB0byBpbnRlcm1lZGlhdGUgdmFsdWVzIGNyZWF0ZWQKICB0aGVyZWJ5KS4gU2VlIGRvY3VtZW50YXRpb24gaW4gOmNsYXNzOmBDb21iaW5lRm5gIGZvciBkZXRhaWxzIG9uIHRoZSBzcGVjaWZpY3MKICBvbiBob3cgOmNsYXNzOmBDb21iaW5lRm5gIHMgYXJlIGFwcGxpZWQuCgogIEFyZ3M6CiAgICBwY29sbCAofmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbik6CiAgICAgIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCB0byBiZSByZWR1Y2VkIGludG8gYSBzaW5nbGUKICAgICAgdmFsdWUuCiAgICBmbiAoY2FsbGFibGUpOiBhIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QgdGhhdCB3aWxsIGJlIGNhbGxlZCB0bwogICAgICBwcm9ncmVzc2l2ZWx5IHJlZHVjZSB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBpbnRvCiAgICAgIHNpbmdsZSB2YWx1ZXMsIG9yIGEgY2FsbGFibGUgc3VpdGFibGUgZm9yIHdyYXBwaW5nIGJ5CiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DYWxsYWJsZVdyYXBwZXJDb21iaW5lRm5gLgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG9iamVjdC4KICAgICoqa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogSWYgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBpbnB1dAogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGlzIG5vdCBjb21wYXRpYmxlCiAgICAgIHdpdGggYGBJdGVyYWJsZVtBXWBgLgoKICBSZXR1cm5zOgogICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbjogQSBzaW5nbGUtZWxlbWVudAogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBjb250YWluaW5nIHRoZSBtYWluIG91dHB1dCBvZgogICAgdGhlIDpjbGFzczpgQ29tYmluZUdsb2JhbGx5YCB0cmFuc2Zvcm0uCgogIE5vdGUgdGhhdCB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gb3JkZXIKICB0byBkZXRlY3QgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAgcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYXMgc2lkZQogIGlucHV0cyB0byB0aGUgdHJhbnNmb3JtLgogIER1cmluZyBwaXBlbGluZSBleGVjdXRpb24gd2hlbmV2ZXIgdGhlIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QgZ2V0cyBleGVjdXRlZAogIChpLmUuIGFueSBvZiB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG1ldGhvZHMgZ2V0IGNhbGxlZCksIHRoZQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIGFyZ3VtZW50cyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZWlyCiAgYWN0dWFsIHZhbHVlIGluIHRoZSBleGFjdCBwb3NpdGlvbiB3aGVyZSB0aGV5IGFwcGVhciBpbiB0aGUgYXJndW1lbnQgbGlzdHMuCiAgIiIiCiAgaGFzX2RlZmF1bHRzID0gVHJ1ZQogIGFzX3ZpZXcgPSBGYWxzZQoKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBub3QgKGlzaW5zdGFuY2UoZm4sIENvbWJpbmVGbikgb3IgY2FsbGFibGUoZm4pKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0NvbWJpbmVHbG9iYWxseSBjYW4gYmUgdXNlZCBvbmx5IHdpdGggY29tYmluZUZuIG9iamVjdHMuICcKICAgICAgICAgICdSZWNlaXZlZCAlciBpbnN0ZWFkLicgJSAoZm4pKQoKICAgIHN1cGVyKENvbWJpbmVHbG9iYWxseSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5mbiA9IGZuCiAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICBzZWxmLmt3YXJncyA9IGt3YXJncwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnY29tYmluZV9mbic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLmZuLl9fY2xhc3NfXywgbGFiZWw9J0NvbWJpbmUgRnVuY3Rpb24nKSwKICAgICAgICAgICAgJ2NvbWJpbmVfZm5fZGQnOgogICAgICAgICAgICBzZWxmLmZufQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnQ29tYmluZUdsb2JhbGx5KCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoc2VsZi5mbikKCiAgZGVmIF9jbG9uZShzZWxmLCAqKmV4dHJhX2F0dHJpYnV0ZXMpOgogICAgY2xvbmUgPSBjb3B5LmNvcHkoc2VsZikKICAgIGNsb25lLl9fZGljdF9fLnVwZGF0ZShleHRyYV9hdHRyaWJ1dGVzKQogICAgcmV0dXJuIGNsb25lCgogIGRlZiB3aXRoX2RlZmF1bHRzKHNlbGYsIGhhc19kZWZhdWx0cz1UcnVlKToKICAgIHJldHVybiBzZWxmLl9jbG9uZShoYXNfZGVmYXVsdHM9aGFzX2RlZmF1bHRzKQoKICBkZWYgd2l0aG91dF9kZWZhdWx0cyhzZWxmKToKICAgIHJldHVybiBzZWxmLndpdGhfZGVmYXVsdHMoRmFsc2UpCgogIGRlZiBhc19zaW5nbGV0b25fdmlldyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9jbG9uZShhc192aWV3PVRydWUpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgZGVmIGFkZF9pbnB1dF90eXBlcyh0cmFuc2Zvcm0pOgogICAgICB0eXBlX2hpbnRzID0gc2VsZi5nZXRfdHlwZV9oaW50cygpCiAgICAgIGlmIHR5cGVfaGludHMuaW5wdXRfdHlwZXM6CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS53aXRoX2lucHV0X3R5cGVzKHR5cGVfaGludHMuaW5wdXRfdHlwZXNbMF1bMF0pCiAgICAgIHJldHVybiB0cmFuc2Zvcm0KCiAgICBjb21iaW5lZCA9IChwY29sbAogICAgICAgICAgICAgICAgfCAnS2V5V2l0aFZvaWQnID4+IGFkZF9pbnB1dF90eXBlcygKICAgICAgICAgICAgICAgICAgICBNYXAobGFtYmRhIHY6IChOb25lLCB2KSkud2l0aF9vdXRwdXRfdHlwZXMoCiAgICAgICAgICAgICAgICAgICAgICAgIEtWW05vbmUsIHBjb2xsLmVsZW1lbnRfdHlwZV0pKQogICAgICAgICAgICAgICAgfCAnQ29tYmluZVBlcktleScgPj4gQ29tYmluZVBlcktleSgKICAgICAgICAgICAgICAgICAgICBzZWxmLmZuLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQogICAgICAgICAgICAgICAgfCAnVW5LZXknID4+IE1hcChsYW1iZGEga192OiBrX3ZbMV0pKQoKICAgIGlmIG5vdCBzZWxmLmhhc19kZWZhdWx0cyBhbmQgbm90IHNlbGYuYXNfdmlldzoKICAgICAgcmV0dXJuIGNvbWJpbmVkCgogICAgaWYgc2VsZi5oYXNfZGVmYXVsdHM6CiAgICAgIGNvbWJpbmVfZm4gPSAoCiAgICAgICAgICBzZWxmLmZuIGlmIGlzaW5zdGFuY2Uoc2VsZi5mbiwgQ29tYmluZUZuKQogICAgICAgICAgZWxzZSBDb21iaW5lRm4uZnJvbV9jYWxsYWJsZShzZWxmLmZuKSkKICAgICAgZGVmYXVsdF92YWx1ZSA9IGNvbWJpbmVfZm4uYXBwbHkoW10sICpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCiAgICBlbHNlOgogICAgICBkZWZhdWx0X3ZhbHVlID0gcHZhbHVlLkFzU2luZ2xldG9uLl9OT19ERUZBVUxUICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICB2aWV3ID0gcHZhbHVlLkFzU2luZ2xldG9uKGNvbWJpbmVkLCBkZWZhdWx0X3ZhbHVlPWRlZmF1bHRfdmFsdWUpCiAgICBpZiBzZWxmLmFzX3ZpZXc6CiAgICAgIHJldHVybiB2aWV3CiAgICBlbHNlOgogICAgICBpZiBwY29sbC53aW5kb3dpbmcud2luZG93Zm4gIT0gR2xvYmFsV2luZG93cygpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICJEZWZhdWx0IHZhbHVlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgaW4gQ29tYmluZUdsb2JhbGx5KCkgaWYgdGhlICIKICAgICAgICAgICAgIm91dHB1dCAgUENvbGxlY3Rpb24gaXMgbm90IHdpbmRvd2VkIGJ5IEdsb2JhbFdpbmRvd3MuICIKICAgICAgICAgICAgIkluc3RlYWQsIHVzZSBDb21iaW5lR2xvYmFsbHkoKS53aXRob3V0X2RlZmF1bHRzKCkgdG8gb3V0cHV0ICIKICAgICAgICAgICAgImFuIGVtcHR5IFBDb2xsZWN0aW9uIGlmIHRoZSBpbnB1dCBQQ29sbGVjdGlvbiBpcyBlbXB0eSwgIgogICAgICAgICAgICAib3IgQ29tYmluZUdsb2JhbGx5KCkuYXNfc2luZ2xldG9uX3ZpZXcoKSB0byBnZXQgdGhlIGRlZmF1bHQgIgogICAgICAgICAgICAib3V0cHV0IG9mIHRoZSBDb21iaW5lRm4gaWYgdGhlIGlucHV0IFBDb2xsZWN0aW9uIGlzIGVtcHR5LiIpCgogICAgICBkZWYgdHlwZWQodHJhbnNmb3JtKToKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBXZSBzaG91bGQgaW5mZXIgdGhpcy4KICAgICAgICBpZiBjb21iaW5lZC5lbGVtZW50X3R5cGU6CiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtLndpdGhfb3V0cHV0X3R5cGVzKGNvbWJpbmVkLmVsZW1lbnRfdHlwZSkKICAgICAgICByZXR1cm4gdHJhbnNmb3JtCiAgICAgIHJldHVybiAocGNvbGwucGlwZWxpbmUKICAgICAgICAgICAgICB8ICdEb09uY2UnID4+IENyZWF0ZShbTm9uZV0pCiAgICAgICAgICAgICAgfCAnSW5qZWN0RGVmYXVsdCcgPj4gdHlwZWQoTWFwKGxhbWJkYSBfLCBzOiBzLCB2aWV3KSkpCgoKY2xhc3MgQ29tYmluZVBlcktleShQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIkEgcGVyLWtleSBDb21iaW5lIHRyYW5zZm9ybS4KCiAgSWRlbnRpZmllcyBzZXRzIG9mIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUga2V5IGluIHRoZSBpbnB1dAogIFBDb2xsZWN0aW9uLCB0aGVuIGFwcGxpZXMgYSBDb21iaW5lRm4gdG8gY29uZGVuc2UgdGhvc2Ugc2V0cyB0byBzaW5nbGUKICB2YWx1ZXMuIFNlZSBkb2N1bWVudGF0aW9uIGluIENvbWJpbmVGbiBmb3IgZGV0YWlscyBvbiB0aGUgc3BlY2lmaWNzIG9uIGhvdwogIENvbWJpbmVGbnMgYXJlIGFwcGxpZWQuCgogIEFyZ3M6CiAgICBwY29sbDogaW5wdXQgcGNvbGxlY3Rpb24uCiAgICBmbjogaW5zdGFuY2Ugb2YgQ29tYmluZUZuIHRvIGFwcGx5IHRvIGFsbCB2YWx1ZXMgdW5kZXIgdGhlIHNhbWUga2V5IGluCiAgICAgIHBjb2xsLCBvciBhIGNhbGxhYmxlIHdob3NlIHNpZ25hdHVyZSBpcyBgYGYoaXRlcmFibGUsICphcmdzLCAqKmt3YXJncylgYAogICAgICAoZS5nLiwgc3VtLCBtYXgpLgogICAgKmFyZ3M6IGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMsIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgQ29tYmluZUZuLgogICAgKiprd2FyZ3M6IGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMsIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgQ29tYmluZUZuLgoKICBSZXR1cm5zOgogICAgQSBQT2JqZWN0IGhvbGRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY29tYmluZSBvcGVyYXRpb24uCiAgIiIiCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J2NvbWJpbmVfZm4nOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5mbi5fX2NsYXNzX18sIGxhYmVsPSdDb21iaW5lIEZ1bmN0aW9uJyksCiAgICAgICAgICAgICdjb21iaW5lX2ZuX2RkJzoKICAgICAgICAgICAgc2VsZi5mbn0KCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4pOgogICAgc2VsZi5fZm5fbGFiZWwgPSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCiAgICByZXR1cm4gZm4gaWYgaXNpbnN0YW5jZShmbiwgQ29tYmluZUZuKSBlbHNlIENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKGZuKQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fZm5fbGFiZWwpCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZm4uX2ZuICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgYXJncywga3dhcmdzID0gdXRpbC5pbnNlcnRfdmFsdWVzX2luX2FyZ3MoCiAgICAgICAgc2VsZi5hcmdzLCBzZWxmLmt3YXJncywgc2VsZi5zaWRlX2lucHV0cykKICAgIHJldHVybiBwY29sbCB8IEdyb3VwQnlLZXkoKSB8ICdDb21iaW5lJyA+PiBDb21iaW5lVmFsdWVzKAogICAgICAgIHNlbGYuZm4sICphcmdzLCAqKmt3YXJncykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgaWYgc2VsZi5hcmdzIG9yIHNlbGYua3dhcmdzOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzIGltcG9ydCBjdXJyeV9jb21iaW5lX2ZuCiAgICAgIGNvbWJpbmVfZm4gPSBjdXJyeV9jb21iaW5lX2ZuKHNlbGYuZm4sIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MpCiAgICBlbHNlOgogICAgICBjb21iaW5lX2ZuID0gc2VsZi5mbgogICAgcmV0dXJuICgKICAgICAgICB1cm5zLkNPTUJJTkVfUEVSX0tFWV9UUkFOU0ZPUk0sCiAgICAgICAgX2NvbWJpbmVfcGF5bG9hZChjb21iaW5lX2ZuLCBjb250ZXh0KSkKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICB1cm5zLkNPTUJJTkVfUEVSX0tFWV9UUkFOU0ZPUk0sIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluZVBheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29tYmluZV9wYXlsb2FkLCBjb250ZXh0KToKICAgIHJldHVybiBDb21iaW5lUGVyS2V5KAogICAgICAgIENvbWJpbmVGbi5mcm9tX3J1bm5lcl9hcGkoY29tYmluZV9wYXlsb2FkLmNvbWJpbmVfZm4sIGNvbnRleHQpKQoKCiMgVE9ETyhyb2JlcnR3Yik6IFJlbmFtZSB0byBDb21iaW5lR3JvdXBlZFZhbHVlcz8KY2xhc3MgQ29tYmluZVZhbHVlcyhQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgoKICBkZWYgbWFrZV9mbihzZWxmLCBmbik6CiAgICByZXR1cm4gZm4gaWYgaXNpbnN0YW5jZShmbiwgQ29tYmluZUZuKSBlbHNlIENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKGZuKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGFyZ3MsIGt3YXJncyA9IHV0aWwuaW5zZXJ0X3ZhbHVlc19pbl9hcmdzKAogICAgICAgIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MsIHNlbGYuc2lkZV9pbnB1dHMpCgogICAgaW5wdXRfdHlwZSA9IHBjb2xsLmVsZW1lbnRfdHlwZQogICAga2V5X3R5cGUgPSBOb25lCiAgICBpZiBpbnB1dF90eXBlIGlzIG5vdCBOb25lOgogICAgICBrZXlfdHlwZSwgXyA9IGlucHV0X3R5cGUudHVwbGVfdHlwZXMKCiAgICBydW50aW1lX3R5cGVfY2hlY2sgPSAoCiAgICAgICAgcGNvbGwucGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhUeXBlT3B0aW9ucykucnVudGltZV90eXBlX2NoZWNrKQogICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oCiAgICAgICAgQ29tYmluZVZhbHVlc0RvRm4oa2V5X3R5cGUsIHNlbGYuZm4sIHJ1bnRpbWVfdHlwZV9jaGVjayksCiAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBpZiBzZWxmLmFyZ3Mgb3Igc2VsZi5rd2FyZ3M6CiAgICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IGN1cnJ5X2NvbWJpbmVfZm4KICAgICAgY29tYmluZV9mbiA9IGN1cnJ5X2NvbWJpbmVfZm4oc2VsZi5mbiwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncykKICAgIGVsc2U6CiAgICAgIGNvbWJpbmVfZm4gPSBzZWxmLmZuCiAgICByZXR1cm4gKAogICAgICAgIHVybnMuQ09NQklORV9HUk9VUEVEX1ZBTFVFU19UUkFOU0ZPUk0sCiAgICAgICAgX2NvbWJpbmVfcGF5bG9hZChjb21iaW5lX2ZuLCBjb250ZXh0KSkKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICB1cm5zLkNPTUJJTkVfR1JPVVBFRF9WQUxVRVNfVFJBTlNGT1JNLCBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbWJpbmVQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGNvbWJpbmVfcGF5bG9hZCwgY29udGV4dCk6CiAgICByZXR1cm4gQ29tYmluZVZhbHVlcygKICAgICAgICBDb21iaW5lRm4uZnJvbV9ydW5uZXJfYXBpKGNvbWJpbmVfcGF5bG9hZC5jb21iaW5lX2ZuLCBjb250ZXh0KSkKCgpjbGFzcyBDb21iaW5lVmFsdWVzRG9GbihEb0ZuKToKICAiIiJEb0ZuIGZvciBwZXJmb3JtaW5nIHBlci1rZXkgQ29tYmluZSB0cmFuc2Zvcm1zLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXRfcGNvbGxfdHlwZSwgY29tYmluZWZuLCBydW50aW1lX3R5cGVfY2hlY2spOgogICAgc3VwZXIoQ29tYmluZVZhbHVlc0RvRm4sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuY29tYmluZWZuID0gY29tYmluZWZuCiAgICBzZWxmLnJ1bnRpbWVfdHlwZV9jaGVjayA9IHJ1bnRpbWVfdHlwZV9jaGVjawoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIyBFeHBlY3RlZCBlbGVtZW50cyBpbnB1dCB0byB0aGlzIERvRm4gYXJlIDItdHVwbGVzIG9mIHRoZSBmb3JtCiAgICAjIChrZXksIGl0ZXIpLCB3aXRoIGl0ZXIgYW4gaXRlcmFibGUgb2YgYWxsIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGtleQogICAgIyBpbiB0aGUgaW5wdXQgUENvbGxlY3Rpb24uCiAgICBpZiBzZWxmLnJ1bnRpbWVfdHlwZV9jaGVjazoKICAgICAgIyBBcHBseSB0aGUgY29tYmluZXIgaW4gYSBzaW5nbGUgb3BlcmF0aW9uIHJhdGhlciB0aGFuIGFydGlmaWNpYWxseQogICAgICAjIGJyZWFraW5nIGl0IHVwIHNvIHRoYXQgb3V0cHV0IHR5cGUgdmlvbGF0aW9ucyBtYW5pZmVzdCBhcyBUeXBlQ2hlY2sKICAgICAgIyBlcnJvcnMgcmF0aGVyIHRoYW4gdHlwZSBlcnJvcnMuCiAgICAgIHJldHVybiBbCiAgICAgICAgICAoZWxlbWVudFswXSwKICAgICAgICAgICBzZWxmLmNvbWJpbmVmbi5hcHBseShlbGVtZW50WzFdLCAqYXJncywgKiprd2FyZ3MpKV0KCiAgICAjIEFkZCB0aGUgZWxlbWVudHMgaW50byB0aHJlZSBhY2N1bXVsYXRvcnMgKGZvciB0ZXN0aW5nIG9mIG1lcmdlKS4KICAgIGVsZW1lbnRzID0gbGlzdChlbGVtZW50WzFdKQogICAgYWNjdW11bGF0b3JzID0gW10KICAgIGZvciBrIGluIHJhbmdlKDMpOgogICAgICBpZiBsZW4oZWxlbWVudHMpIDw9IGs6CiAgICAgICAgYnJlYWsKICAgICAgYWNjdW11bGF0b3JzLmFwcGVuZCgKICAgICAgICAgIHNlbGYuY29tYmluZWZuLmFkZF9pbnB1dHMoCiAgICAgICAgICAgICAgc2VsZi5jb21iaW5lZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCphcmdzLCAqKmt3YXJncyksCiAgICAgICAgICAgICAgZWxlbWVudHNbazo6M10sCiAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKSkKICAgICMgTWVyZ2UgdGhlIGFjY3VtdWxhdG9ycy4KICAgIGFjY3VtdWxhdG9yID0gc2VsZi5jb21iaW5lZm4ubWVyZ2VfYWNjdW11bGF0b3JzKAogICAgICAgIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKQogICAgIyBDb252ZXJ0IGFjY3VtdWxhdG9yIHRvIHRoZSBmaW5hbCByZXN1bHQuCiAgICByZXR1cm4gWyhlbGVtZW50WzBdLAogICAgICAgICAgICAgc2VsZi5jb21iaW5lZm4uZXh0cmFjdF9vdXRwdXQoYWNjdW11bGF0b3IsICphcmdzLCAqKmt3YXJncykpXQoKICBkZWYgZGVmYXVsdF90eXBlX2hpbnRzKHNlbGYpOgogICAgaGludHMgPSBzZWxmLmNvbWJpbmVmbi5nZXRfdHlwZV9oaW50cygpLmNvcHkoKQogICAgaWYgaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgICAgYXJncywga3dhcmdzID0gaGludHMuaW5wdXRfdHlwZXMKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW2FyZ3NbMF1dXSwpICsgYXJnc1sxOl0KICAgICAgaGludHMuc2V0X2lucHV0X3R5cGVzKCphcmdzLCAqKmt3YXJncykKICAgIGVsc2U6CiAgICAgIEsgPSB0eXBlaGludHMuQW55CiAgICBpZiBoaW50cy5vdXRwdXRfdHlwZXM6CiAgICAgIG1haW5fb3V0cHV0X3R5cGUgPSBoaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUoJycpCiAgICAgIGhpbnRzLnNldF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW0ssIG1haW5fb3V0cHV0X3R5cGVdKQogICAgcmV0dXJuIGhpbnRzCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCBWXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW1ZdXSkKY2xhc3MgR3JvdXBCeUtleShQVHJhbnNmb3JtKToKICAiIiJBIGdyb3VwIGJ5IGtleSB0cmFuc2Zvcm0uCgogIFByb2Nlc3NlcyBhbiBpbnB1dCBQQ29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIGtleS92YWx1ZSBwYWlycyByZXByZXNlbnRlZCBhcyBhCiAgdHVwbGUgcGFpci4gVGhlIHJlc3VsdCBpcyBhIFBDb2xsZWN0aW9uIHdoZXJlIHZhbHVlcyBoYXZpbmcgYSBjb21tb24ga2V5IGFyZQogIGdyb3VwZWQgdG9nZXRoZXIuICBGb3IgZXhhbXBsZSAoYSwgMSksIChiLCAyKSwgKGEsIDMpIHdpbGwgcmVzdWx0IGludG8KICAoYSwgWzEsIDNdKSwgKGIsIFsyXSkuCgogIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIHVzZWQgb25seSB3aGVuIHJ1biBvbiB0aGUgbG9jYWwgZGlyZWN0IHJ1bm5lci4KICAiIiIKCiAgY2xhc3MgUmVpZnlXaW5kb3dzKERvRm4pOgoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtLAogICAgICAgICAgICAgICAgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0pOgogICAgICB0cnk6CiAgICAgICAgaywgdiA9IGVsZW1lbnQKICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignSW5wdXQgdG8gR3JvdXBCeUtleSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzIGNvbXBhdGlibGUgd2l0aCBLVltBLCBCXScpCgogICAgICByZXR1cm4gWyhrLCBXaW5kb3dlZFZhbHVlKHYsIHRpbWVzdGFtcCwgW3dpbmRvd10pKV0KCiAgICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAgIGtleV90eXBlLCB2YWx1ZV90eXBlID0gdHJpdmlhbF9pbmZlcmVuY2Uua2V5X3ZhbHVlX3R5cGVzKGlucHV0X3R5cGUpCiAgICAgIHJldHVybiBJdGVyYWJsZVtLVltrZXlfdHlwZSwgdHlwZWhpbnRzLldpbmRvd2VkVmFsdWVbdmFsdWVfdHlwZV1dXQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgVGhpcyBjb2RlIHBhdGggaXMgb25seSB1c2VkIGluIHRoZSBsb2NhbCBkaXJlY3QgcnVubmVyLiAgRm9yIERhdGFmbG93CiAgICAjIHJ1bm5lciBleGVjdXRpb24sIHRoZSBHcm91cEJ5S2V5IHRyYW5zZm9ybSBpcyBleHBhbmRlZCBvbiB0aGUgc2VydmljZS4KICAgIGlucHV0X3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUKICAgIGlmIGlucHV0X3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICMgSW5pdGlhbGl6ZSB0eXBlLWhpbnRzIHVzZWQgYmVsb3cgdG8gZW5mb3JjZSB0eXBlLWNoZWNraW5nIGFuZCB0byBwYXNzCiAgICAgICMgZG93bnN0cmVhbSB0byBmdXJ0aGVyIFBUcmFuc2Zvcm1zLgogICAgICBrZXlfdHlwZSwgdmFsdWVfdHlwZSA9IHRyaXZpYWxfaW5mZXJlbmNlLmtleV92YWx1ZV90eXBlcyhpbnB1dF90eXBlKQogICAgICAjIEVuZm9yY2UgdGhlIGlucHV0IHRvIGEgR0JLIGhhcyBhIEtWIGVsZW1lbnQgdHlwZS4KICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gS1Zba2V5X3R5cGUsIHZhbHVlX3R5cGVdCiAgICAgIHR5cGVjb2RlcnMucmVnaXN0cnkudmVyaWZ5X2RldGVybWluaXN0aWMoCiAgICAgICAgICB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihrZXlfdHlwZSksCiAgICAgICAgICAnR3JvdXBCeUtleSBvcGVyYXRpb24gIiVzIicgJSBzZWxmLmxhYmVsKQoKICAgICAgcmVpZnlfb3V0cHV0X3R5cGUgPSBLVltrZXlfdHlwZSwgdHlwZWhpbnRzLldpbmRvd2VkVmFsdWVbdmFsdWVfdHlwZV1dCiAgICAgIGdia19pbnB1dF90eXBlID0gKAogICAgICAgICAgS1Zba2V5X3R5cGUsIEl0ZXJhYmxlW3R5cGVoaW50cy5XaW5kb3dlZFZhbHVlW3ZhbHVlX3R5cGVdXV0pCiAgICAgIGdia19vdXRwdXRfdHlwZSA9IEtWW2tleV90eXBlLCBJdGVyYWJsZVt2YWx1ZV90eXBlXV0KCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KICAgICAgcmV0dXJuIChwY29sbAogICAgICAgICAgICAgIHwgJ1JlaWZ5V2luZG93cycgPj4gKFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpCiAgICAgICAgICAgICAgICAgLndpdGhfb3V0cHV0X3R5cGVzKHJlaWZ5X291dHB1dF90eXBlKSkKICAgICAgICAgICAgICB8ICdHcm91cEJ5S2V5JyA+PiAoX0dyb3VwQnlLZXlPbmx5KCkKICAgICAgICAgICAgICAgICAud2l0aF9pbnB1dF90eXBlcyhyZWlmeV9vdXRwdXRfdHlwZSkKICAgICAgICAgICAgICAgICAud2l0aF9vdXRwdXRfdHlwZXMoZ2JrX2lucHV0X3R5cGUpKQogICAgICAgICAgICAgIHwgKCdHcm91cEJ5V2luZG93JyA+PiBfR3JvdXBBbHNvQnlXaW5kb3cocGNvbGwud2luZG93aW5nKQogICAgICAgICAgICAgICAgIC53aXRoX2lucHV0X3R5cGVzKGdia19pbnB1dF90eXBlKQogICAgICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcyhnYmtfb3V0cHV0X3R5cGUpKSkKICAgIGVsc2U6CiAgICAgICMgVGhlIGlucHV0X3R5cGUgaXMgTm9uZSwgcnVuIHRoZSBkZWZhdWx0CiAgICAgIHJldHVybiAocGNvbGwKICAgICAgICAgICAgICB8ICdSZWlmeVdpbmRvd3MnID4+IFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpCiAgICAgICAgICAgICAgfCAnR3JvdXBCeUtleScgPj4gX0dyb3VwQnlLZXlPbmx5KCkKICAgICAgICAgICAgICB8ICdHcm91cEJ5V2luZG93JyA+PiBfR3JvdXBBbHNvQnlXaW5kb3cocGNvbGwud2luZG93aW5nKSkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiB1cm5zLkdST1VQX0JZX0tFWV9UUkFOU0ZPUk0sIE5vbmUKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKHVybnMuR1JPVVBfQllfS0VZX1RSQU5TRk9STSwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcGF5bG9hZCwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIEdyb3VwQnlLZXkoKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgVl0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9Hcm91cEJ5S2V5T25seShQVHJhbnNmb3JtKToKICAiIiJBIGdyb3VwIGJ5IGtleSB0cmFuc2Zvcm0sIGlnbm9yaW5nIHdpbmRvd3MuIiIiCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSB0cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXMoaW5wdXRfdHlwZSkKICAgIHJldHVybiBLVltrZXlfdHlwZSwgSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIHVybnMuR1JPVVBfQllfS0VZX09OTFlfVFJBTlNGT1JNLCBOb25lCgogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3Vybih1cm5zLkdST1VQX0JZX0tFWV9PTkxZX1RSQU5TRk9STSwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcGF5bG9hZCwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIF9Hcm91cEJ5S2V5T25seSgpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCB0eXBlaGludHMuSXRlcmFibGVbVl1dKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCB0eXBlaGludHMuSXRlcmFibGVbVl1dKQpjbGFzcyBfR3JvdXBBbHNvQnlXaW5kb3coUGFyRG8pOgogICIiIlRoZSBHcm91cEFsc29CeVdpbmRvdyB0cmFuc2Zvcm0uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZyk6CiAgICBzdXBlcihfR3JvdXBBbHNvQnlXaW5kb3csIHNlbGYpLl9faW5pdF9fKAogICAgICAgIF9Hcm91cEFsc29CeVdpbmRvd0RvRm4od2luZG93aW5nKSkKICAgIHNlbGYud2luZG93aW5nID0gd2luZG93aW5nCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKAogICAgICAgIHVybnMuR1JPVVBfQUxTT19CWV9XSU5ET1dfVFJBTlNGT1JNLAogICAgICAgIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlKHZhbHVlPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKAogICAgICAgICAgICBzZWxmLndpbmRvd2luZykpKQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oCiAgICAgIHVybnMuR1JPVVBfQUxTT19CWV9XSU5ET1dfVFJBTlNGT1JNLCB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb250ZXh0KToKICAgIHJldHVybiBfR3JvdXBBbHNvQnlXaW5kb3coCiAgICAgICAgY29udGV4dC53aW5kb3dpbmdfc3RyYXRlZ2llcy5nZXRfYnlfaWQocGF5bG9hZC52YWx1ZSkpCgoKY2xhc3MgX0dyb3VwQWxzb0J5V2luZG93RG9GbihEb0ZuKToKICAjIFRPRE8ocm9iZXJ0d2IpOiBTdXBwb3J0IGNvbWJpbmVyIGxpZnRpbmcuCgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dpbmcpOgogICAgc3VwZXIoX0dyb3VwQWxzb0J5V2luZG93RG9Gbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi53aW5kb3dpbmcgPSB3aW5kb3dpbmcKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAga2V5X3R5cGUsIHdpbmRvd2VkX3ZhbHVlX2l0ZXJfdHlwZSA9IHRyaXZpYWxfaW5mZXJlbmNlLmtleV92YWx1ZV90eXBlcygKICAgICAgICBpbnB1dF90eXBlKQogICAgdmFsdWVfdHlwZSA9IHdpbmRvd2VkX3ZhbHVlX2l0ZXJfdHlwZS5pbm5lcl90eXBlLmlubmVyX3R5cGUKICAgIHJldHVybiBJdGVyYWJsZVtLVltrZXlfdHlwZSwgSXRlcmFibGVbdmFsdWVfdHlwZV1dXQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIKICAgICMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIHNlbGYuZHJpdmVyID0gY3JlYXRlX3RyaWdnZXJfZHJpdmVyKHNlbGYud2luZG93aW5nLCBUcnVlKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGssIHZzID0gZWxlbWVudAogICAgcmV0dXJuIHNlbGYuZHJpdmVyLnByb2Nlc3NfZW50aXJlX2tleShrLCB2cykKCgpjbGFzcyBQYXJ0aXRpb24oUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzKToKICAiIiJTcGxpdCBhIFBDb2xsZWN0aW9uIGludG8gc2V2ZXJhbCBwYXJ0aXRpb25zLgoKICBVc2VzIHRoZSBzcGVjaWZpZWQgUGFydGl0aW9uRm4gdG8gc2VwYXJhdGUgYW4gaW5wdXQgUENvbGxlY3Rpb24gaW50byB0aGUKICBzcGVjaWZpZWQgbnVtYmVyIG9mIHN1Yi1QQ29sbGVjdGlvbnMuCgogIFdoZW4gYXBwbHkoKWQsIGEgUGFydGl0aW9uKCkgUFRyYW5zZm9ybSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgoKICBBcmdzOgogICAgcGFydGl0aW9uZm46IGEgUGFydGl0aW9uRm4sIG9yIGEgY2FsbGFibGUgd2l0aCB0aGUgc2lnbmF0dXJlIGRlc2NyaWJlZCBpbgogICAgICBDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25Gbi4KICAgIG46IG51bWJlciBvZiBvdXRwdXQgcGFydGl0aW9ucy4KCiAgVGhlIHJlc3VsdCBvZiB0aGlzIFBUcmFuc2Zvcm0gaXMgYSBzaW1wbGUgbGlzdCBvZiB0aGUgb3V0cHV0IFBDb2xsZWN0aW9ucwogIHJlcHJlc2VudGluZyBlYWNoIG9mIG4gcGFydGl0aW9ucywgaW4gb3JkZXIuCiAgIiIiCgogIGNsYXNzIEFwcGx5UGFydGl0aW9uRm5GbihEb0ZuKToKICAgICIiIkEgRG9GbiB0aGF0IGFwcGxpZXMgYSBQYXJ0aXRpb25Gbi4iIiIKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBwYXJ0aXRpb25mbiwgbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgcGFydGl0aW9uID0gcGFydGl0aW9uZm4ucGFydGl0aW9uX2ZvcihlbGVtZW50LCBuLCAqYXJncywgKiprd2FyZ3MpCiAgICAgIGlmIG5vdCAwIDw9IHBhcnRpdGlvbiA8IG46CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1BhcnRpdGlvbkZuIHNwZWNpZmllZCBvdXQtb2YtYm91bmRzIHBhcnRpdGlvbiBpbmRleDogJwogICAgICAgICAgICAnJWQgbm90IGluIFswLCAlZCknICUgKHBhcnRpdGlvbiwgbikpCiAgICAgICMgRWFjaCBpbnB1dCBpcyBkaXJlY3RlZCBpbnRvIHRoZSBvdXRwdXQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKICAgICAgIyBzZWxlY3RlZCBwYXJ0aXRpb24uCiAgICAgIHlpZWxkIHB2YWx1ZS5UYWdnZWRPdXRwdXQoc3RyKHBhcnRpdGlvbiksIGVsZW1lbnQpCgogIGRlZiBtYWtlX2ZuKHNlbGYsIGZuKToKICAgIHJldHVybiBmbiBpZiBpc2luc3RhbmNlKGZuLCBQYXJ0aXRpb25GbikgZWxzZSBDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25GbihmbikKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBuID0gaW50KHNlbGYuYXJnc1swXSkKICAgIHJldHVybiBwY29sbCB8IFBhckRvKAogICAgICAgIHNlbGYuQXBwbHlQYXJ0aXRpb25GbkZuKCksIHNlbGYuZm4sICpzZWxmLmFyZ3MsCiAgICAgICAgKipzZWxmLmt3YXJncykud2l0aF9vdXRwdXRzKCpbc3RyKHQpIGZvciB0IGluIHJhbmdlKG4pXSkKCgpjbGFzcyBXaW5kb3dpbmcob2JqZWN0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2ZuLCB0cmlnZ2VyZm49Tm9uZSwgYWNjdW11bGF0aW9uX21vZGU9Tm9uZSwKICAgICAgICAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyPU5vbmUpOgogICAgZ2xvYmFsIEFjY3VtdWxhdGlvbk1vZGUsIERlZmF1bHRUcmlnZ2VyICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtdmFyaWFibGUtbm90LWFzc2lnbmVkCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEFjY3VtdWxhdGlvbk1vZGUsIERlZmF1bHRUcmlnZ2VyCiAgICAjIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBpZiB0cmlnZ2VyZm4gaXMgTm9uZToKICAgICAgdHJpZ2dlcmZuID0gRGVmYXVsdFRyaWdnZXIoKQogICAgaWYgYWNjdW11bGF0aW9uX21vZGUgaXMgTm9uZToKICAgICAgaWYgdHJpZ2dlcmZuID09IERlZmF1bHRUcmlnZ2VyKCk6CiAgICAgICAgYWNjdW11bGF0aW9uX21vZGUgPSBBY2N1bXVsYXRpb25Nb2RlLkRJU0NBUkRJTkcKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnYWNjdW11bGF0aW9uX21vZGUgbXVzdCBiZSBwcm92aWRlZCBmb3Igbm9uLXRyaXZpYWwgdHJpZ2dlcnMnKQogICAgaWYgbm90IHdpbmRvd2ZuLmdldF93aW5kb3dfY29kZXIoKS5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnd2luZG93IGZuICglcykgZG9lcyBub3QgaGF2ZSBhIGRldGVybWFuaXN0aWMgY29kZXIgKCVzKScgJSAoCiAgICAgICAgICAgICAgd2luZG93Zm4sIHdpbmRvd2ZuLmdldF93aW5kb3dfY29kZXIoKSkpCiAgICBzZWxmLndpbmRvd2ZuID0gd2luZG93Zm4KICAgIHNlbGYudHJpZ2dlcmZuID0gdHJpZ2dlcmZuCiAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlID0gYWNjdW11bGF0aW9uX21vZGUKICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID0gKAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lciBvciBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRU9XKQogICAgc2VsZi5faXNfZGVmYXVsdCA9ICgKICAgICAgICBzZWxmLndpbmRvd2ZuID09IEdsb2JhbFdpbmRvd3MoKSBhbmQKICAgICAgICBzZWxmLnRyaWdnZXJmbiA9PSBEZWZhdWx0VHJpZ2dlcigpIGFuZAogICAgICAgIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPT0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HIGFuZAogICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FT1cpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAiV2luZG93aW5nKCVzLCAlcywgJXMsICVzKSIgJSAoc2VsZi53aW5kb3dmbiwgc2VsZi50cmlnZ2VyZm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNjdW11bGF0aW9uX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcik6CiAgICAgIGlmIHNlbGYuX2lzX2RlZmF1bHQgYW5kIG90aGVyLl9pc19kZWZhdWx0OgogICAgICAgIHJldHVybiBUcnVlCiAgICAgIHJldHVybiAoCiAgICAgICAgICBzZWxmLndpbmRvd2ZuID09IG90aGVyLndpbmRvd2ZuCiAgICAgICAgICBhbmQgc2VsZi50cmlnZ2VyZm4gPT0gb3RoZXIudHJpZ2dlcmZuCiAgICAgICAgICBhbmQgc2VsZi5hY2N1bXVsYXRpb25fbW9kZSA9PSBvdGhlci5hY2N1bXVsYXRpb25fbW9kZQogICAgICAgICAgYW5kIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID09IG90aGVyLnRpbWVzdGFtcF9jb21iaW5lcikKICAgIHJldHVybiBGYWxzZQoKICBkZWYgaXNfZGVmYXVsdChzZWxmKToKICAgIHJldHVybiBzZWxmLl9pc19kZWZhdWx0CgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuV2luZG93aW5nU3RyYXRlZ3koCiAgICAgICAgd2luZG93X2ZuPXNlbGYud2luZG93Zm4udG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBQcm9oaWJpdCBpbXBsaWNpdCBtdWx0aS1sZXZlbCBtZXJnaW5nLgogICAgICAgIG1lcmdlX3N0YXR1cz0oYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXJnZVN0YXR1cy5ORUVEU19NRVJHRQogICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53aW5kb3dmbi5pc19tZXJnaW5nKCkKICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXJnZVN0YXR1cy5OT05fTUVSR0lORyksCiAgICAgICAgd2luZG93X2NvZGVyX2lkPWNvbnRleHQuY29kZXJzLmdldF9pZCgKICAgICAgICAgICAgc2VsZi53aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkpLAogICAgICAgIHRyaWdnZXI9c2VsZi50cmlnZ2VyZm4udG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT1zZWxmLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIG91dHB1dF90aW1lPXNlbGYudGltZXN0YW1wX2NvbWJpbmVyLAogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFN1cHBvcnQgRU1JVF9JRl9OT05FTVBUWQogICAgICAgIGNsb3NpbmdfYmVoYXZpb3I9YmVhbV9ydW5uZXJfYXBpX3BiMi5DbG9zaW5nQmVoYXZpb3IuRU1JVF9BTFdBWVMsCiAgICAgICAgT25UaW1lQmVoYXZpb3I9YmVhbV9ydW5uZXJfYXBpX3BiMi5PblRpbWVCZWhhdmlvci5GSVJFX0FMV0FZUywKICAgICAgICBhbGxvd2VkX2xhdGVuZXNzPTApCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgVHJpZ2dlckZuCiAgICByZXR1cm4gV2luZG93aW5nKAogICAgICAgIHdpbmRvd2ZuPVdpbmRvd0ZuLmZyb21fcnVubmVyX2FwaShwcm90by53aW5kb3dfZm4sIGNvbnRleHQpLAogICAgICAgIHRyaWdnZXJmbj1UcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHByb3RvLnRyaWdnZXIsIGNvbnRleHQpLAogICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlPXByb3RvLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lcj1wcm90by5vdXRwdXRfdGltZSkKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVCkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhUKQpjbGFzcyBXaW5kb3dJbnRvKFBhckRvKToKICAiIiJBIHdpbmRvdyB0cmFuc2Zvcm0gYXNzaWduaW5nIHdpbmRvd3MgdG8gZWFjaCBlbGVtZW50IG9mIGEgUENvbGxlY3Rpb24uCgogIFRyYW5zZm9ybXMgYW4gaW5wdXQgUENvbGxlY3Rpb24gYnkgYXBwbHlpbmcgYSB3aW5kb3dpbmcgZnVuY3Rpb24gdG8gZWFjaAogIGVsZW1lbnQuICBFYWNoIHRyYW5zZm9ybWVkIGVsZW1lbnQgaW4gdGhlIHJlc3VsdCB3aWxsIGJlIGEgV2luZG93ZWRWYWx1ZQogIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBpbnB1dCB2YWx1ZSBhbmQgdGltZXN0YW1wLCB3aXRoIGl0cyBuZXcgc2V0IG9mIHdpbmRvd3MKICBkZXRlcm1pbmVkIGJ5IHRoZSB3aW5kb3dpbmcgZnVuY3Rpb24uCiAgIiIiCgogIGNsYXNzIFdpbmRvd0ludG9GbihEb0ZuKToKICAgICIiIkEgRG9GbiB0aGF0IGFwcGxpZXMgYSBXaW5kb3dJbnRvIG9wZXJhdGlvbi4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93aW5nKToKICAgICAgc2VsZi53aW5kb3dpbmcgPSB3aW5kb3dpbmcKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB0aW1lc3RhbXA9RG9Gbi5UaW1lc3RhbXBQYXJhbSwKICAgICAgICAgICAgICAgIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtKToKICAgICAgY29udGV4dCA9IFdpbmRvd0ZuLkFzc2lnbkNvbnRleHQodGltZXN0YW1wLCBlbGVtZW50PWVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdz13aW5kb3cpCiAgICAgIG5ld193aW5kb3dzID0gc2VsZi53aW5kb3dpbmcud2luZG93Zm4uYXNzaWduKGNvbnRleHQpCiAgICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoZWxlbWVudCwgY29udGV4dC50aW1lc3RhbXAsIG5ld193aW5kb3dzKQoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93Zm4sICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemVzIGEgV2luZG93SW50byB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgd2luZG93Zm46IEZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHdpbmRvd2luZwogICAgIiIiCiAgICB0cmlnZ2VyZm4gPSBrd2FyZ3MucG9wKCd0cmlnZ2VyJywgTm9uZSkKICAgIGFjY3VtdWxhdGlvbl9tb2RlID0ga3dhcmdzLnBvcCgnYWNjdW11bGF0aW9uX21vZGUnLCBOb25lKQogICAgdGltZXN0YW1wX2NvbWJpbmVyID0ga3dhcmdzLnBvcCgndGltZXN0YW1wX2NvbWJpbmVyJywgTm9uZSkKICAgIHNlbGYud2luZG93aW5nID0gV2luZG93aW5nKHdpbmRvd2ZuLCB0cmlnZ2VyZm4sIGFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyKQogICAgc3VwZXIoV2luZG93SW50bywgc2VsZikuX19pbml0X18oc2VsZi5XaW5kb3dJbnRvRm4oc2VsZi53aW5kb3dpbmcpKQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCB1bnVzZWRfaW5wdXRzKToKICAgIHJldHVybiBzZWxmLndpbmRvd2luZwoKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gaW5wdXRfdHlwZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGlucHV0X3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUKCiAgICBpZiBpbnB1dF90eXBlIGlzIG5vdCBOb25lOgogICAgICBvdXRwdXRfdHlwZSA9IGlucHV0X3R5cGUKICAgICAgc2VsZi53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGUpCiAgICAgIHNlbGYud2l0aF9vdXRwdXRfdHlwZXMob3V0cHV0X3R5cGUpCiAgICByZXR1cm4gc3VwZXIoV2luZG93SW50bywgc2VsZikuZXhwYW5kKHBjb2xsKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKAogICAgICAgIHVybnMuV0lORE9XX0lOVE9fVFJBTlNGT1JNLAogICAgICAgIHNlbGYud2luZG93aW5nLnRvX3J1bm5lcl9hcGkoY29udGV4dCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwcm90bywgY29udGV4dCk6CiAgICB3aW5kb3dpbmcgPSBXaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KQogICAgcmV0dXJuIFdpbmRvd0ludG8oCiAgICAgICAgd2luZG93aW5nLndpbmRvd2ZuLAogICAgICAgIHRyaWdnZXI9d2luZG93aW5nLnRyaWdnZXJmbiwKICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT13aW5kb3dpbmcuYWNjdW11bGF0aW9uX21vZGUsCiAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyPXdpbmRvd2luZy50aW1lc3RhbXBfY29tYmluZXIpCgoKUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oCiAgICB1cm5zLldJTkRPV19JTlRPX1RSQU5TRk9STSwKICAgICMgVE9ETyhyb2JlcnR3Yik6IFVwZGF0ZSBXaW5kb3dJbnRvUGF5bG9hZCB0byBpbmNsdWRlIHRoZSBmdWxsIHN0cmF0ZWd5LgogICAgIyAoUmlnaHQgbm93IG9ubHkgV2luZG93Rm4gaXMgdXNlZCwgYnV0IHdlIG5lZWQgdGhpcyB0byByZWNvbnN0aXR1dGUgdGhlCiAgICAjIFdpbmRvd0ludG8gdHJhbnNmb3JtLCBhbmQgaW4gdGhlIGZ1dHVyZSB3aWxsIG5lZWQgaXQgYXQgcnVudGltZSB0bwogICAgIyBzdXBwb3J0IG1ldGEtZGF0YSBkcml2ZW4gdHJpZ2dlcnMuKQogICAgIyBUT0RPKHJvYmVydHdiKTogVXNlIGEgcmVmZXJlbmNlIHJhdGhlciB0aGFuIGVtYmVkZGluZz8KICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuV2luZG93aW5nU3RyYXRlZ3ksCiAgICBXaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIpCgoKIyBQeXRob24ncyBwaWNrbGluZyBpcyBicm9rZW4gZm9yIG5lc3RlZCBjbGFzc2VzLgpXaW5kb3dJbnRvRm4gPSBXaW5kb3dJbnRvLldpbmRvd0ludG9GbgoKCmNsYXNzIEZsYXR0ZW4oUFRyYW5zZm9ybSk6CiAgIiIiTWVyZ2VzIHNldmVyYWwgUENvbGxlY3Rpb25zIGludG8gYSBzaW5nbGUgUENvbGxlY3Rpb24uCgogIENvcGllcyBhbGwgZWxlbWVudHMgaW4gMCBvciBtb3JlIFBDb2xsZWN0aW9ucyBpbnRvIGEgc2luZ2xlIG91dHB1dAogIFBDb2xsZWN0aW9uLiBJZiB0aGVyZSBhcmUgbm8gaW5wdXQgUENvbGxlY3Rpb25zLCB0aGUgcmVzdWx0aW5nIFBDb2xsZWN0aW9uCiAgd2lsbCBiZSBlbXB0eSAoYnV0IHNlZSBhbHNvIGt3YXJncyBiZWxvdykuCgogIEFyZ3M6CiAgICAqKmt3YXJnczogQWNjZXB0cyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudCAicGlwZWxpbmUiLCB3aGljaCBzcGVjaWZpZXMgdGhlCiAgICAgIHBpcGVsaW5lIHRoYXQgIm93bnMiIHRoaXMgUFRyYW5zZm9ybS4gT3JkaW5hcmlseSBGbGF0dGVuIGNhbiBvYnRhaW4gdGhpcwogICAgICBpbmZvcm1hdGlvbiBmcm9tIG9uZSBvZiB0aGUgaW5wdXQgUENvbGxlY3Rpb25zLCBidXQgaWYgdGhlcmUgYXJlIG5vbmUgKG9yCiAgICAgIGlmIHRoZXJlJ3MgYSBjaGFuY2UgdGhlcmUgbWF5IGJlIG5vbmUpLCB0aGlzIGFyZ3VtZW50IGlzIHRoZSBvbmx5IHdheSB0bwogICAgICBwcm92aWRlIHBpcGVsaW5lIGluZm9ybWF0aW9uIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBtYW5kYXRvcnkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICBzdXBlcihGbGF0dGVuLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnBpcGVsaW5lID0ga3dhcmdzLnBvcCgncGlwZWxpbmUnLCBOb25lKQogICAgaWYga3dhcmdzOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnRzOiAlcycgJSBrd2FyZ3Mua2V5cygpKQoKICBkZWYgX2V4dHJhY3RfaW5wdXRfcHZhbHVlcyhzZWxmLCBwdmFsdWVpc2gpOgogICAgdHJ5OgogICAgICBwdmFsdWVpc2ggPSB0dXBsZShwdmFsdWVpc2gpCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnB1dCB0byBGbGF0dGVuIG11c3QgYmUgYW4gaXRlcmFibGUuJykKICAgIHJldHVybiBwdmFsdWVpc2gsIHB2YWx1ZWlzaAoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xscyk6CiAgICBmb3IgcGNvbGwgaW4gcGNvbGxzOgogICAgICBzZWxmLl9jaGVja19wY29sbGVjdGlvbihwY29sbCkKICAgIHJlc3VsdCA9IHB2YWx1ZS5QQ29sbGVjdGlvbihzZWxmLnBpcGVsaW5lKQogICAgcmVzdWx0LmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5VbmlvblsKICAgICAgICB0dXBsZShwY29sbC5lbGVtZW50X3R5cGUgZm9yIHBjb2xsIGluIHBjb2xscyldCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIGlucHV0cyk6CiAgICBpZiBub3QgaW5wdXRzOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBSZXR1cm4gc29tZXRoaW5nIGNvbXBhdGlibGUgd2l0aCBldmVyeSB3aW5kb3dpbmc/CiAgICAgIHJldHVybiBXaW5kb3dpbmcoR2xvYmFsV2luZG93cygpKQogICAgcmV0dXJuIHN1cGVyKEZsYXR0ZW4sIHNlbGYpLmdldF93aW5kb3dpbmcoaW5wdXRzKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gdXJucy5GTEFUVEVOX1RSQU5TRk9STSwgTm9uZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIEZsYXR0ZW4oKQoKClBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgdXJucy5GTEFUVEVOX1RSQU5TRk9STSwgTm9uZSwgRmxhdHRlbi5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKQoKCmNsYXNzIENyZWF0ZShQVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IGNyZWF0ZXMgYSBQQ29sbGVjdGlvbiBmcm9tIGFuIGl0ZXJhYmxlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDcmVhdGUgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHZhbHVlOiBBbiBvYmplY3Qgb2YgdmFsdWVzIGZvciB0aGUgUENvbGxlY3Rpb24KICAgICIiIgogICAgc3VwZXIoQ3JlYXRlLCBzZWxmKS5fX2luaXRfXygpCiAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdQVHJhbnNmb3JtIENyZWF0ZTogUmVmdXNpbmcgdG8gdHJlYXQgc3RyaW5nIGFzICcKICAgICAgICAgICAgICAgICAgICAgICdhbiBpdGVyYWJsZS4gKHN0cmluZz0lciknICUgdmFsdWUpCiAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgogICAgICB2YWx1ZSA9IHZhbHVlLml0ZW1zKCkKICAgIHNlbGYudmFsdWUgPSB0dXBsZSh2YWx1ZSkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIHVudXNlZF9pbnB1dF90eXBlKToKICAgIGlmIG5vdCBzZWxmLnZhbHVlOgogICAgICByZXR1cm4gQW55CiAgICByZXR1cm4gVW5pb25bW3RyaXZpYWxfaW5mZXJlbmNlLmluc3RhbmNlX3RvX3R5cGUodikgZm9yIHYgaW4gc2VsZi52YWx1ZV1dCgogIGRlZiBnZXRfb3V0cHV0X3R5cGUoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuZ2V0X3R5cGVfaGludHMoKS5zaW1wbGVfb3V0cHV0X3R5cGUoc2VsZi5sYWJlbCkgb3IKICAgICAgICAgICAgc2VsZi5pbmZlcl9vdXRwdXRfdHlwZShOb25lKSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYmVnaW4sIHB2YWx1ZS5QQmVnaW4pCiAgICBzZWxmLnBpcGVsaW5lID0gcGJlZ2luLnBpcGVsaW5lCiAgICBjb2RlciA9IHR5cGVjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHNlbGYuZ2V0X291dHB1dF90eXBlKCkpCiAgICBzb3VyY2UgPSBzZWxmLl9jcmVhdGVfc291cmNlX2Zyb21faXRlcmFibGUoc2VsZi52YWx1ZSwgY29kZXIpCiAgICByZXR1cm4gKHBiZWdpbi5waXBlbGluZQogICAgICAgICAgICB8IGlvYmFzZS5SZWFkKHNvdXJjZSkud2l0aF9vdXRwdXRfdHlwZXMoc2VsZi5nZXRfb3V0cHV0X3R5cGUoKSkpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIHVudXNlZF9pbnB1dHMpOgogICAgcmV0dXJuIFdpbmRvd2luZyhHbG9iYWxXaW5kb3dzKCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2NyZWF0ZV9zb3VyY2VfZnJvbV9pdGVyYWJsZSh2YWx1ZXMsIGNvZGVyKToKICAgIHJldHVybiBDcmVhdGUuX2NyZWF0ZV9zb3VyY2UobWFwKGNvZGVyLmVuY29kZSwgdmFsdWVzKSwgY29kZXIpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2NyZWF0ZV9zb3VyY2Uoc2VyaWFsaXplZF92YWx1ZXMsIGNvZGVyKToKICAgIGZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQoKICAgIGNsYXNzIF9DcmVhdGVTb3VyY2UoaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VyaWFsaXplZF92YWx1ZXMsIGNvZGVyKToKICAgICAgICBzZWxmLl9jb2RlciA9IGNvZGVyCiAgICAgICAgc2VsZi5fc2VyaWFsaXplZF92YWx1ZXMgPSBbXQogICAgICAgIHNlbGYuX3RvdGFsX3NpemUgPSAwCiAgICAgICAgc2VsZi5fc2VyaWFsaXplZF92YWx1ZXMgPSBzZXJpYWxpemVkX3ZhbHVlcwogICAgICAgIHNlbGYuX3RvdGFsX3NpemUgPSBzdW0obWFwKGxlbiwgc2VsZi5fc2VyaWFsaXplZF92YWx1ZXMpKQoKICAgICAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICAgICAgc3RhcnRfcG9zaXRpb24gPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgICAgICBjdXJyZW50X3Bvc2l0aW9uID0gc3RhcnRfcG9zaXRpb24KCiAgICAgICAgZGVmIHNwbGl0X3BvaW50c191bmNsYWltZWQoc3RvcF9wb3NpdGlvbik6CiAgICAgICAgICBpZiBjdXJyZW50X3Bvc2l0aW9uID49IHN0b3BfcG9zaXRpb246CiAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICByZXR1cm4gc3RvcF9wb3NpdGlvbiAtIGN1cnJlbnRfcG9zaXRpb24gLSAxCgogICAgICAgIHJhbmdlX3RyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soCiAgICAgICAgICAgIHNwbGl0X3BvaW50c191bmNsYWltZWQpCiAgICAgICAgZWxlbWVudF9pdGVyID0gaXRlcihzZWxmLl9zZXJpYWxpemVkX3ZhbHVlc1tzdGFydF9wb3NpdGlvbjpdKQogICAgICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0X3Bvc2l0aW9uLCByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKSk6CiAgICAgICAgICBpZiBub3QgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0oaSk6CiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgY3VycmVudF9wb3NpdGlvbiA9IGkKICAgICAgICAgIHlpZWxkIHNlbGYuX2NvZGVyLmRlY29kZShuZXh0KGVsZW1lbnRfaXRlcikpCgogICAgICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwKICAgICAgICAgICAgICAgIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICAgICAgZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCgogICAgICAgIGlmIGxlbihzZWxmLl9zZXJpYWxpemVkX3ZhbHVlcykgPCAyOgogICAgICAgICAgeWllbGQgaW9iYXNlLlNvdXJjZUJ1bmRsZSgKICAgICAgICAgICAgICB3ZWlnaHQ9MCwgc291cmNlPXNlbGYsIHN0YXJ0X3Bvc2l0aW9uPTAsCiAgICAgICAgICAgICAgc3RvcF9wb3NpdGlvbj1sZW4oc2VsZi5fc2VyaWFsaXplZF92YWx1ZXMpKQogICAgICAgIGVsc2U6CiAgICAgICAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICAgICAgICBzdGFydF9wb3NpdGlvbiA9IDAKICAgICAgICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgICAgICAgc3RvcF9wb3NpdGlvbiA9IGxlbihzZWxmLl9zZXJpYWxpemVkX3ZhbHVlcykKCiAgICAgICAgICBhdmdfc2l6ZV9wZXJfdmFsdWUgPSBzZWxmLl90b3RhbF9zaXplIC8gbGVuKHNlbGYuX3NlcmlhbGl6ZWRfdmFsdWVzKQogICAgICAgICAgbnVtX3ZhbHVlc19wZXJfc3BsaXQgPSBtYXgoCiAgICAgICAgICAgICAgaW50KGRlc2lyZWRfYnVuZGxlX3NpemUgLyBhdmdfc2l6ZV9wZXJfdmFsdWUpLCAxKQoKICAgICAgICAgIHN0YXJ0ID0gc3RhcnRfcG9zaXRpb24KICAgICAgICAgIHdoaWxlIHN0YXJ0IDwgc3RvcF9wb3NpdGlvbjoKICAgICAgICAgICAgZW5kID0gbWluKHN0YXJ0ICsgbnVtX3ZhbHVlc19wZXJfc3BsaXQsIHN0b3BfcG9zaXRpb24pCiAgICAgICAgICAgIHJlbWFpbmluZyA9IHN0b3BfcG9zaXRpb24gLSBlbmQKICAgICAgICAgICAgIyBBdm9pZCBoYXZpbmcgYSB0b28gc21hbGwgYnVuZGxlIGF0IHRoZSBlbmQuCiAgICAgICAgICAgIGlmIHJlbWFpbmluZyA8IChudW1fdmFsdWVzX3Blcl9zcGxpdCAvIDQpOgogICAgICAgICAgICAgIGVuZCA9IHN0b3BfcG9zaXRpb24KCiAgICAgICAgICAgIHN1Yl9zb3VyY2UgPSBDcmVhdGUuX2NyZWF0ZV9zb3VyY2UoCiAgICAgICAgICAgICAgICBzZWxmLl9zZXJpYWxpemVkX3ZhbHVlc1tzdGFydDplbmRdLCBzZWxmLl9jb2RlcikKCiAgICAgICAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUod2VpZ2h0PShlbmQgLSBzdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXN1Yl9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9zaXRpb249MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3Bvc2l0aW9uPShlbmQgLSBzdGFydCkpCgogICAgICAgICAgICBzdGFydCA9IGVuZAoKICAgICAgZGVmIGdldF9yYW5nZV90cmFja2VyKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgICAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICAgICAgc3RhcnRfcG9zaXRpb24gPSAwCiAgICAgICAgaWYgc3RvcF9wb3NpdGlvbiBpcyBOb25lOgogICAgICAgICAgc3RvcF9wb3NpdGlvbiA9IGxlbihzZWxmLl9zZXJpYWxpemVkX3ZhbHVlcykKCiAgICAgICAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgaW8KICAgICAgICByZXR1cm4gaW8uT2Zmc2V0UmFuZ2VUcmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQoKICAgICAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX3RvdGFsX3NpemUKCiAgICByZXR1cm4gX0NyZWF0ZVNvdXJjZShzZXJpYWxpemVkX3ZhbHVlcywgY29kZXIpCn1yRgIAAChYFgAAAENvbWJpbmVHbG9iYWxseS5fY2xvbmVYAwAAAGRlZk1TBE1XBIdYJwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZVgDAAAAZGVmTaECTbICh1gUAAAAQ29tYmluZVZhbHVlcy5leHBhbmRYAwAAAGRlZk3RBE3fBIdYGAAAAENvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZVgDAAAAZGVmTTQCTT0Ch1ghAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLl9fcmVwcl9fWAMAAABkZWZNawJNbQKHWAcAAABGbGF0TWFwWAMAAABkZWZNiwNNqwOHWCkAAABDcmVhdGUuX2NyZWF0ZV9zb3VyY2UuX0NyZWF0ZVNvdXJjZS5zcGxpdFgDAAAAZGVmTfsGTR4Hh1gbAAAAQ29tYmluZVBlcktleS5kZWZhdWx0X2xhYmVsWAMAAABkZWZNrgRNsASHWCMAAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTaoFTa8Fh1gnAAAAQ29tYmluZVBlcktleS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNxARNyQSHWBwAAABQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuWAUAAABjbGFzc03GBU3SBYdYHQAAAENvbWJpbmVHbG9iYWxseS5kZWZhdWx0X2xhYmVsWAMAAABkZWZNUARNUgSHWCEAAABDb21iaW5lR2xvYmFsbHkuYXNfc2luZ2xldG9uX3ZpZXdYAwAAAGRlZk1eBE1gBIdYBQAAAFBhckRvWAUAAABjbGFzc03pAk17A4dYFgAAAENvbWJpbmVHbG9iYWxseS5leHBhbmRYAwAAAGRlZk1hBE2PBIdYEgAAAFBhckRvLmRpc3BsYXlfZGF0YVgDAAAAZGVmTSUDTSkDh1gZAAAAQ29tYmluZVZhbHVlc0RvRm4ucHJvY2Vzc1gDAAAAZGVmTfkETRYFh1ghAAAAX0dyb3VwQnlLZXlPbmx5LmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNcwVNdgWHWCQAAABDb21iaW5lVmFsdWVzRG9Gbi5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZk0XBU0kBYdYDwAAAENvbWJpbmVHbG9iYWxseVgFAAAAY2xhc3NNFgRNjwSHWBwAAABQcm9jZXNzQ29udGludWF0aW9uLl9faW5pdF9fWAMAAABkZWZLmEuhh1gUAAAAUGFyRG8uX3BhcmRvX2ZuX2RhdGFYAwAAAGRlZk1QA01UA4dYGAAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGblgFAAAAY2xhc3NNTAJNsgKHWB8AAABDb21iaW5lRm4uZ2V0X2FjY3VtdWxhdG9yX2NvZGVyWAMAAABkZWZNRgJNSAKHWBwAAABDYWxsYWJsZVdyYXBwZXJEb0ZuLl9fcmVwcl9fWAMAAABkZWZNswFNtQGHWAkAAABDb21iaW5lRm5YBQAAAGNsYXNzTcsBTUoCh1glAAAAUmVzdHJpY3Rpb25Qcm92aWRlci5yZXN0cmljdGlvbl9jb2RlclgDAAAAZGVmS/pNBAGHWA8AAABDb21iaW5lRm4uYXBwbHlYAwAAAGRlZk0mAk0zAodYFwAAAFBhckRvLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNGQNNHAOHWDEAAABDcmVhdGUuX2NyZWF0ZV9zb3VyY2UuX0NyZWF0ZVNvdXJjZS5lc3RpbWF0ZV9zaXplWAMAAABkZWZNKAdNKgeHWCkAAABDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0cy51bmlvblgDAAAAZGVmTXwCTYACh1gSAAAAV2luZG93aW5nLl9faW5pdF9fWAMAAABkZWZN3wVN+wWHWAkAAABQYXJ0aXRpb25YBQAAAGNsYXNzTbUFTdsFh1grAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTYICTYUCh1gTAAAAV2luZG93SW50by5fX2luaXRfX1gDAAAAZGVmTUMGTU8Gh1glAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmRpc3BsYXlfZGF0YVgDAAAAZGVmTWgCTWoCh1gDAAAATWFwWAMAAABkZWZNrQNN3AOHWCgAAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNpAVNqQWHWBwAAABXaW5kb3dJbnRvLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNUwZNVQaHWCQAAABHcm91cEJ5S2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk1qBU1tBYdYEwAAAFJlc3RyaWN0aW9uUHJvdmlkZXJYBQAAAGNsYXNzS69NBAGHWBcAAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93c1gFAAAAY2xhc3NNMwVNQgWHWBcAAABXaW5kb3dpbmcudG9fcnVubmVyX2FwaVgDAAAAZGVmTQ8GTR8Gh1ghAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLl9faW5pdF9fWAMAAABkZWZNVgJNZwKHWB0AAABQYXJEby50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTVUDTWgDh1gSAAAAX011bHRpUGFyRG8uZXhwYW5kWAMAAABkZWZNhQNNiQOHWCUAAABDb21iaW5lVmFsdWVzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZN4ARN6QSHWBYAAABfR3JvdXBCeUtleU9ubHkuZXhwYW5kWAMAAABkZWZNdwVNegWHWA0AAABDb21iaW5lUGVyS2V5WAUAAABjbGFzc02RBE3JBIdYGgAAAFByb2Nlc3NDb250aW51YXRpb24ucmVzdW1lWAMAAABkZWZLokuth1gfAAAAV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc1gDAAAAZGVmTTwGTUIGh1gpAAAAX0dyb3VwQnlLZXlPbmx5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk1+BU2BBYdYIgAAAEdyb3VwQnlLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk1nBU1pBYdYEwAAAENhbGxhYmxlV3JhcHBlckRvRm5YBQAAAGNsYXNzTYoBTckBh1gnAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNhgJNiAKHWBQAAABDb21iaW5lRm4uYWRkX2lucHV0c1gDAAAAZGVmTf8BTQ8Ch1goAAAAQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4ucGFydGl0aW9uX2ZvclgDAAAAZGVmTeUCTecCh1gWAAAARG9Gbi5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTVoBTV8Bh1gRAAAAQ29tYmluZVZhbHVlc0RvRm5YBQAAAGNsYXNzTfEETSQFh1gUAAAAQ3JlYXRlLmdldF93aW5kb3dpbmdYAwAAAGRlZk3WBk3YBodYGQAAAFJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXRYAwAAAGRlZkvtS/mHWCAAAABXaW5kb3dJbnRvLldpbmRvd0ludG9Gbi5fX2luaXRfX1gDAAAAZGVmTTkGTTsGh1gnAAAAX0dyb3VwQnlLZXlPbmx5LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNewVNfQWHWAcAAABGbGF0dGVuWAUAAABjbGFzc019Bk2tBodYCwAAAFBhcnRpdGlvbkZuWAUAAABjbGFzc020Ak3LAodYIgAAAFJlc3RyaWN0aW9uUHJvdmlkZXIuY3JlYXRlX3RyYWNrZXJYAwAAAGRlZkvdS+iHWBEAAABEb0ZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTUcBTU8Bh1gkAAAAUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5Gbi5wcm9jZXNzWAMAAABkZWZNyQVN0gWHWB8AAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5wcm9jZXNzWAMAAABkZWZNNQVNPgWHWBQAAABDb21iaW5lUGVyS2V5LmV4cGFuZFgDAAAAZGVmTbQETbkEh1gMAAAAUGFyRG8uZXhwYW5kWAMAAABkZWZNKgNNLAOHWCEAAABGbGF0dGVuLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2qBk2tBodYFwAAAFdpbmRvd0ludG8uV2luZG93SW50b0ZuWAUAAABjbGFzc002Bk1CBodYCwAAAF9NdWx0aVBhckRvWAUAAABjbGFzc019A02JA4dYDgAAAEZsYXR0ZW4uZXhwYW5kWAMAAABkZWZNmQZNoAaHWDUAAABDcmVhdGUuX2NyZWF0ZV9zb3VyY2UuX0NyZWF0ZVNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmTR8HTScHh1gOAAAAUGFyRG8uX19pbml0X19YAwAAAGRlZk0JA00VA4dYLAAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZS5fQ3JlYXRlU291cmNlLl9faW5pdF9fWAMAAABkZWZN4gZN6AaHWB4AAABGbGF0dGVuLl9leHRyYWN0X2lucHV0X3B2YWx1ZXNYAwAAAGRlZk2SBk2YBodYHgAAAERvRm4uX3N0cmlwX291dHB1dF9hbm5vdGF0aW9uc1gDAAAAZGVmTWABTWgBh1gcAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5fX2luaXRfX1gDAAAAZGVmTZMBTagBh1gRAAAAUGFydGl0aW9uLm1ha2VfZm5YAwAAAGRlZk3TBU3VBYdYIwAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZS5fQ3JlYXRlU291cmNlWAUAAABjbGFzc03hBk0qB4dYDwAAAF9Hcm91cEJ5S2V5T25seVgFAAAAY2xhc3NNbwVNgQWHWBUAAABGbGF0dGVuLmdldF93aW5kb3dpbmdYAwAAAGRlZk2hBk2mBodYHAAAAENvbWJpbmVHbG9iYWxseS5leHBhbmQudHlwZWRYAwAAAGRlZk2HBE2MBIdYFQAAAF9mbl90YWtlc19zaWRlX2lucHV0c1gDAAAAZGVmTYABTYgBh1gYAAAARG9Gbi5fcHJvY2Vzc19hcmdzcGVjX2ZuWAMAAABkZWZNaQFNcQGHWBgAAABQYXJEby5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZk0WA00YA4dYEAAAAEZsYXR0ZW4uX19pbml0X19YAwAAAGRlZk2MBk2RBodYEgAAAF9Hcm91cEFsc29CeVdpbmRvd1gFAAAAY2xhc3NNgwVNmwWHWBIAAABEb0ZuLmRlZmF1bHRfbGFiZWxYAwAAAGRlZk0rAU0tAYdYGwAAAERvRm5Qcm9jZXNzQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmS25LgIdYEQAAAEdyb3VwQnlLZXkuZXhwYW5kWAMAAABkZWZNQwVNZgWHWB8AAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLl9faW5pdF9fWAMAAABkZWZNoAVNowWHWBIAAABEb0ZuLmZyb21fY2FsbGFibGVYAwAAAGRlZk0nAU0qAYdYFQAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZVgDAAAAZGVmTd0GTSwHh1gjAAAAQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4uX19pbml0X19YAwAAAGRlZk3VAk3kAodYJQAAAENhbGxhYmxlV3JhcHBlckRvRm4uaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk3DAU3GAYdYFQAAAENvbWJpbmVWYWx1ZXMubWFrZV9mblgDAAAAZGVmTc4ETdAEh1gSAAAAV2luZG93aW5nLl9fcmVwcl9fWAMAAABkZWZN/AVNAAaHWBAAAABXaW5kb3dpbmcuX19lcV9fWAMAAABkZWZNAQZNCwaHWBcAAABDb21iaW5lRm4uZGVmYXVsdF9sYWJlbFgDAAAAZGVmTeYBTegBh1gSAAAARG9Gbi5maW5pc2hfYnVuZGxlWAMAAABkZWZNUAFNVAGHWBkAAABXaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNIAZNKQaHWB4AAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLnByb2Nlc3NYAwAAAGRlZk2wBU2zBYdYPwAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZS5fQ3JlYXRlU291cmNlLnJlYWQuc3BsaXRfcG9pbnRzX3VuY2xhaW1lZFgDAAAAZGVmTe0GTfEGh1gWAAAAZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c1gDAAAAZGVmTQYBTREBh1gdAAAAQ29tYmluZUdsb2JhbGx5LndpdGhfZGVmYXVsdHNYAwAAAGRlZk1YBE1aBIdYEwAAAFByb2Nlc3NDb250aW51YXRpb25YBQAAAGNsYXNzS45LrYdYHwAAAFBhckRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk1pA017A4dYIAAAAENvbWJpbmVHbG9iYWxseS53aXRob3V0X2RlZmF1bHRzWAMAAABkZWZNWwRNXQSHWBsAAABEb0ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHNYAwAAAGRlZk1VAU1XAYdYDAAAAERvRm4ucHJvY2Vzc1gDAAAAZGVmTS4BTUYBh1ggAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk2pAU2yAYdYFwAAAENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlWAMAAABkZWZNPgJNQQKHWCQAAABXaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk1kBk1sBodYGAAAAENvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmTRsCTSUCh1grAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmRlZmF1bHRfdHlwZV9oaW50c1gDAAAAZGVmTYkCTaACh1ghAAAAQ29tYmluZVBlcktleS5fcHJvY2Vzc19hcmdzcGVjX2ZuWAMAAABkZWZNsQRNswSHWCkAAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTT8FTUIFh1gsAAAAX0dyb3VwQWxzb0J5V2luZG93LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2WBU2bBYdYCwAAAERvRm5Db250ZXh0WAUAAABjbGFzc0tUS1eHWCcAAABDYWxsYWJsZVdyYXBwZXJEb0ZuLl9wcm9jZXNzX2FyZ3NwZWNfZm5YAwAAAGRlZk3HAU3JAYdYGQAAAFBhcnRpdGlvbkZuLmRlZmF1bHRfbGFiZWxYAwAAAGRlZk27Ak29AodYFAAAAF9NdWx0aVBhckRvLl9faW5pdF9fWAMAAABkZWZNfwNNhAOHWBwAAABDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzWAMAAABkZWZNEAJNGgKHWA0AAABDcmVhdGUuZXhwYW5kWAMAAABkZWZNzQZN1QaHWCIAAABDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNcQJNdQKHWCoAAABfR3JvdXBBbHNvQnlXaW5kb3cudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2QBU2VBYdYGQAAAFBhcnRpdGlvbkZuLnBhcnRpdGlvbl9mb3JYAwAAAGRlZk2+Ak3LAodYKwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZk1uAk1wAodYGwAAAF9Hcm91cEFsc29CeVdpbmRvdy5fX2luaXRfX1gDAAAAZGVmTYcFTYsFh1gSAAAAUGFyRG8ud2l0aF9vdXRwdXRzWAMAAABkZWZNLQNNTwOHWCcAAABDb21iaW5lVmFsdWVzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk3qBE3vBIdYEAAAAFBhcnRpdGlvbi5leHBhbmRYAwAAAGRlZk3WBU3bBYdYEwAAAENvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk3yAU3+AYdYEAAAAF9jb21iaW5lX3BheWxvYWRYAwAAAGRlZk0PBE0UBIdYFgAAAF9Hcm91cEFsc29CeVdpbmRvd0RvRm5YBQAAAGNsYXNzTZ0FTbMFh1gRAAAAV2luZG93SW50by5leHBhbmRYAwAAAGRlZk1WBk1eBodYCgAAAEdyb3VwQnlLZXlYBQAAAGNsYXNzTSYFTW0Fh1gfAAAARmxhdHRlbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTacGTakGh1gaAAAAQ29tYmluZVZhbHVlc0RvRm4uX19pbml0X19YAwAAAGRlZk30BE34BIdYEgAAAERvRm5Qcm9jZXNzQ29udGV4dFgFAAAAY2xhc3NLWUuMh1gNAAAAQ29tYmluZVZhbHVlc1gFAAAAY2xhc3NNzARN7wSHWBoAAABDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25GblgFAAAAY2xhc3NNzQJN5wKHWCYAAABDYWxsYWJsZVdyYXBwZXJEb0ZuLmRlZmF1bHRfdHlwZV9oaW50c1gDAAAAZGVmTbYBTcIBh1gUAAAAV2luZG93aW5nLmlzX2RlZmF1bHRYAwAAAGRlZk0MBk0OBodYBgAAAEZpbHRlclgDAAAAZGVmTd4DTQ0Eh1gNAAAAUGFyRG8ubWFrZV9mblgDAAAAZGVmTR0DTSEDh1goAAAAQ3JlYXRlLl9jcmVhdGVfc291cmNlLl9DcmVhdGVTb3VyY2UucmVhZFgDAAAAZGVmTekGTfoGh1gYAAAAQ29tYmluZUdsb2JhbGx5Ll9faW5pdF9fWAMAAABkZWZNPwRNSQSHWCIAAABXaW5kb3dJbnRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNXwZNYwaHWB0AAABDb21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZVgDAAAAZGVmTUICTUUCh1gVAAAAQ29tYmluZVBlcktleS5tYWtlX2ZuWAMAAABkZWZNqgRNrQSHWCMAAABDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0c1gDAAAAZGVmTXYCTYECh1gjAAAAQ3JlYXRlLl9jcmVhdGVfc291cmNlX2Zyb21faXRlcmFibGVYAwAAAGRlZk3ZBk3cBodYFwAAAERvRm4uaXNfcHJvY2Vzc19ib3VuZGVkWAMAAABkZWZNcgFNfAGHWAYAAABDcmVhdGVYBQAAAGNsYXNzTbMGTSwHh1gZAAAAX0dyb3VwQWxzb0J5V2luZG93LmV4cGFuZFgDAAAAZGVmTYwFTY8Fh1gWAAAAQ3JlYXRlLmdldF9vdXRwdXRfdHlwZVgDAAAAZGVmTckGTcwGh1gZAAAAUGFyRG8uX3Byb2Nlc3NfYXJnc3BlY19mblgDAAAAZGVmTSIDTSQDh1gJAAAAV2luZG93aW5nWAUAAABjbGFzc03dBU0pBodYHAAAAENvbWJpbmVHbG9iYWxseS5kaXNwbGF5X2RhdGFYAwAAAGRlZk1KBE1PBIdYHgAAAERvRm5Qcm9jZXNzQ29udGV4dC5zZXRfZWxlbWVudFgDAAAAZGVmS4FLjIdYCgAAAFdpbmRvd0ludG9YBQAAAGNsYXNzTSsGTWwGh1gnAAAAUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9uWAMAAABkZWZL6Uvsh1gcAAAAQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTekBTfEBh1glAAAAQ29tYmluZVBlcktleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTboETcMEh1gYAAAAQ3JlYXRlLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNxAZNyAaHWAQAAABEb0ZuWAUAAABjbGFzc00TAU1+AYdYJgAAAENvbWJpbmVHbG9iYWxseS5leHBhbmQuYWRkX2lucHV0X3R5cGVzWAMAAABkZWZNYgRNZwSHWA8AAABDcmVhdGUuX19pbml0X19YAwAAAGRlZk22Bk3DBodYGgAAAENvbWJpbmVQZXJLZXkuZGlzcGxheV9kYXRhWAMAAABkZWZNpARNqQSHWBgAAABXaW5kb3dJbnRvLmdldF93aW5kb3dpbmdYAwAAAGRlZk1QBk1SBod1fXJHAgAAKFgUAAAAQ29tYmluZVZhbHVlcy5leHBhbmRYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZXJIAgAAWBgAAABDb21iaW5lRm4uZm9yX2lucHV0X3R5cGVqSAIAAFgHAAAARmxhdE1hcGpIAgAAWBsAAABDb21iaW5lUGVyS2V5LmRlZmF1bHRfbGFiZWxqSAIAAFghAAAARmxhdHRlbi5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyakgCAABYJwAAAENvbWJpbmVQZXJLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWBwAAABQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuakgCAABYHQAAAENvbWJpbmVHbG9iYWxseS5kZWZhdWx0X2xhYmVsakgCAABYIQAAAENvbWJpbmVHbG9iYWxseS5hc19zaW5nbGV0b25fdmlld2pIAgAAWAUAAABQYXJEb2pIAgAAWBYAAABDb21iaW5lR2xvYmFsbHkuZXhwYW5kakgCAABYEgAAAFBhckRvLmRpc3BsYXlfZGF0YWpIAgAAWA8AAABDb21iaW5lR2xvYmFsbHlqSAIAAFgfAAAAQ29tYmluZUZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcmpIAgAAWAkAAABDb21iaW5lRm5qSAIAAFgPAAAAQ29tYmluZUZuLmFwcGx5akgCAABYFwAAAFBhckRvLmluZmVyX291dHB1dF90eXBlakgCAABYCQAAAFBhcnRpdGlvbmpIAgAAWAMAAABNYXBqSAIAAFgcAAAAV2luZG93SW50by5pbmZlcl9vdXRwdXRfdHlwZWpIAgAAWCQAAABHcm91cEJ5S2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqSAIAAFgXAAAAR3JvdXBCeUtleS5SZWlmeVdpbmRvd3NqSAIAAFgXAAAARG9Gbi5pc19wcm9jZXNzX2JvdW5kZWRqSAIAAFglAAAAQ29tYmluZVZhbHVlcy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWA0AAABDb21iaW5lUGVyS2V5akgCAABYHwAAAFdpbmRvd0ludG8uV2luZG93SW50b0ZuLnByb2Nlc3NqSAIAAFgiAAAAR3JvdXBCeUtleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWBQAAABDb21iaW5lRm4uYWRkX2lucHV0c2pIAgAAWBQAAABDcmVhdGUuZ2V0X3dpbmRvd2luZ2pIAgAAWBoAAABDb21iaW5lUGVyS2V5LmRpc3BsYXlfZGF0YWpIAgAAWAcAAABGbGF0dGVuakgCAABYJAAAAFBhcnRpdGlvbi5BcHBseVBhcnRpdGlvbkZuRm4ucHJvY2Vzc2pIAgAAWB8AAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5wcm9jZXNzakgCAABYFAAAAENvbWJpbmVQZXJLZXkuZXhwYW5kakgCAABYDAAAAFBhckRvLmV4cGFuZGpIAgAAWBcAAABXaW5kb3dJbnRvLldpbmRvd0ludG9GbmpIAgAAWA4AAABGbGF0dGVuLmV4cGFuZGpIAgAAWBEAAABQYXJ0aXRpb24ubWFrZV9mbmpIAgAAWBUAAABGbGF0dGVuLmdldF93aW5kb3dpbmdqSAIAAFgYAAAAUGFyRG8uZGVmYXVsdF90eXBlX2hpbnRzakgCAABYHQAAAFBhckRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyakgCAABYEgAAAERvRm4uZGVmYXVsdF9sYWJlbGpIAgAAWBEAAABHcm91cEJ5S2V5LmV4cGFuZGpIAgAAWBIAAABEb0ZuLmZyb21fY2FsbGFibGVqSAIAAFgWAAAARG9Gbi5pbmZlcl9vdXRwdXRfdHlwZWpIAgAAWBUAAABDb21iaW5lVmFsdWVzLm1ha2VfZm5qSAIAAFgSAAAARG9Gbi5maW5pc2hfYnVuZGxlakgCAABYGQAAAFdpbmRvd2luZy5mcm9tX3J1bm5lcl9hcGlqSAIAAFgXAAAAQ29tYmluZUZuLmRlZmF1bHRfbGFiZWxqSAIAAFgdAAAAQ29tYmluZUdsb2JhbGx5LndpdGhfZGVmYXVsdHNqSAIAAFgKAAAAR3JvdXBCeUtleWpIAgAAWB8AAABQYXJEby5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyakgCAABYIAAAAENvbWJpbmVHbG9iYWxseS53aXRob3V0X2RlZmF1bHRzakgCAABYGwAAAERvRm4uZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c2pIAgAAWBcAAABDb21iaW5lRm4uZnJvbV9jYWxsYWJsZWpIAgAAWBgAAABDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRqSAIAAFgpAAAAR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MuaW5mZXJfb3V0cHV0X3R5cGVqSAIAAFgcAAAAQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc2pIAgAAWBkAAABQYXJ0aXRpb25Gbi5kZWZhdWx0X2xhYmVsakgCAABYDQAAAENyZWF0ZS5leHBhbmRqSAIAAFgEAAAARG9GbmpIAgAAWBEAAABEb0ZuLnN0YXJ0X2J1bmRsZWpIAgAAWBIAAABQYXJEby53aXRoX291dHB1dHNqSAIAAFgnAAAAQ29tYmluZVZhbHVlcy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyakgCAABYEAAAAFBhcnRpdGlvbi5leHBhbmRqSAIAAFgTAAAAQ29tYmluZUZuLmFkZF9pbnB1dGpIAgAAWBEAAABXaW5kb3dJbnRvLmV4cGFuZGpIAgAAWAwAAABEb0ZuLnByb2Nlc3NqSAIAAFgfAAAARmxhdHRlbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWBcAAABXaW5kb3dpbmcudG9fcnVubmVyX2FwaWpIAgAAWA0AAABDb21iaW5lVmFsdWVzakgCAABYFAAAAFdpbmRvd2luZy5pc19kZWZhdWx0akgCAABYDQAAAFBhckRvLm1ha2VfZm5qSAIAAFgiAAAAV2luZG93SW50by50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWB0AAABDb21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZWpIAgAAWBUAAABDb21iaW5lUGVyS2V5Lm1ha2VfZm5qSAIAAFgkAAAAV2luZG93SW50by5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyakgCAABYBgAAAEZpbHRlcmpIAgAAWAYAAABDcmVhdGVqSAIAAFgLAAAAUGFydGl0aW9uRm5qSAIAAFgWAAAAQ3JlYXRlLmdldF9vdXRwdXRfdHlwZWpIAgAAWAkAAABXaW5kb3dpbmdqSAIAAFgcAAAAQ29tYmluZUdsb2JhbGx5LmRpc3BsYXlfZGF0YWpIAgAAWAoAAABXaW5kb3dJbnRvakgCAABYHAAAAENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JqSAIAAFglAAAAQ29tYmluZVBlcktleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpIAgAAWBgAAABDcmVhdGUuaW5mZXJfb3V0cHV0X3R5cGVqSAIAAFgZAAAAUGFydGl0aW9uRm4ucGFydGl0aW9uX2ZvcmpIAgAAWBgAAABXaW5kb3dJbnRvLmdldF93aW5kb3dpbmdqSAIAAHVoilgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlckkCAACFgXJKAgAAfXJLAgAAYnRyTAIAAFUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNyTQIAAChYgUwAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVHlwZSBoaW50aW5nIGRlY29yYXRvcnMgYWxsb3dpbmcgc3RhdGljIG9yIHJ1bnRpbWUgdHlwZS1jaGVja2luZyBmb3IgdGhlIFNESy4KClRoaXMgbW9kdWxlIGRlZmluZXMgZGVjb3JhdG9ycyB3aGljaCB1dGlsaXplIHRoZSB0eXBlLWhpbnRzIGRlZmluZWQgaW4KJ3R5cGVfaGludHMucHknIHRvIGFsbG93IGFubm90YXRpb24gb2YgdGhlIHR5cGVzIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQKcmV0dXJuIHZhbHVlcy4KClR5cGUtaGludHMgZm9yIGZ1bmN0aW9ucyBhcmUgYW5ub3RhdGVkIHVzaW5nIHR3byBzZXBhcmF0ZSBkZWNvcmF0b3JzLiBPbmUgaXMgZm9yCnR5cGUtaGludGluZyB0aGUgdHlwZXMgb2YgZnVuY3Rpb24gYXJndW1lbnRzLCB0aGUgb3RoZXIgZm9yIHR5cGUtaGludGluZyB0aGUKZnVuY3Rpb24gcmV0dXJuIHZhbHVlLiBUeXBlLWhpbnRzIGNhbiBlaXRoZXIgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIG9mCnBvc2l0aW9uYWwgYXJndW1lbnRzOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoaW50LCBpbnQpCiAgZGVmIGFkZChhLCBiKToKICAgIHJldHVybiBhICsgYgoKS2V5d29yZCBhcmd1bWVudHM6OgoKICBAd2l0aF9pbnB1dF90eXBlcyhhPWludCwgYj1pbnQpCiAgZGVmIGFkZChhLCBiKToKICAgIHJldHVybiBhICsgYgoKT3IgZXZlbiBhIG1peCBvZiBib3RoOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoaW50LCBiPWludCkKICBkZWYgYWRkKGEsIGIpOgogICAgcmV0dXJuIGEgKyBiCgpFeGFtcGxlIHVzYWdlIGZvciB0eXBlLWhpbnRpbmcgYXJndW1lbnRzIG9ubHk6OgoKICBAd2l0aF9pbnB1dF90eXBlcyhzPXN0cikKICBkZWYgdG9fbG93ZXIoYSk6CiAgICByZXR1cm4gYS5sb3dlcigpCgpFeGFtcGxlIHVzYWdlIGZvciB0eXBlLWhpbnRpbmcgcmV0dXJuIHZhbHVlcyBvbmx5OjoKCiAgQHdpdGhfb3V0cHV0X3R5cGVzKFR1cGxlW2ludCwgYm9vbF0pCiAgZGVmIGNvbXByZXNzX3BvaW50KGVjX3BvaW50KToKICAgIHJldHVybiBlY19wb2ludC54LCBlY19wb2ludC55IDwgMAoKRXhhbXBsZSB1c2FnZSBmb3IgdHlwZS1oaW50aW5nIGJvdGggYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoYT1pbnQpCiAgQHdpdGhfb3V0cHV0X3R5cGVzKHN0cikKICBkZWYgaW50X3RvX3N0cihhKToKICAgIHJldHVybiBzdHIoYSkKClR5cGUtaGludGluZyBhIGZ1bmN0aW9uIHdpdGggYXJndW1lbnRzIHRoYXQgdW5wYWNrIHR1cGxlcyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEFzCmFuIGV4YW1wbGUsIHN1Y2ggYSBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkIGFzOjoKCiAgZGVmIGZvbygoYSwgYikpOgogICAgLi4uCgpUaGUgdmFsaWQgdHlwZS1oaW50IGZvciBzdWNoIGFzIGZ1bmN0aW9uIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzo6CgogIEB3aXRoX2lucHV0X3R5cGVzKGE9aW50LCBiPWludCkKICBkZWYgZm9vKChhLCBiKSk6CiAgICAuLi4KCk5vdGljZSB0aGF0IHdlIGhpbnQgdGhlIHR5cGUgb2YgZWFjaCB1bnBhY2tlZCBhcmd1bWVudCBpbmRlcGVuZGVudGx5LCByYXRoZXIKdGhhbiBoaW50aW5nIHRoZSB0eXBlIG9mIHRoZSB0dXBsZSBhcyBhIHdob2xlIChUdXBsZVtpbnQsIGludF0pLgoKT3B0aW9uYWxseSwgdHlwZS1oaW50cyBjYW4gYmUgdHlwZS1jaGVja2VkIGF0IHJ1bnRpbWUuIFRvIHRvZ2dsZSB0aGlzIGJlaGF2aW9yCnRoaXMgbW9kdWxlIGRlZmluZXMgdHdvIGZ1bmN0aW9uczogJ2VuYWJsZV9ydW5fdGltZV90eXBlX2NoZWNraW5nJyBhbmQKJ2Rpc2FibGVfcnVuX3RpbWVfdHlwZV9jaGVja2luZycuIE5PVEU6IGZvciB0aGlzIHRvZ2dsZSBiZWhhdmlvciB0byB3b3JrCnByb3Blcmx5IGl0IG11c3QgYXBwZWFyIGF0IHRoZSB0b3Agb2YgdGhlIG1vZHVsZSB3aGVyZSBhbGwgZnVuY3Rpb25zIGFyZQpkZWZpbmVkLCBvciBiZWZvcmUgaW1wb3J0aW5nIGEgbW9kdWxlIGNvbnRhaW5pbmcgdHlwZS1oaW50ZWQgZnVuY3Rpb25zLgoiIiIKCmltcG9ydCBpbnNwZWN0CmltcG9ydCB0eXBlcwoKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBTaW1wbGVUeXBlSGludEVycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgY2hlY2tfY29uc3RyYWludApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtCgpfX2FsbF9fID0gWwogICAgJ3dpdGhfaW5wdXRfdHlwZXMnLAogICAgJ3dpdGhfb3V0cHV0X3R5cGVzJywKICAgICdXaXRoVHlwZUhpbnRzJywKICAgICdUeXBlQ2hlY2tFcnJvcicsCl0KCgojIFRoaXMgaXMgbWlzc2luZyBpbiB0aGUgYnVpbHRpbiB0eXBlcyBtb2R1bGUuICBzdHIudXBwZXIgaXMgYXJiaXRyYXJ5LCBhbnkKIyBtZXRob2Qgb24gYSBDLWltcGxlbWVudGVkIHR5cGUgd2lsbCBkby4KIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCl9NZXRob2REZXNjcmlwdG9yVHlwZSA9IHR5cGUoc3RyLnVwcGVyKQojIHB5bGludDogZW5hYmxlPWludmFsaWQtbmFtZQoKCiMgTW9ua2V5cGF0Y2ggaW5zcGVjdC5nZXRhcmdzcGVjIHRvIGFsbG93IHBhc3Npbmcgbm9uLWZ1bmN0aW9uIG9iamVjdHMuCiMgVGhpcyBpcyBuZWVkZWQgdG8gdXNlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgc3VjaCBhcyBnZXRjYWxsYXJncy4KX29yaWdpbmFsX2dldGFyZ3NwZWMgPSBpbnNwZWN0LmdldGFyZ3NwZWMKCgpkZWYgZ2V0YXJnc3BlYyhmdW5jKToKICB0cnk6CiAgICByZXR1cm4gX29yaWdpbmFsX2dldGFyZ3NwZWMoZnVuYykKICBleGNlcHQgVHlwZUVycm9yOgogICAgaWYgaXNpbnN0YW5jZShmdW5jLCB0eXBlKToKICAgICAgYXJnc3BlYyA9IGdldGFyZ3NwZWMoZnVuYy5fX2luaXRfXykKICAgICAgZGVsIGFyZ3NwZWMuYXJnc1swXQogICAgICByZXR1cm4gYXJnc3BlYwogICAgZWxpZiBjYWxsYWJsZShmdW5jKToKICAgICAgdHJ5OgogICAgICAgIHJldHVybiBfb3JpZ2luYWxfZ2V0YXJnc3BlYyhmdW5jLl9fY2FsbF9fKQogICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICMgUmV0dXJuIGFuIEFyZ1NwZWMgd2l0aCBhdCBsZWFzdCBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCwKICAgICAgICAjIGFuZCBhbnkgbnVtYmVyIG9mIG90aGVyIChwb3NpdGlvbmFsIG9yIGtleXdvcmQpIGFyZ3VtZW50cwogICAgICAgICMgd2hvc2UgbmFtZSB3b24ndCBtYXRjaCBhbnkgcmVhbCBhZ3VtZW50LgogICAgICAgICMgQXJndW1lbnRzIHdpdGggdGhlICV1bmtub3duJSBwcmVmaXggd2lsbCBiZSBpZ25vcmVkIGluIHRoZSB0eXBlCiAgICAgICAgIyBjaGVja2luZyBjb2RlLgogICAgICAgIHJldHVybiBpbnNwZWN0LkFyZ1NwZWMoCiAgICAgICAgICAgIFsnXyddLCAnJXVua25vd24ldmFyYXJncycsICcldW5rbm93biVrZXl3b3JkcycsICgpKQogICAgZWxzZToKICAgICAgcmFpc2UKCgppbnNwZWN0LmdldGFyZ3NwZWMgPSBnZXRhcmdzcGVjCgoKY2xhc3MgSU9UeXBlSGludHMob2JqZWN0KToKICAiIiJFbmNhcHN1bGF0ZXMgYWxsIHR5cGUgaGludCBpbmZvcm1hdGlvbiBhYm91dCBhIERhdGFmbG93IGNvbnN0cnVjdC4KCiAgVGhpcyBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgdmlhIHRoZSBXaXRoVHlwZUhpbnRzIG1peGluIGNsYXNzLCB0aG91Z2gKICBtYXkgYWxzbyBiZSBhdHRhY2hlZCB0byBvdGhlciBvYmplY3RzIChzdWNoIGFzIFB5dGhvbiBmdW5jdGlvbnMpLgogICIiIgogIF9fc2xvdHNfXyA9ICgnaW5wdXRfdHlwZXMnLCAnb3V0cHV0X3R5cGVzJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0X3R5cGVzPU5vbmUsIG91dHB1dF90eXBlcz1Ob25lKToKICAgIHNlbGYuaW5wdXRfdHlwZXMgPSBpbnB1dF90eXBlcwogICAgc2VsZi5vdXRwdXRfdHlwZXMgPSBvdXRwdXRfdHlwZXMKCiAgZGVmIHNldF9pbnB1dF90eXBlcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgc2VsZi5pbnB1dF90eXBlcyA9IGFyZ3MsIGt3YXJncwoKICBkZWYgc2V0X291dHB1dF90eXBlcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgc2VsZi5vdXRwdXRfdHlwZXMgPSBhcmdzLCBrd2FyZ3MKCiAgZGVmIHNpbXBsZV9vdXRwdXRfdHlwZShzZWxmLCBjb250ZXh0KToKICAgIGlmIHNlbGYub3V0cHV0X3R5cGVzOgogICAgICBhcmdzLCBrd2FyZ3MgPSBzZWxmLm91dHB1dF90eXBlcwogICAgICBpZiBsZW4oYXJncykgIT0gMSBvciBrd2FyZ3M6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBzaW1wbGUgb3V0cHV0IHR5cGUgaGludCBmb3IgJXMnICUgY29udGV4dCkKICAgICAgcmV0dXJuIGFyZ3NbMF0KCiAgZGVmIGNvcHkoc2VsZik6CiAgICByZXR1cm4gSU9UeXBlSGludHMoc2VsZi5pbnB1dF90eXBlcywgc2VsZi5vdXRwdXRfdHlwZXMpCgogIGRlZiB3aXRoX2RlZmF1bHRzKHNlbGYsIGhpbnRzKToKICAgIGlmIG5vdCBoaW50czoKICAgICAgcmV0dXJuIHNlbGYKICAgIGVsaWYgbm90IHNlbGY6CiAgICAgIHJldHVybiBoaW50cwogICAgcmV0dXJuIElPVHlwZUhpbnRzKHNlbGYuaW5wdXRfdHlwZXMgb3IgaGludHMuaW5wdXRfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfdHlwZXMgb3IgaGludHMub3V0cHV0X3R5cGVzKQoKICBkZWYgX19ub256ZXJvX18oc2VsZik6CiAgICByZXR1cm4gYm9vbChzZWxmLmlucHV0X3R5cGVzIG9yIHNlbGYub3V0cHV0X3R5cGVzKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0lPVHlwZUhpbnRzW2lucHV0cz0lcywgb3V0cHV0cz0lc10nICUgKAogICAgICAgIHNlbGYuaW5wdXRfdHlwZXMsIHNlbGYub3V0cHV0X3R5cGVzKQoKCmNsYXNzIFdpdGhUeXBlSGludHMob2JqZWN0KToKICAiIiJBIG1peGluIGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCByZXRyaWV2ZSB0eXBlIGhpbnRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgKnVudXNlZF9hcmdzLCAqKnVudXNlZF9rd2FyZ3MpOgogICAgc2VsZi5fdHlwZV9oaW50cyA9IElPVHlwZUhpbnRzKCkKCiAgZGVmIF9nZXRfb3JfY3JlYXRlX3R5cGVfaGludHMoc2VsZik6CiAgICAjIF9faW5pdF9fIG1heSBoYXZlIG5vdCBiZWVuIGNhbGxlZAogICAgdHJ5OgogICAgICByZXR1cm4gc2VsZi5fdHlwZV9oaW50cwogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICBzZWxmLl90eXBlX2hpbnRzID0gSU9UeXBlSGludHMoKQogICAgICByZXR1cm4gc2VsZi5fdHlwZV9oaW50cwoKICBkZWYgZ2V0X3R5cGVfaGludHMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50cygpCiAgICAgICAgICAgIC53aXRoX2RlZmF1bHRzKHNlbGYuZGVmYXVsdF90eXBlX2hpbnRzKCkpCiAgICAgICAgICAgIC53aXRoX2RlZmF1bHRzKGdldF90eXBlX2hpbnRzKHNlbGYuX19jbGFzc19fKSkpCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICByZXR1cm4gTm9uZQoKICBkZWYgd2l0aF9pbnB1dF90eXBlcyhzZWxmLCAqYXJnX2hpbnRzLCAqKmt3YXJnX2hpbnRzKToKICAgIHNlbGYuX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50cygpLnNldF9pbnB1dF90eXBlcygqYXJnX2hpbnRzLCAqKmt3YXJnX2hpbnRzKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHdpdGhfb3V0cHV0X3R5cGVzKHNlbGYsICphcmdfaGludHMsICoqa3dhcmdfaGludHMpOgogICAgc2VsZi5fZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzKCkuc2V0X291dHB1dF90eXBlcygqYXJnX2hpbnRzLCAqKmt3YXJnX2hpbnRzKQogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBUeXBlQ2hlY2tFcnJvcihFeGNlcHRpb24pOgogIHBhc3MKCgpkZWYgX3Bvc2l0aW9uYWxfYXJnX2hpbnRzKGFyZywgaGludHMpOgogICIiIlJldHVybnMgdGhlIHR5cGUgb2YgYSAocG9zc2libHkgdHVwbGUtcGFja2VkKSBwb3NpdGlvbmFsIGFyZ3VtZW50LgoKICBFLmcuIGZvciBsYW1iZGEgKChhLCBiKSwgYyk6IE5vbmUgdGhlIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIChhcwogIHJldHVybmVkIGJ5IGluc3BlY3QpIFtbYSwgYl0sIGNdIHdoaWNoIHNob3VsZCBoYXZlIHR5cGUKICBUdXBsZVtUdXBsZVtJbnQsIEFueV0sIGZsb2F0XSB3aGVuIGFwcGxpZWQgdG8gdGhlIHR5cGUgaGludHMKICB7YTogaW50LCBiOiBBbnksIGM6IGZsb2F0fS4KICAiIiIKICBpZiBpc2luc3RhbmNlKGFyZywgbGlzdCk6CiAgICByZXR1cm4gdHlwZWhpbnRzLlR1cGxlW1tfcG9zaXRpb25hbF9hcmdfaGludHMoYSwgaGludHMpIGZvciBhIGluIGFyZ11dCiAgcmV0dXJuIGhpbnRzLmdldChhcmcsIHR5cGVoaW50cy5BbnkpCgoKZGVmIF91bnBhY2tfcG9zaXRpb25hbF9hcmdfaGludHMoYXJnLCBoaW50KToKICAiIiJVbnBhY2tzIHRoZSBnaXZlbiBoaW50IGFjY29yZGluZyB0byB0aGUgbmVzdGVkIHN0cnVjdHVyZSBvZiBhcmcuCgogIEZvciBleGFtcGxlLCBpZiBhcmcgaXMgW1thLCBiXSwgY10gYW5kIGhpbnQgaXMgVHVwbGVbQW55LCBpbnRdLCB0aGFuCiAgdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gKChBbnksIEFueSksIGludCkgc28gaXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24KICB3aXRoIGluc3BlY3QuZ2V0Y2FsbGFyZ3MuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShhcmcsIGxpc3QpOgogICAgdHVwbGVfY29uc3RyYWludCA9IHR5cGVoaW50cy5UdXBsZVtbdHlwZWhpbnRzLkFueV0gKiBsZW4oYXJnKV0KICAgIGlmIG5vdCB0eXBlaGludHMuaXNfY29uc2lzdGVudF93aXRoKGhpbnQsIHR1cGxlX2NvbnN0cmFpbnQpOgogICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignQmFkIHR1cGxlIGFyZ3VtZW50cyBmb3IgJXM6IGV4cGVjdGVkICVzLCBnb3QgJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZywgdHVwbGVfY29uc3RyYWludCwgaGludCkpCiAgICBpZiBpc2luc3RhbmNlKGhpbnQsIHR5cGVoaW50cy5UdXBsZUNvbnN0cmFpbnQpOgogICAgICByZXR1cm4gdHVwbGUoX3VucGFja19wb3NpdGlvbmFsX2FyZ19oaW50cyhhLCB0KQogICAgICAgICAgICAgICAgICAgZm9yIGEsIHQgaW4gemlwKGFyZywgaGludC50dXBsZV90eXBlcykpCiAgICByZXR1cm4gKHR5cGVoaW50cy5BbnksKSAqIGxlbihhcmcpCiAgcmV0dXJuIGhpbnQKCgpkZWYgZ2V0Y2FsbGFyZ3NfZm9yaGludHMoZnVuYywgKnR5cGVhcmdzLCAqKnR5cGVrd2FyZ3MpOgogICIiIkxpa2UgaW5zcGVjdC5nZXRjYWxsYXJncywgYnV0IHVuZGVyc3RhbmRzIHRoYXQgVHVwbGVbXSBhbmQgYW4gQW55IHVucGFjay4KICAiIiIKICBhcmdzcGVjID0gaW5zcGVjdC5nZXRhcmdzcGVjKGZ1bmMpCiAgIyBUdXJuIFR1cGxlW3gsIHldIGludG8gKHgsIHkpIHNvIGdldGNhbGxhcmdzIGNhbiBkbyB0aGUgcHJvcGVyIHVucGFja2luZy4KICBwYWNrZWRfdHlwZWFyZ3MgPSBbX3VucGFja19wb3NpdGlvbmFsX2FyZ19oaW50cyhhcmcsIGhpbnQpCiAgICAgICAgICAgICAgICAgICAgIGZvciAoYXJnLCBoaW50KSBpbiB6aXAoYXJnc3BlYy5hcmdzLCB0eXBlYXJncyldCiAgcGFja2VkX3R5cGVhcmdzICs9IGxpc3QodHlwZWFyZ3NbbGVuKHBhY2tlZF90eXBlYXJncyk6XSkKICB0cnk6CiAgICBjYWxsYXJncyA9IGluc3BlY3QuZ2V0Y2FsbGFyZ3MoZnVuYywgKnBhY2tlZF90eXBlYXJncywgKip0eXBla3dhcmdzKQogIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKGUpCiAgaWYgYXJnc3BlYy5kZWZhdWx0czoKICAgICMgRGVjbGFyZSBhbnkgZGVmYXVsdCBhcmd1bWVudHMgdG8gYmUgQW55LgogICAgZm9yIGssIHZhciBpbiBlbnVtZXJhdGUocmV2ZXJzZWQoYXJnc3BlYy5hcmdzKSk6CiAgICAgIGlmIGsgPj0gbGVuKGFyZ3NwZWMuZGVmYXVsdHMpOgogICAgICAgIGJyZWFrCiAgICAgIGlmIGNhbGxhcmdzLmdldCh2YXIsIE5vbmUpIGlzIGFyZ3NwZWMuZGVmYXVsdHNbLWstMV06CiAgICAgICAgY2FsbGFyZ3NbdmFyXSA9IHR5cGVoaW50cy5BbnkKICAjIFBhdGNoIHVwIHZhcmFyZ3MgYW5kIGtleXdvcmRzCiAgaWYgYXJnc3BlYy52YXJhcmdzOgogICAgY2FsbGFyZ3NbYXJnc3BlYy52YXJhcmdzXSA9IHR5cGVrd2FyZ3MuZ2V0KAogICAgICAgIGFyZ3NwZWMudmFyYXJncywgdHlwZWhpbnRzLlR1cGxlW3R5cGVoaW50cy5BbnksIC4uLl0pCiAgaWYgYXJnc3BlYy5rZXl3b3JkczoKICAgICMgVE9ETyhyb2JlcnR3Yik6IENvbnNpZGVyIHRha2luZyB0aGUgdW5pb24gb2Yga2V5IGFuZCB2YWx1ZSB0eXBlcy4KICAgIGNhbGxhcmdzW2FyZ3NwZWMua2V5d29yZHNdID0gdHlwZWt3YXJncy5nZXQoCiAgICAgICAgYXJnc3BlYy5rZXl3b3JkcywgdHlwZWhpbnRzLkRpY3RbdHlwZWhpbnRzLkFueSwgdHlwZWhpbnRzLkFueV0pCiAgcmV0dXJuIGNhbGxhcmdzCgoKZGVmIGdldF90eXBlX2hpbnRzKGZuKToKICAiIiJHZXRzIHRoZSB0eXBlIGhpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGFyYml0cmFyeSBvYmplY3QgZm4uCgogIEFsd2F5cyByZXR1cm5zIGEgdmFsaWQgSU9UeXBlSGludHMgb2JqZWN0LCBjcmVhdGluZyBvbmUgaWYgbmVjaXNzYXJ5LgogICIiIgogICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICBpZiBub3QgaGFzYXR0cihmbiwgJ190eXBlX2hpbnRzJyk6CiAgICB0cnk6CiAgICAgIGZuLl90eXBlX2hpbnRzID0gSU9UeXBlSGludHMoKQogICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKICAgICAgIyBDYW4ndCBhZGQgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgdG8gdGhpcyBvYmplY3QsCiAgICAgICMgYnV0IG1pZ2h0IGhhdmUgc29tZSByZXN0cmljdGlvbnMgYW55d2F5cy4uLgogICAgICBoaW50cyA9IElPVHlwZUhpbnRzKCkKICAgICAgaWYgaXNpbnN0YW5jZShmbiwgX01ldGhvZERlc2NyaXB0b3JUeXBlKToKICAgICAgICBoaW50cy5zZXRfaW5wdXRfdHlwZXMoZm4uX19vYmpjbGFzc19fKQogICAgICByZXR1cm4gaGludHMKICByZXR1cm4gZm4uX3R5cGVfaGludHMKICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCgpkZWYgd2l0aF9pbnB1dF90eXBlcygqcG9zaXRpb25hbF9oaW50cywgKiprZXl3b3JkX2hpbnRzKToKICAiIiJBIGRlY29yYXRvciB0aGF0IHR5cGUtY2hlY2tzIGRlZmluZWQgdHlwZS1oaW50cyB3aXRoIHBhc3NlZCBmdW5jIGFyZ3VtZW50cy4KCiAgQWxsIHR5cGUtaGludGVkIGFyZ3VtZW50cyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzLAogIGtleXdvcmQgYXJndW1lbnRzLCBvciBhIG1peCBvZiBib3RoLiBBZGRpdGlvbmFseSwgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBtdXN0CiAgYmUgdHlwZS1oaW50ZWQgaW4gdG90YWxpdHkgaWYgZXZlbiBvbmUgcGFyYW1ldGVyIGlzIHR5cGUtaGludGVkLgoKICBPbmNlIGZ1bGx5IGRlY29yYXRlZCwgaWYgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJlc3VsdGluZyBmdW5jdGlvbgogIHZpb2xhdGUgdGhlIHR5cGUtaGludCBjb25zdHJhaW50cyBkZWZpbmVkLCBhIDpjbGFzczpgVHlwZUNoZWNrRXJyb3JgCiAgZGV0YWlsaW5nIHRoZSBlcnJvciB3aWxsIGJlIHJhaXNlZC4KCiAgVG8gYmUgdXNlZCBhczoKCiAgLi4gdGVzdGNvZGU6OgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX2lucHV0X3R5cGVzCgogICAgQHdpdGhfaW5wdXRfdHlwZXMoc3RyKQogICAgZGVmIHVwcGVyKHMpOgogICAgICByZXR1cm4gcy51cHBlcigpCgogIE9yOgoKICAuLiB0ZXN0Y29kZTo6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfaW5wdXRfdHlwZXMKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBMaXN0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHVwbGUKCiAgICBAd2l0aF9pbnB1dF90eXBlcyhscz1MaXN0W1R1cGxlW2ludCwgaW50XV0pCiAgICBkZWYgaW5jcmVtZW50KGxzKToKICAgICAgWyhpICsgMSwgaiArIDEpIGZvciAoaSxqKSBpbiBsc10KCiAgQXJnczoKICAgICpwb3NpdGlvbmFsX2hpbnRzOiBQb3NpdGlvbmFsIHR5cGUtaGludHMgaGF2aW5nIGlkZW50aWNhbCBvcmRlciBhcyB0aGUKICAgICAgZnVuY3Rpb24ncyBmb3JtYWwgYXJndW1lbnRzLiBWYWx1ZXMgZm9yIHRoaXMgYXJndW1lbnQgbXVzdCBlaXRoZXIgYmUgYQogICAgICBidWlsdC1pbiBQeXRob24gdHlwZSBvciBhbiBpbnN0YW5jZSBvZiBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgIGNyZWF0ZWQgYnkKICAgICAgJ2luZGV4aW5nJyBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQ29tcG9zaXRlVHlwZUhpbnRgIGluc3RhbmNlCiAgICAgIHdpdGggYSB0eXBlIHBhcmFtZXRlci4KICAgICoqa2V5d29yZF9oaW50czogS2V5d29yZCBhcmd1bWVudHMgbWlycm9yaW5nIHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB0bwogICAgICB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9ucy4gVGhlIHZhbHVlIG9mIGVhY2gga2V5d29yZCBhcmd1bWVudCBtdXN0IGVpdGhlcgogICAgICBiZSBvbmUgb2YgdGhlIGFsbG93ZWQgYnVpbHQtaW4gUHl0aG9uIHR5cGVzLCBhIGN1c3RvbSBjbGFzcywgb3IgYW4KICAgICAgaW5zdGFuY2Ugb2YgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YAogICAgICBjcmVhdGVkIGJ5ICdpbmRleGluZycgYQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkNvbXBvc2l0ZVR5cGVIaW50YCBpbnN0YW5jZQogICAgICB3aXRoIGEgdHlwZSBwYXJhbWV0ZXIuCgogIFJhaXNlczoKICAgIDpjbGFzczpgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcmA6IElmIG5vdCBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIGhhdmUKICAgICAgY29ycmVzcG9uZGluZyB0eXBlLWhpbnRzIHNwZWNpZmllZC4gT3IgaWYgdGhlIGlubmVyIHdyYXBwZXIgZnVuY3Rpb24gaXNuJ3QKICAgICAgcGFzc2VkIGEgZnVuY3Rpb24gb2JqZWN0LgogICAgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmA6IElmIHRoZSBhbnkgb2YgdGhlIHBhc3NlZCB0eXBlLWhpbnQKICAgICAgY29uc3RyYWludHMgYXJlIG5vdCBhIHR5cGUgb3IKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAgaW5zdGFuY2UuCgogIFJldHVybnM6CiAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHN1Y2ggdGhhdCBpdCBlbmZvcmNlcyB0eXBlLWhpbnQgY29uc3RyYWludHMKICAgIGZvciBhbGwgcmVjZWl2ZWQgZnVuY3Rpb24gYXJndW1lbnRzLgogICIiIgoKICBjb252ZXJ0ZWRfcG9zaXRpb25hbF9oaW50cyA9ICgKICAgICAgbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXMocG9zaXRpb25hbF9oaW50cykpCiAgY29udmVydGVkX2tleXdvcmRfaGludHMgPSAoCiAgICAgIG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzKGtleXdvcmRfaGludHMpKQogIGRlbCBwb3NpdGlvbmFsX2hpbnRzCiAgZGVsIGtleXdvcmRfaGludHMKCiAgZGVmIGFubm90YXRlKGYpOgogICAgaWYgaXNpbnN0YW5jZShmLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICBmb3IgdCBpbiAobGlzdChjb252ZXJ0ZWRfcG9zaXRpb25hbF9oaW50cykgKwogICAgICAgICAgICAgICAgbGlzdChjb252ZXJ0ZWRfa2V5d29yZF9oaW50cy52YWx1ZXMoKSkpOgogICAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgICAgICB0LCBlcnJvcl9tc2dfcHJlZml4PSdBbGwgdHlwZSBoaW50IGFyZ3VtZW50cycpCgogICAgZ2V0X3R5cGVfaGludHMoZikuc2V0X2lucHV0X3R5cGVzKCpjb252ZXJ0ZWRfcG9zaXRpb25hbF9oaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnZlcnRlZF9rZXl3b3JkX2hpbnRzKQogICAgcmV0dXJuIGYKICByZXR1cm4gYW5ub3RhdGUKCgpkZWYgd2l0aF9vdXRwdXRfdHlwZXMoKnJldHVybl90eXBlX2hpbnQsICoqa3dhcmdzKToKICAiIiJBIGRlY29yYXRvciB0aGF0IHR5cGUtY2hlY2tzIGRlZmluZWQgdHlwZS1oaW50cyBmb3IgcmV0dXJuIHZhbHVlcyhzKS4KCiAgVGhpcyBkZWNvcmF0b3Igd2lsbCB0eXBlLWNoZWNrIHRoZSByZXR1cm4gdmFsdWUocykgb2YgdGhlIGRlY29yYXRlZCBmdW5jdGlvbi4KCiAgT25seSBhIHNpbmdsZSB0eXBlLWhpbnQgaXMgYWNjZXB0ZWQgdG8gc3BlY2lmeSB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHJldHVybgogIHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gdG8gYmUgZGVjb3JhdGVkIGhhcyBtdWx0aXBsZSByZXR1cm4gdmFsdWVzLCB0aGVuIG9uZQogIHNob3VsZCB1c2U6IGBgVHVwbGVbdHlwZV8xLCB0eXBlXzJdYGAgdG8gYW5ub3RhdGUgdGhlIHR5cGVzIG9mIHRoZSByZXR1cm4KICB2YWx1ZXMuCgogIElmIHRoZSB1bHRpbWF0ZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiB2aW9sYXRlcyB0aGUgc3BlY2lmaWVkIHR5cGUtaGludAogIGEgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmAgd2lsbCBiZSByYWlzZWQgZGV0YWlsaW5nIHRoZSB0eXBlLWNvbnN0cmFpbnQKICB2aW9sYXRpb24uCgogIFRoaXMgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgbGlrZToKCiAgLi4gdGVzdGNvZGU6OgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX291dHB1dF90eXBlcwogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFNldAoKICAgIGNsYXNzIENvb3JkaW5hdGU6CiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICBzZWxmLnggPSB4CiAgICAgICAgc2VsZi55ID0geQoKICAgIEB3aXRoX291dHB1dF90eXBlcyhTZXRbQ29vcmRpbmF0ZV0pCiAgICBkZWYgcGFyc2VfaW50cyhpbnRzKToKICAgICAgcmV0dXJuIHtDb29yZGluYXRlKGksIGkpIGZvciBpIGluIGludHN9CgogIE9yIHdpdGggYSBzaW1wbGUgdHlwZS1oaW50OgoKICAuLiB0ZXN0Y29kZTo6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfb3V0cHV0X3R5cGVzCgogICAgQHdpdGhfb3V0cHV0X3R5cGVzKGJvb2wpCiAgICBkZWYgbmVnYXRlKHApOgogICAgICByZXR1cm4gbm90IHAgaWYgcCBlbHNlIHAKCiAgQXJnczoKICAgICpyZXR1cm5fdHlwZV9oaW50OiBBIHR5cGUtaGludCBzcGVjaWZ5aW5nIHRoZSBwcm9wZXIgcmV0dXJuIHR5cGUgb2YgdGhlCiAgICAgIGZ1bmN0aW9uLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBlaXRoZXIgYmUgYSBidWlsdC1pbiBQeXRob24gdHlwZSBvciBhbgogICAgICBpbnN0YW5jZSBvZiBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgCiAgICAgIGNyZWF0ZWQgYnkgJ2luZGV4aW5nJyBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQ29tcG9zaXRlVHlwZUhpbnRgLgogICAgKiprd2FyZ3M6IE5vdCB1c2VkLgoKICBSYWlzZXM6CiAgICA6Y2xhc3M6YH5leGNlcHRpb25zLlZhbHVlRXJyb3JgOiBJZiBhbnkga3dhcmcgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGluLAogICAgICBvciB0aGUgbGVuZ3RoIG9mICoqcmV0dXJuX3R5cGVfaGludCoqIGlzIGdyZWF0ZXIgdGhhbiBgYDFgYC4gT3IgaWYgdGhlCiAgICAgIGlubmVyIHdyYXBwZXIgZnVuY3Rpb24gaXNuJ3QgcGFzc2VkIGEgZnVuY3Rpb24gb2JqZWN0LgogICAgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmA6IElmIHRoZSAqKnJldHVybl90eXBlX2hpbnQqKiBvYmplY3QgaXMKICAgICAgaW4gaW52YWxpZCB0eXBlLWhpbnQuCgogIFJldHVybnM6CiAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHN1Y2ggdGhhdCBpdCBlbmZvcmNlcyB0eXBlLWhpbnQgY29uc3RyYWludHMKICAgIGZvciBhbGwgcmV0dXJuIHZhbHVlcy4KICAiIiIKICBpZiBrd2FyZ3M6CiAgICByYWlzZSBWYWx1ZUVycm9yKCJBbGwgYXJndW1lbnRzIGZvciB0aGUgJ3JldHVybnMnIGRlY29yYXRvciBtdXN0IGJlICIKICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnRzLiIpCgogIGlmIGxlbihyZXR1cm5fdHlwZV9oaW50KSAhPSAxOgogICAgcmFpc2UgVmFsdWVFcnJvcigiJ3JldHVybnMnIGFjY2VwdHMgb25seSBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50LiBJbiAiCiAgICAgICAgICAgICAgICAgICAgICJvcmRlciB0byBzcGVjaWZ5IG11bHRpcGxlIHJldHVybiB0eXBlcywgdXNlIHRoZSAnVHVwbGUnICIKICAgICAgICAgICAgICAgICAgICAgInR5cGUtaGludC4iKQoKICByZXR1cm5fdHlwZV9oaW50ID0gbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZSgKICAgICAgcmV0dXJuX3R5cGVfaGludFswXSkKCiAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgIHJldHVybl90eXBlX2hpbnQsCiAgICAgIGVycm9yX21zZ19wcmVmaXg9J0FsbCB0eXBlIGhpbnQgYXJndW1lbnRzJwogICkKCiAgZGVmIGFubm90YXRlKGYpOgogICAgZ2V0X3R5cGVfaGludHMoZikuc2V0X291dHB1dF90eXBlcyhyZXR1cm5fdHlwZV9oaW50KQogICAgcmV0dXJuIGYKCiAgcmV0dXJuIGFubm90YXRlCgoKZGVmIF9jaGVja19pbnN0YW5jZV90eXBlKAogICAgdHlwZV9jb25zdHJhaW50LCBpbnN0YW5jZSwgdmFyX25hbWU9Tm9uZSwgdmVyYm9zZT1GYWxzZSk6CiAgIiIiQSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVwb3J0IHR5cGUtaGludCBjb25zdHJhaW50IHZpb2xhdGlvbnMuCgogIEFyZ3M6CiAgICB0eXBlX2NvbnN0cmFpbnQ6IEFuIGluc3RhbmNlIG9mIGEgJ1R5cGVDb25zdHJhaW50JyBvciBhIGJ1aWx0LWluIFB5dGhvbgogICAgICB0eXBlLgogICAgaW5zdGFuY2U6IFRoZSBjYW5kaWRhdGUgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2hlY2tlZCBieSB0byBzYXRpc2Z5CiAgICAgICd0eXBlX2NvbnN0cmFpbnQnLgogICAgdmFyX25hbWU6IElmICdpbnN0YW5jZScgaXMgYW4gYXJndW1lbnQsIHRoZW4gdGhlIGFjdHVhbCBuYW1lIGZvciB0aGUKICAgICAgcGFyYW1ldGVyIGluIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWZpbml0aW9uLgoKICBSYWlzZXM6CiAgICBUeXBlQ2hlY2tFcnJvcjogSWYgJ2luc3RhbmNlJyBmYWlscyB0byBtZWV0IHRoZSB0eXBlLWNvbnN0cmFpbnQgb2YKICAgICAgJ3R5cGVfY29uc3RyYWludCcuCiAgIiIiCiAgaGludF90eXBlID0gKAogICAgICAiYXJndW1lbnQ6ICclcyciICUgdmFyX25hbWUgaWYgdmFyX25hbWUgaXMgbm90IE5vbmUgZWxzZSAncmV0dXJuIHR5cGUnKQoKICB0cnk6CiAgICBjaGVja19jb25zdHJhaW50KHR5cGVfY29uc3RyYWludCwgaW5zdGFuY2UpCiAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3I6CiAgICBpZiB2ZXJib3NlOgogICAgICB2ZXJib3NlX2luc3RhbmNlID0gJyVzLCAnICUgaW5zdGFuY2UKICAgIGVsc2U6CiAgICAgIHZlcmJvc2VfaW5zdGFuY2UgPSAnJwogICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ1R5cGUtaGludCBmb3IgJXMgdmlvbGF0ZWQuIEV4cGVjdGVkIGFuICcKICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZSBvZiAlcywgaW5zdGVhZCBmb3VuZCAlc2FuIGluc3RhbmNlIG9mICVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICUgKGhpbnRfdHlwZSwgdHlwZV9jb25zdHJhaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZV9pbnN0YW5jZSwgdHlwZShpbnN0YW5jZSkpKQogIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignVHlwZS1oaW50IGZvciAlcyB2aW9sYXRlZDogJXMnICUgKGhpbnRfdHlwZSwgZSkpCgoKZGVmIF9pbnRlcmxlYXZlX3R5cGVfY2hlY2sodHlwZV9jb25zdHJhaW50LCB2YXJfbmFtZT1Ob25lKToKICAiIiJMYXppbHkgdHlwZS1jaGVjayB0aGUgdHlwZS1oaW50IGZvciBhIGxhemlseSBnZW5lcmF0ZWQgc2VxdWVuY2UgdHlwZS4KCiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgYXBwbGllZCBhcyBhIGRlY29yYXRvciBvciBjYWxsZWQgbWFudWFsbHkgaW4gYSBjdXJyaWVkCiAgbWFubmVyOgogICAgKiBAX2ludGVybGVhdmVfdHlwZV9jaGVjayhMaXN0W2ludF0pCiAgICAgIGRlZiBnZW4oKToKICAgICAgICB5aWVsZCA1CgogICAgb3IKCiAgICAgKiBnZW4gPSBfaW50ZXJsZWF2ZV90eXBlX2NoZWNrKFR1cGxlW2ludCwgaW50XSwgJ2Nvb3JkX2dlbicpKGdlbikKCiAgQXMgYSByZXN1bHQsIGFsbCB0eXBlLWNoZWNraW5nIGZvciB0aGUgcGFzc2VkIGdlbmVyYXRvciB3aWxsIG9jY3VyIGF0ICd5aWVsZCcKICB0aW1lLiBUaGlzIHdheSwgd2UgYXZvaWQgaGF2aW5nIHRvIGRlcGxlYXQgdGhlIGdlbmVyYXRvciBpbiBvcmRlciB0bwogIHR5cGUtY2hlY2sgaXQuCgogIEFyZ3M6CiAgICB0eXBlX2NvbnN0cmFpbnQ6IEFuIGluc3RhbmNlIG9mIGEgVHlwZUNvbnN0cmFpbnQuIFRoZSBvdXRwdXQgeWllbGRlZCBvZgogICAgICAnZ2VuJyB3aWxsIGJlIHR5cGUtY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhpcyB0eXBlIGNvbnN0cmFpbnQuCiAgICB2YXJfbmFtZTogVGhlIHZhcmlhYmxlIG5hbWUgYmluZGVkIHRvICdnZW4nIGlmIHR5cGUtY2hlY2tpbmcgYSBmdW5jdGlvbgogICAgICBhcmd1bWVudC4gVXNlZCBzb2xlbHkgZm9yIHRlbXBsYXRpbmcgaW4gZXJyb3IgbWVzc2FnZSBnZW5lcmF0aW9uLgoKICBSZXR1cm5zOgogICAgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIGdlbmVyYXRvciBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHdyYXBwZWQKICAgIHZlcnNpb24gb2YgdGhlIGdlbmVyYXRvciB0aGF0IGludGVybGVhdmVzIHR5cGUtY2hlY2tpbmcgYXQgJ3lpZWxkJwogICAgaXRlcmF0aW9uLiBJZiB0aGUgZ2VuZXJhdG9yIHJlY2VpdmVkIGlzIGFscmVhZHkgd3JhcHBlZCwgdGhlbiBpdCBpcyBzaW1wbHkKICAgIHJldHVybmVkIHRvIGF2b2lkIG5lc3RlZCB3cmFwcGluZy4KICAiIiIKICBkZWYgd3JhcHBlcihnZW4pOgogICAgaWYgaXNpbnN0YW5jZShnZW4sIEdlbmVyYXRvcldyYXBwZXIpOgogICAgICByZXR1cm4gZ2VuCiAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcigKICAgICAgICBnZW4sCiAgICAgICAgbGFtYmRhIHg6IF9jaGVja19pbnN0YW5jZV90eXBlKHR5cGVfY29uc3RyYWludCwgeCwgdmFyX25hbWUpCiAgICApCiAgcmV0dXJuIHdyYXBwZXIKCgpjbGFzcyBHZW5lcmF0b3JXcmFwcGVyKG9iamVjdCk6CiAgIiIiQSB3cmFwcGVyIGFyb3VuZCBhIGdlbmVyYXRvciwgYWxsb3dzIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIHBlciB5aWVsZC4KCiAgQWRkaXRpb25hbGx5LCB3cmFwcGluZyBhIGdlbmVyYXRvciB3aXRoIHRoaXMgY2xhc3MgYWxsb3dzIG9uZSB0byBhc3NpZ24KICBhcmJpdGFyeSBhdHRyaWJ1dGVzIHRvIGEgZ2VuZXJhdG9yIG9iamVjdCBqdXN0IGFzIHdpdGggYSBmdW5jdGlvbiBvYmplY3QuCgogIEF0dHJpYnV0ZXM6CiAgICBpbnRlcm5hbF9nZW46IEEgaW5zdGFuY2Ugb2YgYSBnZW5lcmF0b3Igb2JqZWN0LiBBcyBwYXJ0IG9mICdzdGVwJyBvZiB0aGUKICAgICAgZ2VuZXJhdG9yLCB0aGUgeWllbGRlZCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgdG8gJ2ludGVybGVhdmVfZnVuYycuCiAgICBpbnRlcmxlYXZlX2Z1bmM6IEEgY2FsbGJhY2sgYWNjZXB0aW5nIGEgc2luZ2xlIGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIHdpbGwKICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiBlYWNoIHlpZWxkZWQgJ3N0ZXAnIGluIHRoZSBpbnRlcm5hbAogICAgICBnZW5lcmF0b3IuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBnZW4sIGludGVybGVhdmVfZnVuYyk6CiAgICBzZWxmLmludGVybmFsX2dlbiA9IGdlbgogICAgc2VsZi5pbnRlcmxlYXZlX2Z1bmMgPSBpbnRlcmxlYXZlX2Z1bmMKCiAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgIyBUT0RPKGxhb2x1KTogTWF5IGFsc28gd2FudCB0byBpbnRlcmNlcHQgJ3NlbmQnIGluIHRoZSBmdXR1cmUgaWYgd2UgbW92ZSB0bwogICAgIyBhIEdlbmVyYXRvckhpbnQgd2l0aCAzIHR5cGUtcGFyYW1zOgogICAgIyAgICogR2VuZXJhdG9yW3NlbmRfdHlwZSwgcmV0dXJuX3R5cGUsIHlpZWxkX3R5cGVdCiAgICBpZiBhdHRyID09ICdfX25leHRfXyc6CiAgICAgIHJldHVybiBzZWxmLl9fbmV4dF9fKCkKICAgIGVsaWYgYXR0ciA9PSAnX19pdGVyX18nOgogICAgICByZXR1cm4gc2VsZi5fX2l0ZXJfXygpCiAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmludGVybmFsX2dlbiwgYXR0cikKCiAgZGVmIG5leHQoc2VsZik6CiAgICBuZXh0X3ZhbCA9IG5leHQoc2VsZi5pbnRlcm5hbF9nZW4pCiAgICBzZWxmLmludGVybGVhdmVfZnVuYyhuZXh0X3ZhbCkKICAgIHJldHVybiBuZXh0X3ZhbAoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICB3aGlsZSBUcnVlOgogICAgICB4ID0gbmV4dChzZWxmLmludGVybmFsX2dlbikKICAgICAgc2VsZi5pbnRlcmxlYXZlX2Z1bmMoeCkKICAgICAgeWllbGQgeAp9ck4CAAAoWBwAAABfdW5wYWNrX3Bvc2l0aW9uYWxfYXJnX2hpbnRzWAMAAABkZWZL60v8h1geAAAAV2l0aFR5cGVIaW50cy53aXRoX2lucHV0X3R5cGVzWAMAAABkZWZL0UvUh1geAAAASU9UeXBlSGludHMuc2ltcGxlX291dHB1dF90eXBlWAMAAABkZWZLoEumh1gUAAAASU9UeXBlSGludHMuX19yZXByX19YAwAAAGRlZku1S7iHWA4AAABUeXBlQ2hlY2tFcnJvclgFAAAAY2xhc3NL2kvch1gQAAAAR2VuZXJhdG9yV3JhcHBlclgFAAAAY2xhc3NNHgJNRAKHWB4AAABfaW50ZXJsZWF2ZV90eXBlX2NoZWNrLndyYXBwZXJYAwAAAGRlZk0UAk0bAodYHAAAAEdlbmVyYXRvcldyYXBwZXIuX19nZXRhdHRyX19YAwAAAGRlZk0wAk05AodYFAAAAGdldGNhbGxhcmdzX2ZvcmhpbnRzWAMAAABkZWZL/k0aAYdYDgAAAGdldF90eXBlX2hpbnRzWAMAAABkZWZNHAFNLQGHWBQAAABJT1R5cGVIaW50cy5fX2luaXRfX1gDAAAAZGVmS5ZLmYdYCwAAAElPVHlwZUhpbnRzWAUAAABjbGFzc0uOS7iHWBcAAABJT1R5cGVIaW50cy5fX25vbnplcm9fX1gDAAAAZGVmS7JLtIdYGgAAAHdpdGhfb3V0cHV0X3R5cGVzLmFubm90YXRlWAMAAABkZWZNzgFN0QGHWBsAAABJT1R5cGVIaW50cy5zZXRfaW5wdXRfdHlwZXNYAwAAAGRlZkuaS5yHWA0AAABXaXRoVHlwZUhpbnRzWAUAAABjbGFzc0u6S9iHWBwAAABJT1R5cGVIaW50cy5zZXRfb3V0cHV0X3R5cGVzWAMAAABkZWZLnUufh1gVAAAAR2VuZXJhdG9yV3JhcHBlci5uZXh0WAMAAABkZWZNOgJNPgKHWBAAAABJT1R5cGVIaW50cy5jb3B5WAMAAABkZWZLp0uph1ggAAAAV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZkvOS9CHWBAAAAB3aXRoX2lucHV0X3R5cGVzWAMAAABkZWZNMAFNgAGHWBkAAABJT1R5cGVIaW50cy53aXRoX2RlZmF1bHRzWAMAAABkZWZLqkuxh1gWAAAAV2l0aFR5cGVIaW50cy5fX2luaXRfX1gDAAAAZGVmS75LwIdYGQAAAEdlbmVyYXRvcldyYXBwZXIuX19pdGVyX19YAwAAAGRlZk0/Ak1EAodYCgAAAGdldGFyZ3NwZWNYAwAAAGRlZkt0S4mHWBQAAABfY2hlY2tfaW5zdGFuY2VfdHlwZVgDAAAAZGVmTdUBTfUBh1gWAAAAX2ludGVybGVhdmVfdHlwZV9jaGVja1gDAAAAZGVmTfcBTRwCh1gnAAAAV2l0aFR5cGVIaW50cy5fZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzWAMAAABkZWZLwUvIh1gRAAAAd2l0aF9vdXRwdXRfdHlwZXNYAwAAAGRlZk2CAU3TAYdYGQAAAHdpdGhfaW5wdXRfdHlwZXMuYW5ub3RhdGVYAwAAAGRlZk11AU1/AYdYFQAAAF9wb3NpdGlvbmFsX2FyZ19oaW50c1gDAAAAZGVmS95L6YdYHAAAAFdpdGhUeXBlSGludHMuZ2V0X3R5cGVfaGludHNYAwAAAGRlZkvJS82HWBkAAABHZW5lcmF0b3JXcmFwcGVyLl9faW5pdF9fWAMAAABkZWZNLAJNLwKHWB8AAABXaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzWAMAAABkZWZL1UvYh3V9ck8CAAAoWBEAAAB3aXRoX291dHB1dF90eXBlc1ggAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNyUAIAAFggAAAAV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHNqUAIAAFgeAAAAV2l0aFR5cGVIaW50cy53aXRoX2lucHV0X3R5cGVzalACAABYEAAAAHdpdGhfaW5wdXRfdHlwZXNqUAIAAFgfAAAAV2l0aFR5cGVIaW50cy53aXRoX291dHB1dF90eXBlc2pQAgAAWA4AAABUeXBlQ2hlY2tFcnJvcnJRAgAAalACAABYHAAAAFdpdGhUeXBlSGludHMuZ2V0X3R5cGVfaGludHNqUAIAAFgNAAAAV2l0aFR5cGVIaW50c2pQAgAAdWiKWCAAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc3JSAgAAhYFyUwIAAH1yVAIAAGJ0clUCAABVKWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5KFixGgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGZhY3RvcnkgdGhhdCBjcmVhdGVzIFVuY29tbWl0dGVkQnVuZGxlcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBjb21tb24KZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKCmNsYXNzIEJ1bmRsZUZhY3Rvcnkob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEJ1bmRsZUZhY3RvcnkgY3JlYXRlcyBvdXRwdXQgYnVuZGxlcyB0byBiZSB1c2VkIGJ5IHRyYW5zZm9ybSBldmFsdWF0b3JzLgoKICBBcmdzOgogICAgc3RhY2tlZDogd2hldGhlciBvciBub3QgdG8gc3RhY2sgdGhlIFdpbmRvd2VkVmFsdWVzIHdpdGhpbiB0aGUgYnVuZGxlCiAgICAgIGluIGNhc2UgY29uc2VjdXRpdmUgb25lcyBzaGFyZSB0aGUgc2FtZSB0aW1lc3RhbXAgYW5kIHdpbmRvd3MuCiAgICAgIERpcmVjdFJ1bm5lck9wdGlvbnMuZGlyZWN0X3J1bm5lcl91c2Vfc3RhY2tlZF9idW5kbGUgY29udHJvbHMgdGhpcyBvcHRpb24uCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFja2VkKToKICAgIHNlbGYuX3N0YWNrZWQgPSBzdGFja2VkCgogIGRlZiBjcmVhdGVfYnVuZGxlKHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbik6CiAgICByZXR1cm4gX0J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24sIHNlbGYuX3N0YWNrZWQpCgogIGRlZiBjcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZShzZWxmLCBvdXRwdXRfcGNvbGxlY3Rpb24pOgogICAgYnVuZGxlID0gc2VsZi5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikKICAgIGJ1bmRsZS5jb21taXQoTm9uZSkKICAgIHJldHVybiBidW5kbGUKCgojIGEgYnVuZGxlIHJlcHJlc2VudHMgYSB1bml0IG9mIHdvcmsgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieSBhIHRyYW5zZm9ybS4KY2xhc3MgX0J1bmRsZShjb21tb24uUmVjZWl2ZXIpOgogICIiIlBhcnQgb2YgYSBQQ29sbGVjdGlvbiB3aXRoIG91dHB1dCBlbGVtZW50cy4KCiAgUGFydCBvZiBhIFBDb2xsZWN0aW9uLiBFbGVtZW50cyBhcmUgb3V0cHV0IHRvIGEgYnVuZGxlLCB3aGljaCB3aWxsIGNhdXNlIHRoZW0KICB0byBiZSBleGVjdXRlZCBieSBQVHJhbnNmb3JtIHRoYXQgY29uc3VtZSB0aGUgUENvbGxlY3Rpb24gdGhpcyBidW5kbGUgaXMgYQogIHBhcnQgb2YgYXQgYSBsYXRlciBwb2ludC4gSXQgc3RhcnRzIGFzIGFuIHVuY29tbWl0dGVkIGJ1bmRsZSBhbmQgY2FuIGhhdmUKICBlbGVtZW50cyBhZGRlZCB0byBpdC4gSXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIHRvIG1ha2UgaXQgaW1tdXRhYmxlIGJlZm9yZQogIHBhc3NpbmcgaXQgdG8gYSBkb3duc3RyZWFtIHB0cmFuc2Zvcm0uCgogIFRoZSBzdG9yZWQgZWxlbWVudHMgYXJlIFdpbmRvd2VkVmFsdWVzLCB3aGljaCBjb250YWlucyB0aW1lc3RhbXAgYW5kIHdpbmRvd3MKICBpbmZvcm1hdGlvbi4KCiAgQnVuZGxlIGludGVybmFsbHkgb3B0aW1pemVzIHN0b3JhZ2UgYnkgc3RhY2tpbmcgZWxlbWVudHMgd2l0aCB0aGUgc2FtZQogIHRpbWVzdGFtcCBhbmQgd2luZG93cyBpbnRvIFN0YWNrZWRXaW5kb3dlZFZhbHVlcywgYW5kIHRoZW4gcmV0dXJucyBhbiBpdGVyYWJsZQogIHRvIHJlc3RvcmUgV2luZG93ZWRWYWx1ZXMgdXBvbiBnZXRfZWxlbWVudHMoKSBjYWxsLgoKICBXaGVuIHRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCBkZXNpcmVkLCBpdCBjYW4gYmUgYXZvaWRlZCBieSBhbiBvcHRpb24gd2hlbgogIGNyZWF0aW5nIGJ1bmRsZXMsIGxpa2U6OjoKCiAgICBiID0gQnVuZGxlKHN0YWNrZWQ9RmFsc2UpCiAgIiIiCgogIGNsYXNzIF9TdGFja2VkV2luZG93ZWRWYWx1ZXMob2JqZWN0KToKICAgICIiIkEgc3RhY2sgb2YgV2luZG93ZWRWYWx1ZXMgd2l0aCB0aGUgc2FtZSB0aW1lc3RhbXAgYW5kIHdpbmRvd3MuCgogICAgSXQgbXVzdCBiZSBpbml0aWFsaXplZCBmcm9tIGEgc2luZ2xlIFdpbmRvd2VkVmFsdWUuCgogICAgRXhhbXBsZTo6OgoKICAgICAgcyA9IFN0YWNrZWRXaW5kb3dlZFZhbHVlcyh3aW5kb3dlZF92YWx1ZSkKICAgICAgaWYgKGFub3RoZXJfd2luZG93ZWRfdmFsdWUudGltZXN0YW1wID09IHMudGltZXN0YW1wIGFuZAogICAgICAgICAgYW5vdGhlcl93aW5kb3dlZF92YWx1ZS53aW5kb3dzID09IHMud2luZG93cyk6CiAgICAgICAgcy5hZGRfdmFsdWUoYW5vdGhlcl93aW5kb3dlZF92YWx1ZS52YWx1ZSkKICAgICAgd2luZG93ZWRfdmFsdWVzID0gW3d2IGZvciB3diBpbiBzLndpbmRvd2VkX3ZhbHVlcygpXQogICAgICAjIG5vdyB3aW5kb3dlZF92YWx1ZXMgZXF1YWxzIHRvIFt3aW5kb3dlZF92YWx1ZSwgYW5vdGhlcl93aW5kb3dlZF92YWx1ZV0KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbml0aWFsX3dpbmRvd2VkX3ZhbHVlKToKICAgICAgc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZSA9IGluaXRpYWxfd2luZG93ZWRfdmFsdWUKICAgICAgc2VsZi5fYXBwZW5kZWRfdmFsdWVzID0gW10KCiAgICBAcHJvcGVydHkKICAgIGRlZiB0aW1lc3RhbXAoc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9pbml0aWFsX3dpbmRvd2VkX3ZhbHVlLnRpbWVzdGFtcAoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHdpbmRvd3Moc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9pbml0aWFsX3dpbmRvd2VkX3ZhbHVlLndpbmRvd3MKCiAgICBkZWYgYWRkX3ZhbHVlKHNlbGYsIHZhbHVlKToKICAgICAgc2VsZi5fYXBwZW5kZWRfdmFsdWVzLmFwcGVuZCh2YWx1ZSkKCiAgICBkZWYgd2luZG93ZWRfdmFsdWVzKHNlbGYpOgogICAgICAjIHlpZWxkIGZpcnN0IHdpbmRvd2VkX3ZhbHVlIGFzIGlzLCB0aGVuIGl0ZXJhdGUgdGhyb3VnaAogICAgICAjIF9hcHBlbmRlZF92YWx1ZXMgdG8geWllbGQgV2luZG93ZWRWYWx1ZSBvbiB0aGUgZmx5LgogICAgICB5aWVsZCBzZWxmLl9pbml0aWFsX3dpbmRvd2VkX3ZhbHVlCiAgICAgIGZvciB2IGluIHNlbGYuX2FwcGVuZGVkX3ZhbHVlczoKICAgICAgICB5aWVsZCBXaW5kb3dlZFZhbHVlKHYsIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUudGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS53aW5kb3dzKQoKICBkZWYgX19pbml0X18oc2VsZiwgcGNvbGxlY3Rpb24sIHN0YWNrZWQ9VHJ1ZSk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwY29sbGVjdGlvbiwgKHB2YWx1ZS5QQmVnaW4sIHB2YWx1ZS5QQ29sbGVjdGlvbikpCiAgICBzZWxmLl9wY29sbGVjdGlvbiA9IHBjb2xsZWN0aW9uCiAgICBzZWxmLl9lbGVtZW50cyA9IFtdCiAgICBzZWxmLl9zdGFja2VkID0gc3RhY2tlZAogICAgc2VsZi5fY29tbWl0dGVkID0gRmFsc2UKICAgIHNlbGYuX3RhZyA9IE5vbmUgICMgb3B0aW9uYWwgdGFnIGluZm9ybWF0aW9uIGZvciB0aGlzIGJ1bmRsZQoKICBkZWYgZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKHNlbGYsIG1ha2VfY29weT1GYWxzZSk6CiAgICAiIiJSZXR1cm5zIGl0ZXJhYmxlIGVsZW1lbnRzLgoKICAgIEFyZ3M6CiAgICAgIG1ha2VfY29weTogd2hldGhlciB0byBmb3JjZSByZXR1cm5pbmcgY29weSBvciB5aWVsZGVkIGl0ZXJhYmxlLgoKICAgIFJldHVybnM6CiAgICAgIHVuc3RhY2tlZCBlbGVtZW50cywKICAgICAgaW4gdGhlIGZvcm0gb2YgaXRlcmFibGUgaWYgY29tbWl0dGVkIGFuZCBtYWtlX2NvcHkgaXMgbm90IFRydWUsCiAgICAgIG9yIGFzIGEgbGlzdCBvZiBjb3BpZWQgV2luZG93ZWRWYWx1ZXMuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9zdGFja2VkOgogICAgICBpZiBzZWxmLl9jb21taXR0ZWQgYW5kIG5vdCBtYWtlX2NvcHk6CiAgICAgICAgcmV0dXJuIHNlbGYuX2VsZW1lbnRzCiAgICAgIHJldHVybiBsaXN0KHNlbGYuX2VsZW1lbnRzKQoKICAgIGRlZiBpdGVyYWJsZV9zdGFja2VkX29yX2VsZW1lbnRzKGVsZW1lbnRzKToKICAgICAgZm9yIGUgaW4gZWxlbWVudHM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMpOgogICAgICAgICAgZm9yIHcgaW4gZS53aW5kb3dlZF92YWx1ZXMoKToKICAgICAgICAgICAgeWllbGQgdwogICAgICAgIGVsc2U6CiAgICAgICAgICB5aWVsZCBlCgogICAgaWYgc2VsZi5fY29tbWl0dGVkIGFuZCBub3QgbWFrZV9jb3B5OgogICAgICByZXR1cm4gaXRlcmFibGVfc3RhY2tlZF9vcl9lbGVtZW50cyhzZWxmLl9lbGVtZW50cykKICAgICMgcmV0dXJucyBhIGNvcHkuCiAgICByZXR1cm4gW2UgZm9yIGUgaW4gaXRlcmFibGVfc3RhY2tlZF9vcl9lbGVtZW50cyhzZWxmLl9lbGVtZW50cyldCgogIGRlZiBoYXNfZWxlbWVudHMoc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuX2VsZW1lbnRzKSA+IDAKCiAgQHByb3BlcnR5CiAgZGVmIHRhZyhzZWxmKToKICAgIHJldHVybiBzZWxmLl90YWcKCiAgQHRhZy5zZXR0ZXIKICBkZWYgdGFnKHNlbGYsIHZhbHVlKToKICAgIGFzc2VydCBub3Qgc2VsZi5fdGFnCiAgICBzZWxmLl90YWcgPSB2YWx1ZQoKICBAcHJvcGVydHkKICBkZWYgcGNvbGxlY3Rpb24oc2VsZik6CiAgICAiIiJQQ29sbGVjdGlvbiB0aGF0IHRoZSBlbGVtZW50cyBvZiB0aGlzIFVuY29tbWl0dGVkQnVuZGxlIGJlbG9uZyB0by4iIiIKICAgIHJldHVybiBzZWxmLl9wY29sbGVjdGlvbgoKICBkZWYgYWRkKHNlbGYsIGVsZW1lbnQpOgogICAgIiIiT3V0cHV0cyBhbiBlbGVtZW50IHRvIHRoaXMgYnVuZGxlLgoKICAgIEFyZ3M6CiAgICAgIGVsZW1lbnQ6IFdpbmRvd2VkVmFsdWUKICAgICIiIgogICAgYXNzZXJ0IG5vdCBzZWxmLl9jb21taXR0ZWQKICAgIGlmIG5vdCBzZWxmLl9zdGFja2VkOgogICAgICBzZWxmLl9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCkKICAgICAgcmV0dXJuCiAgICBpZiAoc2VsZi5fZWxlbWVudHMgYW5kCiAgICAgICAgKGlzaW5zdGFuY2Uoc2VsZi5fZWxlbWVudHNbLTFdLCAoV2luZG93ZWRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMpKSkgYW5kCiAgICAgICAgc2VsZi5fZWxlbWVudHNbLTFdLnRpbWVzdGFtcCA9PSBlbGVtZW50LnRpbWVzdGFtcCBhbmQKICAgICAgICBzZWxmLl9lbGVtZW50c1stMV0ud2luZG93cyA9PSBlbGVtZW50LndpbmRvd3MpOgogICAgICBpZiBpc2luc3RhbmNlKHNlbGYuX2VsZW1lbnRzWy0xXSwgV2luZG93ZWRWYWx1ZSk6CiAgICAgICAgc2VsZi5fZWxlbWVudHNbLTFdID0gX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzKHNlbGYuX2VsZW1lbnRzWy0xXSkKICAgICAgc2VsZi5fZWxlbWVudHNbLTFdLmFkZF92YWx1ZShlbGVtZW50LnZhbHVlKQogICAgZWxzZToKICAgICAgc2VsZi5fZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCgogIGRlZiBvdXRwdXQoc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmFkZChlbGVtZW50KQoKICBkZWYgcmVjZWl2ZShzZWxmLCBlbGVtZW50KToKICAgIHNlbGYuYWRkKGVsZW1lbnQpCgogIGRlZiBjb21taXQoc2VsZiwgc3luY2hyb25pemVkX3Byb2Nlc3NpbmdfdGltZSk6CiAgICAiIiJDb21taXRzIHRoaXMgYnVuZGxlLgoKICAgIFVuY29tbWl0dGVkIGJ1bmRsZSB3aWxsIGJlY29tZSBjb21taXR0ZWQgKGltbXV0YWJsZSkgYWZ0ZXIgdGhpcyBjYWxsLgoKICAgIEFyZ3M6CiAgICAgIHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWU6IHRoZSBzeW5jaHJvbml6ZWQgcHJvY2Vzc2luZyB0aW1lIGF0IHdoaWNoCiAgICAgIHRoaXMgYnVuZGxlIHdhcyBjb21taXR0ZWQKICAgICIiIgogICAgYXNzZXJ0IG5vdCBzZWxmLl9jb21taXR0ZWQKICAgIHNlbGYuX2NvbW1pdHRlZCA9IFRydWUKICAgIHNlbGYuX2VsZW1lbnRzID0gdHVwbGUoc2VsZi5fZWxlbWVudHMpCiAgICBzZWxmLl9zeW5jaHJvbml6ZWRfcHJvY2Vzc2luZ190aW1lID0gc3luY2hyb25pemVkX3Byb2Nlc3NpbmdfdGltZQp9clYCAAAoWA0AAABCdW5kbGVGYWN0b3J5WAUAAABjbGFzc0sbSzCHWCcAAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMuX19pbml0X19YAwAAAGRlZktYS1uHWA4AAABfQnVuZGxlLmNvbW1pdFgDAAAAZGVmS8BLzYdYOgAAAF9CdW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlLml0ZXJhYmxlX3N0YWNrZWRfb3JfZWxlbWVudHNYAwAAAGRlZkuHS46HWAsAAABfQnVuZGxlLmFkZFgDAAAAZGVmS6VLuYdYKAAAAF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcy50aW1lc3RhbXBYAwAAAGRlZktcS1+HWBAAAABfQnVuZGxlLl9faW5pdF9fWAMAAABkZWZLb0t2h1gOAAAAX0J1bmRsZS5vdXRwdXRYAwAAAGRlZku6S7yHWCsAAABCdW5kbGVGYWN0b3J5LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlWAMAAABkZWZLLEswh1gUAAAAX0J1bmRsZS5oYXNfZWxlbWVudHNYAwAAAGRlZkuUS5aHWB4AAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXNYBQAAAGNsYXNzS0lLbodYKAAAAF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcy5hZGRfdmFsdWVYAwAAAGRlZktkS2aHWBYAAABCdW5kbGVGYWN0b3J5Ll9faW5pdF9fWAMAAABkZWZLJksoh1gLAAAAX0J1bmRsZS50YWdYAwAAAGRlZkubS5+HWA8AAABfQnVuZGxlLnJlY2VpdmVYAwAAAGRlZku9S7+HWB0AAABfQnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZVgDAAAAZGVmS3dLk4dYLgAAAF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcy53aW5kb3dlZF92YWx1ZXNYAwAAAGRlZktnS26HWCYAAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMud2luZG93c1gDAAAAZGVmS2BLY4dYEwAAAF9CdW5kbGUucGNvbGxlY3Rpb25YAwAAAGRlZkugS6SHWAcAAABfQnVuZGxlWAUAAABjbGFzc0szS82HWBsAAABCdW5kbGVGYWN0b3J5LmNyZWF0ZV9idW5kbGVYAwAAAGRlZkspSyuHdX1yVwIAAChYDQAAAEJ1bmRsZUZhY3RvcnlYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5clgCAABYKwAAAEJ1bmRsZUZhY3RvcnkuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGVqWAIAAFgbAAAAQnVuZGxlRmFjdG9yeS5jcmVhdGVfYnVuZGxlalgCAAB1aIpYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5clkCAACFgXJaAgAAfXJbAgAAYnRyXAIAAFUuYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcihYE48AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQW4gZXZhbHVhdG9yIG9mIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb2YgYSB0cmFuc2Zvcm0uIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKCmltcG9ydCBhcGFjaGVfYmVhbS5pbyBhcyBpbwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFR5cGVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgY29tbW9uCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5SdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblN0YXRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlIGltcG9ydCBfTmF0aXZlV3JpdGUgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyIGltcG9ydCBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyIGltcG9ydCBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgUHJvY2Vzc0VsZW1lbnRzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIgaW1wb3J0IFByb2Nlc3NGbgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyIGltcG9ydCBTREZQcm9jZXNzRWxlbWVudEludm9rZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsIGltcG9ydCBLZXllZFdvcmtJdGVtCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgVHJhbnNmb3JtUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgaW1wb3J0IFdhdGVybWFya01hbmFnZXIKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBFbGVtZW50RXZlbnQKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBQcm9jZXNzaW5nVGltZUV2ZW50CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgVGVzdFN0cmVhbQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0gaW1wb3J0IFdhdGVybWFya0V2ZW50CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29yZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgVGltZURvbWFpbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IF9MaXN0U3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3dzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd2VkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrIGltcG9ydCBPdXRwdXRDaGVja1dyYXBwZXJEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjayBpbXBvcnQgVHlwZUNoZWNrRXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrIGltcG9ydCBUeXBlQ2hlY2tXcmFwcGVyRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBjb3VudGVycwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgTUlOX1RJTUVTVEFNUApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgVGltZXN0YW1wCgoKY2xhc3MgVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENyZWF0ZXMgaW5zdGFuY2VzIG9mIFRyYW5zZm9ybUV2YWx1YXRvciBmb3IgdGhlIGFwcGxpY2F0aW9uIG9mIGEgdHJhbnNmb3JtLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0KToKICAgIGFzc2VydCBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAogICAgc2VsZi5fZXZhbHVhdG9ycyA9IHsKICAgICAgICBpby5SZWFkOiBfQm91bmRlZFJlYWRFdmFsdWF0b3IsCiAgICAgICAgaW8uUmVhZFN0cmluZ3NGcm9tUHViU3ViOiBfUHViU3ViUmVhZEV2YWx1YXRvciwKICAgICAgICBjb3JlLkZsYXR0ZW46IF9GbGF0dGVuRXZhbHVhdG9yLAogICAgICAgIGNvcmUuUGFyRG86IF9QYXJEb0V2YWx1YXRvciwKICAgICAgICBjb3JlLl9Hcm91cEJ5S2V5T25seTogX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLAogICAgICAgIF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seTogX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLAogICAgICAgIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdzogX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLAogICAgICAgIF9OYXRpdmVXcml0ZTogX05hdGl2ZVdyaXRlRXZhbHVhdG9yLAogICAgICAgIFRlc3RTdHJlYW06IF9UZXN0U3RyZWFtRXZhbHVhdG9yLAogICAgICAgIFByb2Nlc3NFbGVtZW50czogX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvcgogICAgfQogICAgc2VsZi5fcm9vdF9idW5kbGVfcHJvdmlkZXJzID0gewogICAgICAgIGNvcmUuUFRyYW5zZm9ybTogRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlciwKICAgICAgICBUZXN0U3RyZWFtOiBfVGVzdFN0cmVhbVJvb3RCdW5kbGVQcm92aWRlciwKICAgIH0KCiAgZGVmIGdldF9ldmFsdWF0b3IoCiAgICAgIHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcik6CiAgICAiIiJSZXR1cm5zIGEgVHJhbnNmb3JtRXZhbHVhdG9yIHN1aXRhYmxlIGZvciBwcm9jZXNzaW5nIGdpdmVuIGlucHV0cy4iIiIKICAgIGFzc2VydCBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIGFzc2VydCBib29sKGFwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0cykgPT0gYm9vbChzaWRlX2lucHV0cykKCiAgICAjIFdhbGsgdXAgdGhlIGNsYXNzIGhpZXJhcmNoeSB0byBmaW5kIGFuIGV2YWx1YWJsZSB0eXBlLiBUaGlzIGlzIG5lY2Vzc2FyeQogICAgIyBmb3Igc3VwcG9ydGluZyBzdWItY2xhc3NlcyBvZiBjb3JlIHRyYW5zZm9ybXMuCiAgICBmb3IgY2xzIGluIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fLm1ybygpOgogICAgICBldmFsdWF0b3IgPSBzZWxmLl9ldmFsdWF0b3JzLmdldChjbHMpCiAgICAgIGlmIGV2YWx1YXRvcjoKICAgICAgICBicmVhawoKICAgIGlmIG5vdCBldmFsdWF0b3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRXhlY3V0aW9uIG9mIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcy4nICUgKAogICAgICAgICAgICAgIHR5cGUoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSksIHNlbGYpKQogICAgcmV0dXJuIGV2YWx1YXRvcihzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMsCiAgICAgICAgICAgICAgICAgICAgIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcikKCiAgZGVmIGdldF9yb290X2J1bmRsZV9wcm92aWRlcihzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgcHJvdmlkZXJfY2xzID0gTm9uZQogICAgZm9yIGNscyBpbiBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgcHJvdmlkZXJfY2xzID0gc2VsZi5fcm9vdF9idW5kbGVfcHJvdmlkZXJzLmdldChjbHMpCiAgICAgIGlmIHByb3ZpZGVyX2NsczoKICAgICAgICBicmVhawogICAgaWYgbm90IHByb3ZpZGVyX2NsczoKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICdSb290IHByb3ZpZGVyIGZvciBbJXNdIG5vdCBpbXBsZW1lbnRlZCBpbiBydW5uZXIgJXMnICUgKAogICAgICAgICAgICAgIHR5cGUoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSksIHNlbGYpKQogICAgcmV0dXJuIHByb3ZpZGVyX2NscyhzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSkKCiAgZGVmIHNob3VsZF9leGVjdXRlX3NlcmlhbGx5KHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhpcyBhcHBsaWVkX3B0cmFuc2Zvcm0gc2hvdWxkIHJ1biBvbmUgYnVuZGxlIGF0IGEgdGltZS4KCiAgICBTb21lIFRyYW5zZm9ybUV2YWx1YXRvcnMgdXNlIGEgZ2xvYmFsIHN0YXRlIG9iamVjdCB0byBrZWVwIHRyYWNrIG9mIHRoZWlyCiAgICBnbG9iYWwgZXhlY3V0aW9uIHN0YXRlLiBGb3IgZXhhbXBsZSBldmFsdWF0b3IgZm9yIF9Hcm91cEJ5S2V5T25seSB1c2VzIHRoaXMKICAgIHN0YXRlIGFzIGFuIGluIG1lbW9yeSBkaWN0aW9uYXJ5IHRvIGJ1ZmZlciBrZXlzLgoKICAgIFNlcmlhbGx5IGV4ZWN1dGVkIGV2YWx1YXRvcnMgd2lsbCBhY3QgYXMgc3luY2luZyBwb2ludCBpbiB0aGUgZ3JhcGggYW5kCiAgICBleGVjdXRpb24gd2lsbCBub3QgbW92ZSBmb3J3YXJkIHVudGlsIHRoZXkgcmVjZWl2ZSBhbGwgb2YgdGhlaXIgaW5wdXRzLiBPbmNlCiAgICB0aGV5IHJlY2VpdmUgYWxsIG9mIHRoZWlyIGlucHV0LCB0aGV5IHdpbGwgcmVsZWFzZSB0aGUgY29tYmluZWQgb3V0cHV0LgogICAgVGhlaXIgb3V0cHV0IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGJ1bmRsZXMgYXMgdGhleSBtYXkgZGl2aWRlIHRoZWlyIG91dHB1dAogICAgaW50byBwaWVjZXMgYmVmb3JlIHJlbGVhc2luZy4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IFRyYW5zZm9ybSB0byBiZSB1c2VkIGZvciBleGVjdXRpb24uCgogICAgUmV0dXJuczoKICAgICAgVHJ1ZSBpZiBleGVjdXRvciBzaG91bGQgZXhlY3V0ZSBhcHBsaWVkX3B0cmFuc2Zvcm0gc2VyaWFsbHkuCiAgICAiIiIKICAgIHJldHVybiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAoY29yZS5fR3JvdXBCeUtleU9ubHksCiAgICAgICAgICAgICAgICAgICAgICAgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LAogICAgICAgICAgICAgICAgICAgICAgIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICBfTmF0aXZlV3JpdGUpKQoKCmNsYXNzIFJvb3RCdW5kbGVQcm92aWRlcihvYmplY3QpOgogICIiIlByb3ZpZGVzIGJ1bmRsZXMgZm9yIHRoZSBpbml0aWFsIGV4ZWN1dGlvbiBvZiBhIHJvb3QgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0KCiAgZGVmIGdldF9yb290X2J1bmRsZXMoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlcihSb290QnVuZGxlUHJvdmlkZXIpOgogICIiIlByb3ZpZGVzIGFuIGVtcHR5IGJ1bmRsZSBieSBkZWZhdWx0IGZvciByb290IHRyYW5zZm9ybXMuIiIiCgogIGRlZiBnZXRfcm9vdF9idW5kbGVzKHNlbGYpOgogICAgaW5wdXRfbm9kZSA9IHB2YWx1ZS5QQmVnaW4oc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5waXBlbGluZSkKICAgIGVtcHR5X2J1bmRsZSA9ICgKICAgICAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoaW5wdXRfbm9kZSkpCiAgICByZXR1cm4gW2VtcHR5X2J1bmRsZV0KCgpjbGFzcyBfVGVzdFN0cmVhbVJvb3RCdW5kbGVQcm92aWRlcihSb290QnVuZGxlUHJvdmlkZXIpOgogICIiIlByb3ZpZGVzIGFuIGluaXRpYWwgYnVuZGxlIGZvciB0aGUgVGVzdFN0cmVhbSBldmFsdWF0b3IuIiIiCgogIGRlZiBnZXRfcm9vdF9idW5kbGVzKHNlbGYpOgogICAgdGVzdF9zdHJlYW0gPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBidW5kbGVzID0gW10KICAgIGlmIGxlbih0ZXN0X3N0cmVhbS5ldmVudHMpID4gMDoKICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoCiAgICAgICAgICBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpKQogICAgICAjIEV4cGxpY2l0bHkgc2V0IHRpbWVzdGFtcCB0byBNSU5fVElNRVNUQU1QIHRvIGVuc3VyZSB0aGF0IHdlIGhvbGQgdGhlCiAgICAgICMgd2F0ZXJtYXJrLgogICAgICBidW5kbGUuYWRkKEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoMCwgdGltZXN0YW1wPU1JTl9USU1FU1RBTVApKQogICAgICBidW5kbGUuY29tbWl0KE5vbmUpCiAgICAgIGJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgIHJldHVybiBidW5kbGVzCgoKY2xhc3MgX1RyYW5zZm9ybUV2YWx1YXRvcihvYmplY3QpOgogICIiIkFuIGV2YWx1YXRvciBvZiBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIG9mIGEgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYuX2lucHV0X2NvbW1pdHRlZF9idW5kbGUgPSBpbnB1dF9jb21taXR0ZWRfYnVuZGxlCiAgICBzZWxmLl9zaWRlX2lucHV0cyA9IHNpZGVfaW5wdXRzCiAgICBzZWxmLl9leHBhbmRfb3V0cHV0cygpCiAgICBzZWxmLl9leGVjdXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dC5nZXRfZXhlY3V0aW9uX2NvbnRleHQoCiAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtKQogICAgc2VsZi5zY29wZWRfbWV0cmljc19jb250YWluZXIgPSBzY29wZWRfbWV0cmljc19jb250YWluZXIKCiAgZGVmIF9leHBhbmRfb3V0cHV0cyhzZWxmKToKICAgIG91dHB1dHMgPSBzZXQoKQogICAgZm9yIHB2YWwgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgIGVsc2U6CiAgICAgICAgcHZhbHMgPSAocHZhbCwpCiAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgIG91dHB1dHMuYWRkKHYpCiAgICBzZWxmLl9vdXRwdXRzID0gZnJvemVuc2V0KG91dHB1dHMpCgogIGRlZiBfc3BsaXRfbGlzdF9pbnRvX2J1bmRsZXMoCiAgICAgIHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbiwgZWxlbWVudHMsIG1heF9lbGVtZW50X3Blcl9idW5kbGUsCiAgICAgIGVsZW1lbnRfc2l6ZV9mbik6CiAgICAiIiJTcGxpdHMgZWxlbWVudHMsIGFuIGl0ZXJhYmxlLCBpbnRvIG11bHRpcGxlIG91dHB1dCBidW5kbGVzLgoKICAgIEFyZ3M6CiAgICAgIG91dHB1dF9wY29sbGVjdGlvbjogUENvbGxlY3Rpb24gdGhhdCB0aGUgZWxlbWVudHMgYmVsb25nIHRvLgogICAgICBlbGVtZW50czogZWxlbWVudHMgdG8gYmUgY2h1bmtlZCBpbnRvIGJ1bmRsZXMuCiAgICAgIG1heF9lbGVtZW50X3Blcl9idW5kbGU6IChhcHByb3hpbWF0ZWx5KSB0aGUgbWF4aW11bSBlbGVtZW50IHBlciBidW5kbGUuCiAgICAgICAgSWYgaXQgaXMgTm9uZSwgb25seSBhIHNpbmdsZSBidW5kbGUgd2lsbCBiZSBwcm9kdWNlZC4KICAgICAgZWxlbWVudF9zaXplX2ZuOiBGdW5jdGlvbiB0byByZXR1cm4gdGhlIHNpemUgb2YgYSBnaXZlbiBlbGVtZW50LgoKICAgIFJldHVybnM6CiAgICAgIExpc3Qgb2Ygb3V0cHV0IHVuY29tbWl0dGVkIGJ1bmRsZXMgd2l0aCBhdCBsZWFzdCBvbmUgYnVuZGxlLgogICAgIiIiCiAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCiAgICBidW5kbGVfc2l6ZSA9IDAKICAgIGJ1bmRsZXMgPSBbYnVuZGxlXQogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGlmIG1heF9lbGVtZW50X3Blcl9idW5kbGUgYW5kIGJ1bmRsZV9zaXplID49IG1heF9lbGVtZW50X3Blcl9idW5kbGU6CiAgICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICAgIGJ1bmRsZV9zaXplID0gMAogICAgICAgIGJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKCiAgICAgIGJ1bmRsZS5vdXRwdXQoZWxlbWVudCkKICAgICAgYnVuZGxlX3NpemUgKz0gZWxlbWVudF9zaXplX2ZuKGVsZW1lbnQpCiAgICByZXR1cm4gYnVuZGxlcwoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgIiIiU3RhcnRzIGEgbmV3IGJ1bmRsZS4iIiIKICAgIHBhc3MKCiAgZGVmIHByb2Nlc3NfdGltZXJfd3JhcHBlcihzZWxmLCB0aW1lcl9maXJpbmcpOgogICAgIiIiUHJvY2VzcyB0aW1lciBieSBjbGVhcmluZyBhbmQgdGhlbiBjYWxsaW5nIHByb2Nlc3NfdGltZXIoKS4KCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhbnkgdGltZXIgZmlyaW5nIGFuZCBjbGVhcnMgdGhlIGRlbGl2ZXJlZAogICAgdGltZXIgZnJvbSB0aGUga2V5ZWQgc3RhdGUgYW5kIHRoZW4gY2FsbHMgcHJvY2Vzc190aW1lcigpLiAgVGhlIGRlZmF1bHQKICAgIHByb2Nlc3NfdGltZXIoKSBpbXBsZW1lbnRhdGlvbiBlbWl0cyBhIEtleWVkV29ya0l0ZW0gZm9yIHRoZSBwYXJ0aWN1bGFyCiAgICB0aW1lciBhbmQgcGFzc2VzIGl0IHRvIHByb2Nlc3NfZWxlbWVudCgpLiAgRXZhbHVhdG9yIHN1YmNsYXNzZXMgd2hpY2gKICAgIGRlc2lyZSBkaWZmZXJlbnQgdGltZXIgZGVsaXZlcnkgc2VtYW50aWNzIGNhbiBvdmVycmlkZSBwcm9jZXNzX3RpbWVyKCkuCiAgICAiIiIKICAgIHN0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKHRpbWVyX2ZpcmluZy5lbmNvZGVkX2tleSkKICAgIHN0YXRlLmNsZWFyX3RpbWVyKAogICAgICAgIHRpbWVyX2ZpcmluZy53aW5kb3csIHRpbWVyX2ZpcmluZy5uYW1lLCB0aW1lcl9maXJpbmcudGltZV9kb21haW4pCiAgICBzZWxmLnByb2Nlc3NfdGltZXIodGltZXJfZmlyaW5nKQoKICBkZWYgcHJvY2Vzc190aW1lcihzZWxmLCB0aW1lcl9maXJpbmcpOgogICAgIiIiRGVmYXVsdCBwcm9jZXNzX3RpbWVyKCkgaW1wbC4gZ2VuZXJhdGluZyBLZXllZFdvcmtJdGVtIGVsZW1lbnQuIiIiCiAgICBzZWxmLnByb2Nlc3NfZWxlbWVudCgKICAgICAgICBHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKAogICAgICAgICAgICBLZXllZFdvcmtJdGVtKHRpbWVyX2ZpcmluZy5lbmNvZGVkX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9maXJpbmdzPVt0aW1lcl9maXJpbmddKSkpCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICAiIiJQcm9jZXNzZXMgYSBuZXcgZWxlbWVudCBhcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGJ1bmRsZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIGRvIG5vdCBwcm9jZXNzIGVsZW1lbnRzLicsIHR5cGUoc2VsZikpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIiIiRmluaXNoZXMgdGhlIGJ1bmRsZSBhbmQgcHJvZHVjZXMgb3V0cHV0LiIiIgogICAgcGFzcwoKCmNsYXNzIF9Cb3VuZGVkUmVhZEV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIGJvdW5kZWQgUmVhZCB0cmFuc2Zvcm0uIiIiCgogICMgQWZ0ZXIgc29tZSBiZW5jaG1hcmtzLCAxMDAwIHdhcyBvcHRpbWFsIGFtb25nIHsxMDAsMTAwMCwxMDAwMH0KICBNQVhfRUxFTUVOVF9QRVJfQlVORExFID0gMTAwMAoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc2VsZi5fc291cmNlID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5zb3VyY2UKICAgIHNlbGYuX3NvdXJjZS5waXBlbGluZV9vcHRpb25zID0gZXZhbHVhdGlvbl9jb250ZXh0LnBpcGVsaW5lX29wdGlvbnMKICAgIHN1cGVyKF9Cb3VuZGVkUmVhZEV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcikKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KCiAgICBkZWYgX3JlYWRfdmFsdWVzX3RvX2J1bmRsZXMocmVhZGVyKToKICAgICAgcmVhZF9yZXN1bHQgPSBbR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShlKSBmb3IgZSBpbiByZWFkZXJdCiAgICAgIHJldHVybiBzZWxmLl9zcGxpdF9saXN0X2ludG9fYnVuZGxlcygKICAgICAgICAgIG91dHB1dF9wY29sbGVjdGlvbiwgcmVhZF9yZXN1bHQsCiAgICAgICAgICBfQm91bmRlZFJlYWRFdmFsdWF0b3IuTUFYX0VMRU1FTlRfUEVSX0JVTkRMRSwgbGFtYmRhIF86IDEpCgogICAgaWYgaXNpbnN0YW5jZShzZWxmLl9zb3VyY2UsIGlvLmlvYmFzZS5Cb3VuZGVkU291cmNlKToKICAgICAgIyBHZXR0aW5nIGEgUmFuZ2VUcmFja2VyIGZvciB0aGUgZGVmYXVsdCByYW5nZSBvZiB0aGUgc291cmNlIGFuZCByZWFkaW5nCiAgICAgICMgdGhlIGZ1bGwgc291cmNlIHVzaW5nIHRoYXQuCiAgICAgIHJhbmdlX3RyYWNrZXIgPSBzZWxmLl9zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoTm9uZSwgTm9uZSkKICAgICAgcmVhZGVyID0gc2VsZi5fc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICAgICAgYnVuZGxlcyA9IF9yZWFkX3ZhbHVlc190b19idW5kbGVzKHJlYWRlcikKICAgIGVsc2U6CiAgICAgIHdpdGggc2VsZi5fc291cmNlLnJlYWRlcigpIGFzIHJlYWRlcjoKICAgICAgICBidW5kbGVzID0gX3JlYWRfdmFsdWVzX3RvX2J1bmRsZXMocmVhZGVyKQoKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW10sIE5vbmUsIE5vbmUpCgoKY2xhc3MgX1Rlc3RTdHJlYW1FdmFsdWF0b3IoX1RyYW5zZm9ybUV2YWx1YXRvcik6CiAgIiIiVHJhbnNmb3JtRXZhbHVhdG9yIGZvciB0aGUgVGVzdFN0cmVhbSB0cmFuc2Zvcm0uIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcik6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzZWxmLnRlc3Rfc3RyZWFtID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgc3VwZXIoX1Rlc3RTdHJlYW1FdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmN1cnJlbnRfaW5kZXggPSAtMQogICAgc2VsZi53YXRlcm1hcmsgPSBNSU5fVElNRVNUQU1QCiAgICBzZWxmLmJ1bmRsZXMgPSBbXQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgaW5kZXggPSBlbGVtZW50LnZhbHVlCiAgICBzZWxmLndhdGVybWFyayA9IGVsZW1lbnQudGltZXN0YW1wCiAgICBhc3NlcnQgaXNpbnN0YW5jZShpbmRleCwgaW50KQogICAgYXNzZXJ0IDAgPD0gaW5kZXggPD0gbGVuKHNlbGYudGVzdF9zdHJlYW0uZXZlbnRzKQogICAgc2VsZi5jdXJyZW50X2luZGV4ID0gaW5kZXgKICAgIGV2ZW50ID0gc2VsZi50ZXN0X3N0cmVhbS5ldmVudHNbc2VsZi5jdXJyZW50X2luZGV4XQogICAgaWYgaXNpbnN0YW5jZShldmVudCwgRWxlbWVudEV2ZW50KToKICAgICAgYXNzZXJ0IGxlbihzZWxmLl9vdXRwdXRzKSA9PSAxCiAgICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICBmb3IgdHYgaW4gZXZlbnQudGltZXN0YW1wZWRfdmFsdWVzOgogICAgICAgIGJ1bmRsZS5vdXRwdXQoCiAgICAgICAgICAgIEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUodHYudmFsdWUsIHRpbWVzdGFtcD10di50aW1lc3RhbXApKQogICAgICBzZWxmLmJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgV2F0ZXJtYXJrRXZlbnQpOgogICAgICBhc3NlcnQgZXZlbnQubmV3X3dhdGVybWFyayA+PSBzZWxmLndhdGVybWFyawogICAgICBzZWxmLndhdGVybWFyayA9IGV2ZW50Lm5ld193YXRlcm1hcmsKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgUHJvY2Vzc2luZ1RpbWVFdmVudCk6CiAgICAgICMgVE9ETyhjY3kpOiBhZHZhbmNlIHByb2Nlc3NpbmcgdGltZSBpbiB0aGUgY29udGV4dCdzIG1vY2sgY2xvY2suCiAgICAgIHBhc3MKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgVGVzdFN0cmVhbSBldmVudDogJXMuJyAlIGV2ZW50KQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHVucHJvY2Vzc2VkX2J1bmRsZXMgPSBbXQogICAgaG9sZCA9IE5vbmUKICAgIGlmIHNlbGYuY3VycmVudF9pbmRleCA8IGxlbihzZWxmLnRlc3Rfc3RyZWFtLmV2ZW50cykgLSAxOgogICAgICB1bnByb2Nlc3NlZF9idW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZSgKICAgICAgICAgIHB2YWx1ZS5QQmVnaW4oc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5waXBlbGluZSkpCiAgICAgIHVucHJvY2Vzc2VkX2J1bmRsZS5hZGQoR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgKICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRleCArIDEsIHRpbWVzdGFtcD1zZWxmLndhdGVybWFyaykpCiAgICAgIHVucHJvY2Vzc2VkX2J1bmRsZXMuYXBwZW5kKHVucHJvY2Vzc2VkX2J1bmRsZSkKICAgICAgaG9sZCA9IHNlbGYud2F0ZXJtYXJrCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdCgKICAgICAgICBzZWxmLCBzZWxmLmJ1bmRsZXMsIHVucHJvY2Vzc2VkX2J1bmRsZXMsIE5vbmUsIHtOb25lOiBob2xkfSkKCgpjbGFzcyBfUHViU3ViU3Vic2NyaXB0aW9uV3JhcHBlcihvYmplY3QpOgogICIiIldyYXBwZXIgZm9yIGdhcmJhZ2UtY29sbGVjdGluZyB0ZW1wb3JhcnkgUHViU3ViIHN1YnNjcmlwdGlvbnMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJzY3JpcHRpb24sIHNob3VsZF9jbGVhbnVwKToKICAgIHNlbGYuc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uCiAgICBzZWxmLnNob3VsZF9jbGVhbnVwID0gc2hvdWxkX2NsZWFudXAKCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICBpZiBzZWxmLnNob3VsZF9jbGVhbnVwOgogICAgICBzZWxmLnN1YnNjcmlwdGlvbi5kZWxldGUoKQoKCmNsYXNzIF9QdWJTdWJSZWFkRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgUHViU3ViIHJlYWQuIiIiCgogIF9zdWJzY3JpcHRpb25fY2FjaGUgPSB7fQoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1B1YlN1YlJlYWRFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpCgogICAgc291cmNlID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5fc291cmNlCiAgICBzZWxmLl9zdWJzY3JpcHRpb24gPSBfUHViU3ViUmVhZEV2YWx1YXRvci5nZXRfc3Vic2NyaXB0aW9uKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSwgc291cmNlLnByb2plY3QsIHNvdXJjZS50b3BpY19uYW1lLAogICAgICAgIHNvdXJjZS5zdWJzY3JpcHRpb25fbmFtZSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9zdWJzY3JpcHRpb24oY2xzLCB0cmFuc2Zvcm0sIHByb2plY3QsIHRvcGljLCBzdWJzY3JpcHRpb25fbmFtZSk6CiAgICBpZiB0cmFuc2Zvcm0gbm90IGluIGNscy5fc3Vic2NyaXB0aW9uX2NhY2hlOgogICAgICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgcHVic3ViCiAgICAgIHNob3VsZF9jcmVhdGUgPSBub3Qgc3Vic2NyaXB0aW9uX25hbWUKICAgICAgaWYgc2hvdWxkX2NyZWF0ZToKICAgICAgICBzdWJzY3JpcHRpb25fbmFtZSA9ICdiZWFtXyVkXyV4JyAlICgKICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwgcmFuZG9tLnJhbmRyYW5nZSgxIDw8IDMyKSkKICAgICAgY2xzLl9zdWJzY3JpcHRpb25fY2FjaGVbdHJhbnNmb3JtXSA9IF9QdWJTdWJTdWJzY3JpcHRpb25XcmFwcGVyKAogICAgICAgICAgcHVic3ViLkNsaWVudChwcm9qZWN0PXByb2plY3QpLnRvcGljKHRvcGljKS5zdWJzY3JpcHRpb24oCiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX25hbWUpLAogICAgICAgICAgc2hvdWxkX2NyZWF0ZSkKICAgICAgaWYgc2hvdWxkX2NyZWF0ZToKICAgICAgICBjbHMuX3N1YnNjcmlwdGlvbl9jYWNoZVt0cmFuc2Zvcm1dLnN1YnNjcmlwdGlvbi5jcmVhdGUoKQogICAgcmV0dXJuIGNscy5fc3Vic2NyaXB0aW9uX2NhY2hlW3RyYW5zZm9ybV0uc3Vic2NyaXB0aW9uCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBwYXNzCgogIGRlZiBfcmVhZF9mcm9tX3B1YnN1YihzZWxmKToKICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIKICAgICMgQmVjYXVzZSBvZiB0aGUgQXV0b0Fjaywgd2UgYXJlIG5vdCBhYmxlIHRvIHJlcmVhZCBtZXNzYWdlcyBpZiB0aGlzCiAgICAjIGV2YWx1YXRvciBmYWlscyB3aXRoIGFuIGV4Y2VwdGlvbiBiZWZvcmUgZW1pdHRpbmcgYSBidW5kbGUuIEhvd2V2ZXIsCiAgICAjIHRoZSBEaXJlY3RSdW5uZXIgY3VycmVudGx5IGRvZXNuJ3QgcmV0cnkgd29yayBpdGVtcyBhbnl3YXksIHNvIHRoZQogICAgIyBwaXBlbGluZSB3b3VsZCBlbnRlciBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgb24gYW55IGVycm9yLgogICAgd2l0aCBwdWJzdWIuc3Vic2NyaXB0aW9uLkF1dG9BY2soCiAgICAgICAgc2VsZi5fc3Vic2NyaXB0aW9uLCByZXR1cm5faW1tZWRpYXRlbHk9VHJ1ZSwKICAgICAgICBtYXhfbWVzc2FnZXM9MTApIGFzIHJlc3VsdHM6CiAgICAgIHJldHVybiBbbWVzc2FnZS5kYXRhIGZvciB1bnVzZWRfYWNrX2lkLCBtZXNzYWdlIGluIHJlc3VsdHMuaXRlbXMoKV0KCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBkYXRhID0gc2VsZi5fcmVhZF9mcm9tX3B1YnN1YigpCiAgICBpZiBkYXRhOgogICAgICBvdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCiAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikKICAgICAgIyBUT0RPKGNjeSk6IHdlIGN1cnJlbnRseSBkbyBub3QgdXNlIHRoZSBQdWJTdWIgbWVzc2FnZSB0aW1lc3RhbXAgb3IKICAgICAgIyByZXNwZWN0IHRoZSBQdWJTdWIgc291cmNlJ3MgaWRfbGFiZWwgZmllbGQuCiAgICAgIG5vdyA9IFRpbWVzdGFtcC5vZih0aW1lLnRpbWUoKSkKICAgICAgZm9yIG1lc3NhZ2VfZGF0YSBpbiBkYXRhOgogICAgICAgIGJ1bmRsZS5vdXRwdXQoR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShtZXNzYWdlX2RhdGEsIHRpbWVzdGFtcD1ub3cpKQogICAgICBidW5kbGVzID0gW2J1bmRsZV0KICAgIGVsc2U6CiAgICAgIGJ1bmRsZXMgPSBbXQogICAgaWYgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0czoKICAgICAgaW5wdXRfcHZhbHVlID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0c1swXQogICAgZWxzZToKICAgICAgaW5wdXRfcHZhbHVlID0gcHZhbHVlLlBCZWdpbihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLnBpcGVsaW5lKQogICAgdW5wcm9jZXNzZWRfYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoCiAgICAgICAgaW5wdXRfcHZhbHVlKQoKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW3VucHJvY2Vzc2VkX2J1bmRsZV0sIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOb25lOiBUaW1lc3RhbXAub2YodGltZS50aW1lKCkpfSkKCgpjbGFzcyBfRmxhdHRlbkV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIEZsYXR0ZW4gdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX0ZsYXR0ZW5FdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KICAgIHNlbGYuYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5idW5kbGUub3V0cHV0KGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgYnVuZGxlcyA9IFtzZWxmLmJ1bmRsZV0KICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW10sIE5vbmUsIE5vbmUpCgoKY2xhc3MgX1RhZ2dlZFJlY2VpdmVycyhkaWN0KToKICAiIiJSZWNlaXZlZCBQYXJEbyBvdXRwdXQgYW5kIHJlZGlyZWN0IHRvIHRoZSBhc3NvY2lhdGVkIG91dHB1dCBidW5kbGUuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLl9udWxsX3JlY2VpdmVyID0gTm9uZQogICAgc2VsZi5fdW5kZWNsYXJlZF9pbl9tZW1vcnlfdGFnX3ZhbHVlcyA9IE5vbmUKICAgIHN1cGVyKF9UYWdnZWRSZWNlaXZlcnMsIHNlbGYpLl9faW5pdF9fKCkKCiAgQHByb3BlcnR5CiAgZGVmIHVuZGVjbGFyZWRfaW5fbWVtb3J5X3RhZ192YWx1ZXMoc2VsZik6CiAgICBhc3NlcnQgKG5vdCBzZWxmLl91bmRlY2xhcmVkX2luX21lbW9yeV90YWdfdmFsdWVzCiAgICAgICAgICAgIG9yIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5oYXNfY2FjaGUpCiAgICByZXR1cm4gc2VsZi5fdW5kZWNsYXJlZF9pbl9tZW1vcnlfdGFnX3ZhbHVlcwoKICBjbGFzcyBOdWxsUmVjZWl2ZXIoY29tbW9uLlJlY2VpdmVyKToKICAgICIiIklnbm9yZXMgdW5kZWNsYXJlZCBvdXRwdXRzLCBkZWZhdWx0IGV4ZWN1dGlvbiBtb2RlLiIiIgoKICAgIGRlZiByZWNlaXZlKHNlbGYsIGVsZW1lbnQpOgogICAgICBwYXNzCgogIGNsYXNzIF9Jbk1lbW9yeVJlY2VpdmVyKGNvbW1vbi5SZWNlaXZlcik6CiAgICAiIiJCdWZmZXJzIHVuZGVjbGFyZWQgb3V0cHV0cyB0byB0aGUgZ2l2ZW4gZGljdGlvbmFyeS4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0LCB0YWcpOgogICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKICAgICAgc2VsZi5fdGFnID0gdGFnCgogICAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICAgIHNlbGYuX3RhcmdldFtzZWxmLl90YWddLmFwcGVuZChlbGVtZW50KQoKICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgIGlmIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5oYXNfY2FjaGU6CiAgICAgIGlmIG5vdCBzZWxmLl91bmRlY2xhcmVkX2luX21lbW9yeV90YWdfdmFsdWVzOgogICAgICAgIHNlbGYuX3VuZGVjbGFyZWRfaW5fbWVtb3J5X3RhZ192YWx1ZXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogICAgICByZWNlaXZlciA9IF9UYWdnZWRSZWNlaXZlcnMuX0luTWVtb3J5UmVjZWl2ZXIoCiAgICAgICAgICBzZWxmLl91bmRlY2xhcmVkX2luX21lbW9yeV90YWdfdmFsdWVzLCBrZXkpCiAgICBlbHNlOgogICAgICBpZiBub3Qgc2VsZi5fbnVsbF9yZWNlaXZlcjoKICAgICAgICBzZWxmLl9udWxsX3JlY2VpdmVyID0gX1RhZ2dlZFJlY2VpdmVycy5OdWxsUmVjZWl2ZXIoKQogICAgICByZWNlaXZlciA9IHNlbGYuX251bGxfcmVjZWl2ZXIKICAgIHJldHVybiByZWNlaXZlcgoKCmNsYXNzIF9QYXJEb0V2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIFBhckRvIHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyLAogICAgICAgICAgICAgICBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3Q9VHJ1ZSk6CiAgICBzdXBlcihfUGFyRG9FdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpCiAgICAjIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBTREYgaW1wbGVtZW50YXRpb24uIFNERiBpbXBsZW1lbnRhdGlvbiBhZGRzIHN0YXRlCiAgICAjIHRvIHRoZSBTREYgdGhhdCBpcyBub3QgcGlja2xhYmxlLgogICAgc2VsZi5fcGVyZm9ybV9kb2ZuX3BpY2tsZV90ZXN0ID0gcGVyZm9ybV9kb2ZuX3BpY2tsZV90ZXN0CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICB0cmFuc2Zvcm0gPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCgogICAgc2VsZi5fdGFnZ2VkX3JlY2VpdmVycyA9IF9UYWdnZWRSZWNlaXZlcnMoc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0KQogICAgZm9yIG91dHB1dF90YWcgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHM6CiAgICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IHB2YWx1ZS5QQ29sbGVjdGlvbihOb25lLCB0YWc9b3V0cHV0X3RhZykKICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uLnByb2R1Y2VyID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtCiAgICAgIHNlbGYuX3RhZ2dlZF9yZWNlaXZlcnNbb3V0cHV0X3RhZ10gPSAoCiAgICAgICAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pKQogICAgICBzZWxmLl90YWdnZWRfcmVjZWl2ZXJzW291dHB1dF90YWddLnRhZyA9IG91dHB1dF90YWcKCiAgICBzZWxmLl9jb3VudGVyX2ZhY3RvcnkgPSBjb3VudGVycy5Db3VudGVyRmFjdG9yeSgpCgogICAgIyBUT0RPKGFhbHRheSk6IENvbnNpZGVyIHN0b3JpbmcgdGhlIHNlcmlhbGl6ZWQgZm9ybSBhcyBhbiBvcHRpbWl6YXRpb24uCiAgICBkb2ZuID0gKHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyh0cmFuc2Zvcm0uZG9mbikpCiAgICAgICAgICAgIGlmIHNlbGYuX3BlcmZvcm1fZG9mbl9waWNrbGVfdGVzdCBlbHNlIHRyYW5zZm9ybS5kb2ZuKQoKICAgIHBpcGVsaW5lX29wdGlvbnMgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQucGlwZWxpbmVfb3B0aW9ucwogICAgaWYgKHBpcGVsaW5lX29wdGlvbnMgaXMgbm90IE5vbmUKICAgICAgICBhbmQgcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKS5ydW50aW1lX3R5cGVfY2hlY2spOgogICAgICBkb2ZuID0gVHlwZUNoZWNrV3JhcHBlckRvRm4oZG9mbiwgdHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkpCgogICAgZG9mbiA9IE91dHB1dENoZWNrV3JhcHBlckRvRm4oZG9mbiwgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmZ1bGxfbGFiZWwpCiAgICBhcmdzID0gdHJhbnNmb3JtLmFyZ3MgaWYgaGFzYXR0cih0cmFuc2Zvcm0sICdhcmdzJykgZWxzZSBbXQogICAga3dhcmdzID0gdHJhbnNmb3JtLmt3YXJncyBpZiBoYXNhdHRyKHRyYW5zZm9ybSwgJ2t3YXJncycpIGVsc2Uge30KCiAgICBzZWxmLnJ1bm5lciA9IERvRm5SdW5uZXIoCiAgICAgICAgZG9mbiwgYXJncywga3dhcmdzLAogICAgICAgIHNlbGYuX3NpZGVfaW5wdXRzLAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHNbMF0ud2luZG93aW5nLAogICAgICAgIHRhZ2dlZF9yZWNlaXZlcnM9c2VsZi5fdGFnZ2VkX3JlY2VpdmVycywKICAgICAgICBzdGVwX25hbWU9c2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmZ1bGxfbGFiZWwsCiAgICAgICAgc3RhdGU9RG9GblN0YXRlKHNlbGYuX2NvdW50ZXJfZmFjdG9yeSksCiAgICAgICAgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyPXNlbGYuc2NvcGVkX21ldHJpY3NfY29udGFpbmVyKQogICAgc2VsZi5ydW5uZXIuc3RhcnQoKQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5ydW5uZXIucHJvY2VzcyhlbGVtZW50KQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHNlbGYucnVubmVyLmZpbmlzaCgpCiAgICBidW5kbGVzID0gc2VsZi5fdGFnZ2VkX3JlY2VpdmVycy52YWx1ZXMoKQogICAgcmVzdWx0X2NvdW50ZXJzID0gc2VsZi5fY291bnRlcl9mYWN0b3J5LmdldF9jb3VudGVycygpCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KAogICAgICAgIHNlbGYsIGJ1bmRsZXMsIFtdLCByZXN1bHRfY291bnRlcnMsIE5vbmUsCiAgICAgICAgc2VsZi5fdGFnZ2VkX3JlY2VpdmVycy51bmRlY2xhcmVkX2luX21lbW9yeV90YWdfdmFsdWVzKQoKCmNsYXNzIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIF9Hcm91cEJ5S2V5T25seSB0cmFuc2Zvcm0uIiIiCgogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSBOb25lCiAgRUxFTUVOVFNfVEFHID0gX0xpc3RTdGF0ZVRhZygnZWxlbWVudHMnKQogIENPTVBMRVRJT05fVEFHID0gX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoJ2NvbXBsZXRlZCcsIGFueSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHN1cGVyKF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcikKCiAgZGVmIF9pc19maW5hbF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0LndhdGVybWFya3MuaW5wdXRfd2F0ZXJtYXJrCiAgICAgICAgICAgID09IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLnN0ZXBfY29udGV4dCA9IHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0LmdldF9zdGVwX2NvbnRleHQoKQogICAgc2VsZi5nbG9iYWxfc3RhdGUgPSBzZWxmLnN0ZXBfY29udGV4dC5nZXRfa2V5ZWRfc3RhdGUoTm9uZSkKCiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQoKICAgICMgVGhlIG91dHB1dCB0eXBlIG9mIGEgR3JvdXBCeUtleSB3aWxsIGJlIEtWW0FueSwgQW55XSBvciBtb3JlIHNwZWNpZmljLgogICAgIyBUT0RPKEJFQU0tMjcxNyk6IEluZmVyIGNvZGVycyBlYXJsaWVyLgogICAga3ZfdHlwZV9oaW50ID0gKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5vdXRwdXRzW05vbmVdLmVsZW1lbnRfdHlwZQogICAgICAgIG9yCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpLmlucHV0X3R5cGVzWzBdWzBdKQogICAgc2VsZi5rZXlfY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKGt2X3R5cGVfaGludC50dXBsZV90eXBlc1swXSkKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgdGltZXJfZmlyaW5nKToKICAgICMgV2UgZG8gbm90IG5lZWQgdG8gZW1pdCBhIEtleWVkV29ya0l0ZW0gdG8gcHJvY2Vzc19lbGVtZW50KCkuCiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX3N0YXRlLmdldF9zdGF0ZSgKICAgICAgICBOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuQ09NUExFVElPTl9UQUcpCiAgICBpZiAoaXNpbnN0YW5jZShlbGVtZW50LCBXaW5kb3dlZFZhbHVlKQogICAgICAgIGFuZCBpc2luc3RhbmNlKGVsZW1lbnQudmFsdWUsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKQogICAgICAgIGFuZCBsZW4oZWxlbWVudC52YWx1ZSkgPT0gMik6CiAgICAgIGssIHYgPSBlbGVtZW50LnZhbHVlCiAgICAgIGVuY29kZWRfayA9IHNlbGYua2V5X2NvZGVyLmVuY29kZShrKQogICAgICBzdGF0ZSA9IHNlbGYuc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2spCiAgICAgIHN0YXRlLmFkZF9zdGF0ZShOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuRUxFTUVOVFNfVEFHLCB2KQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2luZG93ZWQga2V5LXZhbHVlIHBhaXJzLiBJbnN0ZWFkIHJlY2VpdmVkOiAlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBpZiBzZWxmLl9pc19maW5hbF9idW5kbGUoKToKICAgICAgaWYgc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkNPTVBMRVRJT05fVEFHKToKICAgICAgICAjIElnbm9yZSBlbXB0eSBidW5kbGVzIGFmdGVyIGVtaXR0aW5nIG91dHB1dC4gKFRoaXMgbWF5IGhhcHBlbiBiZWNhdXNlCiAgICAgICAgIyBlbXB0eSBidW5kbGVzIGRvIG5vdCBhZmZlY3QgaW5wdXQgd2F0ZXJtYXJrcy4pCiAgICAgICAgYnVuZGxlcyA9IFtdCiAgICAgIGVsc2U6CiAgICAgICAgZ2JrX3Jlc3VsdCA9IFtdCiAgICAgICAgIyBUT0RPKGNjeSk6IHBlcmhhcHMgd2UgY2FuIGNsZWFuIHRoaXMgdXAgdG8gbm90IHVzZSB0aGlzCiAgICAgICAgIyBpbnRlcm5hbCBhdHRyaWJ1dGUgb2YgdGhlIERpcmVjdFN0ZXBDb250ZXh0LgogICAgICAgIGZvciBlbmNvZGVkX2sgaW4gc2VsZi5zdGVwX2NvbnRleHQuZXhpc3Rpbmdfa2V5ZWRfc3RhdGU6CiAgICAgICAgICAjIElnbm9yZSBnbG9iYWwgc3RhdGUuCiAgICAgICAgICBpZiBlbmNvZGVkX2sgaXMgTm9uZToKICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIGsgPSBzZWxmLmtleV9jb2Rlci5kZWNvZGUoZW5jb2RlZF9rKQogICAgICAgICAgc3RhdGUgPSBzZWxmLnN0ZXBfY29udGV4dC5nZXRfa2V5ZWRfc3RhdGUoZW5jb2RlZF9rKQogICAgICAgICAgdnMgPSBzdGF0ZS5nZXRfc3RhdGUoTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkVMRU1FTlRTX1RBRykKICAgICAgICAgIGdia19yZXN1bHQuYXBwZW5kKEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoKGssIHZzKSkpCgogICAgICAgIGRlZiBsZW5fZWxlbWVudF9mbihlbGVtZW50KToKICAgICAgICAgIF8sIHYgPSBlbGVtZW50LnZhbHVlCiAgICAgICAgICByZXR1cm4gbGVuKHYpCgogICAgICAgIGJ1bmRsZXMgPSBzZWxmLl9zcGxpdF9saXN0X2ludG9fYnVuZGxlcygKICAgICAgICAgICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24sIGdia19yZXN1bHQsCiAgICAgICAgICAgIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5NQVhfRUxFTUVOVF9QRVJfQlVORExFLCBsZW5fZWxlbWVudF9mbikKCiAgICAgIHNlbGYuZ2xvYmFsX3N0YXRlLmFkZF9zdGF0ZSgKICAgICAgICAgIE5vbmUsIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5DT01QTEVUSU9OX1RBRywgVHJ1ZSkKICAgICAgaG9sZCA9IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYKICAgIGVsc2U6CiAgICAgIGJ1bmRsZXMgPSBbXQogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgICBzZWxmLmdsb2JhbF9zdGF0ZS5zZXRfdGltZXIoCiAgICAgICAgICBOb25lLCAnJywgVGltZURvbWFpbi5XQVRFUk1BUkssIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwge05vbmU6IGhvbGR9KQoKCmNsYXNzIF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seSB0cmFuc2Zvcm0uCgogIFRoZSBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IgYnVmZmVycyBlbGVtZW50cyB1bnRpbCBpdHMgaW5wdXQgd2F0ZXJtYXJrIGdvZXMKICB0byBpbmZpbml0eSwgd2hpY2ggaXMgc3VpdGFibGUgZm9yIGJhdGNoIG1vZGUgZXhlY3V0aW9uLiBEdXJpbmcgc3RyZWFtaW5nCiAgbW9kZSBleGVjdXRpb24sIHdlIGVtaXQgZWFjaCBidW5kbGUgYXMgaXQgY29tZXMgdG8gdGhlIG5leHQgdHJhbnNmb3JtLgogICIiIgoKICBNQVhfRUxFTUVOVF9QRVJfQlVORExFID0gTm9uZQoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5nYmtfaXRlbXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQoKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCgogICAgIyBUaGUgaW5wdXQgdHlwZSBvZiBhIEdyb3VwQnlLZXkgd2lsbCBiZSBLVltBbnksIEFueV0gb3IgbW9yZSBzcGVjaWZpYy4KICAgIGt2X3R5cGVfaGludCA9ICgKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkuaW5wdXRfdHlwZXNbMF0pCiAgICBzZWxmLmtleV9jb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa3ZfdHlwZV9oaW50WzBdLnR1cGxlX3R5cGVzWzBdKQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgaWYgKGlzaW5zdGFuY2UoZWxlbWVudCwgV2luZG93ZWRWYWx1ZSkKICAgICAgICBhbmQgaXNpbnN0YW5jZShlbGVtZW50LnZhbHVlLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSkKICAgICAgICBhbmQgbGVuKGVsZW1lbnQudmFsdWUpID09IDIpOgogICAgICBrLCB2ID0gZWxlbWVudC52YWx1ZQogICAgICBzZWxmLmdia19pdGVtc1tzZWxmLmtleV9jb2Rlci5lbmNvZGUoayldLmFwcGVuZCh2KQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2luZG93ZWQga2V5LXZhbHVlIHBhaXJzLiBJbnN0ZWFkIHJlY2VpdmVkOiAlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBidW5kbGVzID0gW10KICAgIGJ1bmRsZSA9IE5vbmUKICAgIGZvciBlbmNvZGVkX2ssIHZzIGluIHNlbGYuZ2JrX2l0ZW1zLml0ZXJpdGVtcygpOgogICAgICBpZiBub3QgYnVuZGxlOgogICAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKAogICAgICAgICAgICBzZWxmLm91dHB1dF9wY29sbGVjdGlvbikKICAgICAgICBidW5kbGVzLmFwcGVuZChidW5kbGUpCiAgICAgIGt3aSA9IEtleWVkV29ya0l0ZW0oZW5jb2RlZF9rLCBlbGVtZW50cz12cykKICAgICAgYnVuZGxlLmFkZChHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKGt3aSkpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwgTm9uZSkKCgpjbGFzcyBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IoX1RyYW5zZm9ybUV2YWx1YXRvcik6CiAgIiIiVHJhbnNmb3JtRXZhbHVhdG9yIGZvciB0aGUgX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93IHRyYW5zZm9ybS4KCiAgVGhpcyBldmFsdWF0b3IgaXMgb25seSB1c2VkIGluIHN0cmVhbWluZyBtb2RlLiAgSW4gYmF0Y2ggbW9kZSwgdGhlCiAgR3JvdXBBbHNvQnlXaW5kb3cgb3BlcmF0aW9uIGlzIGV2YWx1YXRlZCBhcyBhIG5vcm1hbCBEb0ZuLCBhcyBkZWZpbmVkCiAgaW4gdHJhbnNmb3Jtcy9jb3JlLnB5LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgYXNzZXJ0IGxlbihzZWxmLl9vdXRwdXRzKSA9PSAxCiAgICBzZWxmLm91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KICAgIHNlbGYuc3RlcF9jb250ZXh0ID0gc2VsZi5fZXhlY3V0aW9uX2NvbnRleHQuZ2V0X3N0ZXBfY29udGV4dCgpCiAgICBzZWxmLmRyaXZlciA9IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcigKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLndpbmRvd2luZykKICAgIHNlbGYuZ2Fid19pdGVtcyA9IFtdCiAgICBzZWxmLmtleWVkX2hvbGRzID0ge30KCiAgICAjIFRoZSBpbnB1dCB0eXBlIG9mIGEgR3JvdXBBbHNvQnlXaW5kb3cgd2lsbCBiZSBLVltBbnksIEl0ZXJbQW55XV0gb3IgbW9yZQogICAgIyBzcGVjaWZpYy4KICAgIGt2X3R5cGVfaGludCA9ICgKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkuaW5wdXRfdHlwZXNbMF0pCiAgICBzZWxmLmtleV9jb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa3ZfdHlwZV9oaW50WzBdLnR1cGxlX3R5cGVzWzBdKQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAga3dpID0gZWxlbWVudC52YWx1ZQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoa3dpLCBLZXllZFdvcmtJdGVtKSwga3dpCiAgICBlbmNvZGVkX2ssIHRpbWVyX2ZpcmluZ3MsIHZzID0gKAogICAgICAgIGt3aS5lbmNvZGVkX2tleSwga3dpLnRpbWVyX2ZpcmluZ3MsIGt3aS5lbGVtZW50cykKICAgIGsgPSBzZWxmLmtleV9jb2Rlci5kZWNvZGUoZW5jb2RlZF9rKQogICAgc3RhdGUgPSBzZWxmLnN0ZXBfY29udGV4dC5nZXRfa2V5ZWRfc3RhdGUoZW5jb2RlZF9rKQoKICAgIGZvciB0aW1lcl9maXJpbmcgaW4gdGltZXJfZmlyaW5nczoKICAgICAgZm9yIHd2YWx1ZSBpbiBzZWxmLmRyaXZlci5wcm9jZXNzX3RpbWVyKAogICAgICAgICAgdGltZXJfZmlyaW5nLndpbmRvdywgdGltZXJfZmlyaW5nLm5hbWUsIHRpbWVyX2ZpcmluZy50aW1lX2RvbWFpbiwKICAgICAgICAgIHRpbWVyX2ZpcmluZy50aW1lc3RhbXAsIHN0YXRlKToKICAgICAgICBzZWxmLmdhYndfaXRlbXMuYXBwZW5kKHd2YWx1ZS53aXRoX3ZhbHVlKChrLCB3dmFsdWUudmFsdWUpKSkKICAgIGlmIHZzOgogICAgICBmb3Igd3ZhbHVlIGluIHNlbGYuZHJpdmVyLnByb2Nlc3NfZWxlbWVudHMoc3RhdGUsIHZzLCBNSU5fVElNRVNUQU1QKToKICAgICAgICBzZWxmLmdhYndfaXRlbXMuYXBwZW5kKHd2YWx1ZS53aXRoX3ZhbHVlKChrLCB3dmFsdWUudmFsdWUpKSkKCiAgICBzZWxmLmtleWVkX2hvbGRzW2VuY29kZWRfa10gPSBzdGF0ZS5nZXRfZWFybGllc3RfaG9sZCgpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgYnVuZGxlcyA9IFtdCiAgICBpZiBzZWxmLmdhYndfaXRlbXM6CiAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICBmb3IgaXRlbSBpbiBzZWxmLmdhYndfaXRlbXM6CiAgICAgICAgYnVuZGxlLmFkZChpdGVtKQogICAgICBidW5kbGVzLmFwcGVuZChidW5kbGUpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwgc2VsZi5rZXllZF9ob2xkcykKCgpjbGFzcyBfTmF0aXZlV3JpdGVFdmFsdWF0b3IoX1RyYW5zZm9ybUV2YWx1YXRvcik6CiAgIiIiVHJhbnNmb3JtRXZhbHVhdG9yIGZvciBfTmF0aXZlV3JpdGUgdHJhbnNmb3JtLiIiIgoKICBFTEVNRU5UU19UQUcgPSBfTGlzdFN0YXRlVGFnKCdlbGVtZW50cycpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcik6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzdXBlcihfTmF0aXZlV3JpdGVFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBzY29wZWRfbWV0cmljc19jb250YWluZXIpCgogICAgYXNzZXJ0IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc2luawogICAgc2VsZi5fc2luayA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc2luawoKICBAcHJvcGVydHkKICBkZWYgX2lzX2ZpbmFsX2J1bmRsZShzZWxmKToKICAgIHJldHVybiAoc2VsZi5fZXhlY3V0aW9uX2NvbnRleHQud2F0ZXJtYXJrcy5pbnB1dF93YXRlcm1hcmsKICAgICAgICAgICAgPT0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgQHByb3BlcnR5CiAgZGVmIF9oYXNfYWxyZWFkeV9wcm9kdWNlZF9vdXRwdXQoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0LndhdGVybWFya3Mub3V0cHV0X3dhdGVybWFyawogICAgICAgICAgICA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5zdGVwX2NvbnRleHQgPSBzZWxmLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKE5vbmUpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHRpbWVyX2ZpcmluZyk6CiAgICAjIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgYSBLZXllZFdvcmtJdGVtIHRvIHByb2Nlc3NfZWxlbWVudCgpLgogICAgcGFzcwoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5nbG9iYWxfc3RhdGUuYWRkX3N0YXRlKAogICAgICAgIE5vbmUsIF9OYXRpdmVXcml0ZUV2YWx1YXRvci5FTEVNRU5UU19UQUcsIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyBmaW5pc2hfYnVuZGxlIHdpbGwgYXBwZW5kIGluY29taW5nIGJ1bmRsZXMgaW4gbWVtb3J5IHVudGlsIGFsbCB0aGUgYnVuZGxlcwogICAgIyBjYXJyeWluZyBkYXRhIGlzIHByb2Nlc3NlZC4gVGhpcyBpcyBkb25lIHRvIHByb2R1Y2Ugb25seSBhIHNpbmdsZSBvdXRwdXQKICAgICMgc2hhcmQgKHNvbWUgdGVzdHMgZGVwZW5kcyBvbiB0aGlzIGJlaGF2aW9yKS4gSXQgaXMgcG9zc2libGUgdG8gaGF2ZQogICAgIyBpbmNvbWluZyBlbXB0eSBidW5kbGVzIGFmdGVyIHRoZSBvdXRwdXQgaXMgcHJvZHVjZWQsIHRoZXNlIGJ1bmRsZXMgd2lsbCBiZQogICAgIyBpZ25vcmVkIGFuZCB3b3VsZCBub3QgZ2VuZXJhdGUgYWRkaXRpb25hbCBvdXRwdXQgZmlsZXMuCiAgICAjIFRPRE8oYWx0YXkpOiBEbyBub3Qgd2FpdCB1bnRpbCB0aGUgbGFzdCBidW5kbGUgdG8gd3JpdGUgaW4gYSBzaW5nbGUgc2hhcmQuCiAgICBpZiBzZWxmLl9pc19maW5hbF9idW5kbGU6CiAgICAgIGVsZW1lbnRzID0gc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgTm9uZSwgX05hdGl2ZVdyaXRlRXZhbHVhdG9yLkVMRU1FTlRTX1RBRykKICAgICAgaWYgc2VsZi5faGFzX2FscmVhZHlfcHJvZHVjZWRfb3V0cHV0OgogICAgICAgICMgSWdub3JlIGVtcHR5IGJ1bmRsZXMgdGhhdCBhcnJpdmUgYWZ0ZXIgdGhlIG91dHB1dCBpcyBwcm9kdWNlZC4KICAgICAgICBhc3NlcnQgZWxlbWVudHMgPT0gW10KICAgICAgZWxzZToKICAgICAgICBzZWxmLl9zaW5rLnBpcGVsaW5lX29wdGlvbnMgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQucGlwZWxpbmVfb3B0aW9ucwogICAgICAgIHdpdGggc2VsZi5fc2luay53cml0ZXIoKSBhcyB3cml0ZXI6CiAgICAgICAgICBmb3IgdiBpbiBlbGVtZW50czoKICAgICAgICAgICAgd3JpdGVyLldyaXRlKHYudmFsdWUpCiAgICAgIGhvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICBlbHNlOgogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgICBzZWxmLmdsb2JhbF9zdGF0ZS5zZXRfdGltZXIoCiAgICAgICAgICBOb25lLCAnJywgVGltZURvbWFpbi5XQVRFUk1BUkssIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBbXSwgW10sIE5vbmUsIHtOb25lOiBob2xkfSkKCgpjbGFzcyBfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIkFuIGV2YWx1YXRvciBmb3Igc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzIHRyYW5zZm9ybS4iIiIKCiAgIyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgYnkgYSBTcGxpdHRhYmxlIERvRm4gYmVmb3JlCiAgIyBhIGNoZWNrcG9pbnQgaXMgcmVxdWVzdGVkIGJ5IHRoZSBydW5uZXIuCiAgREVGQVVMVF9NQVhfTlVNX09VVFBVVFMgPSAxMDAKICAjIE1heGltdW0gZHVyYXRpb24gYSBTcGxpdHRhYmxlIERvRm4gd2lsbCBwcm9jZXNzIGFuIGVsZW1lbnQgYmVmb3JlIGEKICAjIGNoZWNrcG9pbnQgaXMgcmVxdWVzdGVkIGJ5IHRoZSBydW5uZXIuCiAgREVGQVVMVF9NQVhfRFVSQVRJT04gPSAxCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMsIHNjb3BlZF9tZXRyaWNzX2NvbnRhaW5lcik6CiAgICBzdXBlcihfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyKQoKICAgIHByb2Nlc3NfZWxlbWVudHNfdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvY2Vzc19lbGVtZW50c190cmFuc2Zvcm0sIFByb2Nlc3NFbGVtZW50cykKCiAgICAjIFJlcGxhY2luZyB0aGUgZG9fZm4gb2YgdGhlIHRyYW5zZm9ybSB3aXRoIGEgd3JhcHBlciBkb19mbiB0aGF0IHBlcmZvcm1zCiAgICAjIFNERiBtYWdpYy4KICAgIHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KICAgIHNkZiA9IHRyYW5zZm9ybS5zZGYKICAgIHNlbGYuX3Byb2Nlc3NfZm4gPSB0cmFuc2Zvcm0ubmV3X3Byb2Nlc3NfZm4oc2RmKQogICAgdHJhbnNmb3JtLmRvZm4gPSBzZWxmLl9wcm9jZXNzX2ZuCgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5fcHJvY2Vzc19mbiwgUHJvY2Vzc0ZuKQoKICAgIHNlbGYuc3RlcF9jb250ZXh0ID0gc2VsZi5fZXhlY3V0aW9uX2NvbnRleHQuZ2V0X3N0ZXBfY29udGV4dCgpCiAgICBzZWxmLl9wcm9jZXNzX2ZuLnN0ZXBfY29udGV4dCA9IHNlbGYuc3RlcF9jb250ZXh0CgogICAgcHJvY2Vzc19lbGVtZW50X2ludm9rZXIgPSAoCiAgICAgICAgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyKAogICAgICAgICAgICBtYXhfbnVtX291dHB1dHM9c2VsZi5ERUZBVUxUX01BWF9OVU1fT1VUUFVUUywKICAgICAgICAgICAgbWF4X2R1cmF0aW9uPXNlbGYuREVGQVVMVF9NQVhfRFVSQVRJT04pKQogICAgc2VsZi5fcHJvY2Vzc19mbi5zZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXIocHJvY2Vzc19lbGVtZW50X2ludm9rZXIpCgogICAgc2VsZi5fcGFyX2RvX2V2YWx1YXRvciA9IF9QYXJEb0V2YWx1YXRvcigKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cywgc2NvcGVkX21ldHJpY3NfY29udGFpbmVyLCBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3Q9RmFsc2UpCiAgICBzZWxmLmtleWVkX2hvbGRzID0ge30KCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX3Bhcl9kb19ldmFsdWF0b3Iuc3RhcnRfYnVuZGxlKCkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIGFzc2VydCBpc2luc3RhbmNlKGVsZW1lbnQsIFdpbmRvd2VkVmFsdWUpCiAgICBhc3NlcnQgbGVuKGVsZW1lbnQud2luZG93cykgPT0gMQogICAgd2luZG93ID0gZWxlbWVudC53aW5kb3dzWzBdCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQudmFsdWUsIEtleWVkV29ya0l0ZW0pOgogICAgICBrZXkgPSBlbGVtZW50LnZhbHVlLmVuY29kZWRfa2V5CiAgICBlbHNlOgogICAgICAjIElmIG5vdCBhIGBLZXllZFdvcmtJdGVtYCwgdGhpcyBtdXN0IGJlIGEgdHVwbGUgd2hlcmUga2V5IGlzIGEgcmFuZG9tbHkKICAgICAgIyBnZW5lcmF0ZWQga2V5IGFuZCB0aGUgdmFsdWUgaXMgYSBgV2luZG93ZWRWYWx1ZWAgdGhhdCBjb250YWlucyBhbgogICAgICAjIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdC4KICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZWxlbWVudC52YWx1ZSwgdHVwbGUpCiAgICAgIGtleSA9IGVsZW1lbnQudmFsdWVbMF0KCiAgICBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudChlbGVtZW50KQoKICAgIHN0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGtleSkKICAgIHNlbGYua2V5ZWRfaG9sZHNba2V5XSA9IHN0YXRlLmdldF9zdGF0ZSgKICAgICAgICB3aW5kb3csIHNlbGYuX3Byb2Nlc3NfZm4ud2F0ZXJtYXJrX2hvbGRfdGFnKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHBhcl9kb19yZXN1bHQgPSBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yLmZpbmlzaF9idW5kbGUoKQoKICAgIHRyYW5zZm9ybV9yZXN1bHQgPSBUcmFuc2Zvcm1SZXN1bHQoCiAgICAgICAgc2VsZiwgcGFyX2RvX3Jlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcywKICAgICAgICBwYXJfZG9fcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXMsIHBhcl9kb19yZXN1bHQuY291bnRlcnMsCiAgICAgICAgcGFyX2RvX3Jlc3VsdC5rZXllZF93YXRlcm1hcmtfaG9sZHMsCiAgICAgICAgcGFyX2RvX3Jlc3VsdC51bmRlY2xhcmVkX3RhZ192YWx1ZXMpCiAgICBmb3Iga2V5IGluIHNlbGYua2V5ZWRfaG9sZHM6CiAgICAgIHRyYW5zZm9ybV9yZXN1bHQua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzW2tleV0gPSBzZWxmLmtleWVkX2hvbGRzW2tleV0KICAgIHJldHVybiB0cmFuc2Zvcm1fcmVzdWx0Cn1yXQIAAChYJQAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk1WAk1kAodYMgAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LnNob3VsZF9leGVjdXRlX3NlcmlhbGx5WAMAAABkZWZLekuSh1giAAAAX1RhZ2dlZFJlY2VpdmVycy5fSW5NZW1vcnlSZWNlaXZlclgFAAAAY2xhc3NN8AFN+QGHWCEAAABfRmxhdHRlbkV2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk3TAU3VAYdYJgAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZNeAJNngKHWCMAAABfTmF0aXZlV3JpdGVFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTTYDTU8Dh1giAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTawBTcIBh1gjAAAAX05hdGl2ZVdyaXRlRXZhbHVhdG9yLnByb2Nlc3NfdGltZXJYAwAAAGRlZk0uA00xA4dYGgAAAF9GbGF0dGVuRXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZNxwFNzQGHWB0AAABfVGVzdFN0cmVhbVJvb3RCdW5kbGVQcm92aWRlclgFAAAAY2xhc3NLqUu4h1gbAAAAUm9vdEJ1bmRsZVByb3ZpZGVyLl9faW5pdF9fWAMAAABkZWZLl0uah1gPAAAAX1BhckRvRXZhbHVhdG9yWAUAAABjbGFzc00HAk1CAodYJwAAAF9Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTZEDTZwDh1gUAAAAX1Rlc3RTdHJlYW1FdmFsdWF0b3JYBQAAAGNsYXNzTTcBTWwBh1gUAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3JYBQAAAGNsYXNzTXoBTcIBh1gcAAAAX1BhckRvRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTRQCTTcCh1ghAAAAX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yWAUAAABjbGFzc02gAk3TAodYOwAAAF9Cb3VuZGVkUmVhZEV2YWx1YXRvci5maW5pc2hfYnVuZGxlLl9yZWFkX3ZhbHVlc190b19idW5kbGVzWAMAAABkZWZNJAFNKQGHWB0AAABfUHViU3ViUmVhZEV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTX8BTYoBh1gxAAAAX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTeQCTfICh1gVAAAAX0JvdW5kZWRSZWFkRXZhbHVhdG9yWAUAAABjbGFzc00RAU01AYdYIQAAAF9UcmFuc2Zvcm1FdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTQwBTQ8Bh1giAAAAX1B1YlN1YlN1YnNjcmlwdGlvbldyYXBwZXIuX19kZWxfX1gDAAAAZGVmTXUBTXgBh1gZAAAAX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvclgFAAAAY2xhc3NNUQNNnAOHWCwAAABfVHJhbnNmb3JtRXZhbHVhdG9yLl9zcGxpdF9saXN0X2ludG9fYnVuZGxlc1gDAAAAZGVmS9NL7odYHAAAAF9UYWdnZWRSZWNlaXZlcnMuX19taXNzaW5nX19YAwAAAGRlZk36AU0FAodYLQAAAF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTd0CTeMCh1gaAAAAX1B1YlN1YlN1YnNjcmlwdGlvbldyYXBwZXJYBQAAAGNsYXNzTW4BTXgBh1gjAAAAX1RyYW5zZm9ybUV2YWx1YXRvci5fZXhwYW5kX291dHB1dHNYAwAAAGRlZkvIS9KHWCYAAABfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc190aW1lclgDAAAAZGVmTWUCTWgCh1gjAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuX19pbml0X19YAwAAAGRlZktES1eHWCIAAABfTmF0aXZlV3JpdGVFdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZNKgNNLQOHWCMAAABfUHViU3ViU3Vic2NyaXB0aW9uV3JhcHBlci5fX2luaXRfX1gDAAAAZGVmTXEBTXQBh1gRAAAAX0ZsYXR0ZW5FdmFsdWF0b3JYBQAAAGNsYXNzTcQBTdkBh1gaAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnlYBQAAAGNsYXNzSz5LkodYEgAAAFJvb3RCdW5kbGVQcm92aWRlclgFAAAAY2xhc3NLlEudh1gYAAAAX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yWAUAAABjbGFzc01EAk2eAodYGQAAAF9UYWdnZWRSZWNlaXZlcnMuX19pbml0X19YAwAAAGRlZk3eAU3jAYdYKgAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTaoCTbACh1gpAAAAX1RyYW5zZm9ybUV2YWx1YXRvci5wcm9jZXNzX3RpbWVyX3dyYXBwZXJYAwAAAGRlZkvzTQABh1glAAAAX05hdGl2ZVdyaXRlRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTTIDTTUDh1gkAAAAX1Rlc3RTdHJlYW1FdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNRwFNXgGHWCMAAABSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc1gDAAAAZGVmS5tLnYdYHQAAAF9UZXN0U3RyZWFtRXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZNOgFNQQGHWBAAAABfVGFnZ2VkUmVjZWl2ZXJzWAUAAABjbGFzc03bAU0FAodYIAAAAF9UcmFuc2Zvcm1FdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZL70vyh1glAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IuZ2V0X3N1YnNjcmlwdGlvblgDAAAAZGVmTYsBTZoBh1ghAAAAX1Rlc3RTdHJlYW1FdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZNQgFNRgGHWCoAAABEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyLmdldF9yb290X2J1bmRsZXNYAwAAAGRlZkuiS6eHWCYAAABfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTXsDTX0Dh1ghAAAAX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZNSwJNUQKHWCIAAABfVGVzdFN0cmVhbUV2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZNXwFNbAGHWB8AAABfRmxhdHRlbkV2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZN1gFN2QGHWDQAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZN8wJNBQOHWCEAAABfVHJhbnNmb3JtRXZhbHVhdG9yLnByb2Nlc3NfdGltZXJYAwAAAGRlZk0BAU0HAYdYJgAAAF9OYXRpdmVXcml0ZUV2YWx1YXRvci5faXNfZmluYWxfYnVuZGxlWAMAAABkZWZNIANNJAOHWB8AAABfUGFyRG9FdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNOAJNOgKHWCkAAABfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuX2lzX2ZpbmFsX2J1bmRsZVgDAAAAZGVmTVICTVUCh1gdAAAAX1BhckRvRXZhbHVhdG9yLmZpbmlzaF9idW5kbGVYAwAAAGRlZk07Ak1CAodYGAAAAF9QYXJEb0V2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTQoCTRMCh1gyAAAAX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLmZpbmlzaF9idW5kbGVYAwAAAGRlZk0GA00PA4dYMgAAAF9OYXRpdmVXcml0ZUV2YWx1YXRvci5faGFzX2FscmVhZHlfcHJvZHVjZWRfb3V0cHV0WAMAAABkZWZNJQNNKQOHWDEAAABfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNvAJNxgKHWB0AAABfVGFnZ2VkUmVjZWl2ZXJzLk51bGxSZWNlaXZlclgFAAAAY2xhc3NN6gFN7wGHWBkAAABEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyWAUAAABjbGFzc0ufS6eHWCQAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3JYBQAAAGNsYXNzTdUCTQ8Dh1glAAAAX1RhZ2dlZFJlY2VpdmVycy5OdWxsUmVjZWl2ZXIucmVjZWl2ZVgDAAAAZGVmTe0BTe8Bh1guAAAAX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc1gDAAAAZGVmS6xLuIdYLwAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZNxwJN0wKHWCMAAABfQm91bmRlZFJlYWRFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTSABTTUBh1gwAAAAX1RhZ2dlZFJlY2VpdmVycy51bmRlY2xhcmVkX2luX21lbW9yeV90YWdfdmFsdWVzWAMAAABkZWZN5AFN6QGHWB4AAABfTmF0aXZlV3JpdGVFdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk0WA00fA4dYJgAAAF9QdWJTdWJSZWFkRXZhbHVhdG9yLl9yZWFkX2Zyb21fcHVic3ViWAMAAABkZWZNoQFNqwGHWB4AAABfRmxhdHRlbkV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk3OAU3SAYdYKQAAAF9Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNfgNNkAOHWCsAAABfVGFnZ2VkUmVjZWl2ZXJzLl9Jbk1lbW9yeVJlY2VpdmVyLl9faW5pdF9fWAMAAABkZWZN8wFN9gGHWC4AAABfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZNsQJNuwKHWCoAAABfVGFnZ2VkUmVjZWl2ZXJzLl9Jbk1lbW9yeVJlY2VpdmVyLnJlY2VpdmVYAwAAAGRlZk33AU35AYdYJAAAAF9QdWJTdWJSZWFkRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTZ4BTaABh1ghAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZNmwFNnQGHWBUAAABfTmF0aXZlV3JpdGVFdmFsdWF0b3JYBQAAAGNsYXNzTREDTU8Dh1giAAAAX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTVsDTXoDh1gzAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVyWAMAAABkZWZLbkt5h1gjAAAAX1RyYW5zZm9ybUV2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk0IAU0LAYdYHgAAAF9Cb3VuZGVkUmVhZEV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTRcBTR8Bh1g1AAAAX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLmZpbmlzaF9idW5kbGUubGVuX2VsZW1lbnRfZm5YAwAAAGRlZk2MAk2PAodYHAAAAF9UcmFuc2Zvcm1FdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZku9S8eHWBMAAABfVHJhbnNmb3JtRXZhbHVhdG9yWAUAAABjbGFzc0u6TQ8Bh1goAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X2V2YWx1YXRvclgDAAAAZGVmS1hLbYdYKAAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk1pAk13Aod1fXJeAgAAKFgSAAAAUm9vdEJ1bmRsZVByb3ZpZGVyWC4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9ycl8CAABYMwAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9yb290X2J1bmRsZV9wcm92aWRlcmpfAgAAWDIAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5zaG91bGRfZXhlY3V0ZV9zZXJpYWxseWpfAgAAWBkAAABEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyal8CAABYKgAAAERlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc2pfAgAAWCMAAABSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc2pfAgAAWBoAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeWpfAgAAWCgAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5nZXRfZXZhbHVhdG9yal8CAAB1aIpYLgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3JyYAIAAIWBcmECAAB9cmICAABidFUYYXBhY2hlX2JlYW0udXRpbHMucGx1Z2lucmMCAAAoWDcGAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgQmVhbVBsdWdpbiBiYXNlIGNsYXNzLgoKRm9yIGV4cGVyaW1lbnRhbCB1c2FnZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCgpjbGFzcyBCZWFtUGx1Z2luKG9iamVjdCk6CiAgIiIiUGx1Z2luIGJhc2UgY2xhc3MgdG8gYmUgZXh0ZW5kZWQgYnkgZGVwZW5kZW50IHVzZXJzIHN1Y2ggYXMgRmlsZVN5c3RlbS4KICBBbnkgaW5zdGFudGlhdGVkIHN1YmNsYXNzIHdpbGwgYmUgaW1wb3J0ZWQgYXQgd29ya2VyIHN0YXJ0dXAgdGltZS4iIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9hbGxfc3ViY2xhc3NlcyhjbHMpOgogICAgIiIiR2V0IGFsbCB0aGUgc3ViY2xhc3NlcyBvZiB0aGUgQmVhbVBsdWdpbiBjbGFzcy4iIiIKICAgIGFsbF9zdWJjbGFzc2VzID0gW10KICAgIGZvciBzdWJjbGFzcyBpbiBjbHMuX19zdWJjbGFzc2VzX18oKToKICAgICAgYWxsX3N1YmNsYXNzZXMuYXBwZW5kKHN1YmNsYXNzKQogICAgICBhbGxfc3ViY2xhc3Nlcy5leHRlbmQoc3ViY2xhc3MuZ2V0X2FsbF9zdWJjbGFzc2VzKCkpCiAgICByZXR1cm4gYWxsX3N1YmNsYXNzZXMKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9hbGxfcGx1Z2luX3BhdGhzKGNscyk6CiAgICAiIiJHZXQgZnVsbCBpbXBvcnQgcGF0aHMgb2YgdGhlIEJlYW1QbHVnaW4gc3ViY2xhc3MuIiIiCiAgICBkZWYgZnVsbG5hbWUobyk6CiAgICAgIHJldHVybiBvLl9fbW9kdWxlX18gKyAiLiIgKyBvLl9fbmFtZV9fCiAgICByZXR1cm4gW2Z1bGxuYW1lKG8pIGZvciBvIGluIGNscy5nZXRfYWxsX3N1YmNsYXNzZXMoKV0KfXJkAgAAKFgdAAAAQmVhbVBsdWdpbi5nZXRfYWxsX3N1YmNsYXNzZXNYAwAAAGRlZkscSySHWCgAAABCZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzLmZ1bGxuYW1lWAMAAABkZWZLKEsqh1gfAAAAQmVhbVBsdWdpbi5nZXRfYWxsX3BsdWdpbl9wYXRoc1gDAAAAZGVmSyVLK4dYCgAAAEJlYW1QbHVnaW5YBQAAAGNsYXNzSxhLK4d1fXJlAgAAKFgKAAAAQmVhbVBsdWdpblgYAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2lucmYCAABYHQAAAEJlYW1QbHVnaW4uZ2V0X2FsbF9zdWJjbGFzc2VzamYCAABYHwAAAEJlYW1QbHVnaW4uZ2V0X2FsbF9wbHVnaW5fcGF0aHNqZgIAAHVoilgYAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2lucmcCAACFgXJoAgAAfXJpAgAAYnRyagIAAFUhYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzcmsCAAAoWEgLAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkludGVybmFsIHNpZGUgaW5wdXQgdHJhbnNmb3JtcyBhbmQgaW1wbGVtZW50YXRpb25zLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKSW1wb3J0YW50OiB0aGlzIG1vZHVsZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZApkaXJlY3RseSBieSBwaXBlbGluZSB3cml0ZXJzLiBJbnN0ZWFkLCB1c2VycyBzaG91bGQgdXNlIHRoZSBoZWxwZXIgbWV0aG9kcwpBc1NpbmdsZXRvbiwgQXNJdGVyLCBBc0xpc3QgYW5kIEFzRGljdCBpbiBhcGFjaGVfYmVhbS5wdmFsdWUuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CgoKIyBUb3AtbGV2ZWwgZnVuY3Rpb24gc28gd2UgY2FuIGlkZW50aWZ5IGl0IGxhdGVyLgpkZWYgX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbih3LCBnbG9iYWxfd2luZG93PXdpbmRvdy5HbG9iYWxXaW5kb3coKSk6CiAgcmV0dXJuIGdsb2JhbF93aW5kb3cKCgpkZWYgZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mbih0YXJnZXRfd2luZG93X2ZuKToKICBpZiB0YXJnZXRfd2luZG93X2ZuID09IHdpbmRvdy5HbG9iYWxXaW5kb3dzKCk6CiAgICByZXR1cm4gX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbgoKICBkZWYgbWFwX3ZpYV9lbmQoc291cmNlX3dpbmRvdyk6CiAgICByZXR1cm4gbGlzdCh0YXJnZXRfd2luZG93X2ZuLmFzc2lnbigKICAgICAgICB3aW5kb3cuV2luZG93Rm4uQXNzaWduQ29udGV4dChzb3VyY2Vfd2luZG93Lm1heF90aW1lc3RhbXAoKSkpKVstMV0KCiAgcmV0dXJuIG1hcF92aWFfZW5kCgoKY2xhc3MgU2lkZUlucHV0TWFwKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIG1hcHBpbmcgb2Ygd2luZG93cyB0byBzaWRlIGlucHV0IHZhbHVlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXdfY2xhc3MsIHZpZXdfb3B0aW9ucywgaXRlcmFibGUpOgogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSB2aWV3X29wdGlvbnMuZ2V0KAogICAgICAgICd3aW5kb3dfbWFwcGluZ19mbicsIF9nbG9iYWxfd2luZG93X21hcHBpbmdfZm4pCiAgICBzZWxmLl92aWV3X2NsYXNzID0gdmlld19jbGFzcwogICAgc2VsZi5fdmlld19vcHRpb25zID0gdmlld19vcHRpb25zCiAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXJhYmxlCiAgICBzZWxmLl9jYWNoZSA9IHt9CgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB3aW5kb3cpOgogICAgaWYgd2luZG93IG5vdCBpbiBzZWxmLl9jYWNoZToKICAgICAgdGFyZ2V0X3dpbmRvdyA9IHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuKHdpbmRvdykKICAgICAgc2VsZi5fY2FjaGVbd2luZG93XSA9IHNlbGYuX3ZpZXdfY2xhc3MuX2Zyb21fcnVudGltZV9pdGVyYWJsZSgKICAgICAgICAgIF9GaWx0ZXJpbmdJdGVyYWJsZShzZWxmLl9pdGVyYWJsZSwgdGFyZ2V0X3dpbmRvdyksIHNlbGYuX3ZpZXdfb3B0aW9ucykKICAgIHJldHVybiBzZWxmLl9jYWNoZVt3aW5kb3ddCgogIGRlZiBpc19nbG9iYWxseV93aW5kb3dlZChzZWxmKToKICAgIHJldHVybiBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiA9PSBfZ2xvYmFsX3dpbmRvd19tYXBwaW5nX2ZuCgoKY2xhc3MgX0ZpbHRlcmluZ0l0ZXJhYmxlKG9iamVjdCk6CiAgIiIiQW4gaXRlcmFibGUgY29udGFpbmluZyBvbmx5IHRob3NlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gd2luZG93LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUsIHRhcmdldF93aW5kb3cpOgogICAgc2VsZi5faXRlcmFibGUgPSBpdGVyYWJsZQogICAgc2VsZi5fdGFyZ2V0X3dpbmRvdyA9IHRhcmdldF93aW5kb3cKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgZm9yIHd2IGluIHNlbGYuX2l0ZXJhYmxlOgogICAgICBpZiBzZWxmLl90YXJnZXRfd2luZG93IGluIHd2LndpbmRvd3M6CiAgICAgICAgeWllbGQgd3YudmFsdWUKCiAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAjIFBpY2tsZSBzZWxmIGFzIGFuIGFscmVhZHkgZmlsdGVyZWQgbGlzdC4KICAgIHJldHVybiBsaXN0LCAobGlzdChzZWxmKSwpCn1ybAIAAChYHQAAAF9GaWx0ZXJpbmdJdGVyYWJsZS5fX3JlZHVjZV9fWAMAAABkZWZLU0tWh1gbAAAAX0ZpbHRlcmluZ0l0ZXJhYmxlLl9faW5pdF9fWAMAAABkZWZLSktNh1gMAAAAU2lkZUlucHV0TWFwWAUAAABjbGFzc0swS0SHWBsAAABfRmlsdGVyaW5nSXRlcmFibGUuX19pdGVyX19YAwAAAGRlZktOS1KHWBkAAABfZ2xvYmFsX3dpbmRvd19tYXBwaW5nX2ZuWAMAAABkZWZLIUsjh1gZAAAAZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mblgDAAAAZGVmSyVLLodYEgAAAF9GaWx0ZXJpbmdJdGVyYWJsZVgFAAAAY2xhc3NLRktWh1glAAAAZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mbi5tYXBfdmlhX2VuZFgDAAAAZGVmSylLLIdYFQAAAFNpZGVJbnB1dE1hcC5fX2luaXRfX1gDAAAAZGVmSzNLOodYIQAAAFNpZGVJbnB1dE1hcC5pc19nbG9iYWxseV93aW5kb3dlZFgDAAAAZGVmS0JLRIdYGAAAAFNpZGVJbnB1dE1hcC5fX2dldGl0ZW1fX1gDAAAAZGVmSztLQYd1fXJtAgAAKFghAAAAU2lkZUlucHV0TWFwLmlzX2dsb2JhbGx5X3dpbmRvd2VkWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHNybgIAAFgMAAAAU2lkZUlucHV0TWFwam4CAABYGQAAAGRlZmF1bHRfd2luZG93X21hcHBpbmdfZm5qbgIAAHVoilghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzcm8CAACFgXJwAgAAfXJxAgAAYnRycgIAAFUjYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNycwIAAChYGxIAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiYGlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXJgIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCB3aXRoIEFwYWNoZSBCZWFtLiIiIgoKaW1wb3J0IHRocmVhZGluZwoKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlc3RyaWN0aW9uVHJhY2tlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSYW5nZVRyYWNrZXIKCgpjbGFzcyBPZmZzZXRSYW5nZShvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIHN0b3ApOgogICAgaWYgc3RhcnQgPiBzdG9wOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1N0YXJ0IG9mZnNldCBtdXN0IGJlIG5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgc3RvcCBvZmZzZXQuICcKICAgICAgICAgICdSZWNlaXZlZCAlZCBhbmQgJWQgcmVzcGVjdGl2ZWx5LicsIHN0YXJ0LCBzdG9wKQogICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICBzZWxmLnN0b3AgPSBzdG9wCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE9mZnNldFJhbmdlKToKICAgICAgcmV0dXJuIEZhbHNlCgogICAgcmV0dXJuIHNlbGYuc3RhcnQgPT0gb3RoZXIuc3RhcnQgYW5kIHNlbGYuc3RvcCA9PSBvdGhlci5zdG9wCgogIGRlZiBzcGxpdChzZWxmLCBkZXNpcmVkX251bV9vZmZzZXRzX3Blcl9zcGxpdCwgbWluX251bV9vZmZzZXRzX3Blcl9zcGxpdD0xKToKICAgIGN1cnJlbnRfc3BsaXRfc3RhcnQgPSBzZWxmLnN0YXJ0CiAgICBtYXhfc3BsaXRfc2l6ZSA9IG1heChkZXNpcmVkX251bV9vZmZzZXRzX3Blcl9zcGxpdCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9udW1fb2Zmc2V0c19wZXJfc3BsaXQpCiAgICB3aGlsZSBjdXJyZW50X3NwbGl0X3N0YXJ0IDwgc2VsZi5zdG9wOgogICAgICBjdXJyZW50X3NwbGl0X3N0b3AgPSBtaW4oY3VycmVudF9zcGxpdF9zdGFydCArIG1heF9zcGxpdF9zaXplLCBzZWxmLnN0b3ApCiAgICAgIHJlbWFpbmluZyA9IHNlbGYuc3RvcCAtIGN1cnJlbnRfc3BsaXRfc3RvcAoKICAgICAgIyBBdm9pZGluZyBhIHNtYWxsIHNwbGl0IGF0IHRoZSBlbmQuCiAgICAgIGlmIChyZW1haW5pbmcgPCBkZXNpcmVkX251bV9vZmZzZXRzX3Blcl9zcGxpdCAvIDQgb3IKICAgICAgICAgIHJlbWFpbmluZyA8IG1pbl9udW1fb2Zmc2V0c19wZXJfc3BsaXQpOgogICAgICAgIGN1cnJlbnRfc3BsaXRfc3RvcCA9IHNlbGYuc3RvcAoKICAgICAgeWllbGQgT2Zmc2V0UmFuZ2UoY3VycmVudF9zcGxpdF9zdGFydCwgY3VycmVudF9zcGxpdF9zdG9wKQogICAgICBjdXJyZW50X3NwbGl0X3N0YXJ0ID0gY3VycmVudF9zcGxpdF9zdG9wCgogIGRlZiBuZXdfdHJhY2tlcihzZWxmKToKICAgIHJldHVybiBPZmZzZXRSYW5nZVRyYWNrZXIoc2VsZi5zdGFydCwgc2VsZi5zdG9wKQoKCmNsYXNzIE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcihSZXN0cmljdGlvblRyYWNrZXIpOgogICIiIkFuIGBpb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyYCBpbXBsZW1lbnRhdGlvbnMgZm9yIGFuIG9mZnNldCByYW5nZS4KCiAgT2Zmc2V0IHJhbmdlIGlzIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBpbnRlZ2VycwogIFtzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbn0uCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICBzZWxmLl9yYW5nZSA9IE9mZnNldFJhbmdlKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogICAgc2VsZi5fY3VycmVudF9wb3NpdGlvbiA9IE5vbmUKICAgIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCA9IE5vbmUKICAgIHNlbGYuX2NoZWNrcG9pbnRlZCA9IEZhbHNlCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICBkZWYgY2hlY2tfZG9uZShzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0IDwgc2VsZi5fcmFuZ2Uuc3RvcCAtIDE6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ09mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBpcyBub3QgZG9uZSBzaW5jZSB3b3JrIGluIHJhbmdlIFslcywgJXMpICcKICAgICAgICAgICAgJ2hhcyBub3QgYmVlbiBjbGFpbWVkLicsCiAgICAgICAgICAgIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCBpZiBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQgaXMgbm90IE5vbmUKICAgICAgICAgICAgZWxzZSBzZWxmLl9yYW5nZS5zdGFydCwKICAgICAgICAgICAgc2VsZi5fcmFuZ2Uuc3RvcCkKCiAgZGVmIGN1cnJlbnRfcmVzdHJpY3Rpb24oc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiAoc2VsZi5fcmFuZ2Uuc3RhcnQsIHNlbGYuX3JhbmdlLnN0b3ApCgogIGRlZiBzdGFydF9wb3NpdGlvbihzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX3JhbmdlLnN0YXJ0CgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fcmFuZ2Uuc3RvcAoKICBkZWYgdHJ5X2NsYWltKHNlbGYsIHBvc2l0aW9uKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0IGFuZCBwb3NpdGlvbiA8PSBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1Bvc2l0aW9ucyBjbGFpbWVkIHNob3VsZCBzdHJpY3RseSBpbmNyZWFzZS4gVHJ5aW5nIHRvIGNsYWltICcKICAgICAgICAgICAgJ3Bvc2l0aW9uICVkIHdoaWxlIGxhc3QgY2xhaW0gYXR0ZW1wdCB3YXMgJWQuJywKICAgICAgICAgICAgcG9zaXRpb24sIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCkKCiAgICAgIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCA9IHBvc2l0aW9uCiAgICAgIGlmIHBvc2l0aW9uIDwgc2VsZi5fcmFuZ2Uuc3RhcnQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1Bvc2l0aW9uIHRvIGJlIGNsYWltZWQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgc3RhcnQgcG9zaXRpb24gJwogICAgICAgICAgICAnb2YgdGhlIHJhbmdlLiBUcmllZCB0byBjbGFpbSBwb3NpdGlvbiAlciBmb3IgdGhlIHJhbmdlIFslciwgJXIpJywKICAgICAgICAgICAgcG9zaXRpb24sIHNlbGYuX3JhbmdlLnN0YXJ0LCBzZWxmLl9yYW5nZS5zdG9wKQoKICAgICAgaWYgcG9zaXRpb24gPj0gc2VsZi5fcmFuZ2Uuc3RhcnQgYW5kIHBvc2l0aW9uIDwgc2VsZi5fcmFuZ2Uuc3RvcDoKICAgICAgICBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uID0gcG9zaXRpb24KICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgcmV0dXJuIEZhbHNlCgogIGRlZiBjaGVja3BvaW50KHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAjIElmIHNlbGYuX2N1cnJlbnRfcG9zaXRpb24gaXMgJ05vbmUnIG5vIHJlY29yZHMgaGF2ZSBiZWVuIGNsYWltZWQgc28KICAgICAgIyByZXNpZHVhbCBzaG91bGQgc3RhcnQgZnJvbSBzZWxmLl9yYW5nZS5zdGFydC4KICAgICAgaWYgc2VsZi5fY3VycmVudF9wb3NpdGlvbiBpcyBOb25lOgogICAgICAgIGVuZF9wb3NpdGlvbiA9IHNlbGYuX3JhbmdlLnN0YXJ0CiAgICAgIGVsc2U6CiAgICAgICAgZW5kX3Bvc2l0aW9uID0gc2VsZi5fY3VycmVudF9wb3NpdGlvbiArIDEKCiAgICAgIHJlc2lkdWFsX3JhbmdlID0gKGVuZF9wb3NpdGlvbiwgc2VsZi5fcmFuZ2Uuc3RvcCkKCiAgICAgIHNlbGYuX3JhbmdlID0gT2Zmc2V0UmFuZ2Uoc2VsZi5fcmFuZ2Uuc3RhcnQsIGVuZF9wb3NpdGlvbikKICAgICAgcmV0dXJuIHJlc2lkdWFsX3JhbmdlCn1ydAIAAChYJgAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZLXkthh1gXAAAAT2Zmc2V0UmFuZ2UubmV3X3RyYWNrZXJYAwAAAGRlZks6SzyHWCcAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZktaS12HWBEAAABPZmZzZXRSYW5nZS5zcGxpdFgDAAAAZGVmSypLOYdYGAAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlclgFAAAAY2xhc3NLPkuEh1gsAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25YAwAAAGRlZktWS1mHWBQAAABPZmZzZXRSYW5nZS5fX2luaXRfX1gDAAAAZGVmSxxLI4dYIwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50WAMAAABkZWZLd0uEh1gSAAAAT2Zmc2V0UmFuZ2UuX19lcV9fWAMAAABkZWZLJEsph1gLAAAAT2Zmc2V0UmFuZ2VYBQAAAGNsYXNzSxpLPIdYIwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja19kb25lWAMAAABkZWZLTEtVh1giAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmS2JLdodYIQAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5fX2luaXRfX1gDAAAAZGVmS0VLS4d1fXJ1AgAAKFgmAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0b3BfcG9zaXRpb25YIwAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzcnYCAABYFwAAAE9mZnNldFJhbmdlLm5ld190cmFja2VyanYCAABYJwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdGFydF9wb3NpdGlvbmp2AgAAWBEAAABPZmZzZXRSYW5nZS5zcGxpdGp2AgAAWAsAAABPZmZzZXRSYW5nZWp2AgAAWCwAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbmp2AgAAWCMAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY2hlY2twb2ludGp2AgAAWBgAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXJqdgIAAFgjAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmVqdgIAAFgiAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbWp2AgAAdWiKWCMAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc3J3AgAAhYFyeAIAAH1yeQIAAGJ0cnoCAABVHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXJ7AgAAKFi9LAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKOmNsYXNzOmBEaXNwbGF5RGF0YWAsIGl0cyBjbGFzc2VzLCBpbnRlcmZhY2VzIGFuZCBtZXRob2RzLgoKVGhlIGNsYXNzZXMgaW4gdGhpcyBtb2R1bGUgYWxsb3cgdXNlcnMgYW5kIHRyYW5zZm9ybSBkZXZlbG9wZXJzIHRvIGRlZmluZQpzdGF0aWMgZGlzcGxheSBkYXRhIHRvIGJlIGRpc3BsYXllZCB3aGVuIGEgcGlwZWxpbmUgcnVucy4KOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHMsCjpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuYCBzCmFuZCBvdGhlciBwaXBlbGluZSBjb21wb25lbnRzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YEhhc0Rpc3BsYXlEYXRhYAptaXhpbi4gVG8gYWRkIHN0YXRpYyBkaXNwbGF5IGRhdGEgdG8gYSBjb21wb25lbnQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlCjptZXRoOmBIYXNEaXNwbGF5RGF0YS5kaXNwbGF5X2RhdGEoKWAgbWV0aG9kLgoKQXZhaWxhYmxlIGNsYXNzZXM6CgoqIDpjbGFzczpgSGFzRGlzcGxheURhdGFgIC0gQ29tcG9uZW50cyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGNsYXNzIGNhbiBoYXZlCiAgc3RhdGljIGRpc3BsYXkgZGF0YSBzaG93biBpbiB0aGUgVUkuCiogOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gIC0gVGhpcyBjbGFzcyByZXByZXNlbnRzIHN0YXRpYyBkaXNwbGF5IGRhdGEKICBlbGVtZW50cy4KKiA6Y2xhc3M6YERpc3BsYXlEYXRhYCAtIEludGVybmFsIGNsYXNzIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgZGlzcGxheSBkYXRhCiAgYW5kIGNvbW11bmljYXRlIGl0IHRvIHRoZSBBUEkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjYWxlbmRhcgppbXBvcnQgaW5zcGVjdAppbXBvcnQganNvbgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQpmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKCl9fYWxsX18gPSBbJ0hhc0Rpc3BsYXlEYXRhJywgJ0Rpc3BsYXlEYXRhSXRlbScsICdEaXNwbGF5RGF0YSddCgoKY2xhc3MgSGFzRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgQmFzaWMgbWl4aW4gZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiBkaXNwbGF5IGRhdGEuCgogIEl0IGltcGxlbWVudHMgb25seSB0aGUgZGlzcGxheV9kYXRhIG1ldGhvZCBhbmQgYSBfbmFtZXNwYWNlIG1ldGhvZC4KICAiIiIKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICIiIiBSZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGEgYXNzb2NpYXRlZCB0byBhIHBpcGVsaW5lIGNvbXBvbmVudC4KCiAgICBJdCBzaG91bGQgYmUgcmVpbXBsZW1lbnRlZCBpbiBwaXBlbGluZSBjb21wb25lbnRzIHRoYXQgd2lzaCB0byBoYXZlCiAgICBzdGF0aWMgZGlzcGxheSBkYXRhLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rbc3RyLCBBbnldOiBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBgYGtleTp2YWx1ZWBgIHBhaXJzLgogICAgICBUaGUgdmFsdWUgbWlnaHQgYmUgYW4gaW50ZWdlciwgZmxvYXQgb3Igc3RyaW5nIHZhbHVlOyBhCiAgICAgIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYCBmb3IgdmFsdWVzIHRoYXQgaGF2ZSBtb3JlIGRhdGEKICAgICAgKGUuZy4gc2hvcnQgdmFsdWUsIGxhYmVsLCB1cmwpOyBvciBhIDpjbGFzczpgSGFzRGlzcGxheURhdGFgIGluc3RhbmNlCiAgICAgIHRoYXQgaGFzIG1vcmUgZGlzcGxheSBkYXRhIHRoYXQgc2hvdWxkIGJlIHBpY2tlZCB1cC4gRm9yIGV4YW1wbGU6OgoKICAgICAgICB7CiAgICAgICAgICAna2V5MSc6ICdzdHJpbmdfdmFsdWUnLAogICAgICAgICAgJ2tleTInOiAxMjM0LAogICAgICAgICAgJ2tleTMnOiAzLjE0MTU5MjY1LAogICAgICAgICAgJ2tleTQnOiBEaXNwbGF5RGF0YUl0ZW0oJ2FwYWNoZS5vcmcnLCB1cmw9J2h0dHA6Ly9hcGFjaGUub3JnJyksCiAgICAgICAgICAna2V5NSc6IHN1YkNvbXBvbmVudAogICAgICAgIH0KICAgICIiIgogICAgcmV0dXJuIHt9CgogIGRlZiBfbmFtZXNwYWNlKHNlbGYpOgogICAgcmV0dXJuICd7fS57fScuZm9ybWF0KHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCgoKY2xhc3MgRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgU3RhdGljIGRpc3BsYXkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwaXBlbGluZSBjb21wb25lbnQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lc3BhY2UsIGRpc3BsYXlfZGF0YV9kaWN0KToKICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLml0ZW1zID0gW10KICAgIHNlbGYuX3BvcHVsYXRlX2l0ZW1zKGRpc3BsYXlfZGF0YV9kaWN0KQoKICBkZWYgX3BvcHVsYXRlX2l0ZW1zKHNlbGYsIGRpc3BsYXlfZGF0YV9kaWN0KToKICAgICIiIiBQb3B1bGF0ZXMgdGhlIGxpc3Qgb2YgZGlzcGxheSBkYXRhIGl0ZW1zLgogICAgIiIiCiAgICBmb3Iga2V5LCBlbGVtZW50IGluIGRpc3BsYXlfZGF0YV9kaWN0Lml0ZW1zKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgSGFzRGlzcGxheURhdGEpOgogICAgICAgIHN1YmNvbXBvbmVudF9kaXNwbGF5X2RhdGEgPSBEaXNwbGF5RGF0YShlbGVtZW50Ll9uYW1lc3BhY2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwbGF5X2RhdGEoKSkKICAgICAgICBzZWxmLml0ZW1zICs9IHN1YmNvbXBvbmVudF9kaXNwbGF5X2RhdGEuaXRlbXMKICAgICAgICBjb250aW51ZQoKICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBEaXNwbGF5RGF0YUl0ZW0pOgogICAgICAgIGlmIGVsZW1lbnQuc2hvdWxkX2Ryb3AoKToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZWxlbWVudC5rZXkgPSBrZXkKICAgICAgICBlbGVtZW50Lm5hbWVzcGFjZSA9IHNlbGYubmFtZXNwYWNlCiAgICAgICAgc2VsZi5pdGVtcy5hcHBlbmQoZWxlbWVudCkKICAgICAgICBjb250aW51ZQoKICAgICAgIyBJZiBpdCdzIG5vdCBhIEhhc0Rpc3BsYXlEYXRhIGVsZW1lbnQsCiAgICAgICMgbm9yIGEgZGljdGlvbmFyeSwgdGhlbiBpdCdzIGEgc2ltcGxlIHZhbHVlCiAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKAogICAgICAgICAgRGlzcGxheURhdGFJdGVtKGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1rZXkpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgY3JlYXRlX2Zyb21fb3B0aW9ucyhjbHMsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiIENyZWF0ZXMgOmNsYXNzOmBEaXNwbGF5RGF0YWAgZnJvbSBhCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBpbnN0YW5jZS4KCiAgICBXaGVuIGNyZWF0aW5nIDpjbGFzczpgRGlzcGxheURhdGFgLCB0aGlzIG1ldGhvZCB3aWxsIGNvbnZlcnQgdGhlIHZhbHVlIG9mCiAgICBhbnkgaXRlbSBvZiBhIG5vbi1zdXBwb3J0ZWQgdHlwZSB0byBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAgVGhlIG5vcm1hbCA6bWV0aDpgLmNyZWF0ZV9mcm9tKClgIG1ldGhvZCByZWplY3RzIHRob3NlIGl0ZW1zLgoKICAgIFJldHVybnM6CiAgICAgIERpc3BsYXlEYXRhOiBBIDpjbGFzczpgRGlzcGxheURhdGFgIGluc3RhbmNlIHdpdGggcG9wdWxhdGVkIGl0ZW1zLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogSWYgdGhlICoqaGFzX2Rpc3BsYXlfZGF0YSoqIGFyZ3VtZW50IGlzCiAgICAgICAgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgSGFzRGlzcGxheURhdGFgLgogICAgIiIiCiAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCiAgICBpZiBub3QgaXNpbnN0YW5jZShwaXBlbGluZV9vcHRpb25zLCBQaXBlbGluZU9wdGlvbnMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0VsZW1lbnQgb2YgY2xhc3Mge30ue30gZG9lcyBub3Qgc3ViY2xhc3MgUGlwZWxpbmVPcHRpb25zJwogICAgICAgICAgLmZvcm1hdChwaXBlbGluZV9vcHRpb25zLl9fbW9kdWxlX18sCiAgICAgICAgICAgICAgICAgIHBpcGVsaW5lX29wdGlvbnMuX19jbGFzc19fLl9fbmFtZV9fKSkKCiAgICBpdGVtcyA9IHtrOiAodiBpZiBEaXNwbGF5RGF0YUl0ZW0uX2dldF92YWx1ZV90eXBlKHYpIGlzIG5vdCBOb25lCiAgICAgICAgICAgICAgICAgZWxzZSBzdHIodikpCiAgICAgICAgICAgICBmb3IgaywgdiBpbiBwaXBlbGluZV9vcHRpb25zLmRpc3BsYXlfZGF0YSgpLml0ZW1zKCl9CiAgICByZXR1cm4gY2xzKHBpcGVsaW5lX29wdGlvbnMuX25hbWVzcGFjZSgpLCBpdGVtcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGNyZWF0ZV9mcm9tKGNscywgaGFzX2Rpc3BsYXlfZGF0YSk6CiAgICAiIiIgQ3JlYXRlcyA6Y2xhc3M6YERpc3BsYXlEYXRhYCBmcm9tIGEgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAgaW5zdGFuY2UuCgogICAgUmV0dXJuczoKICAgICAgRGlzcGxheURhdGE6IEEgOmNsYXNzOmBEaXNwbGF5RGF0YWAgaW5zdGFuY2Ugd2l0aCBwb3B1bGF0ZWQgaXRlbXMuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBJZiB0aGUgKipoYXNfZGlzcGxheV9kYXRhKiogYXJndW1lbnQgaXMKICAgICAgICBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAuCiAgICAiIiIKICAgIGlmIG5vdCBpc2luc3RhbmNlKGhhc19kaXNwbGF5X2RhdGEsIEhhc0Rpc3BsYXlEYXRhKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRWxlbWVudCBvZiBjbGFzcyB7fS57fSBkb2VzIG5vdCBzdWJjbGFzcyBIYXNEaXNwbGF5RGF0YScKICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGhhc19kaXNwbGF5X2RhdGEuX19tb2R1bGVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19kaXNwbGF5X2RhdGEuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgIHJldHVybiBjbHMoaGFzX2Rpc3BsYXlfZGF0YS5fbmFtZXNwYWNlKCksIGhhc19kaXNwbGF5X2RhdGEuZGlzcGxheV9kYXRhKCkpCgoKY2xhc3MgRGlzcGxheURhdGFJdGVtKG9iamVjdCk6CiAgIiIiIEEgRGlzcGxheURhdGFJdGVtIHJlcHJlc2VudHMgYSB1bml0IG9mIHN0YXRpYyBkaXNwbGF5IGRhdGEuCgogIEVhY2ggaXRlbSBpcyBpZGVudGlmaWVkIGJ5IGEga2V5IGFuZCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjb21wb25lbnQgdGhlCiAgZGlzcGxheSBpdGVtIGJlbG9uZ3MgdG8uCiAgIiIiCiAgdHlwZURpY3QgPSB7c3RyOidTVFJJTkcnLAogICAgICAgICAgICAgIHVuaWNvZGU6J1NUUklORycsCiAgICAgICAgICAgICAgaW50OidJTlRFR0VSJywKICAgICAgICAgICAgICBmbG9hdDonRkxPQVQnLAogICAgICAgICAgICAgIGJvb2w6ICdCT09MRUFOJywKICAgICAgICAgICAgICB0aW1lZGVsdGE6J0RVUkFUSU9OJywKICAgICAgICAgICAgICBkYXRldGltZTonVElNRVNUQU1QJ30KCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCB1cmw9Tm9uZSwgbGFiZWw9Tm9uZSwKICAgICAgICAgICAgICAgbmFtZXNwYWNlPU5vbmUsIGtleT1Ob25lLCBzaG9ydFZhbHVlPU5vbmUpOgogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYua2V5ID0ga2V5CiAgICBzZWxmLnR5cGUgPSBzZWxmLl9nZXRfdmFsdWVfdHlwZSh2YWx1ZSkKICAgIHNlbGYuc2hvcnRWYWx1ZSA9IChzaG9ydFZhbHVlIGlmIHNob3J0VmFsdWUgaXMgbm90IE5vbmUgZWxzZQogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zaG9ydF92YWx1ZSh2YWx1ZSwgc2VsZi50eXBlKSkKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgc2VsZi51cmwgPSB1cmwKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5fZHJvcF9pZl9ub25lID0gRmFsc2UKICAgIHNlbGYuX2Ryb3BfaWZfZGVmYXVsdCA9IEZhbHNlCgogIGRlZiBkcm9wX2lmX25vbmUoc2VsZik6CiAgICAiIiIgVGhlIGl0ZW0gc2hvdWxkIGJlIGRyb3BwZWQgaWYgaXRzIHZhbHVlIGlzIE5vbmUuCgogICAgUmV0dXJuczoKICAgICAgUmV0dXJucyBzZWxmLgogICAgIiIiCiAgICBzZWxmLl9kcm9wX2lmX25vbmUgPSBUcnVlCiAgICByZXR1cm4gc2VsZgoKICBkZWYgZHJvcF9pZl9kZWZhdWx0KHNlbGYsIGRlZmF1bHQpOgogICAgIiIiIFRoZSBpdGVtIHNob3VsZCBiZSBkcm9wcGVkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byBpdHMgZGVmYXVsdC4KCiAgICBSZXR1cm5zOgogICAgICBSZXR1cm5zIHNlbGYuCiAgICAiIiIKICAgIHNlbGYuX2RlZmF1bHQgPSBkZWZhdWx0CiAgICBzZWxmLl9kcm9wX2lmX2RlZmF1bHQgPSBUcnVlCiAgICByZXR1cm4gc2VsZgoKICBkZWYgc2hvdWxkX2Ryb3Aoc2VsZik6CiAgICAiIiIgUmV0dXJuIFRydWUgaWYgdGhlIGl0ZW0gc2hvdWxkIGJlIGRyb3BwZWQsIG9yIEZhbHNlIGlmIGl0IHNob3VsZCBub3QKICAgIGJlIGRyb3BwZWQuIFRoaXMgZGVwZW5kcyBvbiB0aGUgZHJvcF9pZl9ub25lLCBhbmQgZHJvcF9pZl9kZWZhdWx0IGNhbGxzLgoKICAgIFJldHVybnM6CiAgICAgIFRydWUgb3IgRmFsc2U7IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpdGVtIHNob3VsZCBiZSBkcm9wcGVkIG9yIGtlcHQuCiAgICAiIiIKICAgIGlmIHNlbGYuX2Ryb3BfaWZfbm9uZSBhbmQgc2VsZi52YWx1ZSBpcyBOb25lOgogICAgICByZXR1cm4gVHJ1ZQogICAgaWYgc2VsZi5fZHJvcF9pZl9kZWZhdWx0IGFuZCBzZWxmLnZhbHVlID09IHNlbGYuX2RlZmF1bHQ6CiAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGlzX3ZhbGlkKHNlbGYpOgogICAgIiIiIENoZWNrcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IGZpZWxkcyBvZiB0aGUgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gCiAgICBhcmUgZmlsbGVkIGluLiBJdCBjaGVja3MgdGhhdCBuZWl0aGVyIGtleSwgbmFtZXNwYWNlLCB2YWx1ZSBvciB0eXBlIGFyZQogICAgOmRhdGE6YE5vbmVgLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogSWYgdGhlIGl0ZW0gZG9lcyBub3QgaGF2ZSBhIGtleSwgbmFtZXNwYWNlLAogICAgICAgIHZhbHVlIG9yIHR5cGUuCiAgICAiIiIKICAgIGlmIHNlbGYua2V5IGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgRGlzcGxheURhdGFJdGVtLiBLZXkgbXVzdCBub3QgYmUgTm9uZScpCiAgICBpZiBzZWxmLm5hbWVzcGFjZSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gTmFtZXNwYWNlIG11c3Qgbm90IGJlIE5vbmUnKQogICAgaWYgc2VsZi52YWx1ZSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gVmFsdWUgbXVzdCBub3QgYmUgTm9uZScpCiAgICBpZiBzZWxmLnR5cGUgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gVmFsdWUge30gaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS4nCiAgICAgICAgICAuZm9ybWF0KHNlbGYudmFsdWUpKQoKICBkZWYgX2dldF9kaWN0KHNlbGYpOgogICAgcmVzID0geydrZXknOiBzZWxmLmtleSwKICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5uYW1lc3BhY2UsCiAgICAgICAgICAgJ3R5cGUnOiBzZWxmLnR5cGUgaWYgc2VsZi50eXBlICE9ICdDTEFTUycgZWxzZSAnU1RSSU5HJ30KICAgICMgVE9ETzogUHl0aG9uIENsYXNzIHR5cGVzIHNob3VsZCBub3QgYmUgc3BlY2lhbC1jYXNlZCBvbmNlCiAgICAjIHRoZSBGbiBBUEkgaXMgaW4uCiAgICBpZiBzZWxmLnVybCBpcyBub3QgTm9uZToKICAgICAgcmVzWyd1cmwnXSA9IHNlbGYudXJsCiAgICBpZiBzZWxmLnNob3J0VmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJlc1snc2hvcnRWYWx1ZSddID0gc2VsZi5zaG9ydFZhbHVlCiAgICBpZiBzZWxmLmxhYmVsIGlzIG5vdCBOb25lOgogICAgICByZXNbJ2xhYmVsJ10gPSBzZWxmLmxhYmVsCiAgICByZXNbJ3ZhbHVlJ10gPSBzZWxmLl9mb3JtYXRfdmFsdWUoc2VsZi52YWx1ZSwgc2VsZi50eXBlKQogICAgcmV0dXJuIHJlcwoKICBkZWYgZ2V0X2RpY3Qoc2VsZik6CiAgICAiIiIgUmV0dXJucyB0aGUgaW50ZXJuYWwtQVBJIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIHRoZQogICAgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rbc3RyLCBBbnldOiBBIGRpY3Rpb25hcnkuIFRoZSBpbnRlcm5hbC1BUEkgZGljdGlvbmFyeSByZXByZXNlbnRpbmcKICAgICAgdGhlIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIHRoZSBpdGVtIGlzIG5vdCB2YWxpZC4KICAgICIiIgogICAgc2VsZi5pc192YWxpZCgpCiAgICByZXR1cm4gc2VsZi5fZ2V0X2RpY3QoKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0Rpc3BsYXlEYXRhSXRlbSh7fSknLmZvcm1hdChqc29uLmR1bXBzKHNlbGYuX2dldF9kaWN0KCkpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKICAgICAgcmV0dXJuIHNlbGYuX2dldF9kaWN0KCkgPT0gb3RoZXIuX2dldF9kaWN0KCkKICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0dXBsZShzb3J0ZWQoc2VsZi5fZ2V0X2RpY3QoKS5pdGVtcygpKSkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBfZm9ybWF0X3ZhbHVlKGNscywgdmFsdWUsIHR5cGVfKToKICAgICIiIiBSZXR1cm5zIHRoZSBBUEkgcmVwcmVzZW50YXRpb24gb2YgYSB2YWx1ZSBnaXZlbiBpdHMgdHlwZS4KCiAgICBBcmdzOgogICAgICB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgc2hvcnRlbmVkLgogICAgICB0eXBlXyhzdHJpbmcpOiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuCgogICAgUmV0dXJuczoKICAgICAgQSBmb3JtYXR0ZWQgdmFsdWUgaW4gdGhlIGZvcm0gb2YgYSBmbG9hdCwgaW50LCBvciBzdHJpbmcuCiAgICAiIiIKICAgIHJlcyA9IHZhbHVlCiAgICBpZiB0eXBlXyA9PSAnQ0xBU1MnOgogICAgICByZXMgPSAne30ue30nLmZvcm1hdCh2YWx1ZS5fX21vZHVsZV9fLCB2YWx1ZS5fX25hbWVfXykKICAgIGVsaWYgdHlwZV8gPT0gJ0RVUkFUSU9OJzoKICAgICAgcmVzID0gdmFsdWUudG90YWxfc2Vjb25kcygpKjEwMDAKICAgIGVsaWYgdHlwZV8gPT0gJ1RJTUVTVEFNUCc6CiAgICAgIHJlcyA9IGNhbGVuZGFyLnRpbWVnbSh2YWx1ZS50aW1ldHVwbGUoKSkqMTAwMCArIHZhbHVlLm1pY3Jvc2Vjb25kLy8xMDAwCiAgICByZXR1cm4gcmVzCgogIEBjbGFzc21ldGhvZAogIGRlZiBfZ2V0X3Nob3J0X3ZhbHVlKGNscywgdmFsdWUsIHR5cGVfKToKICAgICIiIiBDYWxjdWxhdGVzIHRoZSBzaG9ydCB2YWx1ZSBmb3IgYW4gaXRlbS4KCiAgICBBcmdzOgogICAgICB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgc2hvcnRlbmVkLgogICAgICB0eXBlXyhzdHJpbmcpOiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuCgogICAgUmV0dXJuczoKICAgICAgVGhlIHVucXVhbGlmaWVkIG5hbWUgb2YgYSBjbGFzcyBpZiB0eXBlXyBpcyAnQ0xBU1MnLiBOb25lIG90aGVyd2lzZS4KICAgICIiIgogICAgaWYgdHlwZV8gPT0gJ0NMQVNTJzoKICAgICAgcmV0dXJuIHZhbHVlLl9fbmFtZV9fCiAgICByZXR1cm4gTm9uZQoKICBAY2xhc3NtZXRob2QKICBkZWYgX2dldF92YWx1ZV90eXBlKGNscywgdmFsdWUpOgogICAgIiIiIEluZmVycyB0aGUgdHlwZSBvZiBhIGdpdmVuIHZhbHVlLgoKICAgIEFyZ3M6CiAgICAgIHZhbHVlOiBUaGUgdmFsdWUgd2hvc2UgdHlwZSBuZWVkcyB0byBiZSBpbmZlcnJlZC4gRm9yICdEVVJBVElPTicgYW5kCiAgICAgICAgJ1RJTUVTVEFNUCcsIHRoZSBjb3JyZXNwb25kaW5nIFB5dGhvbiB0eXBlIGlzIGRhdGV0aW1lLnRpbWVkZWx0YSBhbmQKICAgICAgICBkYXRldGltZS5kYXRldGltZSByZXNwZWN0aXZlbHkuIEZvciBQeXRob24gY2xhc3NlcywgdGhlIEFQSSB0eXBlIGlzCiAgICAgICAganVzdCAnU1RSSU5HJyBhdCB0aGUgbW9tZW50LgoKICAgIFJldHVybnM6CiAgICAgIE9uZSBvZiAnU1RSSU5HJywgJ0lOVEVHRVInLCAnRkxPQVQnLCAnQ0xBU1MnLCAnRFVSQVRJT04nLCBvcgogICAgICAnVElNRVNUQU1QJywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZS4KICAgICIiIgogICAgI1RPRE86IEZpeCBBcmdzOiBkb2N1bWVudGF0aW9uIG9uY2UgdGhlIFB5dGhvbiBjbGFzc2VzIGhhbmRsaW5nIGhhcyBjaGFuZ2VkCiAgICB0eXBlXyA9IGNscy50eXBlRGljdC5nZXQodHlwZSh2YWx1ZSkpCiAgICBpZiB0eXBlXyBpcyBOb25lOgogICAgICB0eXBlXyA9ICdDTEFTUycgaWYgaW5zcGVjdC5pc2NsYXNzKHZhbHVlKSBlbHNlIE5vbmUKICAgIGlmIHR5cGVfIGlzIE5vbmUgYW5kIHZhbHVlIGlzIE5vbmU6CiAgICAgIHR5cGVfID0gJ1NUUklORycKICAgIHJldHVybiB0eXBlXwp9cnwCAAAoWCAAAABEaXNwbGF5RGF0YUl0ZW0uX2dldF9zaG9ydF92YWx1ZVgDAAAAZGVmTTEBTT8Bh1gZAAAASGFzRGlzcGxheURhdGEuX25hbWVzcGFjZVgDAAAAZGVmS09LUYdYFgAAAERpc3BsYXlEYXRhSXRlbS5fX2VxX19YAwAAAGRlZk0SAU0WAYdYFAAAAERpc3BsYXlEYXRhLl9faW5pdF9fWAMAAABkZWZLV0tbh1gOAAAASGFzRGlzcGxheURhdGFYBQAAAGNsYXNzSzJLUYdYHwAAAERpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tX29wdGlvbnNYAwAAAGRlZkt1S5CHWBkAAABEaXNwbGF5RGF0YUl0ZW0uX2dldF9kaWN0WAMAAABkZWZL8k0AAYdYGAAAAERpc3BsYXlEYXRhSXRlbS5fX3JlcHJfX1gDAAAAZGVmTQ8BTREBh1gYAAAARGlzcGxheURhdGFJdGVtLl9faGFzaF9fWAMAAABkZWZNGgFNHAGHWBYAAABEaXNwbGF5RGF0YUl0ZW0uX19uZV9fWAMAAABkZWZNFwFNGQGHWBgAAABEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3RYAwAAAGRlZk0BAU0OAYdYGAAAAERpc3BsYXlEYXRhSXRlbS5pc192YWxpZFgDAAAAZGVmS95L8YdYGAAAAERpc3BsYXlEYXRhSXRlbS5fX2luaXRfX1gDAAAAZGVmS7FLvYdYGwAAAERpc3BsYXlEYXRhLl9wb3B1bGF0ZV9pdGVtc1gDAAAAZGVmS1xLdIdYHwAAAERpc3BsYXlEYXRhSXRlbS5fZ2V0X3ZhbHVlX3R5cGVYAwAAAGRlZk1AAU1VAYdYGwAAAERpc3BsYXlEYXRhSXRlbS5zaG91bGRfZHJvcFgDAAAAZGVmS9FL3YdYFwAAAERpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tWAMAAABkZWZLkUuhh1gfAAAARGlzcGxheURhdGFJdGVtLmRyb3BfaWZfZGVmYXVsdFgDAAAAZGVmS8dL0IdYHQAAAERpc3BsYXlEYXRhSXRlbS5fZm9ybWF0X3ZhbHVlWAMAAABkZWZNHQFNMAGHWBsAAABIYXNEaXNwbGF5RGF0YS5kaXNwbGF5X2RhdGFYAwAAAGRlZks4S06HWBwAAABEaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9ub25lWAMAAABkZWZLvkvGh1gLAAAARGlzcGxheURhdGFYBQAAAGNsYXNzS1NLoYdYDwAAAERpc3BsYXlEYXRhSXRlbVgFAAAAY2xhc3NLo01VAYd1fXJ9AgAAKFgOAAAASGFzRGlzcGxheURhdGFYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXJ+AgAAWBsAAABEaXNwbGF5RGF0YUl0ZW0uc2hvdWxkX2Ryb3BqfgIAAFgXAAAARGlzcGxheURhdGEuY3JlYXRlX2Zyb21qfgIAAFgfAAAARGlzcGxheURhdGFJdGVtLmRyb3BfaWZfZGVmYXVsdGp+AgAAWBgAAABEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3RqfgIAAFgfAAAARGlzcGxheURhdGEuY3JlYXRlX2Zyb21fb3B0aW9uc2p+AgAAWBsAAABIYXNEaXNwbGF5RGF0YS5kaXNwbGF5X2RhdGFqfgIAAFgcAAAARGlzcGxheURhdGFJdGVtLmRyb3BfaWZfbm9uZWp+AgAAWBgAAABEaXNwbGF5RGF0YUl0ZW0uaXNfdmFsaWRqfgIAAFgLAAAARGlzcGxheURhdGFqfgIAAFgPAAAARGlzcGxheURhdGFJdGVtan4CAAB1aIpYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXJ/AgAAhYFygAIAAH1ygQIAAGJ0coICAABVMmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyKFhpDgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIFV0aWxpdHkgZnVuY3Rpb25zICYgY2xhc3NlcyB0aGF0IGFyZSBfbm90XyBzcGVjaWZpYyB0byB0aGUgZGF0YXN0b3JlIGNsaWVudC4KIwojIEZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCmltcG9ydCByYW5kb20KCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MSBpbXBvcnQgdXRpbAoKCmNsYXNzIEFkYXB0aXZlVGhyb3R0bGVyKG9iamVjdCk6CiAgIiIiSW1wbGVtZW50cyBhZGFwdGl2ZSB0aHJvdHRsaW5nLgoKICBTZWUKICBodHRwczovL2xhbmRpbmcuZ29vZ2xlLmNvbS9zcmUvYm9vay9jaGFwdGVycy9oYW5kbGluZy1vdmVybG9hZC5odG1sI2NsaWVudC1zaWRlLXRocm90dGxpbmctYTdzWVVnCiAgZm9yIGEgZnVsbCBkaXNjdXNzaW9uIG9mIHRoZSB1c2UgY2FzZSBhbmQgYWxnb3JpdGhtIGFwcGxpZWQuCiAgIiIiCgogICMgVGhlIHRhcmdldCBtaW5pbXVtIG51bWJlciBvZiByZXF1ZXN0cyBwZXIgc2FtcGxlUGVyaW9kTXMsIGV2ZW4gaWYgbm8KICAjIHJlcXVlc3RzIHN1Y2NlZWQuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAsIGVsc2Ugd2UgY291bGQgdGhyb3R0bGUgdG8gemVyby4KICAjIEJlY2F1c2UgZXZlcnkgZGVjaXNpb24gaXMgcHJvYmFiaWxpc3RpYywgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlCiAgIyByZXF1ZXN0IHJhdGUgaW4gYW55IGdpdmVuIGludGVydmFsIHdpbGwgbm90IGJlIHplcm8uIChUaGlzIGlzIHRoZSArMSBmcm9tCiAgIyB0aGUgZm9ybXVsYSBpbgogICMgaHR0cHM6Ly9sYW5kaW5nLmdvb2dsZS5jb20vc3JlL2Jvb2svY2hhcHRlcnMvaGFuZGxpbmctb3ZlcmxvYWQuaHRtbCApCiAgTUlOX1JFUVVFU1RTID0gMQoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93X21zLCBidWNrZXRfbXMsIG92ZXJsb2FkX3JhdGlvKToKICAgICIiIkluaXRpYWxpemVzIEFkYXB0aXZlVGhyb3R0bGVyLgoKICAgICAgQXJnczoKICAgICAgICB3aW5kb3dfbXM6IGludCwgbGVuZ3RoIG9mIGhpc3RvcnkgdG8gY29uc2lkZXIsIGluIG1zLCB0byBzZXQKICAgICAgICAgICAgICAgICAgIHRocm90dGxpbmcuCiAgICAgICAgYnVja2V0X21zOiBpbnQsIGdyYW51bGFyaXR5IG9mIHRpbWUgYnVja2V0cyB0aGF0IHdlIHN0b3JlIGRhdGEgaW4sIGluCiAgICAgICAgICAgICAgICAgICBtcy4KICAgICAgICBvdmVybG9hZF9yYXRpbzogZmxvYXQsIHRoZSB0YXJnZXQgcmF0aW8gYmV0d2VlbiByZXF1ZXN0cyBzZW50IGFuZAogICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsIHJlcXVlc3RzLiBUaGlzIGlzICJLIiBpbiB0aGUgZm9ybXVsYSBpbgogICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2xhbmRpbmcuZ29vZ2xlLmNvbS9zcmUvYm9vay9jaGFwdGVycy9oYW5kbGluZy1vdmVybG9hZC5odG1sLgogICAgIiIiCiAgICBzZWxmLl9hbGxfcmVxdWVzdHMgPSB1dGlsLk1vdmluZ1N1bSh3aW5kb3dfbXMsIGJ1Y2tldF9tcykKICAgIHNlbGYuX3N1Y2Nlc3NmdWxfcmVxdWVzdHMgPSB1dGlsLk1vdmluZ1N1bSh3aW5kb3dfbXMsIGJ1Y2tldF9tcykKICAgIHNlbGYuX292ZXJsb2FkX3JhdGlvID0gZmxvYXQob3ZlcmxvYWRfcmF0aW8pCiAgICBzZWxmLl9yYW5kb20gPSByYW5kb20uUmFuZG9tKCkKCiAgZGVmIF90aHJvdHRsaW5nX3Byb2JhYmlsaXR5KHNlbGYsIG5vdyk6CiAgICBpZiBub3Qgc2VsZi5fYWxsX3JlcXVlc3RzLmhhc19kYXRhKG5vdyk6CiAgICAgIHJldHVybiAwCiAgICBhbGxfcmVxdWVzdHMgPSBzZWxmLl9hbGxfcmVxdWVzdHMuc3VtKG5vdykKICAgIHN1Y2Nlc3NmdWxfcmVxdWVzdHMgPSBzZWxmLl9zdWNjZXNzZnVsX3JlcXVlc3RzLnN1bShub3cpCiAgICByZXR1cm4gbWF4KAogICAgICAgIDAsIChhbGxfcmVxdWVzdHMgLSBzZWxmLl9vdmVybG9hZF9yYXRpbyAqIHN1Y2Nlc3NmdWxfcmVxdWVzdHMpCiAgICAgICAgLyAoYWxsX3JlcXVlc3RzICsgQWRhcHRpdmVUaHJvdHRsZXIuTUlOX1JFUVVFU1RTKSkKCiAgZGVmIHRocm90dGxlX3JlcXVlc3Qoc2VsZiwgbm93KToKICAgICIiIkRldGVybWluZXMgd2hldGhlciBvbmUgUlBDIGF0dGVtcHQgc2hvdWxkIGJlIHRocm90dGxlZC4KCiAgICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25jZSBlYWNoIHRpbWUgdGhlIGNhbGxlciBpbnRlbmRzIHRvIHNlbmQgYW4gUlBDOyBpZgogICAgaXQgcmV0dXJucyB0cnVlLCBkcm9wIG9yIGRlbGF5IHRoYXQgcmVxdWVzdCAoY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluCiAgICBhZnRlciB0aGUgZGVsYXkpLgoKICAgIEFyZ3M6CiAgICAgIG5vdzogaW50LCB0aW1lIGluIG1zIHNpbmNlIHRoZSBlcG9jaAogICAgUmV0dXJuczoKICAgICAgYm9vbCwgVHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCB0aHJvdHRsZSBvciBkZWxheSB0aGUgcmVxdWVzdC4KICAgICIiIgogICAgdGhyb3R0bGluZ19wcm9iYWJpbGl0eSA9IHNlbGYuX3Rocm90dGxpbmdfcHJvYmFiaWxpdHkobm93KQogICAgc2VsZi5fYWxsX3JlcXVlc3RzLmFkZChub3csIDEpCiAgICByZXR1cm4gc2VsZi5fcmFuZG9tLnVuaWZvcm0oMCwgMSkgPCB0aHJvdHRsaW5nX3Byb2JhYmlsaXR5CgogIGRlZiBzdWNjZXNzZnVsX3JlcXVlc3Qoc2VsZiwgbm93KToKICAgICIiIk5vdGlmaWVzIHRoZSB0aHJvdHRsZXIgb2YgYSBzdWNjZXNzZnVsIHJlcXVlc3QuCgogICAgTXVzdCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCByZXF1ZXN0IChmb3Igd2hpY2ggdGhyb3R0bGVfcmVxdWVzdCB3YXMKICAgIHByZXZpb3VzbHkgY2FsbGVkKSB0aGF0IHN1Y2NlZWRlZC4KCiAgICBBcmdzOgogICAgICBub3c6IGludCwgdGltZSBpbiBtcyBzaW5jZSB0aGUgZXBvY2gKICAgICIiIgogICAgc2VsZi5fc3VjY2Vzc2Z1bF9yZXF1ZXN0cy5hZGQobm93LCAxKQp9coMCAAAoWCIAAABBZGFwdGl2ZVRocm90dGxlci50aHJvdHRsZV9yZXF1ZXN0WAMAAABkZWZLRUtUh1gpAAAAQWRhcHRpdmVUaHJvdHRsZXIuX3Rocm90dGxpbmdfcHJvYmFiaWxpdHlYAwAAAGRlZks8S0SHWBoAAABBZGFwdGl2ZVRocm90dGxlci5fX2luaXRfX1gDAAAAZGVmSytLO4dYEQAAAEFkYXB0aXZlVGhyb3R0bGVyWAUAAABjbGFzc0sbS1+HWCQAAABBZGFwdGl2ZVRocm90dGxlci5zdWNjZXNzZnVsX3JlcXVlc3RYAwAAAGRlZktVS1+HdX1yhAIAAChYIgAAAEFkYXB0aXZlVGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3RYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVycoUCAABYJAAAAEFkYXB0aXZlVGhyb3R0bGVyLnN1Y2Nlc3NmdWxfcmVxdWVzdGqFAgAAWBEAAABBZGFwdGl2ZVRocm90dGxlcmqFAgAAdWiKWDIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlcnKGAgAAhYFyhwIAAH1yiAIAAGJ0VSZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc3KJAgAAKFi0FAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJFbmQtdG8tZW5kIHRlc3QgcmVzdWx0IHZlcmlmaWVycwoKQSBzZXQgb2YgdmVyaWZpZXJzIHRoYXQgYXJlIHVzZWQgaW4gZW5kLXRvLWVuZCB0ZXN0cyB0byB2ZXJpZnkgc3RhdGUvb3V0cHV0Cm9mIHRlc3QgcGlwZWxpbmUgam9iLiBDdXN0b21pemVkIHZlcmlmaWVyIHNob3VsZCBleHRlbmQKYGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyYCBhbmQgb3ZlcnJpZGUgX21hdGNoZXMuCiIiIgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCmZyb20gaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIgaW1wb3J0IEJhc2VNYXRjaGVyCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZyBpbXBvcnQgdGVzdF91dGlscyBhcyB1dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQoKX19hbGxfXyA9IFsKICAgICdQaXBlbGluZVN0YXRlTWF0Y2hlcicsCiAgICAnRmlsZUNoZWNrc3VtTWF0Y2hlcicsCiAgICAncmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcicsCiAgICBdCgoKdHJ5OgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5leGNlcHRpb25zIGltcG9ydCBIdHRwRXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIEh0dHBFcnJvciA9IE5vbmUKCk1BWF9SRVRSSUVTID0gNAoKCmNsYXNzIFBpcGVsaW5lU3RhdGVNYXRjaGVyKEJhc2VNYXRjaGVyKToKICAiIiJNYXRjaGVyIHRoYXQgdmVyaWZ5IHBpcGVsaW5lIGpvYiB0ZXJtaW5hdGVkIGluIGV4cGVjdGVkIHN0YXRlCgogIE1hdGNoZXIgY29tcGFyZXMgdGhlIGFjdHVhbCBwaXBlbGluZSB0ZXJtaW5hdGUgc3RhdGUgd2l0aCBleHBlY3RlZC4KICBCeSBkZWZhdWx0LCBgUGlwZWxpbmVTdGF0ZS5ET05FYCBpcyB1c2VkIGFzIGV4cGVjdGVkIHN0YXRlLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWRfc3RhdGU9UGlwZWxpbmVTdGF0ZS5ET05FKToKICAgIHNlbGYuZXhwZWN0ZWRfc3RhdGUgPSBleHBlY3RlZF9zdGF0ZQoKICBkZWYgX21hdGNoZXMoc2VsZiwgcGlwZWxpbmVfcmVzdWx0KToKICAgIHJldHVybiBwaXBlbGluZV9yZXN1bHQuc3RhdGUgPT0gc2VsZi5leHBlY3RlZF9zdGF0ZQoKICBkZWYgZGVzY3JpYmVfdG8oc2VsZiwgZGVzY3JpcHRpb24pOgogICAgZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIlRlc3QgcGlwZWxpbmUgZXhwZWN0ZWQgdGVybWluYXRlZCBpbiBzdGF0ZTogIikgXAogICAgICAuYXBwZW5kX3RleHQoc2VsZi5leHBlY3RlZF9zdGF0ZSkKCiAgZGVmIGRlc2NyaWJlX21pc21hdGNoKHNlbGYsIHBpcGVsaW5lX3Jlc3VsdCwgbWlzbWF0Y2hfZGVzY3JpcHRpb24pOgogICAgbWlzbWF0Y2hfZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIlRlc3QgcGlwZWxpbmUgam9iIHRlcm1pbmF0ZWQgaW4gc3RhdGU6ICIpIFwKICAgICAgLmFwcGVuZF90ZXh0KHBpcGVsaW5lX3Jlc3VsdC5zdGF0ZSkKCgpkZWYgcmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcihleGNlcHRpb24pOgogICIiIkZpbHRlciBhbGxvd2luZyByZXRyaWVzIG9uIGZpbGUgSS9PIGVycm9ycyBhbmQgc2VydmljZSBlcnJvci4iIiIKICByZXR1cm4gaXNpbnN0YW5jZShleGNlcHRpb24sIElPRXJyb3IpIG9yIFwKICAgICAgICAgIChIdHRwRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpKQoKCmNsYXNzIEZpbGVDaGVja3N1bU1hdGNoZXIoQmFzZU1hdGNoZXIpOgogICIiIk1hdGNoZXIgdGhhdCB2ZXJpZmllcyBmaWxlKHMpIGNvbnRlbnQgYnkgY29tcGFyaW5nIGZpbGUgY2hlY2tzdW0uCgogIFVzZSBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rIHRvIGZldGNoIGZpbGUocykgZnJvbSBnaXZlbiBwYXRoLgogIEZpbGUgY2hlY2tzdW0gaXMgYSBoYXNoIHN0cmluZyBjb21wdXRlZCBmcm9tIGNvbnRlbnQgb2YgZmlsZShzKS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcGF0aCwgZXhwZWN0ZWRfY2hlY2tzdW0sIHNsZWVwX3NlY3M9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgRmlsZUNoZWNrc3VtTWF0Y2hlciBvYmplY3QKCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGggOiBBIHN0cmluZyB0aGF0IGlzIHRoZSBmdWxsIHBhdGggb2Ygb3V0cHV0IGZpbGUuIFRoaXMgcGF0aAogICAgICAgIGNhbiBjb250YWluIGdsb2JzLgogICAgICBleHBlY3RlZF9jaGVja3N1bSA6IEEgaGFzaCBzdHJpbmcgdGhhdCBpcyBjb21wdXRlZCBmcm9tIGV4cGVjdGVkCiAgICAgICAgcmVzdWx0LgogICAgICBzbGVlcF9zZWNzIDogTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdmVyaWZpY2F0aW9uIHN0YXJ0LgogICAgICAgIEV4dHJhIHRpbWUgYXJlIGdpdmVuIHRvIG1ha2Ugc3VyZSBvdXRwdXQgZmlsZXMgYXJlIHJlYWR5IG9uIEZTLgogICAgIiIiCiAgICBpZiBzbGVlcF9zZWNzIGlzIG5vdCBOb25lOgogICAgICBpZiBpc2luc3RhbmNlKHNsZWVwX3NlY3MsIGludCk6CiAgICAgICAgc2VsZi5zbGVlcF9zZWNzID0gc2xlZXBfc2VjcwogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NsZWVwIHNlY29uZHMsIGlmIHJlY2VpdmVkLCBtdXN0IGJlIGludC4gJwogICAgICAgICAgICAgICAgICAgICAgICAgJ0J1dCByZWNlaXZlZDogJXIsICVzJyAlIChzbGVlcF9zZWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHNsZWVwX3NlY3MpKSkKICAgIGVsc2U6CiAgICAgIHNlbGYuc2xlZXBfc2VjcyA9IE5vbmUKCiAgICBzZWxmLmZpbGVfcGF0aCA9IGZpbGVfcGF0aAogICAgc2VsZi5leHBlY3RlZF9jaGVja3N1bSA9IGV4cGVjdGVkX2NoZWNrc3VtCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcikKICBkZWYgX3JlYWRfd2l0aF9yZXRyeShzZWxmKToKICAgICIiIlJlYWQgcGF0aCB3aXRoIHJldHJ5IGlmIEkvTyBmYWlsZWQiIiIKICAgIHJlYWRfbGluZXMgPSBbXQogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMubWF0Y2goW3NlbGYuZmlsZV9wYXRoXSlbMF0KICAgIG1hdGNoZWRfcGF0aCA9IFtmLnBhdGggZm9yIGYgaW4gbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3RdCiAgICBpZiBub3QgbWF0Y2hlZF9wYXRoOgogICAgICByYWlzZSBJT0Vycm9yKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAlcycgJSBzZWxmLmZpbGVfcGF0aCkKCiAgICBsb2dnaW5nLmluZm8oJ0ZpbmQgJWQgZmlsZXMgaW4gJXM6IFxuJXMnLAogICAgICAgICAgICAgICAgIGxlbihtYXRjaGVkX3BhdGgpLCBzZWxmLmZpbGVfcGF0aCwgJ1xuJy5qb2luKG1hdGNoZWRfcGF0aCkpCiAgICBmb3IgcGF0aCBpbiBtYXRjaGVkX3BhdGg6CiAgICAgIHdpdGggRmlsZVN5c3RlbXMub3BlbihwYXRoLCAncicpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgIHJlYWRfbGluZXMuYXBwZW5kKGxpbmUpCiAgICByZXR1cm4gcmVhZF9saW5lcwoKICBkZWYgX21hdGNoZXMoc2VsZiwgXyk6CiAgICBpZiBzZWxmLnNsZWVwX3NlY3M6CiAgICAgICMgV2FpdCB0byBoYXZlIG91dHB1dCBmaWxlIHJlYWR5IG9uIEZTCiAgICAgIGxvZ2dpbmcuaW5mbygnV2FpdCAlZCBzZWNvbmRzLi4uJywgc2VsZi5zbGVlcF9zZWNzKQogICAgICB0aW1lLnNsZWVwKHNlbGYuc2xlZXBfc2VjcykKCiAgICAjIFJlYWQgZnJvbSBnaXZlbiBmaWxlKHMpIHBhdGgKICAgIHJlYWRfbGluZXMgPSBzZWxmLl9yZWFkX3dpdGhfcmV0cnkoKQoKICAgICMgQ29tcHV0ZSBjaGVja3N1bQogICAgc2VsZi5jaGVja3N1bSA9IHV0aWxzLmNvbXB1dGVfaGFzaChyZWFkX2xpbmVzKQogICAgbG9nZ2luZy5pbmZvKCdSZWFkIGZyb20gZ2l2ZW4gcGF0aCAlcywgJWQgbGluZXMsIGNoZWNrc3VtOiAlcy4nLAogICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9wYXRoLCBsZW4ocmVhZF9saW5lcyksIHNlbGYuY2hlY2tzdW0pCiAgICByZXR1cm4gc2VsZi5jaGVja3N1bSA9PSBzZWxmLmV4cGVjdGVkX2NoZWNrc3VtCgogIGRlZiBkZXNjcmliZV90byhzZWxmLCBkZXNjcmlwdGlvbik6CiAgICBkZXNjcmlwdGlvbiBcCiAgICAgIC5hcHBlbmRfdGV4dCgiRXhwZWN0ZWQgY2hlY2tzdW0gaXMgIikgXAogICAgICAuYXBwZW5kX3RleHQoc2VsZi5leHBlY3RlZF9jaGVja3N1bSkKCiAgZGVmIGRlc2NyaWJlX21pc21hdGNoKHNlbGYsIHBpcGVsaW5lX3Jlc3VsdCwgbWlzbWF0Y2hfZGVzY3JpcHRpb24pOgogICAgbWlzbWF0Y2hfZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIkFjdHVhbCBjaGVja3N1bSBpcyAiKSBcCiAgICAgIC5hcHBlbmRfdGV4dChzZWxmLmNoZWNrc3VtKQp9cooCAAAoWCYAAABQaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaFgDAAAAZGVmS0RLSIdYIgAAAHJldHJ5X29uX2lvX2Vycm9yX2FuZF9zZXJ2ZXJfZXJyb3JYAwAAAGRlZktKS06HWCUAAABGaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX21pc21hdGNoWAMAAABkZWZLlkuah1gcAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5fbWF0Y2hlc1gDAAAAZGVmS4JLkIdYJAAAAEZpbGVDaGVja3N1bU1hdGNoZXIuX3JlYWRfd2l0aF9yZXRyeVgDAAAAZGVmS29LgYdYIAAAAFBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX3RvWAMAAABkZWZLP0tDh1gdAAAAUGlwZWxpbmVTdGF0ZU1hdGNoZXIuX21hdGNoZXNYAwAAAGRlZks8Sz6HWB8AAABGaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3RvWAMAAABkZWZLkUuVh1gdAAAAUGlwZWxpbmVTdGF0ZU1hdGNoZXIuX19pbml0X19YAwAAAGRlZks5SzuHWBMAAABGaWxlQ2hlY2tzdW1NYXRjaGVyWAUAAABjbGFzc0tQS5qHWBQAAABQaXBlbGluZVN0YXRlTWF0Y2hlclgFAAAAY2xhc3NLMktIh1gcAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5fX2luaXRfX1gDAAAAZGVmS1dLbod1fXKLAgAAKFgmAAAAUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzcowCAABYIgAAAHJldHJ5X29uX2lvX2Vycm9yX2FuZF9zZXJ2ZXJfZXJyb3JqjAIAAFglAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaGqMAgAAWBQAAABQaXBlbGluZVN0YXRlTWF0Y2hlcmqMAgAAWCAAAABQaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV90b2qMAgAAWB8AAABGaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3RvaowCAABYEwAAAEZpbGVDaGVja3N1bU1hdGNoZXJqjAIAAHVoilgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnNyjQIAAIWBco4CAAB9co8CAABidHKQAgAAVTBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMoWFUXAAAjIEdlbmVyYXRlZCBieSB0aGUgZ1JQQyBQeXRob24gcHJvdG9jb2wgY29tcGlsZXIgcGx1Z2luLiBETyBOT1QgRURJVCEKaW1wb3J0IGdycGMKCmltcG9ydCBiZWFtX2ZuX2FwaV9wYjIgYXMgYmVhbV9fZm5fX2FwaV9fcGIyCgoKY2xhc3MgQmVhbUZuQ29udHJvbFN0dWIob2JqZWN0KToKICAiIiIKICBDb250cm9sIFBsYW5lIEFQSQoKICBQcm9ncmVzcyByZXBvcnRpbmcgYW5kIHNwbGl0dGluZyBzdGlsbCBuZWVkIGZ1cnRoZXIgdmV0dGluZy4gQWxzbywgdGhpcyBtYXkgY2hhbmdlCiAgd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIGluc3RydWN0aW9ucy9yZXNwb25zZXMgcmVsYXRlZCB0byBtZXRyaWNzLgoKICBBbiBBUEkgdGhhdCBkZXNjcmliZXMgdGhlIHdvcmsgdGhhdCBhIFNESyBoYXJuZXNzIGlzIG1lYW50IHRvIGRvLgogIFN0YWJsZQogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5Db250cm9sID0gY2hhbm5lbC5zdHJlYW1fc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5Db250cm9sL0NvbnRyb2wnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkluc3RydWN0aW9uUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBCZWFtRm5Db250cm9sU2VydmljZXIob2JqZWN0KToKICAiIiIKICBDb250cm9sIFBsYW5lIEFQSQoKICBQcm9ncmVzcyByZXBvcnRpbmcgYW5kIHNwbGl0dGluZyBzdGlsbCBuZWVkIGZ1cnRoZXIgdmV0dGluZy4gQWxzbywgdGhpcyBtYXkgY2hhbmdlCiAgd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIGluc3RydWN0aW9ucy9yZXNwb25zZXMgcmVsYXRlZCB0byBtZXRyaWNzLgoKICBBbiBBUEkgdGhhdCBkZXNjcmliZXMgdGhlIHdvcmsgdGhhdCBhIFNESyBoYXJuZXNzIGlzIG1lYW50IHRvIGRvLgogIFN0YWJsZQogICIiIgoKICBkZWYgQ29udHJvbChzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIkluc3RydWN0aW9ucyBzZW50IGJ5IHRoZSBydW5uZXIgdG8gdGhlIFNESyByZXF1ZXN0aW5nIGRpZmZlcmVudCB0eXBlcwogICAgb2Ygd29yay4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ0NvbnRyb2wnOiBncnBjLnN0cmVhbV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuQ29udHJvbCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5JbnN0cnVjdGlvblJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5JbnN0cnVjdGlvblJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuQ29udHJvbCcsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgoKY2xhc3MgQmVhbUZuRGF0YVN0dWIob2JqZWN0KToKICAiIiJTdGFibGUKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuRGF0YSA9IGNoYW5uZWwuc3RyZWFtX3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuRGF0YS9EYXRhJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuRWxlbWVudHMuRnJvbVN0cmluZywKICAgICAgICApCgoKY2xhc3MgQmVhbUZuRGF0YVNlcnZpY2VyKG9iamVjdCk6CiAgIiIiU3RhYmxlCiAgIiIiCgogIGRlZiBEYXRhKHNlbGYsIHJlcXVlc3RfaXRlcmF0b3IsIGNvbnRleHQpOgogICAgIiIiVXNlZCB0byBzZW5kIGRhdGEgYmV0d2VlbiBoYXJuZXNzZXMuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5EYXRhU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdEYXRhJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkRhdGEsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuRWxlbWVudHMuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkRhdGEnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJlYW1GblN0YXRlU3R1YihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuU3RhdGUgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GblN0YXRlL1N0YXRlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXRlUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXRlUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCgoKY2xhc3MgQmVhbUZuU3RhdGVTZXJ2aWNlcihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIFN0YXRlKHNlbGYsIHJlcXVlc3RfaXRlcmF0b3IsIGNvbnRleHQpOgogICAgIiIiVXNlZCB0byBnZXQvYXBwZW5kL2NsZWFyIHN0YXRlIHN0b3JlZCBieSB0aGUgcnVubmVyIG9uIGJlaGFsZiBvZiB0aGUgU0RLLgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ1N0YXRlJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLlN0YXRlLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXRlUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuU3RhdGVSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5TdGF0ZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgoKY2xhc3MgQmVhbUZuTG9nZ2luZ1N0dWIob2JqZWN0KToKICAiIiJTdGFibGUKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuTG9nZ2luZyA9IGNoYW5uZWwuc3RyZWFtX3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuTG9nZ2luZy9Mb2dnaW5nJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkxvZ0VudHJ5Lkxpc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Mb2dDb250cm9sLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbkxvZ2dpbmdTZXJ2aWNlcihvYmplY3QpOgogICIiIlN0YWJsZQogICIiIgoKICBkZWYgTG9nZ2luZyhzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIkFsbG93cyBmb3IgdGhlIFNESyB0byBlbWl0IGxvZyBlbnRyaWVzIHdoaWNoIHRoZSBydW5uZXIgY2FuCiAgICBhc3NvY2lhdGUgd2l0aCB0aGUgYWN0aXZlIGpvYi4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JlYW1GbkxvZ2dpbmdTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ0xvZ2dpbmcnOiBncnBjLnN0cmVhbV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuTG9nZ2luZywKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Mb2dFbnRyeS5MaXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Mb2dDb250cm9sLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkxvZ2dpbmcnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQp9cpECAAAoWCAAAABhZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlclgDAAAAZGVmS11LaIdYIwAAAGFkZF9CZWFtRm5Db250cm9sU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLM0s+h1ghAAAAYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLh0uSh1gdAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyLkxvZ2dpbmdYAwAAAGRlZkupS7CHWBoAAABCZWFtRm5Db250cm9sU3R1Yi5fX2luaXRfX1gDAAAAZGVmSxJLHYdYEQAAAEJlYW1GbkxvZ2dpbmdTdHViWAUAAABjbGFzc0uUS6OHWBUAAABCZWFtRm5Mb2dnaW5nU2VydmljZXJYBQAAAGNsYXNzS6VLsIdYEgAAAEJlYW1GbkRhdGFTZXJ2aWNlclgFAAAAY2xhc3NLUUtbh1gTAAAAQmVhbUZuU3RhdGVTZXJ2aWNlclgFAAAAY2xhc3NLe0uFh1gOAAAAQmVhbUZuRGF0YVN0dWJYBQAAAGNsYXNzS0BLT4dYIwAAAGFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLsku9h1gYAAAAQmVhbUZuU3RhdGVTdHViLl9faW5pdF9fWAMAAABkZWZLbkt5h1gZAAAAQmVhbUZuU3RhdGVTZXJ2aWNlci5TdGF0ZVgDAAAAZGVmS39LhYdYGgAAAEJlYW1GbkxvZ2dpbmdTdHViLl9faW5pdF9fWAMAAABkZWZLmEujh1gXAAAAQmVhbUZuRGF0YVN0dWIuX19pbml0X19YAwAAAGRlZktES0+HWA8AAABCZWFtRm5TdGF0ZVN0dWJYBQAAAGNsYXNzS2pLeYdYHQAAAEJlYW1GbkNvbnRyb2xTZXJ2aWNlci5Db250cm9sWAMAAABkZWZLKksxh1gVAAAAQmVhbUZuQ29udHJvbFNlcnZpY2VyWAUAAABjbGFzc0sfSzGHWBcAAABCZWFtRm5EYXRhU2VydmljZXIuRGF0YVgDAAAAZGVmS1VLW4dYEQAAAEJlYW1GbkNvbnRyb2xTdHViWAUAAABjbGFzc0sHSx2HdX1ykgIAAChYIAAAAGFkZF9CZWFtRm5EYXRhU2VydmljZXJfdG9fc2VydmVyWDAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGNykwIAAFgjAAAAYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXJqkwIAAFgdAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyLkxvZ2dpbmdqkwIAAFgRAAAAQmVhbUZuTG9nZ2luZ1N0dWJqkwIAAFgVAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyapMCAABYGQAAAEJlYW1GblN0YXRlU2VydmljZXIuU3RhdGVqkwIAAFgTAAAAQmVhbUZuU3RhdGVTZXJ2aWNlcmqTAgAAWBUAAABCZWFtRm5Db250cm9sU2VydmljZXJqkwIAAFgjAAAAYWRkX0JlYW1GbkxvZ2dpbmdTZXJ2aWNlcl90b19zZXJ2ZXJqkwIAAFgPAAAAQmVhbUZuU3RhdGVTdHViapMCAABYEgAAAEJlYW1GbkRhdGFTZXJ2aWNlcmqTAgAAWCEAAABhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXJqkwIAAFgOAAAAQmVhbUZuRGF0YVN0dWJqkwIAAFgdAAAAQmVhbUZuQ29udHJvbFNlcnZpY2VyLkNvbnRyb2xqkwIAAFgRAAAAQmVhbUZuQ29udHJvbFN0dWJqkwIAAFgXAAAAQmVhbUZuRGF0YVNlcnZpY2VyLkRhdGFqkwIAAHVoilgwAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjcpQCAACFgXKVAgAAfXKWAgAAYnRylwIAAFUUYXBhY2hlX2JlYW0uaW8udmNmaW9ymAIAAChYzUoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgZnJvbSBWQ0YgZmlsZXMgKHZlcnNpb24gNC54KS4KClRoZSA0LjIgc3BlYyBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9zYW10b29scy5naXRodWIuaW8vaHRzLXNwZWNzL1ZDRnY0LjIucGRmLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdHJhY2ViYWNrCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKCmltcG9ydCB2Y2YKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc291cmNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVhZApmcm9tIGFwYWNoZV9iZWFtLmlvLnRleHRpbyBpbXBvcnQgX1RleHRTb3VyY2UgYXMgVGV4dFNvdXJjZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KCl9fYWxsX18gPSBbJ1JlYWRGcm9tVmNmJywgJ1ZhcmlhbnQnLCAnVmFyaWFudENhbGwnLCAnVmFyaWFudEluZm8nLAogICAgICAgICAgICdNYWxmb3JtZWRWY2ZSZWNvcmQnXQoKIyBTdG9yZXMgZGF0YSBhYm91dCB2YXJpYW50IElORk8gZmllbGRzLiBUaGUgdHlwZSBvZiAnZGF0YScgaXMgc3BlY2lmaWVkIGluIHRoZQojIFZDRiBoZWFkZXJzLiAnZmllbGRfY291bnQnIGlzIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZmllbGRzCiMgdGhhdCB0aGUgZGF0YSB0eXBlIGNvbnRhaW5zLiBJdHMgdmFsdWUgY2FuIGVpdGhlciBiZSBhIG51bWJlciByZXByZXNlbnRpbmcgYQojIGNvbnN0YW50IG51bWJlciBvZiBmaWVsZHMsIGBOb25lYCBpbmRpY2F0aW5nIHRoYXQgdGhlIHZhbHVlIGlzIG5vdCBzZXQKIyAoZXF1aXZhbGVudCB0byAnLicgaW4gdGhlIFZDRiBmaWxlKSBvciBvbmUgb2Y6CiMgICAtICdBJzogb25lIHZhbHVlIHBlciBhbHRlcm5hdGUgYWxsZWxlLgojICAgLSAnRyc6IG9uZSB2YWx1ZSBmb3IgZWFjaCBwb3NzaWJsZSBnZW5vdHlwZS4KIyAgIC0gJ1InOiBvbmUgdmFsdWUgZm9yIGVhY2ggcG9zc2libGUgYWxsZWxlIChpbmNsdWRpbmcgdGhlIHJlZmVyZW5jZSkuClZhcmlhbnRJbmZvID0gbmFtZWR0dXBsZSgnVmFyaWFudEluZm8nLCBbJ2RhdGEnLCAnZmllbGRfY291bnQnXSkKIyBTdG9yZXMgZGF0YSBhYm91dCBmYWlsZWQgVkNGIHJlY29yZCByZWFkcy4gYGxpbmVgIGlzIHRoZSB0ZXh0IGxpbmUgdGhhdAojIGNhdXNlZCB0aGUgZmFpbGVkIHJlYWQgYW5kIGBmaWxlX25hbWVgIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgdGhlIHJlYWQKIyBmYWlsZWQgaW4uCk1hbGZvcm1lZFZjZlJlY29yZCA9IG5hbWVkdHVwbGUoJ01hbGZvcm1lZFZjZlJlY29yZCcsIFsnZmlsZV9uYW1lJywgJ2xpbmUnXSkKTUlTU0lOR19GSUVMRF9WQUxVRSA9ICcuJyAgIyBJbmRpY2F0ZXMgZmllbGQgaXMgbWlzc2luZyBpbiBWQ0YgcmVjb3JkLgpQQVNTX0ZJTFRFUiA9ICdQQVNTJyAgIyBJbmRpY2F0ZXMgdGhhdCBhbGwgZmlsdGVycyBoYXZlIGJlZW4gcGFzc2VkLgpFTkRfSU5GT19LRVkgPSAnRU5EJyAgIyBUaGUgaW5mbyBrZXkgdGhhdCBleHBsaWNpdGx5IHNwZWNpZmllcyBlbmQgb2YgYSByZWNvcmQuCkdFTk9UWVBFX0ZPUk1BVF9LRVkgPSAnR1QnICAjIFRoZSBnZW5vdHlwZSBmb3JtYXQga2V5IGluIGEgY2FsbC4KUEhBU0VTRVRfRk9STUFUX0tFWSA9ICdQUycgICMgVGhlIHBoYXNlc2V0IGZvcm1hdCBrZXkuCkRFRkFVTFRfUEhBU0VTRVRfVkFMVUUgPSAnKicgICMgRGVmYXVsdCBwaGFzZXNldCB2YWx1ZSBpZiBjYWxsIGlzIHBoYXNlZCwgYnV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gJ1BTJyBpcyBwcmVzZW50LgpNSVNTSU5HX0dFTk9UWVBFX1ZBTFVFID0gLTEgICMgR2Vub3R5cGUgdG8gdXNlIHdoZW4gJy4nIGlzIHVzZWQgaW4gR1QgZmllbGQuCgoKY2xhc3MgVmFyaWFudChvYmplY3QpOgogICIiIkEgY2xhc3MgdG8gc3RvcmUgaW5mbyBhYm91dCBhIGdlbm9taWMgdmFyaWFudC4KCiAgRWFjaCBvYmplY3QgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgcmVjb3JkIGluIGEgVkNGIGZpbGUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICByZWZlcmVuY2VfbmFtZT1Ob25lLAogICAgICAgICAgICAgICBzdGFydD1Ob25lLAogICAgICAgICAgICAgICBlbmQ9Tm9uZSwKICAgICAgICAgICAgICAgcmVmZXJlbmNlX2Jhc2VzPU5vbmUsCiAgICAgICAgICAgICAgIGFsdGVybmF0ZV9iYXNlcz1Ob25lLAogICAgICAgICAgICAgICBuYW1lcz1Ob25lLAogICAgICAgICAgICAgICBxdWFsaXR5PU5vbmUsCiAgICAgICAgICAgICAgIGZpbHRlcnM9Tm9uZSwKICAgICAgICAgICAgICAgaW5mbz1Ob25lLAogICAgICAgICAgICAgICBjYWxscz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgVmFyaWFudGAgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlZmVyZW5jZV9uYW1lIChzdHIpOiBUaGUgcmVmZXJlbmNlIG9uIHdoaWNoIHRoaXMgdmFyaWFudCBvY2N1cnMKICAgICAgICAoc3VjaCBhcyBgY2hyMjBgIG9yIGBYYCkuIC4KICAgICAgc3RhcnQgKGludCk6IFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGlzIHZhcmlhbnQgb2NjdXJzICgwLWJhc2VkKS4KICAgICAgICBDb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgYmFzZSBvZiB0aGUgc3RyaW5nIG9mIHJlZmVyZW5jZSBiYXNlcy4KICAgICAgZW5kIChpbnQpOiBUaGUgZW5kIHBvc2l0aW9uICgwLWJhc2VkKSBvZiB0aGlzIHZhcmlhbnQuIENvcnJlc3BvbmRzIHRvIHRoZQogICAgICAgIGZpcnN0IGJhc2UgYWZ0ZXIgdGhlIGxhc3QgYmFzZSBpbiB0aGUgcmVmZXJlbmNlIGFsbGVsZS4KICAgICAgcmVmZXJlbmNlX2Jhc2VzIChzdHIpOiBUaGUgcmVmZXJlbmNlIGJhc2VzIGZvciB0aGlzIHZhcmlhbnQuCiAgICAgIGFsdGVybmF0ZV9iYXNlcyAoTGlzdFtzdHJdKTogVGhlIGJhc2VzIHRoYXQgYXBwZWFyIGluc3RlYWQgb2YgdGhlCiAgICAgICAgcmVmZXJlbmNlIGJhc2VzLgogICAgICBuYW1lcyAoTGlzdFtzdHJdKTogTmFtZXMgZm9yIHRoZSB2YXJpYW50LCBmb3IgZXhhbXBsZSBhIFJlZlNOUCBJRC4KICAgICAgcXVhbGl0eSAoZmxvYXQpOiBQaHJlZC1zY2FsZWQgcXVhbGl0eSBzY29yZSAoLTEwbG9nMTAgcHJvYihjYWxsIGlzIHdyb25nKSkKICAgICAgICBIaWdoZXIgdmFsdWVzIGltcGx5IGJldHRlciBxdWFsaXR5LgogICAgICBmaWx0ZXJzIChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgZmlsdGVycyAobm9ybWFsbHkgcXVhbGl0eSBmaWx0ZXJzKSB0aGlzCiAgICAgICAgdmFyaWFudCBoYXMgZmFpbGVkLiBgUEFTU2AgaW5kaWNhdGVzIHRoaXMgdmFyaWFudCBoYXMgcGFzc2VkIGFsbAogICAgICAgIGZpbHRlcnMuCiAgICAgIGluZm8gKGRpY3QpOiBBIG1hcCBvZiBhZGRpdGlvbmFsIHZhcmlhbnQgaW5mb3JtYXRpb24uIFRoZSBrZXkgaXMgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIFZDRiByZWNvcmQgYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIGBgVmFyaWFudEluZm9gYC4KICAgICAgY2FsbHMgKGxpc3Qgb2YgOmNsYXNzOmBWYXJpYW50Q2FsbGApOiBUaGUgdmFyaWFudCBjYWxscyBmb3IgdGhpcyB2YXJpYW50LgogICAgICAgIEVhY2ggb25lIHJlcHJlc2VudHMgdGhlIGRldGVybWluYXRpb24gb2YgZ2Vub3R5cGUgd2l0aCByZXNwZWN0IHRvIHRoaXMKICAgICAgICB2YXJpYW50LgogICAgIiIiCiAgICBzZWxmLnJlZmVyZW5jZV9uYW1lID0gcmVmZXJlbmNlX25hbWUKICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgc2VsZi5lbmQgPSBlbmQKICAgIHNlbGYucmVmZXJlbmNlX2Jhc2VzID0gcmVmZXJlbmNlX2Jhc2VzCiAgICBzZWxmLmFsdGVybmF0ZV9iYXNlcyA9IGFsdGVybmF0ZV9iYXNlcyBvciBbXQogICAgc2VsZi5uYW1lcyA9IG5hbWVzIG9yIFtdCiAgICBzZWxmLnF1YWxpdHkgPSBxdWFsaXR5CiAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzIG9yIFtdCiAgICBzZWxmLmluZm8gPSBpbmZvIG9yIHt9CiAgICBzZWxmLmNhbGxzID0gY2FsbHMgb3IgW10KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpIGFuZAogICAgICAgICAgICB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJywgJy5qb2luKAogICAgICAgIFtzdHIocykgZm9yIHMgaW4gW3NlbGYucmVmZXJlbmNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZV9iYXNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFsdGVybmF0ZV9iYXNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucXVhbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbHRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbHNdXSkKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgVmFyaWFudCk6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICAgICMgRWxlbWVudHMgc2hvdWxkIGZpcnN0IGJlIHNvcnRlZCBieSByZWZlcmVuY2VfbmFtZSwgc3RhcnQsIGVuZC4KICAgICMgT3JkZXJpbmcgb2Ygb3RoZXIgbWVtYmVycyBpcyBub3QgaW1wb3J0YW50LCBidXQgbXVzdCBiZQogICAgIyBkZXRlcm1pbmlzdGljLgogICAgaWYgc2VsZi5yZWZlcmVuY2VfbmFtZSAhPSBvdGhlci5yZWZlcmVuY2VfbmFtZToKICAgICAgcmV0dXJuIHNlbGYucmVmZXJlbmNlX25hbWUgPCBvdGhlci5yZWZlcmVuY2VfbmFtZQogICAgZWxpZiBzZWxmLnN0YXJ0ICE9IG90aGVyLnN0YXJ0OgogICAgICByZXR1cm4gc2VsZi5zdGFydCA8IG90aGVyLnN0YXJ0CiAgICBlbGlmIHNlbGYuZW5kICE9IG90aGVyLmVuZDoKICAgICAgcmV0dXJuIHNlbGYuZW5kIDwgb3RoZXIuZW5kCgogICAgc2VsZl92YXJzID0gdmFycyhzZWxmKQogICAgb3RoZXJfdmFycyA9IHZhcnMob3RoZXIpCiAgICBmb3Iga2V5IGluIHNvcnRlZChzZWxmX3ZhcnMpOgogICAgICBpZiBzZWxmX3ZhcnNba2V5XSAhPSBvdGhlcl92YXJzW2tleV06CiAgICAgICAgcmV0dXJuIHNlbGZfdmFyc1trZXldIDwgb3RoZXJfdmFyc1trZXldCgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpOgogICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgICByZXR1cm4gc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgVmFyaWFudCk6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICAgIHJldHVybiBvdGhlciA8IHNlbGYKCiAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgVmFyaWFudCk6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICAgIHJldHVybiBvdGhlciA8PSBzZWxmCgoKY2xhc3MgVmFyaWFudENhbGwob2JqZWN0KToKICAiIiJBIGNsYXNzIHRvIHN0b3JlIGluZm8gYWJvdXQgYSB2YXJpYW50IGNhbGwuCgogIEEgY2FsbCByZXByZXNlbnRzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGdlbm90eXBlIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIKICB2YXJpYW50LiBJdCBtYXkgaW5jbHVkZSBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgcXVhbGl0eSBhbmQgcGhhc2luZy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9uZSwgZ2Vub3R5cGU9Tm9uZSwgcGhhc2VzZXQ9Tm9uZSwgaW5mbz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgVmFyaWFudENhbGxgIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBuYW1lIChzdHIpOiBUaGUgbmFtZSBvZiB0aGUgY2FsbC4KICAgICAgZ2Vub3R5cGUgKExpc3RbaW50XSk6IFRoZSBnZW5vdHlwZSBvZiB0aGlzIHZhcmlhbnQgY2FsbCBhcyBzcGVjaWZpZWQgYnkKICAgICAgICB0aGUgVkNGIHNjaGVtYS4gVGhlIHZhbHVlcyBhcmUgZWl0aGVyIGAwYCByZXByZXNlbnRpbmcgdGhlIHJlZmVyZW5jZSwKICAgICAgICBvciBhIDEtYmFzZWQgaW5kZXggaW50byBhbHRlcm5hdGUgYmFzZXMuIE9yZGVyaW5nIGlzIG9ubHkgaW1wb3J0YW50IGlmCiAgICAgICAgYHBoYXNlc2V0YCBpcyBwcmVzZW50LiBJZiBhIGdlbm90eXBlIGlzIG5vdCBjYWxsZWQgKHRoYXQgaXMsIGEgYC5gIGlzCiAgICAgICAgcHJlc2VudCBpbiB0aGUgR1Qgc3RyaW5nKSwgLTEgaXMgdXNlZAogICAgICBwaGFzZXNldCAoc3RyKTogSWYgdGhpcyBmaWVsZCBpcyBwcmVzZW50LCB0aGlzIHZhcmlhbnQgY2FsbCdzIGdlbm90eXBlCiAgICAgICAgb3JkZXJpbmcgaW1wbGllcyB0aGUgcGhhc2Ugb2YgdGhlIGJhc2VzIGFuZCBpcyBjb25zaXN0ZW50IHdpdGggYW55IG90aGVyCiAgICAgICAgdmFyaWFudCBjYWxscyBpbiB0aGUgc2FtZSByZWZlcmVuY2Ugc2VxdWVuY2Ugd2hpY2ggaGF2ZSB0aGUgc2FtZQogICAgICAgIHBoYXNlc2V0IHZhbHVlLiBJZiB0aGUgZ2Vub3R5cGUgZGF0YSB3YXMgcGhhc2VkIGJ1dCBubyBwaGFzZSBzZXQgd2FzCiAgICAgICAgc3BlY2lmaWVkLCB0aGlzIGZpZWxkIHdpbGwgYmUgc2V0IHRvIGAqYC4KICAgICAgaW5mbyAoZGljdCk6IEEgbWFwIG9mIGFkZGl0aW9uYWwgdmFyaWFudCBjYWxsIGluZm9ybWF0aW9uLiBUaGUga2V5IGlzCiAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBWQ0YgcmVjb3JkIGFuZCB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgaXMgc3BlY2lmaWVkIGJ5CiAgICAgICAgdGhlIFZDRiBoZWFkZXIgRk9STUFULgogICAgIiIiCiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLmdlbm90eXBlID0gZ2Vub3R5cGUgb3IgW10KICAgIHNlbGYucGhhc2VzZXQgPSBwaGFzZXNldAogICAgc2VsZi5pbmZvID0gaW5mbyBvciB7fQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoKHNlbGYubmFtZSwgc2VsZi5nZW5vdHlwZSwgc2VsZi5waGFzZXNldCwgc2VsZi5pbmZvKSA9PQogICAgICAgICAgICAob3RoZXIubmFtZSwgb3RoZXIuZ2Vub3R5cGUsIG90aGVyLnBoYXNlc2V0LCBvdGhlci5pbmZvKSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICcsICcuam9pbigKICAgICAgICBbc3RyKHMpIGZvciBzIGluIFtzZWxmLm5hbWUsIHNlbGYuZ2Vub3R5cGUsIHNlbGYucGhhc2VzZXQsIHNlbGYuaW5mb11dKQoKCmNsYXNzIF9WY2ZTb3VyY2UoZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSk6CiAgIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgVkNGIGZpbGVzLgoKICBQYXJzZXMgVkNGIGZpbGVzICh2ZXJzaW9uIDQpIHVzaW5nIFB5VkNGIGxpYnJhcnkuIElmIGZpbGVfcGF0dGVybiBzcGVjaWZpZXMKICBtdWx0aXBsZSBmaWxlcywgdGhlbiB0aGUgaGVhZGVyIGZyb20gZWFjaCBmaWxlIGlzIHVzZWQgc2VwYXJhdGVseSB0byBwYXJzZQogIHRoZSBjb250ZW50LiBIb3dldmVyLCB0aGUgb3V0cHV0IHdpbGwgYmUgYSB1bmlmb3JtIFBDb2xsZWN0aW9uIG9mCiAgOmNsYXNzOmBWYXJpYW50YCBvYmplY3RzLgogICIiIgoKICBERUZBVUxUX1ZDRl9SRUFEX0JVRkZFUl9TSVpFID0gNjU1MzYgICMgNjRrQgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9WQ0ZfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgICAgICAgICAgYWxsb3dfbWFsZm9ybWVkX3JlY29yZHM9RmFsc2UpOgogICAgc3VwZXIoX1ZjZlNvdXJjZSwgc2VsZikuX19pbml0X18oZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUpCgogICAgc2VsZi5faGVhZGVyX2xpbmVzX3Blcl9maWxlID0ge30KICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCiAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcyA9IGFsbG93X21hbGZvcm1lZF9yZWNvcmRzCgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCByYW5nZV90cmFja2VyKToKICAgIHJlY29yZF9pdGVyYXRvciA9IF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yKAogICAgICAgIGZpbGVfbmFtZSwKICAgICAgICByYW5nZV90cmFja2VyLAogICAgICAgIHNlbGYuX3BhdHRlcm4sCiAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSwKICAgICAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcywKICAgICAgICBidWZmZXJfc2l6ZT1zZWxmLl9idWZmZXJfc2l6ZSwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz0wKQoKICAgICMgQ29udmVydCBpdGVyYXRvciB0byBnZW5lcmF0b3IgdG8gYWJzdHJhY3QgYmVoYXZpb3IKICAgIGZvciBsaW5lIGluIHJlY29yZF9pdGVyYXRvcjoKICAgICAgeWllbGQgbGluZQoKICBjbGFzcyBfVmNmUmVjb3JkSXRlcmF0b3Iob2JqZWN0KToKICAgICIiIkFuIEl0ZXJhdG9yIGZvciBwcm9jZXNzaW5nIGEgc2luZ2xlIFZDRiBmaWxlLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICByYW5nZV90cmFja2VyLAogICAgICAgICAgICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzLAogICAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICAgc2VsZi5faGVhZGVyX2xpbmVzID0gW10KICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSBOb25lCiAgICAgIHNlbGYuX2ZpbGVfbmFtZSA9IGZpbGVfbmFtZQogICAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcyA9IGFsbG93X21hbGZvcm1lZF9yZWNvcmRzCgogICAgICB0ZXh0X3NvdXJjZSA9IFRleHRTb3VyY2UoCiAgICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgICAwLCAgIyBtaW5fYnVuZGxlX3NpemUKICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICBUcnVlLCAgIyBzdHJpcF90cmFpbGluZ19uZXdsaW5lcwogICAgICAgICAgY29kZXJzLlN0clV0ZjhDb2RlcigpLCAgIyBjb2RlcgogICAgICAgICAgdmFsaWRhdGU9RmFsc2UsCiAgICAgICAgICBoZWFkZXJfcHJvY2Vzc29yX2Zucz0obGFtYmRhIHg6IHguc3RhcnRzd2l0aCgnIycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3JlX2hlYWRlcl9saW5lcyksCiAgICAgICAgICAqKmt3YXJncykKCiAgICAgIHNlbGYuX3RleHRfbGluZXMgPSB0ZXh0X3NvdXJjZS5yZWFkX3JlY29yZHMoc2VsZi5fZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXIpCiAgICAgIHRyeToKICAgICAgICBzZWxmLl92Y2ZfcmVhZGVyID0gdmNmLlJlYWRlcihmc29jaz1zZWxmLl9jcmVhdGVfZ2VuZXJhdG9yKCkpCiAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlOgogICAgICAgICMgVGhyb3cgdGhlIGV4Y2VwdGlvbiBpbnNpZGUgdGhlIGdlbmVyYXRvciB0byBlbnN1cmUgZmlsZSBpcyBwcm9wZXJseQogICAgICAgICMgY2xvc2VkIChpdCdzIG9wZW5lZCBpbnNpZGUgVGV4dFNvdXJjZS5yZWFkX3JlY29yZHMpLgogICAgICAgIHNlbGYuX3RleHRfbGluZXMudGhyb3coCiAgICAgICAgICAgIFZhbHVlRXJyb3IoJ0FuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoZW4gcmVhZGluZyBoZWFkZXIgZnJvbSBWQ0YgJwogICAgICAgICAgICAgICAgICAgICAgICdmaWxlICVzOiAlcycgJSAoc2VsZi5fZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKSkKCiAgICBkZWYgX3N0b3JlX2hlYWRlcl9saW5lcyhzZWxmLCBoZWFkZXJfbGluZXMpOgogICAgICBzZWxmLl9oZWFkZXJfbGluZXMgPSBoZWFkZXJfbGluZXMKCiAgICBkZWYgX2NyZWF0ZV9nZW5lcmF0b3Ioc2VsZik6CiAgICAgIGhlYWRlcl9wcm9jZXNzZWQgPSBGYWxzZQogICAgICBmb3IgdGV4dF9saW5lIGluIHNlbGYuX3RleHRfbGluZXM6CiAgICAgICAgaWYgbm90IGhlYWRlcl9wcm9jZXNzZWQgYW5kIHNlbGYuX2hlYWRlcl9saW5lczoKICAgICAgICAgIGZvciBoZWFkZXIgaW4gc2VsZi5faGVhZGVyX2xpbmVzOgogICAgICAgICAgICBzZWxmLl9sYXN0X3JlY29yZCA9IGhlYWRlcgogICAgICAgICAgICB5aWVsZCBzZWxmLl9sYXN0X3JlY29yZAogICAgICAgICAgaGVhZGVyX3Byb2Nlc3NlZCA9IFRydWUKICAgICAgICAjIFB5VkNGIGhhcyBleHBsaWNpdCBzdHIoKSBjYWxscyB3aGVuIHBhcnNpbmcgSU5GTyBmaWVsZHMsIHdoaWNoIGZhaWxzCiAgICAgICAgIyB3aXRoIFVURi04IGRlY29kZWQgc3RyaW5ncy4gRW5jb2RlIHRoZSBsaW5lIGJhY2sgdG8gVVRGLTguCiAgICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSB0ZXh0X2xpbmUuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgeWllbGQgc2VsZi5fbGFzdF9yZWNvcmQKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgIHJldHVybiBzZWxmCgogICAgZGVmIG5leHQoc2VsZik6CiAgICAgIHRyeToKICAgICAgICByZWNvcmQgPSBuZXh0KHNlbGYuX3ZjZl9yZWFkZXIpCiAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnZlcnRfdG9fdmFyaWFudF9yZWNvcmQocmVjb3JkLCBzZWxmLl92Y2ZfcmVhZGVyLmluZm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZjZl9yZWFkZXIuZm9ybWF0cykKICAgICAgZXhjZXB0IChMb29rdXBFcnJvciwgVmFsdWVFcnJvcikgYXMgZToKICAgICAgICBpZiBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkczoKICAgICAgICAgIGxvZ2dpbmcud2FybmluZygKICAgICAgICAgICAgICAnQW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgd2hlbiByZWFkaW5nIHJlY29yZCBmcm9tIFZDRiBmaWxlICcKICAgICAgICAgICAgICAnJXMuIEludmFsaWQgcmVjb3JkIHdhcyAlczogJXMnLAogICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwgc2VsZi5fbGFzdF9yZWNvcmQsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQogICAgICAgICAgcmV0dXJuIE1hbGZvcm1lZFZjZlJlY29yZChzZWxmLl9maWxlX25hbWUsIHNlbGYuX2xhc3RfcmVjb3JkKQoKICAgICAgICAjIFRocm93IHRoZSBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IgdG8gZW5zdXJlIGZpbGUgaXMgcHJvcGVybHkKICAgICAgICAjIGNsb3NlZCAoaXQncyBvcGVuZWQgaW5zaWRlIFRleHRTb3VyY2UucmVhZF9yZWNvcmRzKS4KICAgICAgICBzZWxmLl90ZXh0X2xpbmVzLnRocm93KAogICAgICAgICAgICBWYWx1ZUVycm9yKCdBbiBleGNlcHRpb24gd2FzIHJhaXNlZCB3aGVuIHJlYWRpbmcgcmVjb3JkIGZyb20gVkNGICcKICAgICAgICAgICAgICAgICAgICAgICAnZmlsZSAlcy4gSW52YWxpZCByZWNvcmQgd2FzICVzOiAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdF9yZWNvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkpCgogICAgZGVmIF9jb252ZXJ0X3RvX3ZhcmlhbnRfcmVjb3JkKHNlbGYsIHJlY29yZCwgaW5mb3MsIGZvcm1hdHMpOgogICAgICAiIiJDb252ZXJ0cyB0aGUgUHlWQ0YgcmVjb3JkIHRvIGEgOmNsYXNzOmBWYXJpYW50YCBvYmplY3QuCgogICAgICBBcmdzOgogICAgICAgIHJlY29yZCAoOmNsYXNzOmB+dmNmLm1vZGVsLl9SZWNvcmRgKTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCBhCiAgICAgICAgICB2YXJpYW50LgogICAgICAgIGluZm9zIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBJTkZPIGV4dHJhY3RlZCBmcm9tIHRoZSBWQ0YgaGVhZGVyLgogICAgICAgICAgVGhlIGtleSBpcyB0aGUgaW5mbyBrZXkgYW5kIHRoZSB2YWx1ZSBpcyA6Y2xhc3M6YH52Y2YucGFyc2VyLl9JbmZvYC4KICAgICAgICBmb3JtYXRzIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBGT1JNQVQgZXh0cmFjdGVkIGZyb20gdGhlIFZDRgogICAgICAgICAgaGVhZGVyLiBUaGUga2V5IGlzIHRoZSBGT1JNQVQga2V5IGFuZCB0aGUgdmFsdWUgaXMKICAgICAgICAgIDpjbGFzczpgfnZjZi5wYXJzZXIuX0Zvcm1hdGAuCiAgICAgIFJldHVybnM6CiAgICAgICAgQSA6Y2xhc3M6YFZhcmlhbnRgIG9iamVjdCBmcm9tIHRoZSBnaXZlbiByZWNvcmQuCiAgICAgICIiIgogICAgICB2YXJpYW50ID0gVmFyaWFudCgpCiAgICAgIHZhcmlhbnQucmVmZXJlbmNlX25hbWUgPSByZWNvcmQuQ0hST00KICAgICAgdmFyaWFudC5zdGFydCA9IHJlY29yZC5zdGFydAogICAgICB2YXJpYW50LmVuZCA9IHJlY29yZC5lbmQKICAgICAgdmFyaWFudC5yZWZlcmVuY2VfYmFzZXMgPSAoCiAgICAgICAgICByZWNvcmQuUkVGIGlmIHJlY29yZC5SRUYgIT0gTUlTU0lOR19GSUVMRF9WQUxVRSBlbHNlIE5vbmUpCiAgICAgICMgQUxUIGZpZWxkcyBhcmUgY2xhc3NlcyBpbiBQeVZDRiAoZS5nLiBTdWJzdGl0dXRpb24pLCBzbyBuZWVkIGNvbnZlcnQKICAgICAgIyB0aGVtIHRvIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCiAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlX2Jhc2VzLmV4dGVuZCgKICAgICAgICAgIFtzdHIocikgZm9yIHIgaW4gcmVjb3JkLkFMVCBpZiByXSBpZiByZWNvcmQuQUxUIGVsc2UgW10pCiAgICAgIHZhcmlhbnQubmFtZXMuZXh0ZW5kKHJlY29yZC5JRC5zcGxpdCgnOycpIGlmIHJlY29yZC5JRCBlbHNlIFtdKQogICAgICB2YXJpYW50LnF1YWxpdHkgPSByZWNvcmQuUVVBTAogICAgICAjIFB5VkNGIHVzZXMgTm9uZSBmb3IgJy4nIGFuZCBhbiBlbXB0eSBsaXN0IGZvciAnUEFTUycuCiAgICAgIGlmIHJlY29yZC5GSUxURVIgaXMgbm90IE5vbmU6CiAgICAgICAgdmFyaWFudC5maWx0ZXJzLmV4dGVuZCgKICAgICAgICAgICAgcmVjb3JkLkZJTFRFUiBpZiByZWNvcmQuRklMVEVSIGVsc2UgW1BBU1NfRklMVEVSXSkKICAgICAgZm9yIGssIHYgaW4gcmVjb3JkLklORk8uaXRlcml0ZW1zKCk6CiAgICAgICAgIyBTcGVjaWFsIGNhc2U6IEVORCBpbmZvIHZhbHVlIHNwZWNpZmllcyBlbmQgb2YgdGhlIHJlY29yZCwgc28gYWRqdXN0CiAgICAgICAgIyB2YXJpYW50LmVuZCBhbmQgZG8gbm90IGluY2x1ZGUgaXQgYXMgcGFydCBvZiB2YXJpYW50LmluZm8uCiAgICAgICAgaWYgayA9PSBFTkRfSU5GT19LRVk6CiAgICAgICAgICB2YXJpYW50LmVuZCA9IHYKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmllbGRfY291bnQgPSBOb25lCiAgICAgICAgaWYgayBpbiBpbmZvczoKICAgICAgICAgIGZpZWxkX2NvdW50ID0gc2VsZi5fZ2V0X2ZpZWxkX2NvdW50X2FzX3N0cmluZyhpbmZvc1trXS5udW0pCiAgICAgICAgdmFyaWFudC5pbmZvW2tdID0gVmFyaWFudEluZm8oZGF0YT12LCBmaWVsZF9jb3VudD1maWVsZF9jb3VudCkKICAgICAgZm9yIHNhbXBsZSBpbiByZWNvcmQuc2FtcGxlczoKICAgICAgICBjYWxsID0gVmFyaWFudENhbGwoKQogICAgICAgIGNhbGwubmFtZSA9IHNhbXBsZS5zYW1wbGUKICAgICAgICBmb3IgYWxsZWxlIGluIHNhbXBsZS5ndF9hbGxlbGVzIG9yIFtNSVNTSU5HX0dFTk9UWVBFX1ZBTFVFXToKICAgICAgICAgIGlmIGFsbGVsZSBpcyBOb25lOgogICAgICAgICAgICBhbGxlbGUgPSBNSVNTSU5HX0dFTk9UWVBFX1ZBTFVFCiAgICAgICAgICBjYWxsLmdlbm90eXBlLmFwcGVuZChpbnQoYWxsZWxlKSkKICAgICAgICBwaGFzZXNldF9mcm9tX2Zvcm1hdCA9IChnZXRhdHRyKHNhbXBsZS5kYXRhLCBQSEFTRVNFVF9GT1JNQVRfS0VZKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFBIQVNFU0VUX0ZPUk1BVF9LRVkgaW4gc2FtcGxlLmRhdGEuX2ZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgTm9uZSkKICAgICAgICAjIE5vdGU6IENhbGwgaXMgY29uc2lkZXJlZCBwaGFzZWQgaWYgaXQgY29udGFpbnMgdGhlICdQUycga2V5IHJlZ2FyZGxlc3MKICAgICAgICAjIG9mIHdoZXRoZXIgaXQgdXNlcyAnfCcuCiAgICAgICAgaWYgcGhhc2VzZXRfZnJvbV9mb3JtYXQgb3Igc2FtcGxlLnBoYXNlZDoKICAgICAgICAgIGNhbGwucGhhc2VzZXQgPSAoc3RyKHBoYXNlc2V0X2Zyb21fZm9ybWF0KSBpZiBwaGFzZXNldF9mcm9tX2Zvcm1hdAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIERFRkFVTFRfUEhBU0VTRVRfVkFMVUUpCiAgICAgICAgZm9yIGZpZWxkIGluIHNhbXBsZS5kYXRhLl9maWVsZHM6CiAgICAgICAgICAjIEdlbm90eXBlIGFuZCBwaGFzZXNldCAoaWYgcHJlc2VudCkgYXJlIGFscmVhZHkgaW5jbHVkZWQuCiAgICAgICAgICBpZiBmaWVsZCBpbiAoR0VOT1RZUEVfRk9STUFUX0tFWSwgUEhBU0VTRVRfRk9STUFUX0tFWSk6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBkYXRhID0gZ2V0YXR0cihzYW1wbGUuZGF0YSwgZmllbGQpCiAgICAgICAgICAjIENvbnZlcnQgc2luZ2xlIHZhbHVlcyB0byBhIGxpc3QgZm9yIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgZmllbGRzCiAgICAgICAgICAjIGlzIHVua25vd24uIFRoaXMgaXMgdG8gZW5zdXJlIGNvbnNpc3RlbnQgdHlwZXMgYWNyb3NzIGFsbCByZWNvcmRzLgogICAgICAgICAgIyBOb3RlOiB0aGlzIGlzIGFscmVhZHkgZG9uZSBmb3IgSU5GTyBmaWVsZHMgaW4gUHlWQ0YuCiAgICAgICAgICBpZiAoZmllbGQgaW4gZm9ybWF0cyBhbmQKICAgICAgICAgICAgICBmb3JtYXRzW2ZpZWxkXS5udW0gaXMgTm9uZSBhbmQKICAgICAgICAgICAgICBpc2luc3RhbmNlKGRhdGEsIChpbnQsIGZsb2F0LCBsb25nLCBiYXNlc3RyaW5nLCBib29sKSkpOgogICAgICAgICAgICBkYXRhID0gW2RhdGFdCiAgICAgICAgICBjYWxsLmluZm9bZmllbGRdID0gZGF0YQogICAgICAgIHZhcmlhbnQuY2FsbHMuYXBwZW5kKGNhbGwpCiAgICAgIHJldHVybiB2YXJpYW50CgogICAgZGVmIF9nZXRfZmllbGRfY291bnRfYXNfc3RyaW5nKHNlbGYsIGZpZWxkX2NvdW50KToKICAgICAgIiIiUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGZpZWxkX2NvdW50IGZyb20gUHlWQ0YuCgogICAgICBQeVZDRiBjb252ZXJ0cyBmaWVsZCBjb3VudHMgdG8gYW4gaW50ZWdlciB3aXRoIHNvbWUgcHJlZGVmaW5lZCBjb25zdGFudHMKICAgICAgYXMgc3BlY2lmaWVkIGluIHRoZSB2Y2YucGFyc2VyLmZpZWxkX2NvdW50cyBkaWN0IChlLmcuICdBJyBpcyAtMSkuIFRoaXMKICAgICAgbWV0aG9kIGNvbnZlcnRzIHRoZW0gYmFjayB0byB0aGVpciBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYXZvaWQgaGF2aW5nCiAgICAgIGRpcmVjdCBkZXBlbmRlbmN5IG9uIHRoZSBhcmJpdHJhcnkgUHlWQ0YgY29uc3RhbnRzLgogICAgICBBcmdzOgogICAgICAgIGZpZWxkX2NvdW50IChpbnQpOiBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBJTkZPCiAgICAgICAgICBhcyBzcGVjaWZpZWQgYnkgUHlWQ0YuCiAgICAgIFJldHVybnM6CiAgICAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZmllbGRfY291bnQgKGUuZy4gJy0xJyBiZWNvbWVzICdBJykuCiAgICAgIFJhaXNlczoKICAgICAgICBWYWx1ZUVycm9yOiBpZiB0aGUgZmllbGRfY291bnQgaXMgbm90IHZhbGlkLgogICAgICAiIiIKICAgICAgaWYgZmllbGRfY291bnQgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbGlmIGZpZWxkX2NvdW50ID49IDA6CiAgICAgICAgcmV0dXJuIHN0cihmaWVsZF9jb3VudCkKICAgICAgZmllbGRfY291bnRfdG9fc3RyaW5nID0ge3Y6IGsgZm9yIGssIHYgaW4gdmNmLnBhcnNlci5maWVsZF9jb3VudHMuaXRlbXMoKX0KICAgICAgaWYgZmllbGRfY291bnQgaW4gZmllbGRfY291bnRfdG9fc3RyaW5nOgogICAgICAgIHJldHVybiBmaWVsZF9jb3VudF90b19zdHJpbmdbZmllbGRfY291bnRdCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZmllbGRfY291bnQ6ICVkJyAlIGZpZWxkX2NvdW50KQoKCmNsYXNzIFJlYWRGcm9tVmNmKFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciByZWFkaW5nIFZDRgogIGZpbGVzLgoKICBQYXJzZXMgVkNGIGZpbGVzICh2ZXJzaW9uIDQpIHVzaW5nIFB5VkNGIGxpYnJhcnkuIElmIGZpbGVfcGF0dGVybiBzcGVjaWZpZXMKICBtdWx0aXBsZSBmaWxlcywgdGhlbiB0aGUgaGVhZGVyIGZyb20gZWFjaCBmaWxlIGlzIHVzZWQgc2VwYXJhdGVseSB0byBwYXJzZQogIHRoZSBjb250ZW50LiBIb3dldmVyLCB0aGUgb3V0cHV0IHdpbGwgYmUgYSBQQ29sbGVjdGlvbiBvZgogIDpjbGFzczpgVmFyaWFudGAgKG9yIDpjbGFzczpgTWFsZm9ybWVkVmNmUmVjb3JkYCBmb3IgZmFpbGVkIHJlYWRzKSBvYmplY3RzLgogICIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgYWxsb3dfbWFsZm9ybWVkX3JlY29yZHM9RmFsc2UsCiAgICAgICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgUmVhZEZyb21WY2ZgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm4gKHN0cik6IFRoZSBmaWxlIHBhdGggdG8gcmVhZCBmcm9tIGVpdGhlciBhcyBhIHNpbmdsZSBmaWxlIG9yCiAgICAgICAgYSBnbG9iIHBhdHRlcm4uCiAgICAgIGNvbXByZXNzaW9uX3R5cGUgKHN0cik6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgaW5wdXQgZmlsZXMuCiAgICAgICAgVHlwaWNhbCB2YWx1ZSBpcyA6YXR0cjpgQ29tcHJlc3Npb25UeXBlcy5BVVRPCiAgICAgICAgPGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5BVVRPPmAsIGluIHdoaWNoIGNhc2UgdGhlCiAgICAgICAgdW5kZXJseWluZyBmaWxlX3BhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHZhbGlkYXRlIChib29sKTogZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZXMgZXhpc3QgZHVyaW5nIHRoZSBwaXBlbGluZQogICAgICAgIGNyZWF0aW9uIHRpbWUuCiAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzIChib29sKTogZGV0ZXJtaW5lcyBpZiBmYWlsZWQgVkNGCiAgICAgICAgcmVjb3JkIHJlYWRzIHdpbGwgYmUgdG9sZXJhdGVkLiBGYWlsZWQgcmVjb3JkIHJlYWRzIHdpbGwgcmVzdWx0IGluIGEKICAgICAgICA6Y2xhc3M6YE1hbGZvcm1lZFZjZlJlY29yZGAgYmVpbmcgcmV0dXJuZWQgZnJvbSB0aGUgcmVhZCBvZiB0aGUgcmVjb3JkCiAgICAgICAgcmF0aGVyIHRoYW4gYSA6Y2xhc3M6YFZhcmlhbnRgLgogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbVZjZiwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zb3VyY2UgPSBfVmNmU291cmNlKAogICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlLAogICAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzPWFsbG93X21hbGZvcm1lZF9yZWNvcmRzKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlLnBpcGVsaW5lIHwgUmVhZChzZWxmLl9zb3VyY2UpCn1ymQIAAChYDgAAAFZhcmlhbnQuX19sZV9fWAMAAABkZWZLm0ugh1gOAAAAVmFyaWFudC5fX2VxX19YAwAAAGRlZkt0S3eHWBQAAABWYXJpYW50Q2FsbC5fX3JlcHJfX1gDAAAAZGVmS9RL14dYDgAAAFZhcmlhbnQuX19uZV9fWAMAAABkZWZLoUujh1gSAAAAUmVhZEZyb21WY2YuZXhwYW5kWAMAAABkZWZN2QFN2wGHWBAAAABWYXJpYW50Ll9fcmVwcl9fWAMAAABkZWZLeEuEh1gmAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX19pbml0X19YAwAAAGRlZk0EAU0mAYdYOAAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9nZXRfZmllbGRfY291bnRfYXNfc3RyaW5nWAMAAABkZWZNlwFNrwGHWA4AAABWYXJpYW50Ll9fZ3RfX1gDAAAAZGVmS6RLqYdYEgAAAFZhcmlhbnRDYWxsLl9fZXFfX1gDAAAAZGVmS9BL04dYIgAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLm5leHRYAwAAAGRlZk06AU1PAYdYEAAAAFZhcmlhbnQuX19pbml0X19YAwAAAGRlZktGS3OHWDgAAABfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fY29udmVydF90b192YXJpYW50X3JlY29yZFgDAAAAZGVmTVABTZYBh1gvAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX2NyZWF0ZV9nZW5lcmF0b3JYAwAAAGRlZk0qAU02AYdYFAAAAFJlYWRGcm9tVmNmLl9faW5pdF9fWAMAAABkZWZNuwFN2AGHWAcAAABWYXJpYW50WAUAAABjbGFzc0tAS6+HWBcAAABfVmNmU291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmS/NNAAGHWA4AAABWYXJpYW50Ll9fbHRfX1gDAAAAZGVmS4VLmodYMQAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9zdG9yZV9oZWFkZXJfbGluZXNYAwAAAGRlZk0nAU0pAYdYJgAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9faXRlcl9fWAMAAABkZWZNNwFNOQGHWBMAAABfVmNmU291cmNlLl9faW5pdF9fWAMAAABkZWZL5Evyh1gLAAAAVmFyaWFudENhbGxYBQAAAGNsYXNzS7FL14dYCgAAAF9WY2ZTb3VyY2VYBQAAAGNsYXNzS9lNrwGHWAsAAABSZWFkRnJvbVZjZlgFAAAAY2xhc3NNsQFN2wGHWBQAAABWYXJpYW50Q2FsbC5fX2luaXRfX1gDAAAAZGVmS7hLz4dYHQAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yWAUAAABjbGFzc00BAU2vAYdYDgAAAFZhcmlhbnQuX19nZV9fWAMAAABkZWZLqkuvh3V9cpoCAAAoWBIAAABSZWFkRnJvbVZjZi5leHBhbmRYFAAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvcpsCAABYCwAAAFZhcmlhbnRDYWxsapsCAABYBwAAAFZhcmlhbnRqmwIAAFgLAAAAUmVhZEZyb21WY2ZqmwIAAHVoilgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9ynAIAAIWBcp0CAAB9cp4CAABidHKfAgAAVRlhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsKFj2EwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IGZ1bmN0aW9ucyB1c2VkIHRocm91Z2hvdXQgdGhlIHBhY2thZ2UuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgd2Vha3JlZgpmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCgoKY2xhc3MgQXJndW1lbnRQbGFjZWhvbGRlcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBwbGFjZSBob2xkZXIgb2JqZWN0IHJlcGxhY2luZyBQVmFsdWVzIGluIGFyZ3VtZW50IGxpc3RzLgoKICBBIEZuIG9iamVjdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mICJzaWRlIGlucHV0cyIsIHdoaWNoIGFyZSBQVmFsdWVzIHRoYXQgd2lsbAogIGJlIGV2YWx1YXRlZCBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uIGFuZCB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbgogIGF0IHRoZSBtb21lbnQgb2YgaXRzIGV4ZWN1dGlvbiBhcyBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJndW1lbnRzLgoKICBUaGlzIGlzIHVzZWQgb25seSBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSB1c2VyIGNvZGUuIEEgY3VzdG9tCiAgRm4gb2JqZWN0IGJ5IHRoZSB0aW1lIGl0IGV4ZWN1dGVzIHdpbGwgaGF2ZSBzdWNoIHZhbHVlcyByZXBsYWNlZCB3aXRoIHJlYWwKICBjb21wdXRlZCB2YWx1ZXMuCiAgIiIiCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIiIiVGVzdHMgZm9yIGVxdWFsaXR5IG9mIHR3byBwbGFjZWhvbGRlciBvYmplY3RzLgoKICAgIEFyZ3M6CiAgICAgIG90aGVyOiBBbm90aGVyIHBsYWNlaG9sZGVyIG9iamVjdCB0byBjb21wYXJlIHRvLgoKICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBmb3IgdGVzdCBjb2RlLiBBbGwgcGxhY2Vob2xkZXIgb2JqZWN0cyBhcmUKICAgIGVxdWFsIHRvIGVhY2ggb3RoZXIuCiAgICAiIiIKICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBBcmd1bWVudFBsYWNlaG9sZGVyKQoKCmRlZiByZW1vdmVfb2JqZWN0c19mcm9tX2FyZ3MoYXJncywga3dhcmdzLCBwdmFsdWVfY2xhc3Nlcyk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSZXBsYWNlcyBhbGwgb2JqZWN0cyBvZiBhIGdpdmVuIHR5cGUgaW4gYXJncy9rd2FyZ3Mgd2l0aCBhIHBsYWNlaG9sZGVyLgoKICBBcmdzOgogICAgYXJnczogQSBsaXN0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAga3dhcmdzOiBBIGRpY3Rpb25hcnkgb2Yga2V5d29yZCBhcmd1bWVudHMuCiAgICBwdmFsdWVfY2xhc3NlczogQSB0dXBsZSBvZiBjbGFzcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdHlwZXMgb2YgdGhlCiAgICAgIGFyZ3VtZW50cyB0aGF0IG11c3QgYmUgcmVwbGFjZWQgd2l0aCBhIHBsYWNlaG9sZGVyIHZhbHVlIChpbnN0YW5jZSBvZgogICAgICBBcmd1bWVudFBsYWNlaG9sZGVyKQoKICBSZXR1cm5zOgogICAgQSAzLXR1cGxlIGNvbnRhaW5pbmcgYSBtb2RpZmllZCBsaXN0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBhIG1vZGlmaWVkCiAgICBkaWN0aW9uYXJ5IG9mIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgYSBsaXN0IG9mIGFsbCBvYmplY3RzIHJlcGxhY2VkIHdpdGgKICAgIGEgcGxhY2Vob2xkZXIgdmFsdWUuCiAgIiIiCiAgcHZhbHMgPSBbXQoKICBkZWYgc3dhcHBlcih2YWx1ZSk6CiAgICBwdmFscy5hcHBlbmQodmFsdWUpCiAgICByZXR1cm4gQXJndW1lbnRQbGFjZWhvbGRlcigpCiAgbmV3X2FyZ3MgPSBbc3dhcHBlcih2KSBpZiBpc2luc3RhbmNlKHYsIHB2YWx1ZV9jbGFzc2VzKSBlbHNlIHYgZm9yIHYgaW4gYXJnc10KICAjIE1ha2Ugc3VyZSB0aGUgb3JkZXIgaW4gd2hpY2ggd2UgcHJvY2VzcyB0aGUgZGljdGlvbmFyeSBrZXlzIGlzIHByZWRpY3RhYmxlCiAgIyBieSBzb3J0aW5nIHRoZSBlbnRyaWVzIGZpcnN0LiBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHdoZW4gcHV0dGluZyBiYWNrCiAgIyBQVmFsdWVzLgogIG5ld19rd2FyZ3MgPSBkaWN0KChrLCBzd2FwcGVyKHYpKSBpZiBpc2luc3RhbmNlKHYsIHB2YWx1ZV9jbGFzc2VzKSBlbHNlIChrLCB2KQogICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNvcnRlZChrd2FyZ3MuaXRlcml0ZW1zKCkpKQogIHJldHVybiAobmV3X2FyZ3MsIG5ld19rd2FyZ3MsIHB2YWxzKQoKCmRlZiBpbnNlcnRfdmFsdWVzX2luX2FyZ3MoYXJncywga3dhcmdzLCB2YWx1ZXMpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUmVwbGFjZXMgYWxsIHBsYWNlaG9sZGVycyBpbiBhcmdzL2t3YXJncyB3aXRoIGFjdHVhbCB2YWx1ZXMuCgogIEFyZ3M6CiAgICBhcmdzOiBBIGxpc3Qgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAgICBrd2FyZ3M6IEEgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cy4KICAgIHZhbHVlczogQSBsaXN0IG9mIHZhbHVlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHBsYWNlaG9sZGVyIHZhbHVlcy4KCiAgUmV0dXJuczoKICAgIEEgMi10dXBsZSBjb250YWluaW5nIGEgbW9kaWZpZWQgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYW5kIGEKICAgIG1vZGlmaWVkIGRpY3Rpb25hcnkgb2Yga2V5d29yZCBhcmd1bWVudHMuCiAgIiIiCiAgIyBVc2UgYSBsb2NhbCBpdGVyYXRvciBzbyB0aGF0IHdlIGRvbid0IG1vZGlmeSB2YWx1ZXMuCiAgdl9pdGVyID0gaXRlcih2YWx1ZXMpCiAgbmV3X2FyZ3MgPSBbCiAgICAgIG5leHQodl9pdGVyKSBpZiBpc2luc3RhbmNlKGFyZywgQXJndW1lbnRQbGFjZWhvbGRlcikgZWxzZSBhcmcKICAgICAgZm9yIGFyZyBpbiBhcmdzXQogIG5ld19rd2FyZ3MgPSBkaWN0KAogICAgICAoaywgbmV4dCh2X2l0ZXIpKSBpZiBpc2luc3RhbmNlKHYsIEFyZ3VtZW50UGxhY2Vob2xkZXIpIGVsc2UgKGssIHYpCiAgICAgIGZvciBrLCB2IGluIHNvcnRlZChrd2FyZ3MuaXRlcml0ZW1zKCkpKQogIHJldHVybiAobmV3X2FyZ3MsIG5ld19rd2FyZ3MpCgoKZGVmIHJ1bl91c2luZ190aHJlYWRwb29sKGZuX3RvX2V4ZWN1dGUsIGlucHV0cywgcG9vbF9zaXplKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFJ1bnMgdGhlIGdpdmVuIGZ1bmN0aW9uIG9uIGdpdmVuIGlucHV0cyB1c2luZyBhIHRocmVhZCBwb29sLgoKICBBcmdzOgogICAgZm5fdG9fZXhlY3V0ZTogRnVuY3Rpb24gdG8gZXhlY3V0ZQogICAgaW5wdXRzOiBJbnB1dHMgb24gd2hpY2ggZ2l2ZW4gZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4KICAgIHBvb2xfc2l6ZTogU2l6ZSBvZiB0aHJlYWQgcG9vbC4KICBSZXR1cm5zOgogICAgUmVzdWx0cyByZXRyaWV2ZWQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBnaXZlbiBmdW5jdGlvbiBvbiBnaXZlbiBpbnB1dHMuCiAgIiIiCgogICMgVGhyZWFkUG9vbCBjcmFzaGVzIGluIG9sZCB2ZXJzaW9ucyBvZiBQeXRob24gKDwgMi43LjUpIGlmIGNyZWF0ZWQKICAjIGZyb20gYSBjaGlsZCB0aHJlYWQuIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTAwMTUpCiAgaWYgbm90IGhhc2F0dHIodGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksICdfY2hpbGRyZW4nKToKICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLl9jaGlsZHJlbiA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQogIHBvb2wgPSBUaHJlYWRQb29sKG1pbihwb29sX3NpemUsIGxlbihpbnB1dHMpKSkKICB0cnk6CiAgICAjIFdlIHJlY29yZCBhbmQgcmVzZXQgbG9nZ2luZyBsZXZlbCBoZXJlIHNpbmNlICdhcGl0b29scycgbGlicmFyeSBCZWFtCiAgICAjIGRlcGVuZHMgb24gdXBkYXRlcyB0aGUgbG9nZ2luZyBsZXZlbCB3aGVuIHVzZWQgd2l0aCBhIHRocmVhZHBvb2wgLQogICAgIyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2FwaXRvb2xzL2lzc3Vlcy8xNDEKICAgICMgVE9ETzogUmVtb3ZlIHRoaXMgb25jZSBhYm92ZSBpc3N1ZSBpbiAnYXBpdG9vbHMnIGlzIGZpeGVkLgogICAgb2xkX2xldmVsID0gbG9nZ2luZy5nZXRMb2dnZXIoKS5sZXZlbAogICAgcmV0dXJuIHBvb2wubWFwKGZuX3RvX2V4ZWN1dGUsIGlucHV0cykKICBmaW5hbGx5OgogICAgcG9vbC50ZXJtaW5hdGUoKQogICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChvbGRfbGV2ZWwpCn1yoAIAAChYEwAAAEFyZ3VtZW50UGxhY2Vob2xkZXJYBQAAAGNsYXNzSx1LNYdYGAAAAHJlbW92ZV9vYmplY3RzX2Zyb21fYXJnc1gDAAAAZGVmSzdLVIdYFQAAAGluc2VydF92YWx1ZXNfaW5fYXJnc1gDAAAAZGVmS1ZLbYdYGgAAAEFyZ3VtZW50UGxhY2Vob2xkZXIuX19lcV9fWAMAAABkZWZLK0s1h1ggAAAAcmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzLnN3YXBwZXJYAwAAAGRlZktKS02HWBQAAABydW5fdXNpbmdfdGhyZWFkcG9vbFgDAAAAZGVmS29Li4d1fXKhAgAAKFgTAAAAQXJndW1lbnRQbGFjZWhvbGRlclgZAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbHKiAgAAWBQAAABydW5fdXNpbmdfdGhyZWFkcG9vbGqiAgAAWBUAAABpbnNlcnRfdmFsdWVzX2luX2FyZ3NqogIAAFgYAAAAcmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzaqICAAB1aIpYGQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWxyowIAAIWBcqQCAAB9cqUCAABidHKmAgAAVT1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yKFhUCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLCBhIFBpcGVsaW5lVmlzaXRvciBvYmplY3QuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKCmNsYXNzIENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFZpc2l0b3IgZm9yIGV4dHJhY3RpbmcgdmFsdWUtY29uc3VtZXIgcmVsYXRpb25zIGZyb20gdGhlIGdyYXBoLgoKICBUcmFja3MgdGhlIEFwcGxpZWRQVHJhbnNmb3JtcyB0aGF0IGNvbnN1bWUgZWFjaCBQVmFsdWUgaW4gdGhlIFBpcGVsaW5lLiBUaGlzCiAgaXMgdXNlZCB0byBzY2hlZHVsZSBjb25zdW1pbmcgUFRyYW5zZm9ybXMgdG8gY29uc3VtZSBpbnB1dCBhZnRlciB0aGUgdXBzdHJlYW0KICB0cmFuc2Zvcm0gaGFzIHByb2R1Y2VkIGFuZCBjb21taXR0ZWQgb3V0cHV0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLnZhbHVlX3RvX2NvbnN1bWVycyA9IHt9ICAjIE1hcCBmcm9tIFBWYWx1ZSB0byBbQXBwbGllZFBUcmFuc2Zvcm1dLgogICAgc2VsZi5yb290X3RyYW5zZm9ybXMgPSBzZXQoKSAgIyBzZXQgb2YgKHJvb3QpIEFwcGxpZWRQVHJhbnNmb3Jtcy4KICAgIHNlbGYudmlld3MgPSBbXSAgICAgICAgICAgICAgICMgbGlzdCBvZiBzaWRlIGlucHV0cy4KICAgIHNlbGYuc3RlcF9uYW1lcyA9IHt9ICAgICAgICAgICMgTWFwIGZyb20gQXBwbGllZFBUcmFuc2Zvcm0gdG8gU3RyaW5nLgoKICAgIHNlbGYuX251bV90cmFuc2Zvcm1zID0gMAoKICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICBpbnB1dHMgPSBsaXN0KGFwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHMpCiAgICBpZiBpbnB1dHM6CiAgICAgIGZvciBpbnB1dF92YWx1ZSBpbiBpbnB1dHM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dF92YWx1ZSwgcHZhbHVlLlBCZWdpbik6CiAgICAgICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgICAgIGlmIGlucHV0X3ZhbHVlIG5vdCBpbiBzZWxmLnZhbHVlX3RvX2NvbnN1bWVyczoKICAgICAgICAgIHNlbGYudmFsdWVfdG9fY29uc3VtZXJzW2lucHV0X3ZhbHVlXSA9IFtdCiAgICAgICAgc2VsZi52YWx1ZV90b19jb25zdW1lcnNbaW5wdXRfdmFsdWVdLmFwcGVuZChhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgc2VsZi5zdGVwX25hbWVzW2FwcGxpZWRfcHRyYW5zZm9ybV0gPSAncyVkJyAlIChzZWxmLl9udW1fdHJhbnNmb3JtcykKICAgIHNlbGYuX251bV90cmFuc2Zvcm1zICs9IDEKICAgIGZvciBzaWRlX2lucHV0IGluIGFwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0czoKICAgICAgc2VsZi52aWV3cy5hcHBlbmQoc2lkZV9pbnB1dCkKfXKnAgAAKFgfAAAAQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvclgFAAAAY2xhc3NLGks7h1gvAAAAQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZkssSzuHWCgAAABDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLl9faW5pdF9fWAMAAABkZWZLJEsrh3V9cqgCAAAoWB8AAABDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9ycqkCAABYLwAAAENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IudmlzaXRfdHJhbnNmb3JtaqkCAAB1aIpYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3JyqgIAAIWBcqsCAAB9cqwCAABidFUcYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcihYqyEAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUGlja2xlciBmb3IgdmFsdWVzLCBmdW5jdGlvbnMsIGFuZCBjbGFzc2VzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKUGlja2xlcyBjcmVhdGVkIGJ5IHRoZSBwaWNrbGluZyBsaWJyYXJ5IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIHNvCndlIGJhc2U2NC1lbmNvZGUgdGhlIHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcHV0IHRoZW0gaW4gYSBKU09OIG9iamVjdHMuClRoZSBwaWNrbGVyIGlzIHVzZWQgdG8gZW1iZWQgRmxhdE1hcCBjYWxsYWJsZSBvYmplY3RzIGludG8gdGhlIHdvcmtmbG93IEpTT04KZGVzY3JpcHRpb24uCgpUaGUgcGlja2xlciBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgdG8gcGlja2xlIGZ1bmN0aW9ucyBhbmQgbW9kdWxlczsgZm9yIHZhbHVlcywKdGhlIGNvZGVycy4qUGlja2xlQ29kZXIgY2xhc3NlcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoiIiIKCmltcG9ydCBiYXNlNjQKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCB0eXBlcwppbXBvcnQgemxpYgoKaW1wb3J0IGRpbGwKCgpkZWYgX2lzX25lc3RlZF9jbGFzcyhjbHMpOgogICIiIlJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudCBpcyBhIGNsYXNzIG9iamVjdCB0aGF0IGFwcGVhcnMgdG8gYmUgbmVzdGVkLiIiIgogIHJldHVybiAoaXNpbnN0YW5jZShjbHMsIHR5cGUpCiAgICAgICAgICBhbmQgY2xzLl9fbW9kdWxlX18gIT0gJ19fYnVpbHRpbl9fJwogICAgICAgICAgYW5kIGNscy5fX25hbWVfXyBub3QgaW4gc3lzLm1vZHVsZXNbY2xzLl9fbW9kdWxlX19dLl9fZGljdF9fKQoKCmRlZiBfZmluZF9jb250YWluaW5nX2NsYXNzKG5lc3RlZF9jbGFzcyk6CiAgIiIiRmluZHMgY29udGFpbmluZyBjbGFzcyBvZiBhIG5lc3RlYyBjbGFzcyBwYXNzZWQgYXMgYXJndW1lbnQuIiIiCgogIGRlZiBfZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyKG91dGVyKToKICAgIGZvciBrLCB2IGluIG91dGVyLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgIGlmIHYgaXMgbmVzdGVkX2NsYXNzOgogICAgICAgIHJldHVybiBvdXRlciwgawogICAgICBlbGlmIGlzaW5zdGFuY2UodiwgdHlwZSkgYW5kIGhhc2F0dHIodiwgJ19fZGljdF9fJyk6CiAgICAgICAgcmVzID0gX2ZpbmRfY29udGFpbmluZ19jbGFzc19pbm5lcih2KQogICAgICAgIGlmIHJlczogcmV0dXJuIHJlcwoKICByZXR1cm4gX2ZpbmRfY29udGFpbmluZ19jbGFzc19pbm5lcihzeXMubW9kdWxlc1tuZXN0ZWRfY2xhc3MuX19tb2R1bGVfX10pCgoKZGVmIF9uZXN0ZWRfdHlwZV93cmFwcGVyKGZ1bik6CiAgIiIiQSB3cmFwcGVyIGZvciB0aGUgc3RhbmRhcmQgcGlja2xlciBoYW5kbGVyIGZvciBjbGFzcyBvYmplY3RzLgoKICBBcmdzOgogICAgZnVuOiBPcmlnaW5hbCBwaWNrbGVyIGhhbmRsZXIgZm9yIHR5cGUgb2JqZWN0cy4KCiAgUmV0dXJuczoKICAgIEEgd3JhcHBlciBmb3IgdHlwZSBvYmplY3RzIHRoYXQgaGFuZGxlcyBuZXN0ZWQgY2xhc3Nlcy4KCiAgVGhlIHdyYXBwZXIgZGV0ZWN0cyBpZiBhbiBvYmplY3QgYmVpbmcgcGlja2xlZCBpcyBhIG5lc3RlZCBjbGFzcyBvYmplY3QuCiAgRm9yIG5lc3RlZCBjbGFzcyBvYmplY3Qgb25seSBpdCB3aWxsIHNhdmUgdGhlIGNvbnRhaW5pbmcgY2xhc3Mgb2JqZWN0IHNvCiAgdGhlIG5lc3RlZCBzdHJ1Y3R1cmUgaXMgcmVjcmVhdGVkIGR1cmluZyB1bnBpY2tsZS4KICAiIiIKCiAgZGVmIHdyYXBwZXIocGlja2xlciwgb2JqKToKICAgICMgV2hlbiB0aGUgbmVzdGVkIGNsYXNzIGlzIGRlZmluZWQgaW4gdGhlIF9fbWFpbl9fIG1vZHVsZSB3ZSBkbyBub3QgaGF2ZSB0bwogICAgIyBkbyBhbnl0aGluZyBzcGVjaWFsIGJlY2F1c2UgdGhlIHBpY2tsZXIgaXRzZWxmIHdpbGwgc2F2ZSB0aGUgY29uc3RpdHVlbnQKICAgICMgcGFydHMgb2YgdGhlIHR5cGUgKGkuZS4sIG5hbWUsIGJhc2UgY2xhc3NlcywgZGljdGlvbmFyeSkgYW5kIHRoZW4KICAgICMgcmVjcmVhdGUgaXQgZHVyaW5nIHVucGlja2xpbmcuCiAgICBpZiBfaXNfbmVzdGVkX2NsYXNzKG9iaikgYW5kIG9iai5fX21vZHVsZV9fICE9ICdfX21haW5fXyc6CiAgICAgIGNvbnRhaW5pbmdfY2xhc3NfYW5kX25hbWUgPSBfZmluZF9jb250YWluaW5nX2NsYXNzKG9iaikKICAgICAgaWYgY29udGFpbmluZ19jbGFzc19hbmRfbmFtZSBpcyBub3QgTm9uZToKICAgICAgICByZXR1cm4gcGlja2xlci5zYXZlX3JlZHVjZSgKICAgICAgICAgICAgZ2V0YXR0ciwgY29udGFpbmluZ19jbGFzc19hbmRfbmFtZSwgb2JqPW9iaikKICAgIHRyeToKICAgICAgcmV0dXJuIGZ1bihwaWNrbGVyLCBvYmopCiAgICBleGNlcHQgZGlsbC5kaWxsLlBpY2tsaW5nRXJyb3I6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgcmV0dXJuIHBpY2tsZXIuc2F2ZV9yZWR1Y2UoCiAgICAgICAgICBkaWxsLmRpbGwuX2NyZWF0ZV90eXBlLAogICAgICAgICAgKHR5cGUob2JqKSwgb2JqLl9fbmFtZV9fLCBvYmouX19iYXNlc19fLAogICAgICAgICAgIGRpbGwuZGlsbC5fZGljdF9mcm9tX2RpY3Rwcm94eShvYmouX19kaWN0X18pKSwKICAgICAgICAgIG9iaj1vYmopCiAgICAgICMgcHlsaW50OiBlbmFibGU9cHJvdGVjdGVkLWFjY2VzcwoKICByZXR1cm4gd3JhcHBlcgoKCiMgTW9ua2V5IHBhdGNoIHRoZSBzdGFuZGFyZCBwaWNrbGVyIGRpc3BhdGNoIHRhYmxlIGVudHJ5IGZvciB0eXBlIG9iamVjdHMuCiMgRGlsbCwgZm9yIGNlcnRhaW4gdHlwZXMsIGRlZmVycyB0byB0aGUgc3RhbmRhcmQgcGlja2xlciAoaW5jbHVkaW5nIHR5cGUKIyBvYmplY3RzKS4gV2Ugd3JhcCB0aGUgc3RhbmRhcmQgaGFuZGxlciB1c2luZyB0eXBlX3dyYXBwZXIoKSBiZWNhdXNlCiMgZm9yIG5lc3RlZCBjbGFzcyB3ZSB3YW50IHRvIHBpY2tsZSB0aGUgYWN0dWFsIGVuY2xvc2luZyBjbGFzcyBvYmplY3Qgc28gd2UKIyBjYW4gcmVjcmVhdGUgaXQgZHVyaW5nIHVucGlja2xpbmcuCiMgVE9ETyhzaWx2aXVjKTogTWFrZSBzdXJlIHdlIHN1Ym1pdCB0aGUgZml4IHVwc3RyZWFtIHRvIEdpdEh1YiBkaWxsIHByb2plY3QuCmRpbGwuZGlsbC5QaWNrbGVyLmRpc3BhdGNoW3R5cGVdID0gX25lc3RlZF90eXBlX3dyYXBwZXIoCiAgICBkaWxsLmRpbGwuUGlja2xlci5kaXNwYXRjaFt0eXBlXSkKCgojIERpbGwgcGlja2xlcyBnZW5lcmF0b3JzIG9iamVjdHMgd2l0aG91dCBjb21wbGFpbnQsIGJ1dCB1bnBpY2tsaW5nIHByb2R1Y2VzCiMgVHlwZUVycm9yOiBvYmplY3QuX19uZXdfXyhnZW5lcmF0b3IpIGlzIG5vdCBzYWZlLCB1c2UgZ2VuZXJhdG9yLl9fbmV3X18oKQojIG9uIHNvbWUgdmVyc2lvbnMgb2YgUHl0aG9uLgpkZWYgX3JlamVjdF9nZW5lcmF0b3JzKHVudXNlZF9waWNrbGVyLCB1bnVzZWRfb2JqKToKICByYWlzZSBUeXBlRXJyb3IoImNhbid0IChzYWZlbHkpIHBpY2tsZSBnZW5lcmF0b3Igb2JqZWN0cyIpCgoKZGlsbC5kaWxsLlBpY2tsZXIuZGlzcGF0Y2hbdHlwZXMuR2VuZXJhdG9yVHlwZV0gPSBfcmVqZWN0X2dlbmVyYXRvcnMKCgojIFRoaXMgaWYgZ3VhcmRzIGFnYWluc3QgZGlsbCBub3QgYmVpbmcgZnVsbCBpbml0aWFsaXplZCB3aGVuIGdlbmVyYXRpbmcgZG9jcy4KaWYgJ3NhdmVfbW9kdWxlJyBpbiBkaXIoZGlsbC5kaWxsKToKCiAgIyBBbHdheXMgcGlja2xlIG5vbi1tYWluIG1vZHVsZXMgYnkgbmFtZS4KICBvbGRfc2F2ZV9tb2R1bGUgPSBkaWxsLmRpbGwuc2F2ZV9tb2R1bGUKCiAgQGRpbGwuZGlsbC5yZWdpc3RlcihkaWxsLmRpbGwuTW9kdWxlVHlwZSkKICBkZWYgc2F2ZV9tb2R1bGUocGlja2xlciwgb2JqKToKICAgIGlmIGRpbGwuZGlsbC5pc19kaWxsKHBpY2tsZXIpIGFuZCBvYmogaXMgcGlja2xlci5fbWFpbjoKICAgICAgcmV0dXJuIG9sZF9zYXZlX21vZHVsZShwaWNrbGVyLCBvYmopCiAgICBlbHNlOgogICAgICBkaWxsLmRpbGwubG9nLmluZm8oJ00yOiAlcycgJSBvYmopCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgcGlja2xlci5zYXZlX3JlZHVjZShkaWxsLmRpbGwuX2ltcG9ydF9tb2R1bGUsIChvYmouX19uYW1lX18sKSwgb2JqPW9iaikKICAgICAgIyBweWxpbnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIGRpbGwuZGlsbC5sb2cuaW5mbygnIyBNMicpCgogICMgUGlja2xlIG1vZHVsZSBkaWN0aW9uYXJpZXMgKGNvbW1vbmx5IGZvdW5kIGluIGxhbWJkYSdzIGdsb2JhbHMpCiAgIyBieSByZWZlcmVuY2luZyB0aGVpciBtb2R1bGUuCiAgb2xkX3NhdmVfbW9kdWxlX2RpY3QgPSBkaWxsLmRpbGwuc2F2ZV9tb2R1bGVfZGljdAogIGtub3duX21vZHVsZV9kaWN0cyA9IHt9CgogIEBkaWxsLmRpbGwucmVnaXN0ZXIoZGljdCkKICBkZWYgbmV3X3NhdmVfbW9kdWxlX2RpY3QocGlja2xlciwgb2JqKToKICAgIG9ial9pZCA9IGlkKG9iaikKICAgIGlmIG5vdCBrbm93bl9tb2R1bGVfZGljdHMgb3IgJ19fZmlsZV9fJyBpbiBvYmogb3IgJ19fcGFja2FnZV9fJyBpbiBvYmo6CiAgICAgIGlmIG9ial9pZCBub3QgaW4ga25vd25fbW9kdWxlX2RpY3RzOgogICAgICAgIGZvciBtIGluIHN5cy5tb2R1bGVzLnZhbHVlcygpOgogICAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBtIGFuZCBtLl9fbmFtZV9fICE9ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgZCA9IG0uX19kaWN0X18KICAgICAgICAgICAgICBrbm93bl9tb2R1bGVfZGljdHNbaWQoZCldID0gbSwgZAogICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAjIFNraXAgbW9kdWxlcyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBfX25hbWVfXyBhdHRyaWJ1dGUuCiAgICAgICAgICAgIHBhc3MKICAgIGlmIG9ial9pZCBpbiBrbm93bl9tb2R1bGVfZGljdHMgYW5kIGRpbGwuZGlsbC5pc19kaWxsKHBpY2tsZXIpOgogICAgICBtID0ga25vd25fbW9kdWxlX2RpY3RzW29ial9pZF1bMF0KICAgICAgdHJ5OgogICAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICBkaWxsLmRpbGwuX2ltcG9ydF9tb2R1bGUobS5fX25hbWVfXykKICAgICAgICByZXR1cm4gcGlja2xlci5zYXZlX3JlZHVjZSgKICAgICAgICAgICAgZ2V0YXR0ciwgKGtub3duX21vZHVsZV9kaWN0c1tvYmpfaWRdWzBdLCAnX19kaWN0X18nKSwgb2JqPW9iaikKICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgIHJldHVybiBvbGRfc2F2ZV9tb2R1bGVfZGljdChwaWNrbGVyLCBvYmopCiAgICBlbHNlOgogICAgICByZXR1cm4gb2xkX3NhdmVfbW9kdWxlX2RpY3QocGlja2xlciwgb2JqKQogIGRpbGwuZGlsbC5zYXZlX21vZHVsZV9kaWN0ID0gbmV3X3NhdmVfbW9kdWxlX2RpY3QKCiAgZGVmIF9uZXN0X2RpbGxfbG9nZ2luZygpOgogICAgIiIiUHJlZml4IGFsbCBkaWxsIGxvZ2dpbmcgd2l0aCBpdHMgZGVwdGggaW4gdGhlIGNhbGxzdGFjay4KCiAgICBVc2VmdWwgZm9yIGRlYnVnZ2luZyBwaWNrbGluZyBvZiBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMuCiAgICAiIiIKICAgIG9sZF9sb2dfaW5mbyA9IGRpbGwuZGlsbC5sb2cuaW5mbwoKICAgIGRlZiBuZXdfbG9nX2luZm8obXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICBvbGRfbG9nX2luZm8oCiAgICAgICAgICAoJzEgMiAzIDQgNSA2IDcgOCA5IDAgJyAqIDEwKVs6bGVuKHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKCkpXSArIG1zZywKICAgICAgICAgICphcmdzLCAqKmt3YXJncykKICAgIGRpbGwuZGlsbC5sb2cuaW5mbyA9IG5ld19sb2dfaW5mbwoKCiMgVHVybiBvZmYgdmVyYm9zZSBsb2dnaW5nIGZyb20gdGhlIGRpbGwgcGlja2xlci4KbG9nZ2luZy5nZXRMb2dnZXIoJ2RpbGwnKS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCgoKIyBUT0RPKGNjeSk6IEN1cnJlbnRseSwgdGhlcmUgYXJlIHN0aWxsIGluc3RhbmNlcyBvZiBwaWNrbGVyLmR1bXBzKCkgYW5kCiMgcGlja2xlci5sb2FkcygpIGJlaW5nIHVzZWQgZm9yIGRhdGEsIHdoaWNoIHJlc3VsdHMgaW4gYW4gdW5uZWNlc3NhcnkgYmFzZTY0CiMgZW5jb2RpbmcuICBUaGlzIHNob3VsZCBiZSBjbGVhbmVkIHVwLgpkZWYgZHVtcHMobywgZW5hYmxlX3RyYWNlPVRydWUpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKCiAgdHJ5OgogICAgcyA9IGRpbGwuZHVtcHMobykKICBleGNlcHQgRXhjZXB0aW9uOiAgICAgICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgaWYgZW5hYmxlX3RyYWNlOgogICAgICBkaWxsLmRpbGwuX3RyYWNlKFRydWUpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIHMgPSBkaWxsLmR1bXBzKG8pCiAgICBlbHNlOgogICAgICByYWlzZQogIGZpbmFsbHk6CiAgICBkaWxsLmRpbGwuX3RyYWNlKEZhbHNlKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwoKICAjIENvbXByZXNzIGFzIGNvbXBhY3RseSBhcyBwb3NzaWJsZSB0byBkZWNyZWFzZSBwZWFrIG1lbW9yeSB1c2FnZSAob2YgbXVsdGlwbGUKICAjIGluLW1lbW9yeSBjb3BpZXMpIGFuZCBmcmVlIHVwIHNvbWUgcG9zc2libHkgbGFyZ2UgYW5kIG5vLWxvbmdlci1uZWVkZWQKICAjIG1lbW9yeS4KICBjID0gemxpYi5jb21wcmVzcyhzLCA5KQogIGRlbCBzCgogIHJldHVybiBiYXNlNjQuYjY0ZW5jb2RlKGMpCgoKZGVmIGxvYWRzKGVuY29kZWQsIGVuYWJsZV90cmFjZT1UcnVlKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgogIGMgPSBiYXNlNjQuYjY0ZGVjb2RlKGVuY29kZWQpCgogIHMgPSB6bGliLmRlY29tcHJlc3MoYykKICBkZWwgYyAgIyBGcmVlIHVwIHNvbWUgcG9zc2libHkgbGFyZ2UgYW5kIG5vLWxvbmdlci1uZWVkZWQgbWVtb3J5LgoKICB0cnk6CiAgICByZXR1cm4gZGlsbC5sb2FkcyhzKQogIGV4Y2VwdCBFeGNlcHRpb246ICAgICAgICAgICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgaWYgZW5hYmxlX3RyYWNlOgogICAgICBkaWxsLmRpbGwuX3RyYWNlKFRydWUpICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICByZXR1cm4gZGlsbC5sb2FkcyhzKQogICAgZWxzZToKICAgICAgcmFpc2UKICBmaW5hbGx5OgogICAgZGlsbC5kaWxsLl90cmFjZShGYWxzZSkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKCgpkZWYgZHVtcF9zZXNzaW9uKGZpbGVfcGF0aCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBQaWNrbGUgdGhlIGN1cnJlbnQgcHl0aG9uIHNlc3Npb24gdG8gYmUgdXNlZCBpbiB0aGUgd29ya2VyLgoKICBOb3RlOiBEdWUgdG8gdGhlIGluY29uc2lzdGVuY3kgaW4gdGhlIGZpcnN0IGR1bXAgb2YgZGlsbCBkdW1wX3Nlc3Npb24gd2UKICBjcmVhdGUgYW5kIGxvYWQgdGhlIGR1bXAgdHdpY2UgdG8gaGF2ZSBjb25zaXN0ZW50IHJlc3VsdHMgaW4gdGhlIHdvcmtlciBhbmQKICB0aGUgcnVubmluZyBzZXNzaW9uLiBDaGVjazogaHR0cHM6Ly9naXRodWIuY29tL3VxZm91bmRhdGlvbi9kaWxsL2lzc3Vlcy8xOTUKICAiIiIKICBkaWxsLmR1bXBfc2Vzc2lvbihmaWxlX3BhdGgpCiAgZGlsbC5sb2FkX3Nlc3Npb24oZmlsZV9wYXRoKQogIHJldHVybiBkaWxsLmR1bXBfc2Vzc2lvbihmaWxlX3BhdGgpCgoKZGVmIGxvYWRfc2Vzc2lvbihmaWxlX3BhdGgpOgogIHJldHVybiBkaWxsLmxvYWRfc2Vzc2lvbihmaWxlX3BhdGgpCn1yrQIAAChYFAAAAF9uZXN0ZWRfdHlwZV93cmFwcGVyWAMAAABkZWZLPktih1gfAAAAX25lc3RfZGlsbF9sb2dnaW5nLm5ld19sb2dfaW5mb1gDAAAAZGVmS69Ls4dYDAAAAGR1bXBfc2Vzc2lvblgDAAAAZGVmS+hL9IdYDAAAAGxvYWRfc2Vzc2lvblgDAAAAZGVmS/ZL+IdYEgAAAF9uZXN0X2RpbGxfbG9nZ2luZ1gDAAAAZGVmS6hLtIdYHAAAAF9uZXN0ZWRfdHlwZV93cmFwcGVyLndyYXBwZXJYAwAAAGRlZktMS1+HWAsAAABzYXZlX21vZHVsZVgDAAAAZGVmS35LiIdYBQAAAGxvYWRzWAMAAABkZWZL1Evmh1gSAAAAX3JlamVjdF9nZW5lcmF0b3JzWAMAAABkZWZLcUtzh1gzAAAAX2ZpbmRfY29udGFpbmluZ19jbGFzcy5fZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyWAMAAABkZWZLM0s6h1gWAAAAX2ZpbmRfY29udGFpbmluZ19jbGFzc1gDAAAAZGVmSzBLPIdYFAAAAG5ld19zYXZlX21vZHVsZV9kaWN0WAMAAABkZWZLjkumh1gQAAAAX2lzX25lc3RlZF9jbGFzc1gDAAAAZGVmSylLLodYBQAAAGR1bXBzWAMAAABkZWZLvUvSh3V9cq4CAAAoWAwAAABkdW1wX3Nlc3Npb25YHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJyrwIAAFgMAAAAbG9hZF9zZXNzaW9uaq8CAABYCwAAAHNhdmVfbW9kdWxlaq8CAABYBQAAAGxvYWRzaq8CAABYFAAAAG5ld19zYXZlX21vZHVsZV9kaWN0aq8CAABYBQAAAGR1bXBzaq8CAAB1aIpYHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJysAIAAIWBcrECAAB9crICAABidHKzAgAAVRhhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9ytAIAAChY8nkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJHb29nbGUgQ2xvdWQgU3RvcmFnZSBjbGllbnQuCgpUaGlzIGxpYnJhcnkgZXZvbHZlZCBmcm9tIHRoZSBHb29nbGUgQXBwIEVuZ2luZSBHQ1MgY2xpZW50IGF2YWlsYWJsZSBhdApodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9hcHBlbmdpbmUtZ2NzLWNsaWVudC4KIiIiCgppbXBvcnQgY1N0cmluZ0lPCmltcG9ydCBlcnJubwppbXBvcnQgZm5tYXRjaAppbXBvcnQgbG9nZ2luZwppbXBvcnQgbXVsdGlwcm9jZXNzaW5nCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQppbXBvcnQgdHJhY2ViYWNrCgppbXBvcnQgaHR0cGxpYjIKCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgpfX2FsbF9fID0gWydHY3NJTyddCgoKIyBJc3N1ZSBhIGZyaWVuZGxpZXIgZXJyb3IgbWVzc2FnZSBpZiB0aGUgc3RvcmFnZSBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgVE9ETyhzaWx2aXVjKTogUmVtb3ZlIHRoaXMgZ3VhcmQgd2hlbiBzdG9yYWdlIGlzIGF2YWlsYWJsZSBldmVyeXdoZXJlLgp0cnk6CiAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAjIHB5bGludDogZGlzYWJsZT11bmdyb3VwZWQtaW1wb3J0cwogIGltcG9ydCBhcGl0b29scy5iYXNlLnB5LnRyYW5zZmVyIGFzIHRyYW5zZmVyCiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmJhdGNoIGltcG9ydCBCYXRjaEFwaVJlcXVlc3QKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkuZXhjZXB0aW9ucyBpbXBvcnQgSHR0cEVycm9yCiAgZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AgaW1wb3J0IGF1dGgKICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBzdG9yYWdlCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgJ0dvb2dsZSBDbG91ZCBTdG9yYWdlIEkvTyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAnCiAgICAgICcoY291bGQgbm90IGltcG9ydCBzdG9yYWdlIEFQSSBjbGllbnQpLicpCgojIFRoaXMgaXMgdGhlIHNpemUgb2YgZWFjaCBwYXJ0aWFsLWZpbGUgcmVhZCBvcGVyYXRpb24gZnJvbSBHQ1MuICBUaGlzCiMgcGFyYW1ldGVyIHdhcyBjaG9zZW4gdG8gZ2l2ZSBnb29kIHRocm91Z2hwdXQgd2hpbGUga2VlcGluZyBtZW1vcnkgdXNhZ2UgYXQKIyBhIHJlYXNvbmFibGUgbGV2ZWw7IHRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhyb3VnaHB1dCByZWFjaGVkIHdoZW4KIyByZWFkaW5nIGZpbGVzIG9mIGEgZ2l2ZW4gc2l6ZSB3aXRoIGEgY2hvc2VuIGJ1ZmZlciBzaXplIGFuZCBpbmZvcm1lZCB0aGUKIyBjaG9pY2Ugb2YgdGhlIHZhbHVlLCBhcyBvZiAxMS8yMDE2OgojCiMgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCiMgfCAgICAgICAgICAgICAgIHwgNTAgTUIgZmlsZSB8IDEwMCBNQiBmaWxlIHwgMjAwIE1CIGZpbGUgfCA0MDAgTUIgZmlsZSB8CiMgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCiMgfCA4IE1CIGJ1ZmZlciAgIHwgMTcuMTIgTUIvcyB8IDIyLjY3IE1CL3MgIHwgMjMuODEgTUIvcyAgfCAyNi4wNSBNQi9zICB8CiMgfCAxNiBNQiBidWZmZXIgIHwgMjQuMjEgTUIvcyB8IDQyLjcwIE1CL3MgIHwgNDIuODkgTUIvcyAgfCA0Ni45MiBNQi9zICB8CiMgfCAzMiBNQiBidWZmZXIgIHwgMjguNTMgTUIvcyB8IDQ4LjA4IE1CL3MgIHwgNTQuMzAgTUIvcyAgfCA1NC42NSBNQi9zICB8CiMgfCA0MDAgTUIgYnVmZmVyIHwgMzQuNzIgTUIvcyB8IDcxLjEzIE1CL3MgIHwgNzkuMTMgTUIvcyAgfCA4NS4zOSBNQi9zICB8CiMgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCkRFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSA9IDE2ICogMTAyNCAqIDEwMjQKCiMgVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGxpYnJhcnkgd2lsbCB3YWl0IGZvciBHQ1Mgb3BlcmF0aW9ucyB0bwojIGNvbXBsZXRlLgpERUZBVUxUX0hUVFBfVElNRU9VVF9TRUNPTkRTID0gNjAKCiMgVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGxpYnJhcnkgd2lsbCB3YWl0IGZvciBhIHBhcnRpYWwtZmlsZSByZWFkCiMgb3BlcmF0aW9uIGZyb20gR0NTIHRvIGNvbXBsZXRlIGJlZm9yZSByZXRyeWluZy4KREVGQVVMVF9SRUFEX1NFR01FTlRfVElNRU9VVF9TRUNPTkRTID0gNjAKCiMgVGhpcyBpcyB0aGUgc2l6ZSBvZiBjaHVua3MgdXNlZCB3aGVuIHdyaXRpbmcgdG8gR0NTLgpXUklURV9DSFVOS19TSVpFID0gOCAqIDEwMjQgKiAxMDI0CgoKIyBNYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHBlcm1pdHRlZCBpbiBHY3NJTy5jb3B5X2JhdGNoKCkgYW5kCiMgR2NzSU8uZGVsZXRlX2JhdGNoKCkuCk1BWF9CQVRDSF9PUEVSQVRJT05fU0laRSA9IDEwMAoKCmRlZiBwcm94eV9pbmZvX2Zyb21fZW52aXJvbm1lbnRfdmFyKHByb3h5X2Vudl92YXIpOgogICIiIlJlYWRzIHByb3h5IGluZm8gZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIGNvbnZlcnRzIHRvIGh0dHBsaWIyLlByb3h5SW5mby4KCiAgQXJnczoKICAgIHByb3h5X2Vudl92YXI6IGVudmlyb25tZW50IHZhcmlhYmxlIHN0cmluZyB0byByZWFkLCBodHRwX3Byb3h5IG9yCiAgICAgICBodHRwc19wcm94eSAoaW4gbG93ZXIgY2FzZSkuCiAgICAgICBFeGFtcGxlOiBodHRwOi8vbXlwcm94eS5kb21haW4uY29tOjgwODAKCiAgUmV0dXJuczoKICAgIGh0dHBsaWIyLlByb3h5SW5mbyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBzdHJpbmcuCiAgIiIiCiAgcHJveHlfdXJsID0gb3MuZW52aXJvbi5nZXQocHJveHlfZW52X3ZhcikKICBpZiBub3QgcHJveHlfdXJsOgogICAgcmV0dXJuIE5vbmUKICBwcm94eV9wcm90b2NvbCA9IHByb3h5X2Vudl92YXIubG93ZXIoKS5zcGxpdCgnXycpWzBdCiAgaWYgbm90IHJlLm1hdGNoKCdeaHR0cHM/Oi8vJywgcHJveHlfdXJsLCBmbGFncz1yZS5JR05PUkVDQVNFKToKICAgIGxvZ2dpbmcud2FybigicHJveHlfaW5mb19mcm9tX3VybCByZXF1aXJlcyBhIHByb3RvY29sLCB3aGljaCBpcyBhbHdheXMgIgogICAgICAgICAgICAgICAgICJodHRwIG9yIGh0dHBzLiIpCiAgICBwcm94eV91cmwgPSBwcm94eV9wcm90b2NvbCArICc6Ly8nICsgcHJveHlfdXJsCiAgcmV0dXJuIGh0dHBsaWIyLnByb3h5X2luZm9fZnJvbV91cmwocHJveHlfdXJsLCBtZXRob2Q9cHJveHlfcHJvdG9jb2wpCgoKZGVmIGdldF9uZXdfaHR0cCgpOgogICIiIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaHR0cGxpYjIuSHR0cCBpbnN0YW5jZS4KCiAgUmV0dXJuczoKICAgIEFuIGluaXRpYWxpemVkIGh0dHBsaWIyLkh0dHAgaW5zdGFuY2UuCiAgIiIiCiAgcHJveHlfaW5mbyA9IE5vbmUKICBmb3IgcHJveHlfZW52X3ZhciBpbiBbJ2h0dHBfcHJveHknLCAnaHR0cHNfcHJveHknXToKICAgIGlmIG9zLmVudmlyb24uZ2V0KHByb3h5X2Vudl92YXIpOgogICAgICBwcm94eV9pbmZvID0gcHJveHlfaW5mb19mcm9tX2Vudmlyb25tZW50X3Zhcihwcm94eV9lbnZfdmFyKQogICAgICBicmVhawogICMgVXNlIGEgbm9uLWluZmluaXRlIFNTTCB0aW1lb3V0IHRvIGF2b2lkIGhhbmdzIGR1cmluZyBuZXR3b3JrIGZsYWtpbmVzcy4KICByZXR1cm4gaHR0cGxpYjIuSHR0cChwcm94eV9pbmZvPXByb3h5X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ERUZBVUxUX0hUVFBfVElNRU9VVF9TRUNPTkRTKQoKCmRlZiBwYXJzZV9nY3NfcGF0aChnY3NfcGF0aCk6CiAgIiIiUmV0dXJuIHRoZSBidWNrZXQgYW5kIG9iamVjdCBuYW1lcyBvZiB0aGUgZ2l2ZW4gZ3M6Ly8gcGF0aC4iIiIKICBtYXRjaCA9IHJlLm1hdGNoKCdeZ3M6Ly8oW14vXSspLyguKykkJywgZ2NzX3BhdGgpCiAgaWYgbWF0Y2ggaXMgTm9uZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0dDUyBwYXRoIG11c3QgYmUgaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88b2JqZWN0Pi4nKQogIHJldHVybiBtYXRjaC5ncm91cCgxKSwgbWF0Y2guZ3JvdXAoMikKCgpjbGFzcyBHY3NJT0Vycm9yKElPRXJyb3IsIHJldHJ5LlBlcm1hbmVudEV4Y2VwdGlvbik6CiAgIiIiR0NTIElPIGVycm9yIHRoYXQgc2hvdWxkIG5vdCBiZSByZXRyaWVkLiIiIgogIHBhc3MKCgpjbGFzcyBHY3NJTyhvYmplY3QpOgogICIiIkdvb2dsZSBDbG91ZCBTdG9yYWdlIEkvTyBjbGllbnQuIiIiCgogIGRlZiBfX25ld19fKGNscywgc3RvcmFnZV9jbGllbnQ9Tm9uZSk6CiAgICBpZiBzdG9yYWdlX2NsaWVudDoKICAgICAgIyBUaGlzIHBhdGggaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLgogICAgICByZXR1cm4gc3VwZXIoR2NzSU8sIGNscykuX19uZXdfXyhjbHMpCiAgICBlbHNlOgogICAgICAjIENyZWF0ZSBhIHNpbmdsZSBzdG9yYWdlIGNsaWVudCBmb3IgZWFjaCB0aHJlYWQuICBXZSB3b3VsZCBsaWtlIHRvIGF2b2lkCiAgICAgICMgY3JlYXRpbmcgbW9yZSB0aGFuIG9uZSBzdG9yYWdlIGNsaWVudCBmb3IgZWFjaCB0aHJlYWQsIHNpbmNlIGVhY2gKICAgICAgIyBpbml0aWFsaXphdGlvbiByZXF1aXJlcyB0aGUgcmVsYXRpdmVseSBleHBlbnNpdmUgc3RlcCBvZiBpbml0aWFsaXppbmcKICAgICAgIyBjcmVkZW50YWlhbHMuCiAgICAgIGxvY2FsX3N0YXRlID0gdGhyZWFkaW5nLmxvY2FsKCkKICAgICAgaWYgZ2V0YXR0cihsb2NhbF9zdGF0ZSwgJ2djc2lvX2luc3RhbmNlJywgTm9uZSkgaXMgTm9uZToKICAgICAgICBjcmVkZW50aWFscyA9IGF1dGguZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKQogICAgICAgIHN0b3JhZ2VfY2xpZW50ID0gc3RvcmFnZS5TdG9yYWdlVjEoCiAgICAgICAgICAgIGNyZWRlbnRpYWxzPWNyZWRlbnRpYWxzLAogICAgICAgICAgICBnZXRfY3JlZGVudGlhbHM9RmFsc2UsCiAgICAgICAgICAgIGh0dHA9Z2V0X25ld19odHRwKCkpCiAgICAgICAgbG9jYWxfc3RhdGUuZ2NzaW9faW5zdGFuY2UgPSAoCiAgICAgICAgICAgIHN1cGVyKEdjc0lPLCBjbHMpLl9fbmV3X18oY2xzLCBzdG9yYWdlX2NsaWVudCkpCiAgICAgICAgbG9jYWxfc3RhdGUuZ2NzaW9faW5zdGFuY2UuY2xpZW50ID0gc3RvcmFnZV9jbGllbnQKICAgICAgcmV0dXJuIGxvY2FsX3N0YXRlLmdjc2lvX2luc3RhbmNlCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdG9yYWdlX2NsaWVudD1Ob25lKToKICAgICMgV2UgbXVzdCBkbyB0aGlzIGNoZWNrIG9uIHN0b3JhZ2VfY2xpZW50IGJlY2F1c2UgdGhlIGNsaWVudCBhdHRyaWJ1dGUgbWF5CiAgICAjIGhhdmUgYWxyZWFkeSBiZWVuIHNldCBpbiBfX25ld19fIGZvciB0aGUgc2luZ2xldG9uIGNhc2Ugd2hlbgogICAgIyBzdG9yYWdlX2NsaWVudCBpcyBOb25lLgogICAgaWYgc3RvcmFnZV9jbGllbnQgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYuY2xpZW50ID0gc3RvcmFnZV9jbGllbnQKCiAgZGVmIG9wZW4oc2VsZiwKICAgICAgICAgICBmaWxlbmFtZSwKICAgICAgICAgICBtb2RlPSdyJywKICAgICAgICAgICByZWFkX2J1ZmZlcl9zaXplPURFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOgogICAgIiIiT3BlbiBhIEdDUyBmaWxlIHBhdGggZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KCiAgICBBcmdzOgogICAgICBmaWxlbmFtZSAoc3RyKTogR0NTIGZpbGUgcGF0aCBpbiB0aGUgZm9ybSBgYGdzOi8vPGJ1Y2tldD4vPG9iamVjdD5gYC4KICAgICAgbW9kZSAoc3RyKTogYGAncidgYCBmb3IgcmVhZGluZyBvciBgYCd3J2BgIGZvciB3cml0aW5nLgogICAgICByZWFkX2J1ZmZlcl9zaXplIChpbnQpOiBCdWZmZXIgc2l6ZSB0byB1c2UgZHVyaW5nIHJlYWQgb3BlcmF0aW9ucy4KICAgICAgbWltZV90eXBlIChzdHIpOiBNaW1lIHR5cGUgdG8gc2V0IGZvciB3cml0ZSBvcGVyYXRpb25zLgoKICAgIFJldHVybnM6CiAgICAgIEdDUyBmaWxlIG9iamVjdC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IEludmFsaWQgb3BlbiBmaWxlIG1vZGUuCiAgICAiIiIKICAgIGlmIG1vZGUgPT0gJ3InIG9yIG1vZGUgPT0gJ3JiJzoKICAgICAgcmV0dXJuIEdjc0J1ZmZlcmVkUmVhZGVyKHNlbGYuY2xpZW50LCBmaWxlbmFtZSwgbW9kZT1tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9cmVhZF9idWZmZXJfc2l6ZSkKICAgIGVsaWYgbW9kZSA9PSAndycgb3IgbW9kZSA9PSAnd2InOgogICAgICByZXR1cm4gR2NzQnVmZmVyZWRXcml0ZXIoc2VsZi5jbGllbnQsIGZpbGVuYW1lLCBtb2RlPW1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lX3R5cGU9bWltZV90eXBlKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBmaWxlIG9wZW4gbW9kZTogJXMuJyAlIG1vZGUpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgZ2xvYihzZWxmLCBwYXR0ZXJuLCBsaW1pdD1Ob25lKToKICAgICIiIlJldHVybiB0aGUgR0NTIHBhdGggbmFtZXMgbWF0Y2hpbmcgYSBnaXZlbiBwYXRoIG5hbWUgcGF0dGVybi4KCiAgICBQYXRoIG5hbWUgcGF0dGVybnMgYXJlIHRob3NlIHJlY29nbml6ZWQgYnkgZm5tYXRjaC5mbm1hdGNoKCkuICBUaGUgcGF0aAogICAgY2FuIGNvbnRhaW4gZ2xvYiBjaGFyYWN0ZXJzICgqLCA/LCBhbmQgWy4uLl0gc2V0cykuCgogICAgQXJnczoKICAgICAgcGF0dGVybjogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWVfcGF0dGVybj4uCiAgICAgIGxpbWl0OiBNYXhpbWFsIG51bWJlciBvZiBwYXRoIG5hbWVzIHRvIHJldHVybi4KICAgICAgICBBbGwgbWF0Y2hpbmcgcGF0aHMgYXJlIHJldHVybmVkIGlmIHNldCB0byBOb25lLgoKICAgIFJldHVybnM6CiAgICAgIGxpc3Qgb2YgR0NTIGZpbGUgcGF0aHMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCiAgICAiIiIKICAgIGJ1Y2tldCwgbmFtZV9wYXR0ZXJuID0gcGFyc2VfZ2NzX3BhdGgocGF0dGVybikKICAgICMgR2V0IHRoZSBwcmVmaXggd2l0aCB3aGljaCB3ZSBjYW4gbGlzdCBvYmplY3RzIGluIHRoZSBnaXZlbiBidWNrZXQuCiAgICBwcmVmaXggPSByZS5tYXRjaCgnXlteWyo/XSonLCBuYW1lX3BhdHRlcm4pLmdyb3VwKDApCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0xpc3RSZXF1ZXN0KGJ1Y2tldD1idWNrZXQsIHByZWZpeD1wcmVmaXgpCiAgICBvYmplY3RfcGF0aHMgPSBbXQogICAgd2hpbGUgVHJ1ZToKICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5vYmplY3RzLkxpc3QocmVxdWVzdCkKICAgICAgZm9yIGl0ZW0gaW4gcmVzcG9uc2UuaXRlbXM6CiAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGl0ZW0ubmFtZSwgbmFtZV9wYXR0ZXJuKToKICAgICAgICAgIG9iamVjdF9wYXRocy5hcHBlbmQoJ2dzOi8vJXMvJXMnICUgKGl0ZW0uYnVja2V0LCBpdGVtLm5hbWUpKQogICAgICBpZiByZXNwb25zZS5uZXh0UGFnZVRva2VuOgogICAgICAgIHJlcXVlc3QucGFnZVRva2VuID0gcmVzcG9uc2UubmV4dFBhZ2VUb2tlbgogICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lIGFuZCBsZW4ob2JqZWN0X3BhdGhzKSA+PSBsaW1pdDoKICAgICAgICAgIGJyZWFrCiAgICAgIGVsc2U6CiAgICAgICAgYnJlYWsKICAgIHJldHVybiBvYmplY3RfcGF0aHNbOmxpbWl0XQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoKToKICAgICIiIkRlbGV0ZXMgdGhlIG9iamVjdCBhdCB0aGUgZ2l2ZW4gR0NTIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzRGVsZXRlUmVxdWVzdCgKICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50Lm9iamVjdHMuRGVsZXRlKHJlcXVlc3QpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGh0dHBfZXJyb3I6CiAgICAgIGlmIGh0dHBfZXJyb3Iuc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICMgUmV0dXJuIHN1Y2Nlc3Mgd2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgZm9yIGlkZW1wb3RlbmN5LgogICAgICAgIHJldHVybgogICAgICByYWlzZQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgYXMgcmV0cnlpbmcgaXMKICAjIGhhbmRsZWQgaW4gQmF0Y2hBcGlSZXF1ZXN0LkV4ZWN1dGUoKS4KICBkZWYgZGVsZXRlX2JhdGNoKHNlbGYsIHBhdGhzKToKICAgICIiIkRlbGV0ZXMgdGhlIG9iamVjdHMgYXQgdGhlIGdpdmVuIEdDUyBwYXRocy4KCiAgICBBcmdzOgogICAgICBwYXRoczogTGlzdCBvZiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm5zIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LAogICAgICAgICAgICAgbm90IHRvIGV4Y2VlZCBNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgaW4gbGVuZ3RoLgoKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChwYXRoLCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBwYXRocwogICAgICAgICAgICAgYXJndW1lbnQsIHdoZXJlIGV4Y2VwdGlvbiBpcyBOb25lIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkIG9yCiAgICAgICAgICAgICB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3QgcGF0aHM6CiAgICAgIHJldHVybiBbXQogICAgYmF0Y2hfcmVxdWVzdCA9IEJhdGNoQXBpUmVxdWVzdCgKICAgICAgICByZXRyeWFibGVfY29kZXM9cmV0cnkuU0VSVkVSX0VSUk9SX09SX1RJTUVPVVRfQ09ERVMpCiAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgYnVja2V0LCBvYmplY3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzRGVsZXRlUmVxdWVzdCgKICAgICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgICAgYmF0Y2hfcmVxdWVzdC5BZGQoc2VsZi5jbGllbnQub2JqZWN0cywgJ0RlbGV0ZScsIHJlcXVlc3QpCiAgICBhcGlfY2FsbHMgPSBiYXRjaF9yZXF1ZXN0LkV4ZWN1dGUoc2VsZi5jbGllbnQuX2h0dHApICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHJlc3VsdF9zdGF0dXNlcyA9IFtdCiAgICBmb3IgaSwgYXBpX2NhbGwgaW4gZW51bWVyYXRlKGFwaV9jYWxscyk6CiAgICAgIHBhdGggPSBwYXRoc1tpXQogICAgICBleGNlcHRpb24gPSBOb25lCiAgICAgIGlmIGFwaV9jYWxsLmlzX2Vycm9yOgogICAgICAgIGV4Y2VwdGlvbiA9IGFwaV9jYWxsLmV4Y2VwdGlvbgogICAgICAgICMgUmV0dXJuIHN1Y2Nlc3Mgd2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgZm9yIGlkZW1wb3RlbmN5LgogICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpIGFuZCBleGNlcHRpb24uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICAgZXhjZXB0aW9uID0gTm9uZQogICAgICByZXN1bHRfc3RhdHVzZXMuYXBwZW5kKChwYXRoLCBleGNlcHRpb24pKQogICAgcmV0dXJuIHJlc3VsdF9zdGF0dXNlcwoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGNvcHkoc2VsZiwgc3JjLCBkZXN0KToKICAgICIiIkNvcGllcyB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyYzogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgICBkZXN0OiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4uCiAgICAiIiIKICAgIHNyY19idWNrZXQsIHNyY19wYXRoID0gcGFyc2VfZ2NzX3BhdGgoc3JjKQogICAgZGVzdF9idWNrZXQsIGRlc3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKGRlc3QpCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0NvcHlSZXF1ZXN0KAogICAgICAgIHNvdXJjZUJ1Y2tldD1zcmNfYnVja2V0LAogICAgICAgIHNvdXJjZU9iamVjdD1zcmNfcGF0aCwKICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldD1kZXN0X2J1Y2tldCwKICAgICAgICBkZXN0aW5hdGlvbk9iamVjdD1kZXN0X3BhdGgpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50Lm9iamVjdHMuQ29weShyZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBodHRwX2Vycm9yOgogICAgICBpZiBodHRwX2Vycm9yLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAjIFRoaXMgaXMgYSBwZXJtYW5lbnQgZXJyb3IgdGhhdCBzaG91bGQgbm90IGJlIHJldHJpZWQuIE5vdGUgdGhhdAogICAgICAgICMgRmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZSBleHBlY3RzIGFuIElPRXJyb3Igd2hlbiB0aGUgc291cmNlCiAgICAgICAgIyBmaWxlIGRvZXMgbm90IGV4aXN0LgogICAgICAgIHJhaXNlIEdjc0lPRXJyb3IoZXJybm8uRU5PRU5ULCAnU291cmNlIGZpbGUgbm90IGZvdW5kOiAlcycgJSBzcmMpCiAgICAgIHJhaXNlCgogICMgV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVjb3JhdGUgdGhpcyBtZXRob2Qgd2l0aCBhIHJldHJ5LCBhcyByZXRyeWluZyBpcwogICMgaGFuZGxlZCBpbiBCYXRjaEFwaVJlcXVlc3QuRXhlY3V0ZSgpLgogIGRlZiBjb3B5X2JhdGNoKHNlbGYsIHNyY19kZXN0X3BhaXJzKToKICAgICIiIkNvcGllcyB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyY19kZXN0X3BhaXJzOiBsaXN0IG9mIChzcmMsIGRlc3QpIHR1cGxlcyBvZiBnczovLzxidWNrZXQ+LzxuYW1lPiBmaWxlcwogICAgICAgICAgICAgICAgICAgICAgcGF0aHMgdG8gY29weSBmcm9tIHNyYyB0byBkZXN0LCBub3QgdG8gZXhjZWVkCiAgICAgICAgICAgICAgICAgICAgICBNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgaW4gbGVuZ3RoLgoKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChzcmMsIGRlc3QsIGV4Y2VwdGlvbikgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCiAgICAgICAgICAgICBzcmNfZGVzdF9wYWlycyBhcmd1bWVudCwgd2hlcmUgZXhjZXB0aW9uIGlzIE5vbmUgaWYgdGhlIG9wZXJhdGlvbgogICAgICAgICAgICAgc3VjY2VlZGVkIG9yIHRoZSByZWxldmFudCBleGNlcHRpb24gaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuCiAgICAiIiIKICAgIGlmIG5vdCBzcmNfZGVzdF9wYWlyczoKICAgICAgcmV0dXJuIFtdCiAgICBiYXRjaF9yZXF1ZXN0ID0gQmF0Y2hBcGlSZXF1ZXN0KAogICAgICAgIHJldHJ5YWJsZV9jb2Rlcz1yZXRyeS5TRVJWRVJfRVJST1JfT1JfVElNRU9VVF9DT0RFUykKICAgIGZvciBzcmMsIGRlc3QgaW4gc3JjX2Rlc3RfcGFpcnM6CiAgICAgIHNyY19idWNrZXQsIHNyY19wYXRoID0gcGFyc2VfZ2NzX3BhdGgoc3JjKQogICAgICBkZXN0X2J1Y2tldCwgZGVzdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgoZGVzdCkKICAgICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNDb3B5UmVxdWVzdCgKICAgICAgICAgIHNvdXJjZUJ1Y2tldD1zcmNfYnVja2V0LAogICAgICAgICAgc291cmNlT2JqZWN0PXNyY19wYXRoLAogICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ9ZGVzdF9idWNrZXQsCiAgICAgICAgICBkZXN0aW5hdGlvbk9iamVjdD1kZXN0X3BhdGgpCiAgICAgIGJhdGNoX3JlcXVlc3QuQWRkKHNlbGYuY2xpZW50Lm9iamVjdHMsICdDb3B5JywgcmVxdWVzdCkKICAgIGFwaV9jYWxscyA9IGJhdGNoX3JlcXVlc3QuRXhlY3V0ZShzZWxmLmNsaWVudC5faHR0cCkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHJlc3VsdF9zdGF0dXNlcyA9IFtdCiAgICBmb3IgaSwgYXBpX2NhbGwgaW4gZW51bWVyYXRlKGFwaV9jYWxscyk6CiAgICAgIHNyYywgZGVzdCA9IHNyY19kZXN0X3BhaXJzW2ldCiAgICAgIGV4Y2VwdGlvbiA9IE5vbmUKICAgICAgaWYgYXBpX2NhbGwuaXNfZXJyb3I6CiAgICAgICAgZXhjZXB0aW9uID0gYXBpX2NhbGwuZXhjZXB0aW9uCiAgICAgICAgIyBUcmFuc2xhdGUgNDA0IHRvIHRoZSBhcHByb3ByaWF0ZSBub3QgZm91bmQgZXhjZXB0aW9uLgogICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpIGFuZCBleGNlcHRpb24uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICAgZXhjZXB0aW9uID0gKAogICAgICAgICAgICAgIEdjc0lPRXJyb3IoZXJybm8uRU5PRU5ULCAnU291cmNlIGZpbGUgbm90IGZvdW5kOiAlcycgJSBzcmMpKQogICAgICByZXN1bHRfc3RhdHVzZXMuYXBwZW5kKChzcmMsIGRlc3QsIGV4Y2VwdGlvbikpCiAgICByZXR1cm4gcmVzdWx0X3N0YXR1c2VzCgogICMgV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVjb3JhdGUgdGhpcyBtZXRob2Qgd2l0aCBhIHJldHJ5LCBzaW5jZSB0aGUKICAjIHVuZGVybHlpbmcgY29weSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgaWRlbXBvdGVudCBvcGVyYXRpb25zCiAgIyBwcm90ZWN0ZWQgYnkgcmV0cnkgZGVjb3JhdG9ycy4KICBkZWYgY29weXRyZWUoc2VsZiwgc3JjLCBkZXN0KToKICAgICIiIlJlbmFtZXMgdGhlIGdpdmVuIEdDUyAiZGlyZWN0b3J5IiByZWN1cnNpdmVseSBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyYzogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+Ly4KICAgICAgZGVzdDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+Ly4KICAgICIiIgogICAgYXNzZXJ0IHNyYy5lbmRzd2l0aCgnLycpCiAgICBhc3NlcnQgZGVzdC5lbmRzd2l0aCgnLycpCiAgICBmb3IgZW50cnkgaW4gc2VsZi5nbG9iKHNyYyArICcqJyk6CiAgICAgIHJlbF9wYXRoID0gZW50cnlbbGVuKHNyYyk6XQogICAgICBzZWxmLmNvcHkoZW50cnksIGRlc3QgKyByZWxfcGF0aCkKCiAgIyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZWNvcmF0ZSB0aGlzIG1ldGhvZCB3aXRoIGEgcmV0cnksIHNpbmNlIHRoZQogICMgdW5kZXJseWluZyBjb3B5IGFuZCBkZWxldGUgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBpZGVtcG90ZW50IG9wZXJhdGlvbnMKICAjIHByb3RlY3RlZCBieSByZXRyeSBkZWNvcmF0b3JzLgogIGRlZiByZW5hbWUoc2VsZiwgc3JjLCBkZXN0KToKICAgICIiIlJlbmFtZXMgdGhlIGdpdmVuIEdDUyBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi4KICAgICAgZGVzdDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBzZWxmLmNvcHkoc3JjLCBkZXN0KQogICAgc2VsZi5kZWxldGUoc3JjKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBleGlzdHMuCgogICAgQXJnczoKICAgICAgcGF0aDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHRyeToKICAgICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgICAgYnVja2V0PWJ1Y2tldCwgb2JqZWN0PW9iamVjdF9wYXRoKQogICAgICBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KSAgIyBtZXRhZGF0YQogICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBodHRwX2Vycm9yOgogICAgICBpZiBodHRwX2Vycm9yLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAjIEhUVFAgNDA0IGluZGljYXRlcyB0aGF0IHRoZSBmaWxlIGRpZCBub3QgZXhpc3QKICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgZWxzZToKICAgICAgICAjIFdlIHJlLXJhaXNlIGFsbCBvdGhlciBleGNlcHRpb25zCiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBzaXplKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gZ2xvYiBleHBhbnNpb24uIEhlbmNlIHRoZSBnaXZlbiBwYXRoIG11c3QgYmUKICAgIGZvciBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFJldHVybnM6IHNpemUgb2YgdGhlIEdDUyBvYmplY3QgaW4gYnl0ZXMuCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgIHJldHVybiBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KS5zaXplCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgc2l6ZV9vZl9maWxlc19pbl9nbG9iKHNlbGYsIHBhdHRlcm4sIGxpbWl0PU5vbmUpOgogICAgIiIiUmV0dXJucyB0aGUgc2l6ZSBvZiBhbGwgdGhlIGZpbGVzIGluIHRoZSBnbG9iIGFzIGEgZGljdGlvbmFyeQoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm46IGEgZmlsZSBwYXRoIHBhdHRlcm4gdGhhdCByZWFkcyB0aGUgc2l6ZSBvZiBhbGwgdGhlIGZpbGVzCiAgICAiIiIKICAgIGJ1Y2tldCwgbmFtZV9wYXR0ZXJuID0gcGFyc2VfZ2NzX3BhdGgocGF0dGVybikKICAgICMgR2V0IHRoZSBwcmVmaXggd2l0aCB3aGljaCB3ZSBjYW4gbGlzdCBvYmplY3RzIGluIHRoZSBnaXZlbiBidWNrZXQuCiAgICBwcmVmaXggPSByZS5tYXRjaCgnXlteWyo/XSonLCBuYW1lX3BhdHRlcm4pLmdyb3VwKDApCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0xpc3RSZXF1ZXN0KGJ1Y2tldD1idWNrZXQsIHByZWZpeD1wcmVmaXgpCiAgICBmaWxlX3NpemVzID0ge30KICAgIGNvdW50ZXIgPSAwCiAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgIGxvZ2dpbmcuaW5mbygiU3RhcnRpbmcgdGhlIHNpemUgZXN0aW1hdGlvbiBvZiB0aGUgaW5wdXQiKQogICAgd2hpbGUgVHJ1ZToKICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5vYmplY3RzLkxpc3QocmVxdWVzdCkKICAgICAgZm9yIGl0ZW0gaW4gcmVzcG9uc2UuaXRlbXM6CiAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGl0ZW0ubmFtZSwgbmFtZV9wYXR0ZXJuKToKICAgICAgICAgIGZpbGVfbmFtZSA9ICdnczovLyVzLyVzJyAlIChpdGVtLmJ1Y2tldCwgaXRlbS5uYW1lKQogICAgICAgICAgZmlsZV9zaXplc1tmaWxlX25hbWVdID0gaXRlbS5zaXplCiAgICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgY291bnRlciA+PSBsaW1pdDoKICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgY291bnRlciAlIDEwMDAwID09IDA6CiAgICAgICAgICBsb2dnaW5nLmluZm8oIkZpbmlzaGVkIGNvbXB1dGluZyBzaXplIG9mOiAlcyBmaWxlcyIsIGxlbihmaWxlX3NpemVzKSkKICAgICAgaWYgcmVzcG9uc2UubmV4dFBhZ2VUb2tlbjoKICAgICAgICByZXF1ZXN0LnBhZ2VUb2tlbiA9IHJlc3BvbnNlLm5leHRQYWdlVG9rZW4KICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKGZpbGVfc2l6ZXMpID49IGxpbWl0OgogICAgICAgICAgYnJlYWsKICAgICAgZWxzZToKICAgICAgICBicmVhawogICAgbG9nZ2luZy5pbmZvKAogICAgICAgICJGaW5pc2hlZCB0aGUgc2l6ZSBlc3RpbWF0aW9uIG9mIHRoZSBpbnB1dCBhdCAlcyBmaWxlcy4gIiArXAogICAgICAgICJFc3RpbWF0aW9uIHRvb2sgJXMgc2Vjb25kcyIsIGNvdW50ZXIsIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkKICAgIHJldHVybiBmaWxlX3NpemVzCgoKIyBUT0RPOiBDb25zaWRlciB1c2luZyBjU3RyaW5nSU8gaW5zdGVhZCBvZiBidWZmZXJzIGFuZCBkYXRhX2xpc3RzIHdoZW4gcmVhZGluZy4KY2xhc3MgR2NzQnVmZmVyZWRSZWFkZXIob2JqZWN0KToKICAiIiJBIGNsYXNzIGZvciByZWFkaW5nIEdvb2dsZSBDbG91ZCBTdG9yYWdlIGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgY2xpZW50LAogICAgICAgICAgICAgICBwYXRoLAogICAgICAgICAgICAgICBtb2RlPSdyJywKICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9SRUFEX0JVRkZFUl9TSVpFKToKICAgIHNlbGYuY2xpZW50ID0gY2xpZW50CiAgICBzZWxmLnBhdGggPSBwYXRoCiAgICBzZWxmLmJ1Y2tldCwgc2VsZi5uYW1lID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHNlbGYubW9kZSA9IG1vZGUKICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQoKICAgICMgR2V0IG9iamVjdCBzdGF0ZS4KICAgIHNlbGYuZ2V0X3JlcXVlc3QgPSAoc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgYnVja2V0PXNlbGYuYnVja2V0LCBvYmplY3Q9c2VsZi5uYW1lKSkKICAgIHRyeToKICAgICAgbWV0YWRhdGEgPSBzZWxmLl9nZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYuZ2V0X3JlcXVlc3QpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGh0dHBfZXJyb3I6CiAgICAgIGlmIGh0dHBfZXJyb3Iuc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRU5PRU5ULCAnTm90IGZvdW5kOiAlcycgJSBzZWxmLnBhdGgpCiAgICAgIGVsc2U6CiAgICAgICAgbG9nZ2luZy5lcnJvcignSFRUUCBlcnJvciB3aGlsZSByZXF1ZXN0aW5nIGZpbGUgJXM6ICVzJywgc2VsZi5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgaHR0cF9lcnJvcikKICAgICAgICByYWlzZQogICAgc2VsZi5zaXplID0gbWV0YWRhdGEuc2l6ZQoKICAgICMgRW5zdXJlIHJlYWQgaXMgZnJvbSBmaWxlIG9mIHRoZSBjb3JyZWN0IGdlbmVyYXRpb24uCiAgICBzZWxmLmdldF9yZXF1ZXN0LmdlbmVyYXRpb24gPSBtZXRhZGF0YS5nZW5lcmF0aW9uCgogICAgIyBJbml0aWFsaXplIHJlYWQgYnVmZmVyIHN0YXRlLgogICAgc2VsZi5kb3dubG9hZF9zdHJlYW0gPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgc2VsZi5kb3dubG9hZGVyID0gdHJhbnNmZXIuRG93bmxvYWQoCiAgICAgICAgc2VsZi5kb3dubG9hZF9zdHJlYW0sIGF1dG9fdHJhbnNmZXI9RmFsc2UsIGNodW5rc2l6ZT1zZWxmLmJ1ZmZlcl9zaXplKQogICAgc2VsZi5jbGllbnQub2JqZWN0cy5HZXQoc2VsZi5nZXRfcmVxdWVzdCwgZG93bmxvYWQ9c2VsZi5kb3dubG9hZGVyKQogICAgc2VsZi5wb3NpdGlvbiA9IDAKICAgIHNlbGYuYnVmZmVyID0gJycKICAgIHNlbGYuYnVmZmVyX3N0YXJ0X3Bvc2l0aW9uID0gMAogICAgc2VsZi5jbG9zZWQgPSBGYWxzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9nZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYsIGdldF9yZXF1ZXN0KToKICAgIHJldHVybiBzZWxmLmNsaWVudC5vYmplY3RzLkdldChnZXRfcmVxdWVzdCkKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgIiIiUmVhZCBvbmUgbGluZSBkZWxpbWl0ZWQgYnkgJ1xcbicgZnJvbSB0aGUgZmlsZS4KICAgICIiIgogICAgcmV0dXJuIG5leHQoc2VsZikKCiAgZGVmIG5leHQoc2VsZik6CiAgICAiIiJSZWFkIG9uZSBsaW5lIGRlbGltaXRlZCBieSAnXFxuJyBmcm9tIHRoZSBmaWxlLgogICAgIiIiCiAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCiAgICBpZiBub3QgbGluZToKICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgcmV0dXJuIGxpbmUKCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAiIiJSZWFkIGRhdGEgZnJvbSBhIEdDUyBmaWxlLgoKICAgIEFyZ3M6CiAgICAgIHNpemU6IE51bWJlciBvZiBieXRlcyB0byByZWFkLiBBY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaXMgYWx3YXlzCiAgICAgICAgICAgIGVxdWFsIHRvIHNpemUgdW5sZXNzIEVPRiBpcyByZWFjaGVkLiBJZiBzaXplIGlzIG5lZ2F0aXZlIG9yCiAgICAgICAgICAgIHVuc3BlY2lmaWVkLCByZWFkIHRoZSBlbnRpcmUgZmlsZS4KCiAgICBSZXR1cm5zOgogICAgICBkYXRhIHJlYWQgYXMgc3RyLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogV2hlbiB0aGlzIGJ1ZmZlciBpcyBjbG9zZWQuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9yZWFkX2lubmVyKHNpemU9c2l6ZSwgcmVhZGxpbmU9RmFsc2UpCgogIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKICAgICIiIlJlYWQgb25lIGxpbmUgZGVsaW1pdGVkIGJ5ICdcXG4nIGZyb20gdGhlIGZpbGUuCgogICAgTWltaWNzIGJlaGF2aW9yIG9mIHRoZSByZWFkbGluZSgpIG1ldGhvZCBvbiBzdGFuZGFyZCBmaWxlIG9iamVjdHMuCgogICAgQSB0cmFpbGluZyBuZXdsaW5lIGNoYXJhY3RlciBpcyBrZXB0IGluIHRoZSBzdHJpbmcuIEl0IG1heSBiZSBhYnNlbnQgd2hlbiBhCiAgICBmaWxlIGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUuIElmIHRoZSBzaXplIGFyZ3VtZW50IGlzIG5vbi1uZWdhdGl2ZSwKICAgIGl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBzdHJpbmcgc2l6ZSAoY291bnRpbmcgdGhlIG5ld2xpbmUpIHRvIHJldHVybi4KICAgIEEgbmVnYXRpdmUgc2l6ZSBpcyB0aGUgc2FtZSBhcyB1bnNwZWNpZmllZC4gRW1wdHkgc3RyaW5nIGlzIHJldHVybmVkCiAgICBvbmx5IHdoZW4gRU9GIGlzIGVuY291bnRlcmVkIGltbWVkaWF0ZWx5LgoKICAgIEFyZ3M6CiAgICAgIHNpemU6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIElmIG5vdCBzcGVjaWZpZWQsIHJlYWRsaW5lIHN0b3BzCiAgICAgICAgb25seSBvbiAnXFxuJyBvciBFT0YuCgogICAgUmV0dXJuczoKICAgICAgVGhlIGRhdGEgcmVhZCBhcyBhIHN0cmluZy4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IFdoZW4gdGhpcyBidWZmZXIgaXMgY2xvc2VkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcmVhZF9pbm5lcihzaXplPXNpemUsIHJlYWRsaW5lPVRydWUpCgogIGRlZiBfcmVhZF9pbm5lcihzZWxmLCBzaXplPS0xLCByZWFkbGluZT1GYWxzZSk6CiAgICAiIiJTaGFyZWQgaW1wbGVtZW50YXRpb24gb2YgcmVhZCgpIGFuZCByZWFkbGluZSgpLiIiIgogICAgc2VsZi5fY2hlY2tfb3BlbigpCiAgICBpZiBub3Qgc2VsZi5fcmVtYWluaW5nKCk6CiAgICAgIHJldHVybiAnJwoKICAgICMgUHJlcGFyZSB0byByZWFkLgogICAgZGF0YV9saXN0ID0gW10KICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgc2l6ZSA9IC0xCiAgICB0b19yZWFkID0gbWluKHNpemUsIHNlbGYuX3JlbWFpbmluZygpKQogICAgaWYgdG9fcmVhZCA8IDA6CiAgICAgIHRvX3JlYWQgPSBzZWxmLl9yZW1haW5pbmcoKQogICAgYnJlYWtfYWZ0ZXIgPSBGYWxzZQoKICAgIHdoaWxlIHRvX3JlYWQgPiAwOgogICAgICAjIElmIHdlIGhhdmUgZXhoYXVzdGVkIHRoZSBidWZmZXIsIGdldCB0aGUgbmV4dCBzZWdtZW50LgogICAgICAjIFRPRE8oY2N5KTogV2Ugc2hvdWxkIGNvbnNpZGVyIHByZWZldGNoaW5nIHRoZSBuZXh0IGJsb2NrIGluIGFub3RoZXIKICAgICAgIyB0aHJlYWQuCiAgICAgIHNlbGYuX2ZldGNoX25leHRfaWZfYnVmZmVyX2V4aGF1c3RlZCgpCgogICAgICAjIERldGVybWluZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIGJ1ZmZlci4KICAgICAgYnVmZmVyX2J5dGVzX3JlYWQgPSBzZWxmLnBvc2l0aW9uIC0gc2VsZi5idWZmZXJfc3RhcnRfcG9zaXRpb24KICAgICAgYnl0ZXNfdG9fcmVhZF9mcm9tX2J1ZmZlciA9IG1pbigKICAgICAgICAgIGxlbihzZWxmLmJ1ZmZlcikgLSBidWZmZXJfYnl0ZXNfcmVhZCwgdG9fcmVhZCkKCiAgICAgICMgSWYgcmVhZGxpbmUgaXMgc2V0LCB3ZSBvbmx5IHdhbnQgdG8gcmVhZCB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBuZXh0CiAgICAgICMgbmV3bGluZSBjaGFyYWN0ZXIuCiAgICAgIGlmIHJlYWRsaW5lOgogICAgICAgIG5leHRfbmV3bGluZV9wb3NpdGlvbiA9IHNlbGYuYnVmZmVyLmZpbmQoJ1xuJywgYnVmZmVyX2J5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5idWZmZXIpKQogICAgICAgIGlmIG5leHRfbmV3bGluZV9wb3NpdGlvbiAhPSAtMToKICAgICAgICAgIGJ5dGVzX3RvX3JlYWRfZnJvbV9idWZmZXIgPSAoCiAgICAgICAgICAgICAgMSArIG5leHRfbmV3bGluZV9wb3NpdGlvbiAtIGJ1ZmZlcl9ieXRlc19yZWFkKQogICAgICAgICAgYnJlYWtfYWZ0ZXIgPSBUcnVlCgogICAgICAjIFJlYWQgYnl0ZXMuCiAgICAgIGRhdGFfbGlzdC5hcHBlbmQoc2VsZi5idWZmZXJbYnVmZmVyX2J5dGVzX3JlYWQ6YnVmZmVyX2J5dGVzX3JlYWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3RvX3JlYWRfZnJvbV9idWZmZXJdKQogICAgICBzZWxmLnBvc2l0aW9uICs9IGJ5dGVzX3RvX3JlYWRfZnJvbV9idWZmZXIKICAgICAgdG9fcmVhZCAtPSBieXRlc190b19yZWFkX2Zyb21fYnVmZmVyCgogICAgICBpZiBicmVha19hZnRlcjoKICAgICAgICBicmVhawoKICAgIHJldHVybiAnJy5qb2luKGRhdGFfbGlzdCkKCiAgZGVmIF9mZXRjaF9uZXh0X2lmX2J1ZmZlcl9leGhhdXN0ZWQoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5idWZmZXIgb3IgKAogICAgICAgIHNlbGYuYnVmZmVyX3N0YXJ0X3Bvc2l0aW9uICsgbGVuKHNlbGYuYnVmZmVyKSA8PSBzZWxmLnBvc2l0aW9uKToKICAgICAgYnl0ZXNfdG9fcmVxdWVzdCA9IG1pbihzZWxmLl9yZW1haW5pbmcoKSwgc2VsZi5idWZmZXJfc2l6ZSkKICAgICAgc2VsZi5idWZmZXJfc3RhcnRfcG9zaXRpb24gPSBzZWxmLnBvc2l0aW9uCiAgICAgIHRyeToKICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfc2VnbWVudChzZWxmLnBvc2l0aW9uLCBieXRlc190b19yZXF1ZXN0KQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICB0YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKICAgICAgICBsb2dnaW5nLmVycm9yKAogICAgICAgICAgICAoJ0V4Y2VwdGlvbiB3aGlsZSBmZXRjaGluZyAlZCBieXRlcyBmcm9tIHBvc2l0aW9uICVkIG9mICVzOiAnCiAgICAgICAgICAgICAnJXNcbiVzJyksCiAgICAgICAgICAgIGJ5dGVzX3RvX3JlcXVlc3QsIHNlbGYucG9zaXRpb24sIHNlbGYucGF0aCwgZSwgdGIpCiAgICAgICAgcmFpc2UKCiAgICAgIHNlbGYuYnVmZmVyID0gcmVzdWx0CiAgICAgIHJldHVybgoKICBkZWYgX3JlbWFpbmluZyhzZWxmKToKICAgIHJldHVybiBzZWxmLnNpemUgLSBzZWxmLnBvc2l0aW9uCgogIGRlZiBjbG9zZShzZWxmKToKICAgICIiIkNsb3NlIHRoZSBjdXJyZW50IEdDUyBmaWxlLiIiIgogICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAgICBzZWxmLmRvd25sb2FkX3N0cmVhbSA9IE5vbmUKICAgIHNlbGYuZG93bmxvYWRlciA9IE5vbmUKICAgIHNlbGYuYnVmZmVyID0gTm9uZQoKICBkZWYgX2dldF9zZWdtZW50KHNlbGYsIHN0YXJ0LCBzaXplKToKICAgICIiIkdldCB0aGUgZ2l2ZW4gc2VnbWVudCBvZiB0aGUgY3VycmVudCBHQ1MgZmlsZS4iIiIKICAgIGlmIHNpemUgPT0gMDoKICAgICAgcmV0dXJuICcnCiAgICAjIFRoZSBvYmplY3RzIHNlbGYuZG93bmxvYWRlciBhbmQgc2VsZi5kb3dubG9hZF9zdHJlYW0gbWF5IGJlIHJlY3JlYXRlZCBpZgogICAgIyB0aGlzIGNhbGwgdGltZXMgb3V0OyB3ZSBzYXZlIHRoZW0gbG9jYWxseSB0byBhdm9pZCBhbnkgdGhyZWFkaW5nIGlzc3Vlcy4KICAgIGRvd25sb2FkZXIgPSBzZWxmLmRvd25sb2FkZXIKICAgIGRvd25sb2FkX3N0cmVhbSA9IHNlbGYuZG93bmxvYWRfc3RyZWFtCiAgICBlbmQgPSBzdGFydCArIHNpemUgLSAxCiAgICBkb3dubG9hZGVyLkdldFJhbmdlKHN0YXJ0LCBlbmQpCiAgICB2YWx1ZSA9IGRvd25sb2FkX3N0cmVhbS5nZXR2YWx1ZSgpCiAgICAjIENsZWFyIHRoZSBjU3RyaW5nSU8gb2JqZWN0IGFmdGVyIHdlJ3ZlIHJlYWQgaXRzIGNvbnRlbnRzLgogICAgZG93bmxvYWRfc3RyZWFtLnRydW5jYXRlKDApCiAgICBhc3NlcnQgbGVuKHZhbHVlKSA9PSBzaXplCiAgICByZXR1cm4gdmFsdWUKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5jbG9zZSgpCgogIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPW9zLlNFRUtfU0VUKToKICAgICIiIlNldCB0aGUgZmlsZSdzIGN1cnJlbnQgb2Zmc2V0LgoKICAgIE5vdGUgaWYgdGhlIG5ldyBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kLCBpdCBpcyBhZGp1c3RlZCB0byBlaXRoZXIgMCBvciBFT0YuCgogICAgQXJnczoKICAgICAgb2Zmc2V0OiBzZWVrIG9mZnNldCBhcyBudW1iZXIuCiAgICAgIHdoZW5jZTogc2VlayBtb2RlLiBTdXBwb3J0ZWQgbW9kZXMgYXJlIG9zLlNFRUtfU0VUIChhYnNvbHV0ZSBzZWVrKSwKICAgICAgICBvcy5TRUVLX0NVUiAoc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiksIGFuZCBvcy5TRUVLX0VORAogICAgICAgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBlbmQsIG9mZnNldCBzaG91bGQgYmUgbmVnYXRpdmUpLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogV2hlbiB0aGlzIGJ1ZmZlciBpcyBjbG9zZWQuCiAgICAgIFZhbHVlRXJyb3I6IFdoZW4gd2hlbmNlIGlzIGludmFsaWQuCiAgICAiIiIKICAgIHNlbGYuX2NoZWNrX29wZW4oKQoKICAgIHNlbGYuYnVmZmVyID0gJycKICAgIHNlbGYuYnVmZmVyX3N0YXJ0X3Bvc2l0aW9uID0gLTEKCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19TRVQ6CiAgICAgIHNlbGYucG9zaXRpb24gPSBvZmZzZXQKICAgIGVsaWYgd2hlbmNlID09IG9zLlNFRUtfQ1VSOgogICAgICBzZWxmLnBvc2l0aW9uICs9IG9mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgIHNlbGYucG9zaXRpb24gPSBzZWxmLnNpemUgKyBvZmZzZXQKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1doZW5jZSBtb2RlICVyIGlzIGludmFsaWQuJyAlIHdoZW5jZSkKCiAgICBzZWxmLnBvc2l0aW9uID0gbWluKHNlbGYucG9zaXRpb24sIHNlbGYuc2l6ZSkKICAgIHNlbGYucG9zaXRpb24gPSBtYXgoc2VsZi5wb3NpdGlvbiwgMCkKCiAgZGVmIHRlbGwoc2VsZik6CiAgICAiIiJUZWxsIHRoZSBmaWxlJ3MgY3VycmVudCBvZmZzZXQuCgogICAgUmV0dXJuczoKICAgICAgY3VycmVudCBvZmZzZXQgaW4gcmVhZGluZyB0aGlzIGZpbGUuCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yOiBXaGVuIHRoaXMgYnVmZmVyIGlzIGNsb3NlZC4KICAgICIiIgogICAgc2VsZi5fY2hlY2tfb3BlbigpCiAgICByZXR1cm4gc2VsZi5wb3NpdGlvbgoKICBkZWYgX2NoZWNrX29wZW4oc2VsZik6CiAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgcmFpc2UgSU9FcnJvcignQnVmZmVyIGlzIGNsb3NlZC4nKQoKICBkZWYgc2Vla2FibGUoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgd3JpdGFibGUoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCgojIFRPRE86IENvbnNpZGVyIHVzaW5nIGNTdHJpbmdJTyBpbnN0ZWFkIG9mIGJ1ZmZlcnMgYW5kIGRhdGFfbGlzdHMgd2hlbiByZWFkaW5nCiMgYW5kIHdyaXRpbmcuCmNsYXNzIEdjc0J1ZmZlcmVkV3JpdGVyKG9iamVjdCk6CiAgIiIiQSBjbGFzcyBmb3Igd3JpdGluZyBHb29nbGUgQ2xvdWQgU3RvcmFnZSBmaWxlcy4iIiIKCiAgY2xhc3MgUGlwZVN0cmVhbShvYmplY3QpOgogICAgIiIiQSBjbGFzcyB0aGF0IHByZXNlbnRzIGEgcGlwZSBjb25uZWN0aW9uIGFzIGEgcmVhZGFibGUgc3RyZWFtLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3BpcGUpOgogICAgICBzZWxmLmNvbm4gPSByZWN2X3BpcGUKICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQogICAgICBzZWxmLnBvc2l0aW9uID0gMAogICAgICBzZWxmLnJlbWFpbmluZyA9ICcnCgogICAgZGVmIHJlYWQoc2VsZiwgc2l6ZSk6CiAgICAgICIiIlJlYWQgZGF0YSBmcm9tIHRoZSB3cmFwcGVkIHBpcGUgY29ubmVjdGlvbi4KCiAgICAgIEFyZ3M6CiAgICAgICAgc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIEFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyBhbHdheXMKICAgICAgICAgICAgICBlcXVhbCB0byBzaXplIHVubGVzcyBFT0YgaXMgcmVhY2hlZC4KCiAgICAgIFJldHVybnM6CiAgICAgICAgZGF0YSByZWFkIGFzIHN0ci4KICAgICAgIiIiCiAgICAgIGRhdGFfbGlzdCA9IFtdCiAgICAgIGJ5dGVzX3JlYWQgPSAwCiAgICAgIHdoaWxlIGJ5dGVzX3JlYWQgPCBzaXplOgogICAgICAgIGJ5dGVzX2Zyb21fcmVtYWluaW5nID0gbWluKHNpemUgLSBieXRlc19yZWFkLCBsZW4oc2VsZi5yZW1haW5pbmcpKQogICAgICAgIGRhdGFfbGlzdC5hcHBlbmQoc2VsZi5yZW1haW5pbmdbMDpieXRlc19mcm9tX3JlbWFpbmluZ10pCiAgICAgICAgc2VsZi5yZW1haW5pbmcgPSBzZWxmLnJlbWFpbmluZ1tieXRlc19mcm9tX3JlbWFpbmluZzpdCiAgICAgICAgc2VsZi5wb3NpdGlvbiArPSBieXRlc19mcm9tX3JlbWFpbmluZwogICAgICAgIGJ5dGVzX3JlYWQgKz0gYnl0ZXNfZnJvbV9yZW1haW5pbmcKICAgICAgICBpZiBub3Qgc2VsZi5yZW1haW5pbmc6CiAgICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmVtYWluaW5nID0gc2VsZi5jb25uLnJlY3ZfYnl0ZXMoKQogICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgogICAgICAgICAgICBicmVhawogICAgICByZXR1cm4gJycuam9pbihkYXRhX2xpc3QpCgogICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICIiIlRlbGwgdGhlIGZpbGUncyBjdXJyZW50IG9mZnNldC4KCiAgICAgIFJldHVybnM6CiAgICAgICAgY3VycmVudCBvZmZzZXQgaW4gcmVhZGluZyB0aGlzIGZpbGUuCgogICAgICBSYWlzZXM6CiAgICAgICAgSU9FcnJvcjogV2hlbiB0aGlzIHN0cmVhbSBpcyBjbG9zZWQuCiAgICAgICIiIgogICAgICBzZWxmLl9jaGVja19vcGVuKCkKICAgICAgcmV0dXJuIHNlbGYucG9zaXRpb24KCiAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAgICMgVGhlIGFwaXRvb2xzLmJhc2UucHkudHJhbnNmZXIuVXBsb2FkIGNsYXNzIGluc2lzdHMgb24gc2Vla2luZyB0byB0aGUgZW5kCiAgICAgICMgb2YgYSBzdHJlYW0gdG8gZG8gYSBjaGVjayBiZWZvcmUgY29tcGxldGluZyBhbiB1cGxvYWQsIHNvIHdlIG11c3QgaGF2ZQogICAgICAjIHRoaXMgbm8tb3AgbWV0aG9kIGhlcmUgaW4gdGhhdCBjYXNlLgogICAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQgYW5kIG9mZnNldCA9PSAwOgogICAgICAgIHJldHVybgogICAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX1NFVCBhbmQgb2Zmc2V0ID09IHNlbGYucG9zaXRpb246CiAgICAgICAgcmV0dXJuCiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgICBkZWYgX2NoZWNrX29wZW4oc2VsZik6CiAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgIHJhaXNlIElPRXJyb3IoJ1N0cmVhbSBpcyBjbG9zZWQuJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGNsaWVudCwKICAgICAgICAgICAgICAgcGF0aCwKICAgICAgICAgICAgICAgbW9kZT0ndycsCiAgICAgICAgICAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk6CiAgICBzZWxmLmNsaWVudCA9IGNsaWVudAogICAgc2VsZi5wYXRoID0gcGF0aAogICAgc2VsZi5tb2RlID0gbW9kZQogICAgc2VsZi5idWNrZXQsIHNlbGYubmFtZSA9IHBhcnNlX2djc19wYXRoKHBhdGgpCgogICAgc2VsZi5jbG9zZWQgPSBGYWxzZQogICAgc2VsZi5wb3NpdGlvbiA9IDAKCiAgICAjIEEgc21hbGwgYnVmZmVyIHRvIGF2b2lkIENQVS1oZWF2eSBwZXItd3JpdGUgcGlwZSBjYWxscy4KICAgIHNlbGYud3JpdGVfYnVmZmVyID0gYnl0ZWFycmF5KCkKICAgIHNlbGYud3JpdGVfYnVmZmVyX3NpemUgPSAxMjggKiAxMDI0CgogICAgIyBTZXQgdXAgY29tbXVuaWNhdGlvbiB3aXRoIHVwbG9hZGluZyB0aHJlYWQuCiAgICBwYXJlbnRfY29ubiwgY2hpbGRfY29ubiA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKICAgIHNlbGYuY2hpbGRfY29ubiA9IGNoaWxkX2Nvbm4KICAgIHNlbGYuY29ubiA9IHBhcmVudF9jb25uCgogICAgIyBTZXQgdXAgdXBsb2FkZXIuCiAgICBzZWxmLmluc2VydF9yZXF1ZXN0ID0gKHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNJbnNlcnRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1zZWxmLmJ1Y2tldCwgbmFtZT1zZWxmLm5hbWUpKQogICAgc2VsZi51cGxvYWQgPSB0cmFuc2Zlci5VcGxvYWQoCiAgICAgICAgR2NzQnVmZmVyZWRXcml0ZXIuUGlwZVN0cmVhbShjaGlsZF9jb25uKSwKICAgICAgICBtaW1lX3R5cGUsCiAgICAgICAgY2h1bmtzaXplPVdSSVRFX0NIVU5LX1NJWkUpCiAgICBzZWxmLnVwbG9hZC5zdHJhdGVneSA9IHRyYW5zZmVyLlJFU1VNQUJMRV9VUExPQUQKCiAgICAjIFN0YXJ0IHVwbG9hZGluZyB0aHJlYWQuCiAgICBzZWxmLnVwbG9hZF90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zdGFydF91cGxvYWQpCiAgICBzZWxmLnVwbG9hZF90aHJlYWQuZGFlbW9uID0gVHJ1ZQogICAgc2VsZi51cGxvYWRfdGhyZWFkLmxhc3RfZXJyb3IgPSBOb25lCiAgICBzZWxmLnVwbG9hZF90aHJlYWQuc3RhcnQoKQoKICAjIFRPRE8oc2lsdml1Yyk6IFJlZmFjdG9yIHNvIHRoYXQgcmV0cnkgbG9naWMgY2FuIGJlIGFwcGxpZWQuCiAgIyBUaGVyZSBpcyByZXRyeSBsb2dpYyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc2ZlciBsaWJyYXJ5IGJ1dCB3ZSBzaG91bGQgbWFrZQogICMgaXQgbW9yZSBleHBsaWNpdCBzbyB3ZSBjYW4gY29udHJvbCB0aGUgcmV0cnkgcGFyYW1ldGVycy4KICBAcmV0cnkubm9fcmV0cmllcyAgIyBVc2luZyBub19yZXRyaWVzIG1hcmtzIHRoaXMgYXMgYW4gaW50ZWdyYXRpb24gcG9pbnQuCiAgZGVmIF9zdGFydF91cGxvYWQoc2VsZik6CiAgICAjIFRoaXMgc3RhcnRzIHRoZSB1cGxvYWRlciB0aHJlYWQuICBXZSBhcmUgZm9yY2VkIHRvIHJ1biB0aGUgdXBsb2FkZXIgaW4KICAgICMgYW5vdGhlciB0aHJlYWQgYmVjYXVzZSB0aGUgYXBpdG9vbHMgdXBsb2FkZXIgaW5zaXN0cyBvbiB0YWtpbmcgYSBzdHJlYW0KICAgICMgYXMgaW5wdXQuIEhhcHBpbHksIHRoaXMgYWxzbyBtZWFucyB3ZSBnZXQgYXN5bmNocm9ub3VzIEkvTyB0byBHQ1MuCiAgICAjCiAgICAjIFRoZSB1cGxvYWRlciBieSBkZWZhdWx0IHRyYW5zZmVycyBkYXRhIGluIGNodW5rcyBvZiAxMDI0ICogMTAyNCBieXRlcyBhdAogICAgIyBhIHRpbWUsIGJ1ZmZlcmluZyB3cml0ZXMgdW50aWwgdGhhdCBzaXplIGlzIHJlYWNoZWQuCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50Lm9iamVjdHMuSW5zZXJ0KHNlbGYuaW5zZXJ0X3JlcXVlc3QsIHVwbG9hZD1zZWxmLnVwbG9hZCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICBsb2dnaW5nLmVycm9yKCdFcnJvciBpbiBfc3RhcnRfdXBsb2FkIHdoaWxlIGluc2VydGluZyBmaWxlICVzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRoLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICBzZWxmLnVwbG9hZF90aHJlYWQubGFzdF9lcnJvciA9IGUKICAgIGZpbmFsbHk6CiAgICAgIHNlbGYuY2hpbGRfY29ubi5jbG9zZSgpCgogIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKICAgICIiIldyaXRlIGRhdGEgdG8gYSBHQ1MgZmlsZS4KCiAgICBBcmdzOgogICAgICBkYXRhOiBkYXRhIHRvIHdyaXRlIGFzIHN0ci4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IFdoZW4gdGhpcyBidWZmZXIgaXMgY2xvc2VkLgogICAgIiIiCiAgICBzZWxmLl9jaGVja19vcGVuKCkKICAgIGlmIG5vdCBkYXRhOgogICAgICByZXR1cm4KICAgIHNlbGYud3JpdGVfYnVmZmVyLmV4dGVuZChkYXRhKQogICAgaWYgbGVuKHNlbGYud3JpdGVfYnVmZmVyKSA+IHNlbGYud3JpdGVfYnVmZmVyX3NpemU6CiAgICAgIHNlbGYuX2ZsdXNoX3dyaXRlX2J1ZmZlcigpCiAgICBzZWxmLnBvc2l0aW9uICs9IGxlbihkYXRhKQoKICBkZWYgZmx1c2goc2VsZik6CiAgICAiIiJGbHVzaGVzIGFueSBpbnRlcm5hbCBidWZmZXIgdG8gdGhlIHVuZGVybHlpbmcgR0NTIGZpbGUuIiIiCiAgICBzZWxmLl9jaGVja19vcGVuKCkKICAgIHNlbGYuX2ZsdXNoX3dyaXRlX2J1ZmZlcigpCgogIGRlZiB0ZWxsKHNlbGYpOgogICAgIiIiUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIHRvIHdyaXRlKCkgc28gZmFyLiIiIgogICAgcmV0dXJuIHNlbGYucG9zaXRpb24KCiAgZGVmIGNsb3NlKHNlbGYpOgogICAgIiIiQ2xvc2UgdGhlIGN1cnJlbnQgR0NTIGZpbGUuIiIiCiAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgbG9nZ2luZy53YXJuKCdDaGFubmVsIGZvciAlcyBpcyBub3Qgb3Blbi4nLCBzZWxmLnBhdGgpCiAgICAgIHJldHVybgoKICAgIHNlbGYuX2ZsdXNoX3dyaXRlX2J1ZmZlcigpCiAgICBzZWxmLmNsb3NlZCA9IFRydWUKICAgIHNlbGYuY29ubi5jbG9zZSgpCiAgICBzZWxmLnVwbG9hZF90aHJlYWQuam9pbigpCiAgICAjIENoZWNrIGZvciBleGNlcHRpb24gc2luY2UgdGhlIGxhc3QgX2ZsdXNoX3dyaXRlX2J1ZmZlcigpIGNhbGwuCiAgICBpZiBzZWxmLnVwbG9hZF90aHJlYWQubGFzdF9lcnJvcjoKICAgICAgcmFpc2Ugc2VsZi51cGxvYWRfdGhyZWFkLmxhc3RfZXJyb3IgICMgcHlsaW50OiBkaXNhYmxlPXJhaXNpbmctYmFkLXR5cGUKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5jbG9zZSgpCgogIGRlZiBfY2hlY2tfb3BlbihzZWxmKToKICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICByYWlzZSBJT0Vycm9yKCdCdWZmZXIgaXMgY2xvc2VkLicpCgogIGRlZiBzZWVrYWJsZShzZWxmKToKICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9mbHVzaF93cml0ZV9idWZmZXIoc2VsZik6CiAgICB0cnk6CiAgICAgIHNlbGYuY29ubi5zZW5kX2J5dGVzKGJ1ZmZlcihzZWxmLndyaXRlX2J1ZmZlcikpCiAgICAgIHNlbGYud3JpdGVfYnVmZmVyID0gYnl0ZWFycmF5KCkKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICBpZiBzZWxmLnVwbG9hZF90aHJlYWQubGFzdF9lcnJvcjoKICAgICAgICByYWlzZSBzZWxmLnVwbG9hZF90aHJlYWQubGFzdF9lcnJvciAgIyBweWxpbnQ6IGRpc2FibGU9cmFpc2luZy1iYWQtdHlwZQogICAgICBlbHNlOgogICAgICAgIHJhaXNlCn1ytQIAAChYHwAAAHByb3h5X2luZm9fZnJvbV9lbnZpcm9ubWVudF92YXJYAwAAAGRlZktZS22HWCYAAABHY3NCdWZmZXJlZFJlYWRlci5fZ2V0X29iamVjdF9tZXRhZGF0YVgDAAAAZGVmTfUBTfkBh1ghAAAAR2NzQnVmZmVyZWRXcml0ZXIuUGlwZVN0cmVhbS5yZWFkWAMAAABkZWZN2gJN8gKHWBoAAABHY3NCdWZmZXJlZFdyaXRlci5yZWFkYWJsZVgDAAAAZGVmTXsDTX0Dh1glAAAAR2NzQnVmZmVyZWRXcml0ZXIuX2ZsdXNoX3dyaXRlX2J1ZmZlclgDAAAAZGVmTYEDTYoDh1ghAAAAR2NzQnVmZmVyZWRXcml0ZXIuUGlwZVN0cmVhbS50ZWxsWAMAAABkZWZN8wJN/gKHWAoAAABHY3NJTy5zaXplWAMAAABkZWZNlQFNowGHWBcAAABHY3NCdWZmZXJlZFdyaXRlci5jbG9zZVgDAAAAZGVmTWADTW0Dh1gaAAAAR2NzQnVmZmVyZWRSZWFkZXIuX19pbml0X19YAwAAAGRlZk3PAU30AYdYGgAAAEdjc0J1ZmZlcmVkUmVhZGVyLl9fbmV4dF9fWAMAAABkZWZN/QFNAQKHWA4AAABwYXJzZV9nY3NfcGF0aFgDAAAAZGVmS39LhYdYGwAAAEdjc0lPLnNpemVfb2ZfZmlsZXNfaW5fZ2xvYlgDAAAAZGVmTaQBTckBh1ghAAAAR2NzQnVmZmVyZWRXcml0ZXIuUGlwZVN0cmVhbS5zZWVrWAMAAABkZWZN/wJNCAOHWBoAAABHY3NCdWZmZXJlZFJlYWRlci5fX2V4aXRfX1gDAAAAZGVmTY8CTZECh1gXAAAAR2NzQnVmZmVyZWRSZWFkZXIuY2xvc2VYAwAAAGRlZk11Ak17AodYHQAAAEdjc0J1ZmZlcmVkUmVhZGVyLl9yZWFkX2lubmVyWAMAAABkZWZNMQJNXwKHWBoAAABHY3NCdWZmZXJlZFdyaXRlci5fX2luaXRfX1gDAAAAZGVmTQ0DTTEDh1gaAAAAR2NzQnVmZmVyZWRSZWFkZXIucmVhZGxpbmVYAwAAAGRlZk0aAk0wAodYFgAAAEdjc0J1ZmZlcmVkUmVhZGVyLnRlbGxYAwAAAGRlZk2yAk29AodYEgAAAEdjc0lPLmRlbGV0ZV9iYXRjaFgDAAAAZGVmS/5NHgGHWBcAAABHY3NCdWZmZXJlZFdyaXRlci53cml0ZVgDAAAAZGVmTUYDTVYDh1gWAAAAR2NzQnVmZmVyZWRSZWFkZXIucmVhZFgDAAAAZGVmTQoCTRkCh1goAAAAR2NzQnVmZmVyZWRXcml0ZXIuUGlwZVN0cmVhbS5fY2hlY2tfb3BlblgDAAAAZGVmTQkDTQwDh1gOAAAAR2NzSU8uX19pbml0X19YAwAAAGRlZkukS6qHWAoAAABHY3NJT0Vycm9yWAUAAABjbGFzc0uHS4qHWBAAAABHY3NJTy5jb3B5X2JhdGNoWAMAAABkZWZNOwFNYQGHWAoAAABHY3NJTy5nbG9iWAMAAABkZWZLx0voh1gMAAAAZ2V0X25ld19odHRwWAMAAABkZWZLb0t9h1gfAAAAR2NzQnVmZmVyZWRXcml0ZXIuX3N0YXJ0X3VwbG9hZFgDAAAAZGVmTTUDTUUDh1gaAAAAR2NzQnVmZmVyZWRXcml0ZXIud3JpdGFibGVYAwAAAGRlZk1+A02AA4dYHQAAAEdjc0J1ZmZlcmVkV3JpdGVyLl9jaGVja19vcGVuWAMAAABkZWZNdANNdwOHWCUAAABHY3NCdWZmZXJlZFdyaXRlci5QaXBlU3RyZWFtLl9faW5pdF9fWAMAAABkZWZN1AJN2QKHWBYAAABHY3NCdWZmZXJlZFJlYWRlci5zZWVrWAMAAABkZWZNkgJNsQKHWBwAAABHY3NCdWZmZXJlZFJlYWRlci5fcmVtYWluaW5nWAMAAABkZWZNcgJNdAKHWA0AAABHY3NJTy5fX25ld19fWAMAAABkZWZLj0ujh1gMAAAAR2NzSU8uZGVsZXRlWAMAAABkZWZL6Uv7h1gKAAAAR2NzSU8ub3BlblgDAAAAZGVmS6tLxodYFwAAAEdjc0J1ZmZlcmVkV3JpdGVyLmZsdXNoWAMAAABkZWZNVwNNWwOHWBYAAABHY3NCdWZmZXJlZFJlYWRlci5uZXh0WAMAAABkZWZNAgJNCQKHWDEAAABHY3NCdWZmZXJlZFJlYWRlci5fZmV0Y2hfbmV4dF9pZl9idWZmZXJfZXhoYXVzdGVkWAMAAABkZWZNYAJNcQKHWBoAAABHY3NCdWZmZXJlZFJlYWRlci5fX2l0ZXJfX1gDAAAAZGVmTfoBTfwBh1gRAAAAR2NzQnVmZmVyZWRXcml0ZXJYBQAAAGNsYXNzTc4CTYoDh1gaAAAAR2NzQnVmZmVyZWRXcml0ZXIuc2Vla2FibGVYAwAAAGRlZk14A016A4dYGgAAAEdjc0J1ZmZlcmVkUmVhZGVyLnJlYWRhYmxlWAMAAABkZWZNxQJNxwKHWBsAAABHY3NCdWZmZXJlZFdyaXRlci5fX2VudGVyX19YAwAAAGRlZk1uA01wA4dYBQAAAEdjc0lPWAUAAABjbGFzc0uMTckBh1gMAAAAR2NzSU8ucmVuYW1lWAMAAABkZWZNdQFNfgGHWBoAAABHY3NCdWZmZXJlZFJlYWRlci53cml0YWJsZVgDAAAAZGVmTcgCTcoCh1gMAAAAR2NzSU8uZXhpc3RzWAMAAABkZWZNfwFNlAGHWBwAAABHY3NCdWZmZXJlZFdyaXRlci5QaXBlU3RyZWFtWAUAAABjbGFzc03RAk0MA4dYGgAAAEdjc0J1ZmZlcmVkUmVhZGVyLnNlZWthYmxlWAMAAABkZWZNwgJNxAKHWBoAAABHY3NCdWZmZXJlZFdyaXRlci5fX2V4aXRfX1gDAAAAZGVmTXEDTXMDh1gKAAAAR2NzSU8uY29weVgDAAAAZGVmTR8BTTgBh1gOAAAAR2NzSU8uY29weXRyZWVYAwAAAGRlZk1lAU1xAYdYFgAAAEdjc0J1ZmZlcmVkV3JpdGVyLnRlbGxYAwAAAGRlZk1cA01fA4dYHQAAAEdjc0J1ZmZlcmVkUmVhZGVyLl9jaGVja19vcGVuWAMAAABkZWZNvgJNwQKHWB4AAABHY3NCdWZmZXJlZFJlYWRlci5fZ2V0X3NlZ21lbnRYAwAAAGRlZk18Ak2LAodYGwAAAEdjc0J1ZmZlcmVkUmVhZGVyLl9fZW50ZXJfX1gDAAAAZGVmTYwCTY4Ch1gRAAAAR2NzQnVmZmVyZWRSZWFkZXJYBQAAAGNsYXNzTcwBTcoCh3V9crYCAAAoWBAAAABHY3NJTy5jb3B5X2JhdGNoWBgAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9ytwIAAFgFAAAAR2NzSU9qtwIAAFgMAAAAR2NzSU8ucmVuYW1larcCAABYDgAAAEdjc0lPLmNvcHl0cmVlarcCAABYEgAAAEdjc0lPLmRlbGV0ZV9iYXRjaGq3AgAAWAoAAABHY3NJTy5vcGVuarcCAAB1aIpYGAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb3K4AgAAhYFyuQIAAH1yugIAAGJ0crsCAABVLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyKFjxKQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJNYW5hZ2VzIHdhdGVybWFya3Mgb2YgUENvbGxlY3Rpb25zIGFuZCBBcHBsaWVkUFRyYW5zZm9ybXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRocmVhZGluZwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgVGltZXJGaXJpbmcKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1BWF9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1JTl9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRJTUVfR1JBTlVMQVJJVFkKCgpjbGFzcyBXYXRlcm1hcmtNYW5hZ2VyKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBUcmFja3MgYW5kIHVwZGF0ZXMgd2F0ZXJtYXJrcyBmb3IgYWxsIEFwcGxpZWRQVHJhbnNmb3Jtcy4iIiIKCiAgV0FURVJNQVJLX1BPU19JTkYgPSBNQVhfVElNRVNUQU1QCiAgV0FURVJNQVJLX05FR19JTkYgPSBNSU5fVElNRVNUQU1QCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbG9jaywgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMsCiAgICAgICAgICAgICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXMpOgogICAgc2VsZi5fY2xvY2sgPSBjbG9jawogICAgc2VsZi5fcm9vdF90cmFuc2Zvcm1zID0gcm9vdF90cmFuc2Zvcm1zCiAgICBzZWxmLl92YWx1ZV90b19jb25zdW1lcnMgPSB2YWx1ZV90b19jb25zdW1lcnMKICAgIHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXMgPSB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzCiAgICAjIEFwcGxpZWRQVHJhbnNmb3JtIC0+IFRyYW5zZm9ybVdhdGVybWFya3MKICAgIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzID0ge30KCiAgICBmb3Igcm9vdF90cmFuc2Zvcm0gaW4gcm9vdF90cmFuc2Zvcm1zOgogICAgICBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1tyb290X3RyYW5zZm9ybV0gPSBfVHJhbnNmb3JtV2F0ZXJtYXJrcygKICAgICAgICAgIHNlbGYuX2Nsb2NrLCB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW3Jvb3RfdHJhbnNmb3JtXSwgcm9vdF90cmFuc2Zvcm0pCgogICAgZm9yIGNvbnN1bWVycyBpbiB2YWx1ZV90b19jb25zdW1lcnMudmFsdWVzKCk6CiAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbY29uc3VtZXJdID0gX1RyYW5zZm9ybVdhdGVybWFya3MoCiAgICAgICAgICAgIHNlbGYuX2Nsb2NrLCB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2NvbnN1bWVyXSwgY29uc3VtZXIpCgogICAgZm9yIGNvbnN1bWVycyBpbiB2YWx1ZV90b19jb25zdW1lcnMudmFsdWVzKCk6CiAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5fdXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKGNvbnN1bWVyKQoKICBkZWYgX3VwZGF0ZV9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLCBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSkKICAgIGlucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzID0gW10KICAgIGZvciBpbnB1dF9wdmFsdWUgaW4gYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0czoKICAgICAgYXNzZXJ0IGlucHV0X3B2YWx1ZS5wcm9kdWNlciBvciBpc2luc3RhbmNlKGlucHV0X3B2YWx1ZSwgcHZhbHVlLlBCZWdpbikKICAgICAgaWYgaW5wdXRfcHZhbHVlLnByb2R1Y2VyOgogICAgICAgIGlucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzLmFwcGVuZCgKICAgICAgICAgICAgc2VsZi5nZXRfd2F0ZXJtYXJrcyhpbnB1dF9wdmFsdWUucHJvZHVjZXIpKQogICAgc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbCiAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtXS51cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MoCiAgICAgICAgICAgIGlucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKQoKICBkZWYgZ2V0X3dhdGVybWFya3Moc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICIiIkdldHMgdGhlIGlucHV0IGFuZCBvdXRwdXQgd2F0ZXJtYXJrcyBmb3IgYW4gQXBwbGllZFBUcmFuc2Zvcm0uCgogICAgSWYgdGhlIGFwcGxpZWRfcHRyYW5zZm9ybSBoYXMgbm90IHByb2Nlc3NlZCBhbnkgZWxlbWVudHMsIHJldHVybiBhCiAgICB3YXRlcm1hcmsgd2l0aCBtaW5pbXVtIHZhbHVlLgoKICAgIEFyZ3M6CiAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybTogQXBwbGllZFBUcmFuc2Zvcm0gdG8gZ2V0IHRoZSB3YXRlcm1hcmtzIGZvci4KCiAgICBSZXR1cm5zOgogICAgICBBIHNuYXBzaG90IChUcmFuc2Zvcm1XYXRlcm1hcmtzKSBvZiB0aGUgaW5wdXQgd2F0ZXJtYXJrIGFuZCBvdXRwdXQKICAgICAgd2F0ZXJtYXJrIGZvciB0aGUgcHJvdmlkZWQgdHJhbnNmb3JtLgogICAgIiIiCgogICAgIyBUT0RPKGFsdGF5KTogQ29tcG9zaXRlIHRyYW5zZm9ybXMgc2hvdWxkIGhhdmUgYSBjb21wb3NpdGUgd2F0ZXJtYXJrLiBVbnRpbAogICAgIyB0aGVuIHRoZXkgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZWlyIGxhc3QgdHJhbnNmb3JtLgogICAgd2hpbGUgYXBwbGllZF9wdHJhbnNmb3JtLnBhcnRzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0ucGFydHNbLTFdCgogICAgcmV0dXJuIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzW2FwcGxpZWRfcHRyYW5zZm9ybV0KCiAgZGVmIHVwZGF0ZV93YXRlcm1hcmtzKHNlbGYsIGNvbXBsZXRlZF9jb21taXR0ZWRfYnVuZGxlLCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF90aW1lcnMsIG91dHB1dHMsIHVucHJvY2Vzc2VkX2J1bmRsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleWVkX2VhcmxpZXN0X2hvbGRzKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgcGlwZWxpbmUuQXBwbGllZFBUcmFuc2Zvcm0pCiAgICBzZWxmLl91cGRhdGVfcGVuZGluZygKICAgICAgICBjb21wbGV0ZWRfY29tbWl0dGVkX2J1bmRsZSwgYXBwbGllZF9wdHJhbnNmb3JtLCBjb21wbGV0ZWRfdGltZXJzLAogICAgICAgIG91dHB1dHMsIHVucHJvY2Vzc2VkX2J1bmRsZXMpCiAgICB0dyA9IHNlbGYuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgdHcuaG9sZChrZXllZF9lYXJsaWVzdF9ob2xkcykKICAgIHNlbGYuX3JlZnJlc2hfd2F0ZXJtYXJrcyhhcHBsaWVkX3B0cmFuc2Zvcm0pCgogIGRlZiBfdXBkYXRlX3BlbmRpbmcoc2VsZiwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX3RpbWVycywgb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzLAogICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcyk6CiAgICAiIiJVcGRhdGVkIGxpc3Qgb2YgcGVuZGluZyBidW5kbGVzIGZvciB0aGUgZ2l2ZW4gQXBwbGllZFBUcmFuc2Zvcm0uIiIiCgogICAgIyBVcGRhdGUgcGVuZGluZyBlbGVtZW50cy4gRmlsdGVyIG91dCBlbXB0eSBidW5kbGVzLiBUaGV5IGRvIG5vdCBpbXBhY3QKICAgICMgd2F0ZXJtYXJrcyBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGRvd25zdHJlYW0gZXhlY3V0aW9uLgogICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIGlmIG91dHB1dC5oYXNfZWxlbWVudHMoKToKICAgICAgICBpZiBvdXRwdXQucGNvbGxlY3Rpb24gaW4gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzOgogICAgICAgICAgY29uc3VtZXJzID0gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzW291dHB1dC5wY29sbGVjdGlvbl0KICAgICAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgICAgIGNvbnN1bWVyX3R3ID0gc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbY29uc3VtZXJdCiAgICAgICAgICAgIGNvbnN1bWVyX3R3LmFkZF9wZW5kaW5nKG91dHB1dCkKCiAgICBjb21wbGV0ZWRfdHcgPSBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1thcHBsaWVkX3B0cmFuc2Zvcm1dCiAgICBjb21wbGV0ZWRfdHcudXBkYXRlX3RpbWVycyhjb21wbGV0ZWRfdGltZXJzKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgY29tcGxldGVkX3R3LmFkZF9wZW5kaW5nKHVucHJvY2Vzc2VkX2J1bmRsZSkKCiAgICBhc3NlcnQgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSBvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fcm9vdF90cmFuc2Zvcm1zCiAgICBpZiBpbnB1dF9jb21taXR0ZWRfYnVuZGxlIGFuZCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLmhhc19lbGVtZW50cygpOgogICAgICBjb21wbGV0ZWRfdHcucmVtb3ZlX3BlbmRpbmcoaW5wdXRfY29tbWl0dGVkX2J1bmRsZSkKCiAgZGVmIF9yZWZyZXNoX3dhdGVybWFya3Moc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgcGlwZWxpbmUuQXBwbGllZFBUcmFuc2Zvcm0pCiAgICB0dyA9IHNlbGYuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgaWYgdHcucmVmcmVzaCgpOgogICAgICBmb3IgcHZhbCBpbiBhcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBpZiBpc2luc3RhbmNlKHB2YWwsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgICAgZWxzZToKICAgICAgICAgIHB2YWxzID0gKHB2YWwsKQogICAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgICAgaWYgdiBpbiBzZWxmLl92YWx1ZV90b19jb25zdW1lcnM6ICAjIElmIHRoZXJlIGFyZSBkb3duc3RyZWFtIGNvbnN1bWVycwogICAgICAgICAgICBjb25zdW1lcnMgPSBzZWxmLl92YWx1ZV90b19jb25zdW1lcnNbdl0KICAgICAgICAgICAgZm9yIGNvbnN1bWVyIGluIGNvbnN1bWVyczoKICAgICAgICAgICAgICBzZWxmLl9yZWZyZXNoX3dhdGVybWFya3MoY29uc3VtZXIpCgogIGRlZiBleHRyYWN0X2FsbF90aW1lcnMoc2VsZik6CiAgICAiIiJFeHRyYWN0cyBmaXJlZCB0aW1lcnMgZm9yIGFsbCB0cmFuc2Zvcm1zCiAgICBhbmQgcmVwb3J0cyBpZiB0aGVyZSBhcmUgYW55IHRpbWVycyBzZXQuIiIiCiAgICBhbGxfdGltZXJzID0gW10KICAgIGhhc19yZWFsdGltZV90aW1lciA9IEZhbHNlCiAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtLCB0dyBpbiBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrcy5pdGVyaXRlbXMoKToKICAgICAgZmlyZWRfdGltZXJzLCBoYWRfcmVhbHRpbWVfdGltZXIgPSB0dy5leHRyYWN0X3RyYW5zZm9ybV90aW1lcnMoKQogICAgICBpZiBmaXJlZF90aW1lcnM6CiAgICAgICAgYWxsX3RpbWVycy5hcHBlbmQoKGFwcGxpZWRfcHRyYW5zZm9ybSwgZmlyZWRfdGltZXJzKSkKICAgICAgaWYgaGFkX3JlYWx0aW1lX3RpbWVyOgogICAgICAgIGhhc19yZWFsdGltZV90aW1lciA9IFRydWUKICAgIHJldHVybiBhbGxfdGltZXJzLCBoYXNfcmVhbHRpbWVfdGltZXIKCgpjbGFzcyBfVHJhbnNmb3JtV2F0ZXJtYXJrcyhvYmplY3QpOgogICIiIlRyYWNrcyBpbnB1dCBhbmQgb3V0cHV0IHdhdGVybWFya3MgZm9yIGFuIEFwcGxpZWRQVHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2xvY2ssIGtleWVkX3N0YXRlcywgdHJhbnNmb3JtKToKICAgIHNlbGYuX2Nsb2NrID0gY2xvY2sKICAgIHNlbGYuX2tleWVkX3N0YXRlcyA9IGtleWVkX3N0YXRlcwogICAgc2VsZi5faW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MgPSBbXQogICAgc2VsZi5faW5wdXRfd2F0ZXJtYXJrID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgc2VsZi5fb3V0cHV0X3dhdGVybWFyayA9IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkYKICAgIHNlbGYuX2tleWVkX2VhcmxpZXN0X2hvbGRzID0ge30KICAgIHNlbGYuX3BlbmRpbmcgPSBzZXQoKSAgIyBTY2hlZHVsZWQgYnVuZGxlcyB0YXJnZXRlZCBmb3IgdGhpcyB0cmFuc2Zvcm0uCiAgICBzZWxmLl9maXJlZF90aW1lcnMgPSBzZXQoKQogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCiAgICBzZWxmLl9sYWJlbCA9IHN0cih0cmFuc2Zvcm0pCgogIGRlZiB1cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3Moc2VsZiwgaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyA9IGlucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzCgogIGRlZiB1cGRhdGVfdGltZXJzKHNlbGYsIGNvbXBsZXRlZF90aW1lcnMpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBmb3IgdGltZXJfZmlyaW5nIGluIGNvbXBsZXRlZF90aW1lcnM6CiAgICAgICAgc2VsZi5fZmlyZWRfdGltZXJzLnJlbW92ZSh0aW1lcl9maXJpbmcpCgogIEBwcm9wZXJ0eQogIGRlZiBpbnB1dF93YXRlcm1hcmsoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9pbnB1dF93YXRlcm1hcmsKCiAgQHByb3BlcnR5CiAgZGVmIG91dHB1dF93YXRlcm1hcmsoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9vdXRwdXRfd2F0ZXJtYXJrCgogIGRlZiBob2xkKHNlbGYsIGtleWVkX2VhcmxpZXN0X2hvbGRzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZm9yIGtleSwgaG9sZF92YWx1ZSBpbiBrZXllZF9lYXJsaWVzdF9ob2xkcy5pdGVyaXRlbXMoKToKICAgICAgICBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkc1trZXldID0gaG9sZF92YWx1ZQogICAgICAgIGlmIChob2xkX3ZhbHVlIGlzIE5vbmUgb3IKICAgICAgICAgICAgaG9sZF92YWx1ZSA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKToKICAgICAgICAgIGRlbCBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkc1trZXldCgogIGRlZiBhZGRfcGVuZGluZyhzZWxmLCBwZW5kaW5nKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fcGVuZGluZy5hZGQocGVuZGluZykKCiAgZGVmIHJlbW92ZV9wZW5kaW5nKHNlbGYsIGNvbXBsZXRlZCk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICMgSWdub3JlIHJlcGVhdGVkIHJlbW92ZXMuIFRoaXMgd2lsbCBoYXBwZW4gaWYgYSB0cmFuc2Zvcm0gaGFzIGEgcmVwZWF0ZWQKICAgICAgIyBpbnB1dC4KICAgICAgaWYgY29tcGxldGVkIGluIHNlbGYuX3BlbmRpbmc6CiAgICAgICAgc2VsZi5fcGVuZGluZy5yZW1vdmUoY29tcGxldGVkKQoKICBkZWYgcmVmcmVzaChzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgbWluX3BlbmRpbmdfdGltZXN0YW1wID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgogICAgICBoYXNfcGVuZGluZ19lbGVtZW50cyA9IEZhbHNlCiAgICAgIGZvciBpbnB1dF9idW5kbGUgaW4gc2VsZi5fcGVuZGluZzoKICAgICAgICAjIFRPRE8oY2N5KTogd2UgY2FuIGhhdmUgdGhlIEJ1bmRsZSBjbGFzcyBrZWVwIHRyYWNrIG9mIHRoZSBtaW5pbXVtCiAgICAgICAgIyB0aW1lc3RhbXAgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbiBpdGVyYXRpb24gaGVyZS4KICAgICAgICBmb3Igd3YgaW4gaW5wdXRfYnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZSgpOgogICAgICAgICAgaGFzX3BlbmRpbmdfZWxlbWVudHMgPSBUcnVlCiAgICAgICAgICBpZiB3di50aW1lc3RhbXAgPCBtaW5fcGVuZGluZ190aW1lc3RhbXA6CiAgICAgICAgICAgIG1pbl9wZW5kaW5nX3RpbWVzdGFtcCA9IHd2LnRpbWVzdGFtcAoKICAgICAgIyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgZWxlbWVudCB3aXRoIGEgY2VydGFpbiB0aW1lc3RhbXAsIHdlIGNhbiBhdCBtb3N0CiAgICAgICMgYWR2YW5jZSBvdXIgd2F0ZXJtYXJrIHRvIHRoZSBtYXhpbXVtIHRpbWVzdGFtcCBsZXNzIHRoYW4gdGhhdAogICAgICAjIHRpbWVzdGFtcC4KICAgICAgcGVuZGluZ19ob2xkZXIgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICAgIGlmIGhhc19wZW5kaW5nX2VsZW1lbnRzOgogICAgICAgIHBlbmRpbmdfaG9sZGVyID0gbWluX3BlbmRpbmdfdGltZXN0YW1wIC0gVElNRV9HUkFOVUxBUklUWQoKICAgICAgaW5wdXRfd2F0ZXJtYXJrcyA9IFsKICAgICAgICAgIHR3Lm91dHB1dF93YXRlcm1hcmsgZm9yIHR3IGluIHNlbGYuX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzXQogICAgICBpbnB1dF93YXRlcm1hcmtzLmFwcGVuZChXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQogICAgICBwcm9kdWNlcl93YXRlcm1hcmsgPSBtaW4oaW5wdXRfd2F0ZXJtYXJrcykKCiAgICAgIHNlbGYuX2lucHV0X3dhdGVybWFyayA9IG1heChzZWxmLl9pbnB1dF93YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ocGVuZGluZ19ob2xkZXIsIHByb2R1Y2VyX3dhdGVybWFyaykpCiAgICAgIGVhcmxpZXN0X2hvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICAgIGZvciBob2xkIGluIHNlbGYuX2tleWVkX2VhcmxpZXN0X2hvbGRzLnZhbHVlcygpOgogICAgICAgIGlmIGhvbGQgPCBlYXJsaWVzdF9ob2xkOgogICAgICAgICAgZWFybGllc3RfaG9sZCA9IGhvbGQKICAgICAgbmV3X291dHB1dF93YXRlcm1hcmsgPSBtaW4oc2VsZi5faW5wdXRfd2F0ZXJtYXJrLCBlYXJsaWVzdF9ob2xkKQoKICAgICAgYWR2YW5jZWQgPSBuZXdfb3V0cHV0X3dhdGVybWFyayA+IHNlbGYuX291dHB1dF93YXRlcm1hcmsKICAgICAgc2VsZi5fb3V0cHV0X3dhdGVybWFyayA9IG5ld19vdXRwdXRfd2F0ZXJtYXJrCiAgICAgIHJldHVybiBhZHZhbmNlZAoKICBAcHJvcGVydHkKICBkZWYgc3luY2hyb25pemVkX3Byb2Nlc3Npbmdfb3V0cHV0X3RpbWUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY2xvY2sudGltZSgpCgogIGRlZiBleHRyYWN0X3RyYW5zZm9ybV90aW1lcnMoc2VsZik6CiAgICAiIiJFeHRyYWN0cyBmaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgb2YgYW55IHRpbWVycyBzZXQgcGVyIHRyYW5zZm9ybS4iIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZmlyZWRfdGltZXJzID0gW10KICAgICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gRmFsc2UKICAgICAgZm9yIGVuY29kZWRfa2V5LCBzdGF0ZSBpbiBzZWxmLl9rZXllZF9zdGF0ZXMuaXRlcml0ZW1zKCk6CiAgICAgICAgdGltZXJzLCBoYWRfcmVhbHRpbWVfdGltZXIgPSBzdGF0ZS5nZXRfdGltZXJzKAogICAgICAgICAgICB3YXRlcm1hcms9c2VsZi5faW5wdXRfd2F0ZXJtYXJrLAogICAgICAgICAgICBwcm9jZXNzaW5nX3RpbWU9c2VsZi5fY2xvY2sudGltZSgpKQogICAgICAgIGlmIGhhZF9yZWFsdGltZV90aW1lcjoKICAgICAgICAgIGhhc19yZWFsdGltZV90aW1lciA9IFRydWUKICAgICAgICBmb3IgZXhwaXJlZCBpbiB0aW1lcnM6CiAgICAgICAgICB3aW5kb3csIChuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSA9IGV4cGlyZWQKICAgICAgICAgIGZpcmVkX3RpbWVycy5hcHBlbmQoCiAgICAgICAgICAgICAgVGltZXJGaXJpbmcoZW5jb2RlZF9rZXksIHdpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCkpCiAgICAgIHNlbGYuX2ZpcmVkX3RpbWVycy51cGRhdGUoZmlyZWRfdGltZXJzKQogICAgICByZXR1cm4gZmlyZWRfdGltZXJzLCBoYXNfcmVhbHRpbWVfdGltZXIKfXK8AgAAKFgjAAAAX1RyYW5zZm9ybVdhdGVybWFya3MucmVtb3ZlX3BlbmRpbmdYAwAAAGRlZkvPS9WHWCIAAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy51cGRhdGVfdGltZXJzWAMAAABkZWZLtEu4h1gQAAAAV2F0ZXJtYXJrTWFuYWdlclgFAAAAY2xhc3NLIEueh1ggAAAAV2F0ZXJtYXJrTWFuYWdlci5fdXBkYXRlX3BlbmRpbmdYAwAAAGRlZktqS4KHWB8AAABXYXRlcm1hcmtNYW5hZ2VyLmdldF93YXRlcm1hcmtzWAMAAABkZWZLSkteh1gkAAAAX1RyYW5zZm9ybVdhdGVybWFya3MuaW5wdXRfd2F0ZXJtYXJrWAMAAABkZWZLuUu9h1gZAAAAV2F0ZXJtYXJrTWFuYWdlci5fX2luaXRfX1gDAAAAZGVmSyhLPYdYMwAAAFdhdGVybWFya01hbmFnZXIuX3VwZGF0ZV9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrc1gDAAAAZGVmSz5LSYdYGQAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLmhvbGRYAwAAAGRlZkvDS8qHWBwAAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy5yZWZyZXNoWAMAAABkZWZL1kv5h1glAAAAX1RyYW5zZm9ybVdhdGVybWFya3Mub3V0cHV0X3dhdGVybWFya1gDAAAAZGVmS75LwodYHQAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLl9faW5pdF9fWAMAAABkZWZLo0uvh1gUAAAAX1RyYW5zZm9ybVdhdGVybWFya3NYBQAAAGNsYXNzS6BNDwGHWCQAAABXYXRlcm1hcmtNYW5hZ2VyLl9yZWZyZXNoX3dhdGVybWFya3NYAwAAAGRlZkuDS5GHWCMAAABXYXRlcm1hcmtNYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVyc1gDAAAAZGVmS5JLnodYIAAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLmFkZF9wZW5kaW5nWAMAAABkZWZLy0vOh1g4AAAAX1RyYW5zZm9ybVdhdGVybWFya3Muc3luY2hyb25pemVkX3Byb2Nlc3Npbmdfb3V0cHV0X3RpbWVYAwAAAGRlZkv6S/2HWDYAAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy51cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3NYAwAAAGRlZkuwS7OHWCIAAABXYXRlcm1hcmtNYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzWAMAAABkZWZLX0tph1gtAAAAX1RyYW5zZm9ybVdhdGVybWFya3MuZXh0cmFjdF90cmFuc2Zvcm1fdGltZXJzWAMAAABkZWZL/k0PAYd1fXK9AgAAKFgfAAAAV2F0ZXJtYXJrTWFuYWdlci5nZXRfd2F0ZXJtYXJrc1gsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXJyvgIAAFgiAAAAV2F0ZXJtYXJrTWFuYWdlci51cGRhdGVfd2F0ZXJtYXJrc2q+AgAAWBAAAABXYXRlcm1hcmtNYW5hZ2Vyar4CAABYIwAAAFdhdGVybWFya01hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzar4CAAB1aIpYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2Vycr8CAACFgXLAAgAAfXLBAgAAYnRVH2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNywgIAAChY3ZAAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU3ludGF4ICYgc2VtYW50aWNzIGZvciB0eXBlLWhpbnRpbmcgY3VzdG9tLWZ1bmN0aW9ucy9QVHJhbnNmb3JtcyBpbiB0aGUgU0RLLgoKVGhpcyBtb2R1bGUgZGVmaW5lcyB0eXBlLWhpbnRpbmcgb2JqZWN0cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3ludGF4IGZvcgp0eXBlLWhpbnRpbmcgZnVuY3Rpb24gYXJndW1lbnRzLCBmdW5jdGlvbiByZXR1cm4gdHlwZXMsIG9yIFBUcmFuc2Zvcm0gb2JqZWN0CnRoZW1zZWx2ZXMuIFR5cGVIaW50J3MgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBlaXRoZXIKc3RhdGljIG9yIHJ1bi10aW1lIHR5cGUtY2hlY2tpbmcgaW4gcmVndWxhciBQeXRob24gY29kZS4KClR5cGUtaGludHMgYXJlIGRlZmluZWQgYnkgJ2luZGV4aW5nJyBhIHR5cGUtcGFyYW1ldGVyIGludG8gYSBkZWZpbmVkCkNvbXBvc2l0ZVR5cGVIaW50IGluc3RhbmNlOgoKICAqICdMaXN0W2ludF0nLgoKVmFsaWQgdHlwZS1oaW50cyBhcmUgcGFydGl0aW9uZWQgaW50byB0d28gY2F0ZWdvcmllczogc2ltcGxlLCBhbmQgY29tcG9zaXRlLgoKU2ltcGxlIHR5cGUgaGludHMgYXJlIHR5cGUgaGludHMgYmFzZWQgb24gYSBzdWJzZXQgb2YgUHl0aG9uIHByaW1pdGl2ZSB0eXBlczoKaW50LCBib29sLCBmbG9hdCwgc3RyLCBvYmplY3QsIE5vbmUsIGFuZCBieXRlcy4gTm8gb3RoZXIgcHJpbWl0aXZlIHR5cGVzIGFyZQphbGxvd2VkLgoKQ29tcG9zaXRlIHR5cGUtaGludHMgYXJlIHJlc2VydmVkIGZvciBoaW50aW5nIHRoZSB0eXBlcyBvZiBjb250YWluZXItbGlrZQpQeXRob24gb2JqZWN0cyBzdWNoIGFzICdsaXN0Jy4gQ29tcG9zaXRlIHR5cGUtaGludHMgY2FuIGJlIHBhcmFtZXRlcml6ZWQgYnkgYW4KaW5uZXIgc2ltcGxlIG9yIGNvbXBvc2l0ZSB0eXBlLWhpbnQsIHVzaW5nIHRoZSAnaW5kZXhpbmcnIHN5bnRheC4gSW4gb3JkZXIgdG8KYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBidWlsdC1pbiBjb250YWluZXIgdHlwZXMsIHdoZW4Kc3BlY2lmeWluZyB0aGlzIGNhdGVnb3J5IG9mIHR5cGUtaGludHMsIHRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxkIGNhcGl0YWxpemVkLgpUaGUgZm9sbG93aW5nIGNvbXBvc2l0ZSB0eXBlLWhpbnRzIGFyZSBwZXJtaXR0ZWQuIE5PVEU6ICdUJyBjYW4gYmUgYW55IG9mIHRoZQp0eXBlLWhpbnRzIGxpc3RlZCBvciBhIHNpbXBsZSBQeXRob24gdHlwZToKCiAgKiBBbnkKICAqIFVuaW9uW1QsIFQsIFRdCiAgKiBPcHRpb25hbFtUXQogICogVHVwbGVbVCwgVF0KICAqIFR1cGxlW1QsIC4uLl0KICAqIExpc3RbVF0KICAqIEtWW1QsIFRdCiAgKiBEaWN0W1QsIFRdCiAgKiBTZXRbVF0KICAqIEl0ZXJhYmxlW1RdCiAgKiBJdGVyYXRvcltUXQogICogR2VuZXJhdG9yW1RdCgpUeXBlLWhpbnRzIGNhbiBiZSBuZXN0ZWQsIGFsbG93aW5nIG9uZSB0byBkZWZpbmUgdHlwZS1oaW50cyBmb3IgY29tcGxleCB0eXBlczoKCiAgKiAnTGlzdFtUdXBsZVtpbnQsIGludCwgc3RyXV0KCkluIGFkZGl0aW9uLCB0eXBlLWhpbnRzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBydW4tdGltZSB0eXBlLWNoZWNraW5nIHZpYSB0aGUKJ3R5cGVfY2hlY2snIG1ldGhvZCBvbiBlYWNoIFR5cGVDb25zdHJhaW50LgoKIiIiCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGNvcHkKaW1wb3J0IHN5cwppbXBvcnQgdHlwZXMKCl9fYWxsX18gPSBbCiAgICAnQW55JywKICAgICdVbmlvbicsCiAgICAnT3B0aW9uYWwnLAogICAgJ1R1cGxlJywKICAgICdMaXN0JywKICAgICdLVicsCiAgICAnRGljdCcsCiAgICAnU2V0JywKICAgICdJdGVyYWJsZScsCiAgICAnSXRlcmF0b3InLAogICAgJ0dlbmVyYXRvcicsCiAgICAnV2luZG93ZWRWYWx1ZScsCiAgICAnVHlwZVZhcmlhYmxlJywKXQoKCiMgQSBzZXQgb2YgdGhlIGJ1aWx0LWluIFB5dGhvbiB0eXBlcyB3ZSBkb24ndCBzdXBwb3J0LCBndWlkaW5nIHRoZSB1c2VycwojIHRvIHRlbXBsYXRlZCAodXBwZXItY2FzZSkgdmVyc2lvbnMgaW5zdGVhZC4KRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVMgPSAobGlzdCwgc2V0LCB0dXBsZSwgZGljdCkKCgpjbGFzcyBTaW1wbGVUeXBlSGludEVycm9yKFR5cGVFcnJvcik6CiAgcGFzcwoKCmNsYXNzIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoVHlwZUVycm9yKToKICBwYXNzCgoKY2xhc3MgR2V0aXRlbUNvbnN0cnVjdG9yKHR5cGUpOgogICIiIkEgbWV0YWNsYXNzIHRoYXQgbWFrZXMgQ2xzW2FyZ10gYW4gYWxpYXMgZm9yIENscyhhcmcpLiIiIgogIGRlZiBfX2dldGl0ZW1fXyhjbHMsIGFyZyk6CiAgICByZXR1cm4gY2xzKGFyZykKCgpjbGFzcyBUeXBlQ29uc3RyYWludChvYmplY3QpOgoKICAiIiJUaGUgYmFzZS1jbGFzcyBmb3IgYWxsIGNyZWF0ZWQgdHlwZS1jb25zdHJhaW50cyBkZWZpbmVkIGJlbG93LgoKICBBIDpjbGFzczpgVHlwZUNvbnN0cmFpbnRgIGlzIHRoZSByZXN1bHQgb2YgcGFyYW1ldGVyaXppbmcgYQogIDpjbGFzczpgQ29tcG9zaXRlVHlwZUhpbnRgIHdpdGggd2l0aCBvbmUgb2YgdGhlIGFsbG93ZWQgUHl0aG9uIHR5cGVzIG9yCiAgYW5vdGhlciA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YC4gSXQgYmluZHMgYW5kIGVuZm9yY2VzIGEgc3BlY2lmaWMKICB2ZXJzaW9uIG9mIGEgZ2VuZXJhbGl6ZWQgVHlwZUhpbnQuCiAgIiIiCgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHN1YiBpcyBjb25zaXN0ZW50IHdpdGggc2VsZi4KCiAgICBIYXMgdGhlIHNhbWUgcmVsYXRpb25zaGlwIHRvIGlzX2NvbnNpc3RlbnRfd2l0aCgpIGFzCiAgICBfX3N1YmNsYXNzY2hlY2tfXyBkb2VzIGZvciBpc3N1YmNsYXNzKCkuCgogICAgTm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseTsgY2FsbCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLCBzZWxmKQogICAgaW5zdGVhZC4KCiAgICBJbXBsZW1lbnRhdGlvbiBtYXkgYXNzdW1lIHRoYXQgbWF5YmVfc3ViX3R5cGUgaXMgbm90IEFueQogICAgYW5kIGhhcyBiZWVuIG5vcm1hbGl6ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgIiIiRGV0ZXJtaW5lcyBpZiB0aGUgdHlwZSBvZiAnaW5zdGFuY2UnIHNhdGlzZmllcyB0aGlzIHR5cGUgY29uc3RyYWludC4KCiAgICBBcmdzOgogICAgICBpbnN0YW5jZTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5UeXBlRXJyb3JgOiBUaGUgcGFzc2VkICoqaW5zdGFuY2UqKiBkb2Vzbid0IHNhdGlzZnkKICAgICAgICB0aGlzIDpjbGFzczpgVHlwZUNvbnN0cmFpbnRgLiBTdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgYXJlIGZyZWUgdG8gcmFpc2UgYW55IG9mIHRoZSBzdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5UeXBlRXJyb3JgIGRlZmluZWQgYWJvdmUsIGRlcGVuZGluZyBvbgogICAgICAgIHRoZSBtYW5uZXIgb2YgdGhlIHR5cGUgaGludCBlcnJvci4KCiAgICBBbGwgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgc3ViLWNsYXNzZXMgbXVzdCBkZWZpbmUgdGhpcyBtZXRob2QgaW4gb3RoZXIKICAgIGZvciB0aGUgY2xhc3Mgb2JqZWN0IHRvIGJlIGNyZWF0ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIHVudXNlZF9jb25jcmV0ZV90eXBlKToKICAgIHJldHVybiB7fQoKICBkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLCB1bnVzZWRfYmluZGluZ3MpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICIiIkl0ZXJhdGVzIG92ZXIgdGhlIGlubmVyIHR5cGVzIG9mIHRoZSBjb21wb3NpdGUgdHlwZS4iIiIKICAgIHJldHVybiBbXQoKICBkZWYgdmlzaXQoc2VsZiwgdmlzaXRvciwgdmlzaXRvcl9hcmcpOgogICAgIiIiVmlzaXRvciBtZXRob2QgdG8gdmlzaXQgYWxsIGlubmVyIHR5cGVzIG9mIGEgY29tcG9zaXRlIHR5cGUuCgogICAgQXJnczoKICAgICAgdmlzaXRvcjogQSBjYWxsYWJsZSBpbnZva2VkIGZvciBhbGwgbm9kZXMgaW4gdGhlIHR5cGUgdHJlZSBjb21wcmlzaW5nCiAgICAgICAgYSBjb21wb3NpdGUgdHlwZS4gVGhlIHZpc2l0b3Igd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbm9kZSB2aXNpdGVkCiAgICAgICAgYW5kIHRoZSB2aXNpdG9yIGFyZ3VtZW50IHNwZWNpZmllZCBoZXJlLgogICAgICB2aXNpdG9yX2FyZzogVmlzaXRvciBjYWxsYmFjayBzZWNvbmQgYXJndW1lbnQuCiAgICAiIiIKICAgIHZpc2l0b3Ioc2VsZiwgdmlzaXRvcl9hcmcpCiAgICBmb3IgdCBpbiBzZWxmLl9pbm5lcl90eXBlcygpOgogICAgICBpZiBpc2luc3RhbmNlKHQsIFR5cGVDb25zdHJhaW50KToKICAgICAgICB0LnZpc2l0KHZpc2l0b3IsIHZpc2l0b3JfYXJnKQogICAgICBlbHNlOgogICAgICAgIHZpc2l0b3IodCwgdmlzaXRvcl9hcmcpCgoKZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHR5cGVfY29uc3RyYWludCwgY29uY3JldGVfdHlwZSk6CiAgaWYgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIFR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBlX2NvbnN0cmFpbnQubWF0Y2hfdHlwZV92YXJpYWJsZXMoY29uY3JldGVfdHlwZSkKICByZXR1cm4ge30KCgpkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyh0eXBlX2NvbnN0cmFpbnQsIGJpbmRpbmdzKToKICBpZiBpc2luc3RhbmNlKHR5cGVfY29uc3RyYWludCwgVHlwZUNvbnN0cmFpbnQpOgogICAgcmV0dXJuIHR5cGVfY29uc3RyYWludC5iaW5kX3R5cGVfdmFyaWFibGVzKGJpbmRpbmdzKQogIHJldHVybiB0eXBlX2NvbnN0cmFpbnQKCgpjbGFzcyBJbmRleGFibGVUeXBlQ29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CiAgIiIiQW4gaW50ZXJuYWwgY29tbW9uIGJhc2UtY2xhc3MgZm9yIGFsbCB0eXBlIGNvbnN0cmFpbnRzIHdpdGggaW5kZXhpbmcuCiAgRS5HLiBTZXF1ZW5jZVR5cGVDb25zdHJhaW50ICsgVHVwbGUncyBvZiBmaXhlZCBzaXplLgogICIiIgoKICBkZWYgX2NvbnN0cmFpbnRfZm9yX2luZGV4KHNlbGYsIGlkeCk6CiAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4gVGhpcyBpcyB1c2VkIHRvIGFsbG93IHR5cGUgaW5mZXJlbmNlCiAgICB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdHlwZSBmb3IgYSBzcGVjaWZpYyBpbmRleC4gT24gbGlzdHMgdGhpcyB3aWxsIGFsc28KICAgIGJlIHRoZSBzYW1lLCBob3dldmVyIGZvciB0dXBsZXMgdGhlIHZhbHVlIHdpbGwgZGVwZW5kIG9uIHRoZSBwb3NpdGlvbi4gVGhpcwogICAgd2FzIGFkZGVkIGFzIHBhcnQgb2YgdGhlIGZ1dHVyaXplIGNoYW5nZXMgc2luY2UgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMgbm93CiAgICBpbmRleCBpbnRvIHR1cGxlcy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBTZXF1ZW5jZVR5cGVDb25zdHJhaW50KEluZGV4YWJsZVR5cGVDb25zdHJhaW50KToKICAiIiJBIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgc2VxdWVuY2UgcmVsYXRlZCB0eXBlLWNvbnN0cmFpbnQgY2xhc3Nlcy4KCiAgQSBzZXF1ZW5jZSBpcyBkZWZpbmVkIGFzIGFuIGFyYml0cmFyeSBsZW5ndGggaG9tb2dlbmVvdXMgY29udGFpbmVyIHR5cGUuIFR5cGUKICBoaW50cyB3aGljaCBmYWxsIHVuZGVyIHRoaXMgY2F0ZWdvcnkgaW5jbHVkZTogTGlzdFtUXSwgU2V0W1RdLCBJdGVyYWJsZVtUXSwKICBhbmQgVHVwbGVbVCwgLi4uXS4KCiAgU3ViLWNsYXNzZXMgbWF5IG5lZWQgdG8gb3ZlcnJpZGUgJ19jb25zaXN0ZW50X3dpdGhfY2hlY2tfJyBpZiBhIHBhcnRpY3VsYXIKICBzZXF1ZW5jZSByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIHdpdGggcmVzcGVjdCB0byB0eXBlIGNvbXBhdGliaWxpdHkuCgogIEF0dHJpYnV0ZXM6CiAgICBpbm5lcl90eXBlOiBUaGUgdHlwZSB3aGljaCBldmVyeSBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBzaG91bGQgYmUgYW4KICAgICAgaW5zdGFuY2Ugb2YuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbm5lcl90eXBlLCBzZXF1ZW5jZV90eXBlKToKICAgIHNlbGYuaW5uZXJfdHlwZSA9IGlubmVyX3R5cGUKICAgIHNlbGYuX3NlcXVlbmNlX3R5cGUgPSBzZXF1ZW5jZV90eXBlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIChpc2luc3RhbmNlKG90aGVyLCBTZXF1ZW5jZVR5cGVDb25zdHJhaW50KQogICAgICAgICAgICBhbmQgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi5pbm5lcl90eXBlID09IG90aGVyLmlubmVyX3R5cGUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuaW5uZXJfdHlwZSkgXiAxMyAqIGhhc2godHlwZShzZWxmKSkKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgIHlpZWxkIHNlbGYuaW5uZXJfdHlwZQoKICBkZWYgX2NvbnN0cmFpbnRfZm9yX2luZGV4KHNlbGYsIGlkeCk6CiAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgIHJldHVybiBzZWxmLmlubmVyX3R5cGUKCiAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICByZXR1cm4gKGlzaW5zdGFuY2Uoc3ViLCBzZWxmLl9fY2xhc3NfXykKICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIuaW5uZXJfdHlwZSwgc2VsZi5pbm5lcl90eXBlKSkKCiAgZGVmIHR5cGVfY2hlY2soc2VsZiwgc2VxdWVuY2VfaW5zdGFuY2UpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VxdWVuY2VfaW5zdGFuY2UsIHNlbGYuX3NlcXVlbmNlX3R5cGUpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgIiVzIHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gVmFsaWQgb2JqZWN0IGluc3RhbmNlICIKICAgICAgICAgICJtdXN0IGJlIG9mIHR5cGUgJyVzJy4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YgJyVzJyAiCiAgICAgICAgICAid2FzIHJlY2VpdmVkLiIKICAgICAgICAgICUgKHNlbGYuX3NlcXVlbmNlX3R5cGUuX19uYW1lX18udGl0bGUoKSwKICAgICAgICAgICAgIHNlbGYuX3NlcXVlbmNlX3R5cGUuX19uYW1lX18ubG93ZXIoKSwKICAgICAgICAgICAgIHNlcXVlbmNlX2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgZm9yIGluZGV4LCBlbGVtIGluIGVudW1lcmF0ZShzZXF1ZW5jZV9pbnN0YW5jZSk6CiAgICAgIHRyeToKICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYuaW5uZXJfdHlwZSwgZWxlbSkKICAgICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgIyVzIGluICcKICAgICAgICAgICAgJ3RoZSBwYXNzZWQgJXMgaXMgaW5jb3JyZWN0LiBFeHBlY3RlZCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLCAnCiAgICAgICAgICAgICdpbnN0ZWFkIHJlY2VpdmVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMuJyAlCiAgICAgICAgICAgIChyZXByKHNlbGYpLCBpbmRleCwgX3VuaWZpZWRfcmVwcihzZWxmLl9zZXF1ZW5jZV90eXBlKSwKICAgICAgICAgICAgIF91bmlmaWVkX3JlcHIoc2VsZi5pbm5lcl90eXBlKSwgZWxlbS5fX2NsYXNzX18uX19uYW1lX18pKQogICAgICBleGNlcHQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvciBhcyBlOgogICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICclcyBoaW50IHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gVGhlIHR5cGUgb2YgZWxlbWVudCAjJXMgaW4gJwogICAgICAgICAgICAndGhlIHBhc3NlZCAlcyBpcyBpbmNvcnJlY3Q6ICVzJwogICAgICAgICAgICAlIChyZXByKHNlbGYpLCBpbmRleCwgc2VsZi5fc2VxdWVuY2VfdHlwZS5fX25hbWVfXywgZSkpCgogIGRlZiBtYXRjaF90eXBlX3ZhcmlhYmxlcyhzZWxmLCBjb25jcmV0ZV90eXBlKToKICAgIGlmIGlzaW5zdGFuY2UoY29uY3JldGVfdHlwZSwgU2VxdWVuY2VUeXBlQ29uc3RyYWludCk6CiAgICAgIHJldHVybiBtYXRjaF90eXBlX3ZhcmlhYmxlcyhzZWxmLmlubmVyX3R5cGUsIGNvbmNyZXRlX3R5cGUuaW5uZXJfdHlwZSkKICAgIHJldHVybiB7fQoKICBkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLCBiaW5kaW5ncyk6CiAgICBib3VuZF9pbm5lcl90eXBlID0gYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLmlubmVyX3R5cGUsIGJpbmRpbmdzKQogICAgaWYgYm91bmRfaW5uZXJfdHlwZSA9PSBzZWxmLmlubmVyX3R5cGU6CiAgICAgIHJldHVybiBzZWxmCiAgICBib3VuZF9zZWxmID0gY29weS5jb3B5KHNlbGYpCiAgICBib3VuZF9zZWxmLmlubmVyX3R5cGUgPSBib3VuZF9pbm5lcl90eXBlCiAgICByZXR1cm4gYm91bmRfc2VsZgoKCmNsYXNzIENvbXBvc2l0ZVR5cGVIaW50KG9iamVjdCk6CiAgIiIiVGhlIGJhc2UtY2xhc3MgZm9yIGFsbCBjcmVhdGVkIHR5cGUtaGludCBjbGFzc2VzIGRlZmluZWQgYmVsb3cuCgogIENvbXBvc2l0ZVR5cGVIaW50J3Mgc2VydmUgcHJpbWFyaWx5IGFzIFR5cGVDb25zdHJhaW50IGZhY3Rvcmllcy4gVGhleSBhcmUKICBvbmx5IHJlcXVpcmVkIHRvIGRlZmluZSBhIHNpbmdsZSBtZXRob2Q6ICdfX2dldGl0ZW1fXycgd2hpY2ggc2hvdWxkIHJldHVybiBhCiAgcGFyYW1ldGVyaXplZCBUeXBlQ29uc3RyYWludCwgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmZvcmNlIHN0YXRpYyBvciBydW4tdGltZQogIHR5cGUtY2hlY2tpbmcuCgogICdfX2dldGl0ZW1fXycgaXMgdXNlZCBhcyBhIGZhY3RvcnkgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcHJvdmlkZSBhIGZhbWlsaWFyCiAgQVBJIGZvciBkZWZpbmluZyB0eXBlLWhpbnRzLiBUaGUgdWx0aW1hdGUgcmVzdWx0IGlzIHRoYXQgb25lIHdpbGwgYmUgYWJsZSB0bwogIHVzZTogQ29tcG9zaXRlVHlwZUhpbnRbdHlwZV9wYXJhbWV0ZXJdIHRvIGNyZWF0ZSBhIHR5cGUtaGludCBvYmplY3QgdGhhdAogIGJlaGF2ZXMgbGlrZSBhbnkgb3RoZXIgUHl0aG9uIG9iamVjdC4gVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZQogICd0eXBlLWFsaWFzZXMnIGJ5IGFzc2lnbmluZyB0aGUgcmV0dXJuZWQgdHlwZS1oaW50cyB0byBhIHZhcmlhYmxlLgoKICAgICogRXhhbXBsZTogJ0Nvb3JkaW5hdGVzID0gTGlzdFtUdXBsZVtpbnQsIGludF1dJwogICIiIgoKICBkZWYgX19nZXRpdGVtX19fKHNlbGYsIHB5X3R5cGUpOgogICAgIiIiR2l2ZW4gYSB0eXBlIGNyZWF0ZXMgYSBUeXBlQ29uc3RyYWludCBpbnN0YW5jZSBwYXJhbWV0ZXJpemVkIGJ5IHRoZSB0eXBlLgoKICAgIFRoaXMgZnVuY3Rpb24gc2VydmVzIGFzIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIFR5cGVDb25zdHJhaW50CiAgICBpbnN0YW5jZXMuIEFkZGl0aW9uYWxseSwgaW1wbGVtZW50YXRpb25zIGJ5IHN1Yi1jbGFzc2VzIHNob3VsZCBwZXJmb3JtIGFueQogICAgc2FuaXR5IGNoZWNraW5nIG9mIHRoZSBwYXNzZWQgdHlwZXMgaW4gdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8gcnVsZS1vdXQKICAgIGRpc2FsbG93ZWQgYmVoYXZpb3IuIFN1Y2ggYXMsIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgVHlwZUNvbnN0cmFpbnQgd2hvc2UKICAgIHBhcmFtZXRlcml6ZWQgdHlwZSBpcyBhY3R1YWxseSBhbiBvYmplY3QgaW5zdGFuY2UuCgogICAgQXJnczoKICAgICAgcHlfdHlwZTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gdHlwZSBvciBUeXBlQ29uc3RyYWludC4KCiAgICBSZXR1cm5zOiBBbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBUeXBlQ29uc3RyYWludCBmb3IgdGhpcyBDb21wb3NpdGVUeXBlSGludC4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogSWYgdGhlIHBhc3NlZCB0eXBlIHZpb2xhdGVzIGFueSBjb250cmFpbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIKICAgICAgICBUeXBlSGludC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmRlZiB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSh0eXBlX3BhcmFtLCBlcnJvcl9tc2dfcHJlZml4KToKICAiIiJEZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBhIHZhbGlkIHR5cGUgcGFyYW1ldGVyIHRvIGEKICA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YC4KCiAgSW1wbGVtZW50cyBzYW5pdHkgY2hlY2tpbmcgdG8gZGlzYWxsb3cgdGhpbmdzIGxpa2U6OgoKICAgIExpc3RbMSwgMiwgM10gb3IgRGljdFs1XS4KCiAgQXJnczoKICAgIHR5cGVfcGFyYW06IEFuIG9iamVjdCBpbnN0YW5jZS4KICAgIGVycm9yX21zZ19wcmVmaXggKDpjbGFzczpgc3RyYCk6IEEgc3RyaW5nIHByZWZpeCB1c2VkIHRvIGZvcm1hdCBhbiBlcnJvcgogICAgICBtZXNzYWdlIGluIHRoZSBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiB0aGUgcGFzc2VkICoqdHlwZV9wYXJhbSoqIGlzIG5vdCBhIHZhbGlkIHR5cGUKICAgICAgcGFyYW1ldGVyIGZvciBhIDpjbGFzczpgQ29tcG9zaXRlVHlwZUhpbnRgLgogICIiIgogICMgTXVzdCBlaXRoZXIgYmUgYSBUeXBlQ29uc3RyYWludCBpbnN0YW5jZSBvciBhIGJhc2ljIFB5dGhvbiB0eXBlLgogIHBvc3NpYmxlX2NsYXNzZXMgPSBbdHlwZSwgVHlwZUNvbnN0cmFpbnRdCiAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgogICAgcG9zc2libGVfY2xhc3Nlcy5hcHBlbmQodHlwZXMuQ2xhc3NUeXBlKQogIGlzX25vdF90eXBlX2NvbnN0cmFpbnQgPSAoCiAgICAgIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR1cGxlKHBvc3NpYmxlX2NsYXNzZXMpKQogICAgICBhbmQgdHlwZV9wYXJhbSBpcyBub3QgTm9uZSkKICBpc19mb3JiaWRkZW5fdHlwZSA9IChpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR5cGUpIGFuZAogICAgICAgICAgICAgICAgICAgICAgIHR5cGVfcGFyYW0gaW4gRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVMpCgogIGlmIGlzX25vdF90eXBlX2NvbnN0cmFpbnQgb3IgaXNfZm9yYmlkZGVuX3R5cGU6CiAgICByYWlzZSBUeXBlRXJyb3IoJyVzIG11c3QgYmUgYSBub24tc2VxdWVuY2UsIGEgdHlwZSwgb3IgYSBUeXBlQ29uc3RyYWludC4gJXMnCiAgICAgICAgICAgICAgICAgICAgJyBpcyBhbiBpbnN0YW5jZSBvZiAlcy4nICUgKGVycm9yX21zZ19wcmVmaXgsIHR5cGVfcGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfcGFyYW0uX19jbGFzc19fLl9fbmFtZV9fKSkKCgpkZWYgX3VuaWZpZWRfcmVwcihvKToKICAiIiJHaXZlbiBhbiBvYmplY3QgcmV0dXJuIGEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBvYmplY3QuCgogIFRoaXMgZnVuY3Rpb24gY2xvc2VseSBtaXJyb3JzICdfX3F1YWxuYW1lX18nIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluCiAgUHl0aG9uIDMuMy4gSXQgaXMgdXNlZCBwcmltYXJpbHkgdG8gZm9ybWF0IHR5cGVzIG9yIG9iamVjdCBpbnN0YW5jZXMgZm9yCiAgZXJyb3IgbWVzc2FnZXMuCgogIEFyZ3M6CiAgICBvOiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50IG9yIGEgdHlwZS4KCiAgUmV0dXJuczoKICAgIEEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBwYXNzZWQgUHl0aG9uIG9iamVjdCBmaXQgZm9yIHN0cmluZyBmb3JtYXR0aW5nLgogICIiIgogIHJldHVybiByZXByKG8pIGlmIGlzaW5zdGFuY2UoCiAgICAgIG8sIChUeXBlQ29uc3RyYWludCwgdHlwZShOb25lKSkpIGVsc2Ugby5fX25hbWVfXwoKCmRlZiBjaGVja19jb25zdHJhaW50KHR5cGVfY29uc3RyYWludCwgb2JqZWN0X2luc3RhbmNlKToKICAiIiJEZXRlcm1pbmUgaWYgdGhlIHBhc3NlZCB0eXBlIGluc3RhbmNlIHNhdGlzZmllcyB0aGUgVHlwZUNvbnN0cmFpbnQuCgogIFdoZW4gZXhhbWluaW5nIGEgY2FuZGlkYXRlIHR5cGUgZm9yIGNvbnN0cmFpbnQgc2F0aXNmYWN0aW9uIGluCiAgJ3R5cGVfY2hlY2snLCBhbGwgQ29tcG9zaXRlVHlwZUhpbnQncyBldmVudHVhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbi4gVGhpcwogIGZ1bmN0aW9uIG1heSBlbmQgdXAgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5IGlmIHRoZSBoaW50ZWQgdHlwZSBvZiBhCiAgQ29tcG9zaXRlVHlwZUhpbnQgaXMgYW5vdGhlciBDb21wb3NpdGVUeXBlSGludC4KCiAgQXJnczoKICAgIHR5cGVfY29uc3RyYWludDogQW4gaW5zdGFuY2Ugb2YgYSBUeXBlQ29uc3RyYWludCBvciBhIGJ1aWx0LWluIFB5dGhvbiB0eXBlLgogICAgb2JqZWN0X2luc3RhbmNlOiBBbiBvYmplY3QgaW5zdGFuY2UuCgogIFJhaXNlczoKICAgIFNpbXBsZVR5cGVIaW50RXJyb3I6IElmICd0eXBlX2NvbnN0cmFpbnQnIGlzIGEgb25lIG9mIHRoZSBhbGxvd2VkIHByaW1pdGl2ZQogICAgICBQeXRob24gdHlwZXMgYW5kICdvYmplY3RfaW5zdGFuY2UnIGlzbid0IGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZS4KICAgIENvbXBvc2l0ZVR5cGVIaW50RXJyb3I6IElmICd0eXBlX2NvbnN0cmFpbnQnIGlzIGEgVHlwZUNvbnN0cmFpbnQgb2JqZWN0IGFuZAogICAgICAnb2JqZWN0X2luc3RhbmNlJyBkb2VzIG5vdCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50LgogICIiIgogIGlmIHR5cGVfY29uc3RyYWludCBpcyBOb25lIGFuZCBvYmplY3RfaW5zdGFuY2UgaXMgTm9uZToKICAgIHJldHVybgogIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIFR5cGVDb25zdHJhaW50KToKICAgIHR5cGVfY29uc3RyYWludC50eXBlX2NoZWNrKG9iamVjdF9pbnN0YW5jZSkKICBlbGlmIHR5cGVfY29uc3RyYWludCBpcyBOb25lOgogICAgIyBUT0RPKHJvYmVydHdiKTogRml4IHVzZXMgb2YgTm9uZSBmb3IgQW55LgogICAgcGFzcwogIGVsaWYgbm90IGlzaW5zdGFuY2UodHlwZV9jb25zdHJhaW50LCB0eXBlKToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiYmFkIHR5cGU6ICVzIiAlICh0eXBlX2NvbnN0cmFpbnQsKSkKICBlbGlmIG5vdCBpc2luc3RhbmNlKG9iamVjdF9pbnN0YW5jZSwgdHlwZV9jb25zdHJhaW50KToKICAgIHJhaXNlIFNpbXBsZVR5cGVIaW50RXJyb3IKCgpjbGFzcyBBbnlUeXBlQ29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CiAgIiIiQW4gQW55IHR5cGUtaGludC4KCiAgQW55IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSAiZG9uJ3QgY2FyZSIgd2hlbiBoaW50aW5nIHRoZSB0eXBlcyBvZgogIGZ1bmN0aW9uIGFyZ3VtZW50cyBvciByZXR1cm4gdHlwZXMuIEFsbCBvdGhlciBUeXBlQ29uc3RyYWludCdzIGFyZSBlcXVpdmFsZW50CiAgdG8gJ0FueScsIGFuZCBpdHMgJ3R5cGVfY2hlY2snIG1ldGhvZCBpcyBhIG5vLW9wLgogICIiIgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FueScKCiAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgcGFzcwoKCmNsYXNzIFR5cGVWYXJpYWJsZShBbnlUeXBlQ29uc3RyYWludCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdUeXBlVmFyaWFibGVbJXNdJyAlIHNlbGYubmFtZQoKICBkZWYgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZiwgY29uY3JldGVfdHlwZSk6CiAgICByZXR1cm4ge3NlbGY6IGNvbmNyZXRlX3R5cGV9CgogIGRlZiBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYsIGJpbmRpbmdzKToKICAgIHJldHVybiBiaW5kaW5ncy5nZXQoc2VsZiwgc2VsZikKCgpjbGFzcyBVbmlvbkhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgVW5pb24gdHlwZS1oaW50LiBVbmlvbltYLCBZXSBhY2NlcHRzIGluc3RhbmNlcyBvZiB0eXBlIFggT1IgdHlwZSBZLgoKICBEdXBsaWNhdGUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLiBBZGRpdG9uYWxseSwgTmVzdGVkIFVuaW9uIGhpbnRzIHdpbGwKICBiZSBmbGF0dGVuZWQgb3V0LiBGb3IgZXhhbXBsZToKCiAgICAqIFVuaW9uW1VuaW9uW3N0ciwgaW50XSwgYm9vbF0gLT4gVW5pb25bc3RyLCBpbnQsIGJvb2xdCgogIEEgY2FuZGlkYXRlIHR5cGUgaW5zdGFuY2Ugc2F0aXNmaWVzIGEgVW5pb25Db25zdHJhaW50IGlmIGl0IGlzIGFuCiAgaW5zdGFuY2Ugb2YgYW55IG9mIHRoZSBwYXJhbWV0ZXJpemVkICd1bmlvbl90eXBlcycgZm9yIGEgVW5pb24uCgogIFVuaW9uW1hdIGlzIGRpc2FsbG93ZWQsIGFuZCBhbGwgdHlwZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2FuaXR5IGNoZWNrZWQgdG8KICBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG5lc3RlZCB0eXBlLWhpbnRzLgoKICBXaGVuIGNvbXBhcmluZyB0d28gVW5pb24gaGludHMsIG9yZGVyaW5nIGlzIGVuZm9yY2VkIGJlZm9yZSBjb21wYXJpc29uLgoKICAgICogVW5pb25baW50LCBzdHJdID09IFVuaW9uW3N0ciwgaW50XQogICIiIgoKICBjbGFzcyBVbmlvbkNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bmlvbl90eXBlcyk6CiAgICAgIHNlbGYudW5pb25fdHlwZXMgPSBzZXQodW5pb25fdHlwZXMpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiAoaXNpbnN0YW5jZShvdGhlciwgVW5pb25IaW50LlVuaW9uQ29uc3RyYWludCkKICAgICAgICAgICAgICBhbmQgc2VsZi51bmlvbl90eXBlcyA9PSBvdGhlci51bmlvbl90eXBlcykKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgIHJldHVybiAxICsgc3VtKGhhc2godCkgZm9yIHQgaW4gc2VsZi51bmlvbl90eXBlcykKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICMgU29ydGluZyB0aGUgdHlwZSBuYW1lIHN0cmluZ3Mgc2ltcGxpZmllcyB1bml0IHRlc3RzLgogICAgICByZXR1cm4gJ1VuaW9uWyVzXScgJSAoJywgJy5qb2luKHNvcnRlZChfdW5pZmllZF9yZXByKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYudW5pb25fdHlwZXMpKSkKCiAgICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgICBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzOgogICAgICAgIHlpZWxkIHQKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFVuaW9uQ29uc3RyYWludCk6CiAgICAgICAgIyBBIHVuaW9uIHR5cGUgaXMgY29tcGF0aWJsZSBpZiBldmVyeSBwb3NzaWJsZSB0eXBlIGlzIGNvbXBhdGlibGUuCiAgICAgICAgIyBFLmcuIFVuaW9uW0EsIEIsIENdID4gVW5pb25bQSwgQl0uCiAgICAgICAgcmV0dXJuIGFsbChpc19jb25zaXN0ZW50X3dpdGgoZWxlbSwgc2VsZikKICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHN1Yi51bmlvbl90eXBlcykKICAgICAgIyBPdGhlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhpcyB1bmlvbidzIHN1YnR5cGVzLgogICAgICAjIEUuZy4gVW5pb25bQSwgQiwgQ10gPiBUIGlmIFQgPiBBIG9yIFQgPiBCIG9yIFQgPiBDLgogICAgICByZXR1cm4gYW55KGlzX2NvbnNpc3RlbnRfd2l0aChzdWIsIGVsZW0pCiAgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gc2VsZi51bmlvbl90eXBlcykKCiAgICBkZWYgdHlwZV9jaGVjayhzZWxmLCBpbnN0YW5jZSk6CiAgICAgIGVycm9yX21zZyA9ICcnCiAgICAgIGZvciB0IGluIHNlbGYudW5pb25fdHlwZXM6CiAgICAgICAgdHJ5OgogICAgICAgICAgY2hlY2tfY29uc3RyYWludCh0LCBpbnN0YW5jZSkKICAgICAgICAgIHJldHVybgogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgICAgICAgIGVycm9yX21zZyA9IHN0cihlKQogICAgICAgICAgY29udGludWUKCiAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAnJXMgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBFeHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBvbmUgb2Y6ICVzLCAnCiAgICAgICAgICAncmVjZWl2ZWQgJXMgaW5zdGVhZC4lcycKICAgICAgICAgICUgKHJlcHIoc2VsZiksCiAgICAgICAgICAgICB0dXBsZShzb3J0ZWQoX3VuaWZpZWRfcmVwcih0KSBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzKSksCiAgICAgICAgICAgICBpbnN0YW5jZS5fX2NsYXNzX18uX19uYW1lX18sIGVycm9yX21zZykpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICBpZiBub3QgaXNpbnN0YW5jZSh0eXBlX3BhcmFtcywgKGNvbGxlY3Rpb25zLlNlcXVlbmNlLCBzZXQpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaW9uIHdpdGhvdXQgYSBzZXF1ZW5jZSBvZiB0eXBlcy4nKQoKICAgICMgRmxhdHRlbiBuZXN0ZWQgVW5pb24ncyBhbmQgZHVwbGljYXRlZCByZXBlYXRlZCB0eXBlIGhpbnRzLgogICAgcGFyYW1zID0gc2V0KCkKICAgIGZvciB0IGluIHR5cGVfcGFyYW1zOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICAgIHQsIGVycm9yX21zZ19wcmVmaXg9J0FsbCBwYXJhbWV0ZXJzIHRvIGEgVW5pb24gaGludCcKICAgICAgKQoKICAgICAgaWYgaXNpbnN0YW5jZSh0LCBzZWxmLlVuaW9uQ29uc3RyYWludCk6CiAgICAgICAgcGFyYW1zIHw9IHQudW5pb25fdHlwZXMKICAgICAgZWxzZToKICAgICAgICBwYXJhbXMuYWRkKHQpCgogICAgaWYgQW55IGluIHBhcmFtczoKICAgICAgcmV0dXJuIEFueQogICAgZWxpZiBsZW4ocGFyYW1zKSA9PSAxOgogICAgICByZXR1cm4gbmV4dChpdGVyKHBhcmFtcykpCiAgICByZXR1cm4gc2VsZi5VbmlvbkNvbnN0cmFpbnQocGFyYW1zKQoKClVuaW9uQ29uc3RyYWludCA9IFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQKCgpjbGFzcyBPcHRpb25hbEhpbnQoVW5pb25IaW50KToKICAiIiJBbiBPcHRpb24gdHlwZS1oaW50LiBPcHRpb25hbFtYXSBhY2NlcHRzIGluc3RhbmNlcyBvZiBYIG9yIE5vbmUuCgogIFRoZSBPcHRpb25hbFtYXSBmYWN0b3J5IGZ1bmN0aW9uIHByb3hpZXMgdG8gVW5pb25bWCwgdHlwZShOb25lKV0KICAiIiIKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHB5X3R5cGUpOgogICAgIyBBIHNpbmdsZSB0eXBlIG11c3QgaGF2ZSBiZWVuIHBhc3NlZC4KICAgIGlmIGlzaW5zdGFuY2UocHlfdHlwZSwgY29sbGVjdGlvbnMuU2VxdWVuY2UpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0FuIE9wdGlvbiB0eXBlLWhpbnQgb25seSBhY2NlcHRzIGEgc2luZ2xlIHR5cGUgJwogICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlci4nKQoKICAgIHJldHVybiBVbmlvbltweV90eXBlLCB0eXBlKE5vbmUpXQoKCmNsYXNzIFR1cGxlSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBUdXBsZSB0eXBlLWhpbnQuCgogIFR1cGxlIGNhbiBhY2NlcHQgMSBvciBtb3JlIHR5cGUtaGludCBwYXJhbWV0ZXJzLgoKICBUdXBsZVtYLCBZXSByZXByZXNlbnRzIGEgdHVwbGUgb2YgKmV4YWN0bHkqIHR3byBlbGVtZW50cywgd2l0aCB0aGUgZmlyc3QKICBiZWluZyBvZiB0eXBlICdYJyBhbmQgdGhlIHNlY29uZCBhbiBpbnN0YW5jZSBvZiB0eXBlICdZJy4KCiAgICAqICgxLCAyKSBzYXRpc2ZpZXMgVHVwbGVbaW50LCBpbnRdCgogIEFkZGl0aW9uYWxseSwgb25lIGlzIGFibGUgdG8gdHlwZS1oaW50IGFuIGFyYml0YXJ5IGxlbmd0aCwgaG9tb2dlbmVvdXMgdHVwbGUKICBieSBwYXNzaW5nIHRoZSBFbGxpcHNpcyAoLi4uKSBvYmplY3QgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCgogIEFzIGFuIGV4YW1wbGUsIFR1cGxlW3N0ciwgLi4uXSBpbmRpY2F0ZXMgYSB0dXBsZSBvZiBhbnkgbGVuZ3RoIHdpdGggZWFjaAogIGVsZW1lbnQgYmVpbmcgYW4gaW5zdGFuY2Ugb2YgJ3N0cicuCiAgIiIiCgogIGNsYXNzIFR1cGxlU2VxdWVuY2VDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgICAgc3VwZXIoVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50LCBzZWxmKS5fX2luaXRfXyh0eXBlX3BhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdUdXBsZVslcywgLi4uXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFR1cGxlQ29uc3RyYWludCk6CiAgICAgICAgIyBFLmcuIFR1cGxlW0EsIEJdIDwgVHVwbGVbQywgLi4uXSBpZmYgQSA8IEMgYW5kIEIgPCBDLgogICAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGVsZW0sIHNlbGYuaW5uZXJfdHlwZSkKICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHN1Yi50dXBsZV90eXBlcykKICAgICAgcmV0dXJuIHN1cGVyKFR1cGxlU2VxdWVuY2VDb25zdHJhaW50LCBzZWxmKS5fY29uc2lzdGVudF93aXRoX2NoZWNrXyhzdWIpCgogIGNsYXNzIFR1cGxlQ29uc3RyYWludChJbmRleGFibGVUeXBlQ29uc3RyYWludCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfcGFyYW1zKToKICAgICAgc2VsZi50dXBsZV90eXBlcyA9IHR1cGxlKHR5cGVfcGFyYW1zKQoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpCiAgICAgICAgICAgICAgYW5kIHNlbGYudHVwbGVfdHlwZXMgPT0gb3RoZXIudHVwbGVfdHlwZXMpCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICByZXR1cm4gaGFzaChzZWxmLnR1cGxlX3R5cGVzKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdUdXBsZVslc10nICUgKCcsICcuam9pbihfdW5pZmllZF9yZXByKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi50dXBsZV90eXBlcykpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgZm9yIHQgaW4gc2VsZi50dXBsZV90eXBlczoKICAgICAgICB5aWVsZCB0CgogICAgZGVmIF9jb25zdHJhaW50X2Zvcl9pbmRleChzZWxmLCBpZHgpOgogICAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgICAgcmV0dXJuIHNlbGYudHVwbGVfdHlwZXNbaWR4XQoKICAgIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgICByZXR1cm4gKGlzaW5zdGFuY2Uoc3ViLCBzZWxmLl9fY2xhc3NfXykKICAgICAgICAgICAgICBhbmQgbGVuKHN1Yi50dXBsZV90eXBlcykgPT0gbGVuKHNlbGYudHVwbGVfdHlwZXMpCiAgICAgICAgICAgICAgYW5kIGFsbChpc19jb25zaXN0ZW50X3dpdGgoc3ViX2VsZW0sIGVsZW0pCiAgICAgICAgICAgICAgICAgICAgICBmb3Igc3ViX2VsZW0sIGVsZW0KICAgICAgICAgICAgICAgICAgICAgIGluIHppcChzdWIudHVwbGVfdHlwZXMsIHNlbGYudHVwbGVfdHlwZXMpKSkKCiAgICBkZWYgdHlwZV9jaGVjayhzZWxmLCB0dXBsZV9pbnN0YW5jZSk6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHR1cGxlX2luc3RhbmNlLCB0dXBsZSk6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgIlR1cGxlIHR5cGUgY29uc3RyYWludCB2aW9sYXRlZC4gVmFsaWQgb2JqZWN0IGluc3RhbmNlIG11c3QgYmUgb2YgIgogICAgICAgICAgICAidHlwZSAndHVwbGUnLiBJbnN0ZWFkLCBhbiBpbnN0YW5jZSBvZiAnJXMnIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICAgICUgdHVwbGVfaW5zdGFuY2UuX19jbGFzc19fLl9fbmFtZV9fKQoKICAgICAgaWYgbGVuKHR1cGxlX2luc3RhbmNlKSAhPSBsZW4oc2VsZi50dXBsZV90eXBlcyk6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJ1Bhc3NlZCBvYmplY3QgaW5zdGFuY2UgaXMgb2YgdGhlIHByb3BlciB0eXBlLCBidXQgZGlmZmVycyBpbiAnCiAgICAgICAgICAgICdsZW5ndGggZnJvbSB0aGUgaGludGVkIHR5cGUuIEV4cGVjdGVkIGEgdHVwbGUgb2YgbGVuZ3RoICVzLCAnCiAgICAgICAgICAgICdyZWNlaXZlZCBhIHR1cGxlIG9mIGxlbmd0aCAlcy4nCiAgICAgICAgICAgICUgKGxlbihzZWxmLnR1cGxlX3R5cGVzKSwgbGVuKHR1cGxlX2luc3RhbmNlKSkpCgogICAgICBmb3IgdHlwZV9wb3MsIChleHBlY3RlZCwgYWN0dWFsKSBpbiBlbnVtZXJhdGUoemlwKHNlbGYudHVwbGVfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfaW5zdGFuY2UpKToKICAgICAgICB0cnk6CiAgICAgICAgICBjaGVja19jb25zdHJhaW50KGV4cGVjdGVkLCBhY3R1YWwpCiAgICAgICAgICBjb250aW51ZQogICAgICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgIyVzIGluICcKICAgICAgICAgICAgICAndGhlIHBhc3NlZCB0dXBsZSBpcyBpbmNvcnJlY3QuIEV4cGVjdGVkIGFuIGluc3RhbmNlIG9mICcKICAgICAgICAgICAgICAndHlwZSAlcywgaW5zdGVhZCByZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLicKICAgICAgICAgICAgICAlIChyZXByKHNlbGYpLCB0eXBlX3BvcywgX3VuaWZpZWRfcmVwcihleHBlY3RlZCksCiAgICAgICAgICAgICAgICAgYWN0dWFsLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50ICMlcyBpbiAnCiAgICAgICAgICAgICAgJ3RoZSBwYXNzZWQgdHVwbGUgaXMgaW5jb3JyZWN0LiAlcycKICAgICAgICAgICAgICAlIChyZXByKHNlbGYpLCB0eXBlX3BvcywgZSkpCgogICAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIGNvbmNyZXRlX3R5cGUpOgogICAgICBiaW5kaW5ncyA9IHt9CiAgICAgIGlmIGlzaW5zdGFuY2UoY29uY3JldGVfdHlwZSwgVHVwbGVDb25zdHJhaW50KToKICAgICAgICBmb3IgYSwgYiBpbiB6aXAoc2VsZi50dXBsZV90eXBlcywgY29uY3JldGVfdHlwZS50dXBsZV90eXBlcyk6CiAgICAgICAgICBiaW5kaW5ncy51cGRhdGUobWF0Y2hfdHlwZV92YXJpYWJsZXMoYSwgYikpCiAgICAgIHJldHVybiBiaW5kaW5ncwoKICAgIGRlZiBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYsIGJpbmRpbmdzKToKICAgICAgYm91bmRfdHVwbGVfdHlwZXMgPSB0dXBsZSgKICAgICAgICAgIGJpbmRfdHlwZV92YXJpYWJsZXModCwgYmluZGluZ3MpIGZvciB0IGluIHNlbGYudHVwbGVfdHlwZXMpCiAgICAgIGlmIGJvdW5kX3R1cGxlX3R5cGVzID09IHNlbGYudHVwbGVfdHlwZXM6CiAgICAgICAgcmV0dXJuIHNlbGYKICAgICAgcmV0dXJuIFR1cGxlW2JvdW5kX3R1cGxlX3R5cGVzXQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbXMpOgogICAgZWxsaXBzaXMgPSBGYWxzZQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW1zLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CiAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBoaW50aW5nIHR1cGxlcyB3aXRoIGFyaXR5LTEuCiAgICAgIHR5cGVfcGFyYW1zID0gKHR5cGVfcGFyYW1zLCkKCiAgICBpZiB0eXBlX3BhcmFtcyBhbmQgdHlwZV9wYXJhbXNbLTFdID09IEVsbGlwc2lzOgogICAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdFbGxpcHNpcyBjYW4gb25seSBiZSB1c2VkIHRvIHR5cGUtaGludCBhbiBhcmJpdHJhcnkgJwogICAgICAgICAgICAgICAgICAgICAgICAnbGVuZ3RoIHR1cGxlIG9mIGNvbnRhaW5pbmcgYSBzaW5nbGUgdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICAnVHVwbGVbQSwgLi4uXS4nKQogICAgICAjIFR1cGxlW0EsIC4uLl0gaW5kaWNhdGVzIGFuIGFyYml0YXJ5IGxlbmd0aCBob21vZ2VuZW91cyB0dXBsZS4KICAgICAgdHlwZV9wYXJhbXMgPSB0eXBlX3BhcmFtc1s6MV0KICAgICAgZWxsaXBzaXMgPSBUcnVlCgogICAgZm9yIHQgaW4gdHlwZV9wYXJhbXM6CiAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgICAgdCwKICAgICAgICAgIGVycm9yX21zZ19wcmVmaXg9J0FsbCBwYXJhbWV0ZXJzIHRvIGEgVHVwbGUgaGludCcKICAgICAgKQoKICAgIGlmIGVsbGlwc2lzOgogICAgICByZXR1cm4gc2VsZi5UdXBsZVNlcXVlbmNlQ29uc3RyYWludCh0eXBlX3BhcmFtc1swXSkKICAgIHJldHVybiBzZWxmLlR1cGxlQ29uc3RyYWludCh0eXBlX3BhcmFtcykKCgpUdXBsZUNvbnN0cmFpbnQgPSBUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50ClR1cGxlU2VxdWVuY2VDb25zdHJhaW50ID0gVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50CgoKY2xhc3MgTGlzdEhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgTGlzdCB0eXBlLWhpbnQuCgogIExpc3RbWF0gcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhIGxpc3QgcG9wdWxhdGVkIGJ5IGEgc2luZ2xlIGhvbW9nZW5lb3VzCiAgdHlwZS4gVGhlIHBhcmFtZXRlcml6ZWQgdHlwZSAnWCcgY2FuIGVpdGhlciBiZSBhIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGFuCiAgaW5zdGFuY2Ugb2YgYW5vdGhlciBUeXBlQ29uc3RyYWludC4KCiAgICAqIFsnMScsICcyJywgJzMnXSBzYXRpc2ZpZXMgTGlzdFtzdHJdCiAgIiIiCgogIGNsYXNzIExpc3RDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiAgX19pbml0X18oc2VsZiwgbGlzdF90eXBlKToKICAgICAgc3VwZXIoTGlzdEhpbnQuTGlzdENvbnN0cmFpbnQsIHNlbGYpLl9faW5pdF9fKGxpc3RfdHlwZSwgbGlzdCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnTGlzdFslc10nICUgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0KToKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHQsIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBMaXN0IGhpbnQnKQoKICAgIHJldHVybiBzZWxmLkxpc3RDb25zdHJhaW50KHQpCgoKTGlzdENvbnN0cmFpbnQgPSBMaXN0SGludC5MaXN0Q29uc3RyYWludAoKCmNsYXNzIEtWSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBLViB0eXBlLWhpbnQsIHJlcHJlc2VudHMgYSBLZXktVmFsdWUgcGFpciBvZiBhIHBhcnRpY3VsYXIgdHlwZS4KCiAgSW50ZXJuYWxseSwgS1ZbWCwgWV0gcHJveGllcyB0byBUdXBsZVtYLCBZXS4gQSBLViB0eXBlLWhpbnQgYWNjZXB0cyBvbmx5CiAgYWNjZXB0cyBleGFjdGx5IHR3byB0eXBlLXBhcmFtZXRlcnMuIFRoZSBmaXJzdCByZXByZXNlbnRzIHRoZSByZXF1aXJlZAogIGtleS10eXBlIGFuZCB0aGUgc2Vjb25kIHRoZSByZXF1aXJlZCB2YWx1ZS10eXBlLgogICIiIgoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbXMpOgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIHR1cGxlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdG8gS1YgdHlwZS1oaW50IG11c3QgYmUgYSB0dXBsZSBvZiB0eXBlczogJwogICAgICAgICAgICAgICAgICAgICAgJ0tWWy4uLCAuLl0uJykKCiAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdMZW5ndGggb2YgcGFyYW1ldGVycyB0byBhIEtWIHR5cGUtaGludCBtdXN0IGJlIGV4YWN0bHkgMi4gUGFzc2VkICcKICAgICAgICAgICdwYXJhbWV0ZXJzOiAlcywgaGF2ZSBhIGxlbmd0aCBvZiAlcy4nICUKICAgICAgICAgICh0eXBlX3BhcmFtcywgbGVuKHR5cGVfcGFyYW1zKSkKICAgICAgKQoKICAgIHJldHVybiBUdXBsZVt0eXBlX3BhcmFtc10KCgpkZWYga2V5X3ZhbHVlX3R5cGVzKGt2KToKICAiIiJSZXR1cm5zIHRoZSBrZXkgYW5kIHZhbHVlIHR5cGUgb2YgYSBLViB0eXBlLWhpbnQuCgogIEFyZ3M6CiAgICBrdjogQW4gaW5zdGFuY2Ugb2YgYSBUeXBlQ29uc3RyYWludCBzdWItY2xhc3MuCiAgUmV0dXJuczoKICAgIEEgdHVwbGU6IChrZXlfdHlwZSwgdmFsdWVfdHlwZSkgaWYgdGhlIHBhc3NlZCB0eXBlLWhpbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYQogICAgS1YgdHlwZS1oaW50LCBhbmQgKEFueSwgQW55KSBvdGhlcndpc2UuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShrdiwgVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCk6CiAgICByZXR1cm4ga3YudHVwbGVfdHlwZXMKICByZXR1cm4gQW55LCBBbnkKCgpjbGFzcyBEaWN0SGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBEaWN0IHR5cGUtaGludC4KCiAgRGljdFtLLCBWXSBSZXByZXNlbnRzIGEgZGljdGlvbmFyeSB3aGVyZSBhbGwga2V5cyBhcmUgb2YgYSBwYXJ0aWN1bGFyIHR5cGUKICBhbmQgYWxsIHZhbHVlcyBhcmUgb2YgYW5vdGhlciAocG9zc2libGUgdGhlIHNhbWUpIHR5cGUuCiAgIiIiCgogIGNsYXNzIERpY3RDb25zdHJhaW50KFR5cGVDb25zdHJhaW50KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwga2V5X3R5cGUsIHZhbHVlX3R5cGUpOgogICAgICBzZWxmLmtleV90eXBlID0ga2V5X3R5cGUKICAgICAgc2VsZi52YWx1ZV90eXBlID0gdmFsdWVfdHlwZQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdEaWN0WyVzLCAlc10nICUgKF91bmlmaWVkX3JlcHIoc2VsZi5rZXlfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKHNlbGYudmFsdWVfdHlwZSkpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICAgIGFuZCBzZWxmLmtleV90eXBlID09IG90aGVyLmtleV90eXBlCiAgICAgICAgICAgICAgYW5kIHNlbGYudmFsdWVfdHlwZSA9PSBvdGhlci52YWx1ZV90eXBlKQoKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYua2V5X3R5cGUsIHNlbGYudmFsdWVfdHlwZSkpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgeWllbGQgc2VsZi5rZXlfdHlwZQogICAgICB5aWVsZCBzZWxmLnZhbHVlX3R5cGUKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIua2V5X3R5cGUsIHNlbGYua2V5X3R5cGUpCiAgICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIua2V5X3R5cGUsIHNlbGYua2V5X3R5cGUpKQoKICAgIGRlZiBfcmFpc2VfaGludF9leGNlcHRpb25fb3JfaW5uZXJfZXhjZXB0aW9uKHNlbGYsIGlzX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyX2Vycm9yX21lc3NhZ2U9JycpOgogICAgICBpbmNvcnJlY3RfdHlwZSA9ICd2YWx1ZXMnIGlmIG5vdCBpc19rZXkgZWxzZSAna2V5cycKICAgICAgaGludGVkX3R5cGUgPSBzZWxmLnZhbHVlX3R5cGUgaWYgbm90IGlzX2tleSBlbHNlIHNlbGYua2V5X3R5cGUKICAgICAgaWYgaW5uZXJfZXJyb3JfbWVzc2FnZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCAlcy10eXBlIGNvbnN0cmFpbnQgdmlvbGF0ZWQuIEFsbCAlcyBzaG91bGQgYmUgb2YgdHlwZSAnCiAgICAgICAgICAgICclcy4gSW5zdGVhZDogJXMnCiAgICAgICAgICAgICUgKHJlcHIoc2VsZiksIGluY29ycmVjdF90eXBlWzotMV0sIGluY29ycmVjdF90eXBlLAogICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKGhpbnRlZF90eXBlKSwgaW5uZXJfZXJyb3JfbWVzc2FnZSkKICAgICAgICApCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgJXMtdHlwZSBjb25zdHJhaW50IHZpb2xhdGVkLiBBbGwgJXMgc2hvdWxkIGJlIG9mICcKICAgICAgICAgICAgJ3R5cGUgJXMuIEluc3RlYWQsICVzIGlzIG9mIHR5cGUgJXMuJwogICAgICAgICAgICAlIChyZXByKHNlbGYpLCBpbmNvcnJlY3RfdHlwZVs6LTFdLCBpbmNvcnJlY3RfdHlwZSwKICAgICAgICAgICAgICAgX3VuaWZpZWRfcmVwcihoaW50ZWRfdHlwZSksCiAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZSwgaW5jb3JyZWN0X2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICApCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgZGljdF9pbnN0YW5jZSk6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRpY3RfaW5zdGFuY2UsIGRpY3QpOgogICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICdEaWN0IHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gQWxsIHBhc3NlZCBpbnN0YW5jZXMgbXVzdCBiZSBvZiAnCiAgICAgICAgICAgICd0eXBlIGRpY3QuICVzIGlzIG9mIHR5cGUgJXMuJwogICAgICAgICAgICAlIChkaWN0X2luc3RhbmNlLCBkaWN0X2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0X2luc3RhbmNlLml0ZXJpdGVtcygpOgogICAgICAgIHRyeToKICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnQoc2VsZi5rZXlfdHlwZSwga2V5KQogICAgICAgIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgICBzZWxmLl9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb24oVHJ1ZSwga2V5LCBzdHIoZSkpCiAgICAgICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3I6CiAgICAgICAgICBzZWxmLl9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb24oVHJ1ZSwga2V5KQoKICAgICAgICB0cnk6CiAgICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYudmFsdWVfdHlwZSwgdmFsdWUpCiAgICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihGYWxzZSwgdmFsdWUsIHN0cihlKSkKICAgICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihGYWxzZSwgdmFsdWUpCgogICAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIGNvbmNyZXRlX3R5cGUpOgogICAgICBpZiBpc2luc3RhbmNlKGNvbmNyZXRlX3R5cGUsIERpY3RDb25zdHJhaW50KToKICAgICAgICBiaW5kaW5ncyA9IHt9CiAgICAgICAgYmluZGluZ3MudXBkYXRlKAogICAgICAgICAgICBtYXRjaF90eXBlX3ZhcmlhYmxlcyhzZWxmLmtleV90eXBlLCBjb25jcmV0ZV90eXBlLmtleV90eXBlKSkKICAgICAgICBiaW5kaW5ncy51cGRhdGUoCiAgICAgICAgICAgIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYudmFsdWVfdHlwZSwgY29uY3JldGVfdHlwZS52YWx1ZV90eXBlKSkKICAgICAgICByZXR1cm4gYmluZGluZ3MKICAgICAgcmV0dXJuIHt9CgogICAgZGVmIGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZiwgYmluZGluZ3MpOgogICAgICBib3VuZF9rZXlfdHlwZSA9IGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZi5rZXlfdHlwZSwgYmluZGluZ3MpCiAgICAgIGJvdW5kX3ZhbHVlX3R5cGUgPSBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYudmFsdWVfdHlwZSwgYmluZGluZ3MpCiAgICAgIGlmIChib3VuZF9rZXlfdHlwZSwgc2VsZi5rZXlfdHlwZSkgPT0gKGJvdW5kX3ZhbHVlX3R5cGUsIHNlbGYudmFsdWVfdHlwZSk6CiAgICAgICAgcmV0dXJuIHNlbGYKICAgICAgcmV0dXJuIERpY3RbYm91bmRfa2V5X3R5cGUsIGJvdW5kX3ZhbHVlX3R5cGVdCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICAjIFR5cGUgcGFyYW0gbXVzdCBiZSBhIChrLCB2KSBwYWlyLgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIHR1cGxlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdG8gRGljdCB0eXBlLWhpbnQgbXVzdCBiZSBhIHR1cGxlIG9mIHR5cGVzOiAnCiAgICAgICAgICAgICAgICAgICAgICAnRGljdFsuLiwgLi5dLicpCgogICAgaWYgbGVuKHR5cGVfcGFyYW1zKSAhPSAyOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnTGVuZ3RoIG9mIHBhcmFtZXRlcnMgdG8gYSBEaWN0IHR5cGUtaGludCBtdXN0IGJlIGV4YWN0bHkgMi4gUGFzc2VkICcKICAgICAgICAgICdwYXJhbWV0ZXJzOiAlcywgaGF2ZSBhIGxlbmd0aCBvZiAlcy4nICUKICAgICAgICAgICh0eXBlX3BhcmFtcywgbGVuKHR5cGVfcGFyYW1zKSkKICAgICAgKQoKICAgIGtleV90eXBlLCB2YWx1ZV90eXBlID0gdHlwZV9wYXJhbXMKCiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICBrZXlfdHlwZSwKICAgICAgICBlcnJvcl9tc2dfcHJlZml4PSdLZXktdHlwZSBwYXJhbWV0ZXIgdG8gYSBEaWN0IGhpbnQnCiAgICApCiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICB2YWx1ZV90eXBlLAogICAgICAgIGVycm9yX21zZ19wcmVmaXg9J1ZhbHVlLXR5cGUgcGFyYW1ldGVyIHRvIGEgRGljdCBoaW50JwogICAgKQoKICAgIHJldHVybiBzZWxmLkRpY3RDb25zdHJhaW50KGtleV90eXBlLCB2YWx1ZV90eXBlKQoKCkRpY3RDb25zdHJhaW50ID0gRGljdEhpbnQuRGljdENvbnN0cmFpbnQKCgpjbGFzcyBTZXRIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBIFNldCB0eXBlLWhpbnQuCgoKICBTZXRbWF0gZGVmaW5lcyBhIHR5cGUtaGludCBmb3IgYSBzZXQgb2YgaG9tb2dlbmVvdXMgdHlwZXMuICdYJyBtYXkgYmUgZWl0aGVyIGEKICBidWlsdC1pbiBQeXRob24gdHlwZSBvciBhIGFub3RoZXIgbmVzdGVkIFR5cGVDb25zdHJhaW50LgogICIiIgoKICBjbGFzcyBTZXRUeXBlQ29uc3RyYWludChTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9wYXJhbSk6CiAgICAgIHN1cGVyKFNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQsIHNlbGYpLl9faW5pdF9fKHR5cGVfcGFyYW0sIHNldCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnU2V0WyVzXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW0pOgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgdHlwZV9wYXJhbSwKICAgICAgICBlcnJvcl9tc2dfcHJlZml4PSdQYXJhbWV0ZXIgdG8gYSBTZXQgaGludCcKICAgICkKCiAgICByZXR1cm4gc2VsZi5TZXRUeXBlQ29uc3RyYWludCh0eXBlX3BhcmFtKQoKClNldFR5cGVDb25zdHJhaW50ID0gU2V0SGludC5TZXRUeXBlQ29uc3RyYWludAoKCmNsYXNzIEl0ZXJhYmxlSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQW4gSXRlcmFibGUgdHlwZS1oaW50LgoKICBJdGVyYWJsZVtYXSBkZWZpbmVzIGEgdHlwZS1oaW50IGZvciBhbiBvYmplY3QgaW1wbGVtZW50aW5nIGFuICdfX2l0ZXJfXycKICBtZXRob2Qgd2hpY2ggeWllbGRzIG9iamVjdHMgd2hpY2ggYXJlIGFsbCBvZiB0aGUgc2FtZSB0eXBlLgogICIiIgoKICBjbGFzcyBJdGVyYWJsZVR5cGVDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyX3R5cGUpOgogICAgICBzdXBlcihJdGVyYWJsZUhpbnQuSXRlcmFibGVUeXBlQ29uc3RyYWludCwgc2VsZikuX19pbml0X18oCiAgICAgICAgICBpdGVyX3R5cGUsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdJdGVyYWJsZVslc10nICUgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpCgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIGlmIGlzaW5zdGFuY2Uoc3ViLCBTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgICAgICByZXR1cm4gaXNfY29uc2lzdGVudF93aXRoKHN1Yi5pbm5lcl90eXBlLCBzZWxmLmlubmVyX3R5cGUpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShzdWIsIFR1cGxlQ29uc3RyYWludCk6CiAgICAgICAgaWYgbm90IHN1Yi50dXBsZV90eXBlczoKICAgICAgICAgICMgVGhlIGVtcHR5IHR1cGxlIGlzIGNvbnNpc3RlbnQgd2l0aCBJdGVyYXRvcltUXSBmb3IgYW55IFQuCiAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICMgRWFjaCBlbGVtZW50IGluIHRoZSBoZXRyb2dlbmlvdXMgdHVwbGUgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGgKICAgICAgICAjIHRoZSBpdGVyYXRvciB0eXBlLgogICAgICAgICMgRS5nLiBUdXBsZVtBLCBCXSA8IEl0ZXJhYmxlW0NdIGlmIEEgPCBDIGFuZCBCIDwgQy4KICAgICAgICByZXR1cm4gYWxsKGlzX2NvbnNpc3RlbnRfd2l0aChlbGVtLCBzZWxmLmlubmVyX3R5cGUpCiAgICAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBzdWIudHVwbGVfdHlwZXMpCiAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbSk6CiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICB0eXBlX3BhcmFtLCBlcnJvcl9tc2dfcHJlZml4PSdQYXJhbWV0ZXIgdG8gYW4gSXRlcmFibGUgaGludCcKICAgICkKCiAgICByZXR1cm4gc2VsZi5JdGVyYWJsZVR5cGVDb25zdHJhaW50KHR5cGVfcGFyYW0pCgoKSXRlcmFibGVUeXBlQ29uc3RyYWludCA9IEl0ZXJhYmxlSGludC5JdGVyYWJsZVR5cGVDb25zdHJhaW50CgoKY2xhc3MgSXRlcmF0b3JIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBbiBJdGVyYXRvciB0eXBlLWhpbnQuCgogIEl0ZXJhdG9yW1hdIGRlZmluZXMgYSB0eXBlLWhpbnQgZm9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgYm90aCAnX19pdGVyX18nCiAgYW5kIGEgJ25leHQnIG1ldGhvZCB3aGljaCB5aWVsZHMgb2JqZWN0cyB3aGljaCBhcmUgYWxsIG9mIHRoZSBzYW1lIHR5cGUuIFR5cGUKICBjaGVja2luZyBhIHR5cGUtaGludCBvZiB0aGlzIHR5cGUgaXMgZGVmZXJyZWQgaW4gb3JkZXIgdG8gYXZvaWQgZGVwbGV0aW5nIHRoZQogIHVuZGVybHlpbmcgbGF6aWx5IGdlbmVyYXRlZCBzZXF1ZW5jZS4gU2VlIGRlY29yYXRvcnMuaW50ZXJsZWF2ZV90eXBlX2NoZWNrIGZvcgogIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAgIiIiCgogIGNsYXNzIEl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0KToKICAgICAgc2VsZi55aWVsZGVkX3R5cGUgPSB0CgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICByZXR1cm4gJ0l0ZXJhdG9yWyVzXScgJSBfdW5pZmllZF9yZXByKHNlbGYueWllbGRlZF90eXBlKQoKICAgIGRlZiBfaW5uZXJfdHlwZXMoc2VsZik6CiAgICAgIHlpZWxkIHNlbGYueWllbGRlZF90eXBlCgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIHJldHVybiAoaXNpbnN0YW5jZShzdWIsIHNlbGYuX19jbGFzc19fKQogICAgICAgICAgICAgIGFuZCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLnlpZWxkZWRfdHlwZSwgc2VsZi55aWVsZGVkX3R5cGUpKQoKICAgIGRlZiB0eXBlX2NoZWNrKHNlbGYsIGluc3RhbmNlKToKICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGxhenkgdHlwZXMsIHdlIG9ubHkgbmVlZCB0byBlbmZvcmNlIHRoZSB1bmRlcmx5aW5nCiAgICAgICMgdHlwZS4gVGhpcyBhdm9pZCBoYXZpbmcgdG8gY29tcHV0ZSB0aGUgZW50aXJldHkgb2YgdGhlIGdlbmVyYXRvci9pdGVyLgogICAgICB0cnk6CiAgICAgICAgY2hlY2tfY29uc3RyYWludChzZWxmLnlpZWxkZWRfdHlwZSwgaW5zdGFuY2UpCiAgICAgICAgcmV0dXJuCiAgICAgIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkOiAlcycgJSAocmVwcihzZWxmKSwgc3RyKGUpKSkKICAgICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3I6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBFeHBlY3RlZCBhIGl0ZXJhdG9yIG9mIHR5cGUgJXMuICcKICAgICAgICAgICAgJ0luc3RlYWQgcmVjZWl2ZWQgYSBpdGVyYXRvciBvZiB0eXBlICVzLicKICAgICAgICAgICAgJSAocmVwcihzZWxmKSwgX3VuaWZpZWRfcmVwcihzZWxmLnlpZWxkZWRfdHlwZSksCiAgICAgICAgICAgICAgIGluc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgIHR5cGVfcGFyYW0sIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBhbiBJdGVyYXRvciBoaW50JwogICAgKQoKICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQodHlwZV9wYXJhbSkKCgpJdGVyYXRvclR5cGVDb25zdHJhaW50ID0gSXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQKCgpjbGFzcyBXaW5kb3dlZFR5cGVDb25zdHJhaW50KFR5cGVDb25zdHJhaW50KToKICAiIiJBIHR5cGUgY29uc3RyYWludCBmb3IgV2luZG93ZWRWYWx1ZSBvYmplY3RzLgoKICBNb3N0bHkgZm9yIGludGVybmFsIHVzZS4KCiAgQXR0cmlidXRlczoKICAgIGlubmVyX3R5cGU6IFRoZSB0eXBlIHdoaWNoIHRoZSBlbGVtZW50IHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZi4KICAiIiIKICBfX21ldGFjbGFzc19fID0gR2V0aXRlbUNvbnN0cnVjdG9yCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbm5lcl90eXBlKToKICAgIHNlbGYuaW5uZXJfdHlwZSA9IGlubmVyX3R5cGUKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQpCiAgICAgICAgICAgIGFuZCBzZWxmLmlubmVyX3R5cGUgPT0gb3RoZXIuaW5uZXJfdHlwZSkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5pbm5lcl90eXBlKSBeIDEzICogaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgeWllbGQgc2VsZi5pbm5lcl90eXBlCgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgIGFuZCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLmlubmVyX3R5cGUsIHNlbGYuaW5uZXJfdHlwZSkpCgogIGRlZiB0eXBlX2NoZWNrKHNlbGYsIGluc3RhbmNlKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CiAgICBpZiBub3QgaXNpbnN0YW5jZShpbnN0YW5jZSwgd2luZG93LldpbmRvd2VkVmFsdWUpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgIldpbmRvdyB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFZhbGlkIG9iamVjdCBpbnN0YW5jZSAiCiAgICAgICAgICAibXVzdCBiZSBvZiB0eXBlICdXaW5kb3dlZFZhbHVlJy4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YgJyVzJyAiCiAgICAgICAgICAid2FzIHJlY2VpdmVkLiIKICAgICAgICAgICUgKGluc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgdHJ5OgogICAgICBjaGVja19jb25zdHJhaW50KHNlbGYuaW5uZXJfdHlwZSwgaW5zdGFuY2UudmFsdWUpCiAgICBleGNlcHQgKENvbXBvc2l0ZVR5cGVIaW50RXJyb3IsIFNpbXBsZVR5cGVIaW50RXJyb3IpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50IGluICcKICAgICAgICAgICdpcyBpbmNvcnJlY3QuIEV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMsICcKICAgICAgICAgICdpbnN0ZWFkIHJlY2VpdmVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMuJyAlCiAgICAgICAgICAocmVwcihzZWxmKSwgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpLAogICAgICAgICAgIGluc3RhbmNlLnZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXykpCgoKY2xhc3MgR2VuZXJhdG9ySGludChJdGVyYXRvckhpbnQpOgogIHBhc3MKCgojIENyZWF0ZSB0aGUgYWN0dWFsIGluc3RhbmNlcyBmb3IgYWxsIGRlZmluZWQgdHlwZS1oaW50cyBhYm92ZS4KQW55ID0gQW55VHlwZUNvbnN0cmFpbnQoKQpVbmlvbiA9IFVuaW9uSGludCgpCk9wdGlvbmFsID0gT3B0aW9uYWxIaW50KCkKVHVwbGUgPSBUdXBsZUhpbnQoKQpMaXN0ID0gTGlzdEhpbnQoKQpLViA9IEtWSGludCgpCkRpY3QgPSBEaWN0SGludCgpClNldCA9IFNldEhpbnQoKQpJdGVyYWJsZSA9IEl0ZXJhYmxlSGludCgpCkl0ZXJhdG9yID0gSXRlcmF0b3JIaW50KCkKR2VuZXJhdG9yID0gR2VuZXJhdG9ySGludCgpCldpbmRvd2VkVmFsdWUgPSBXaW5kb3dlZFR5cGVDb25zdHJhaW50CgoKX0tOT1dOX1BSSU1JVElWRV9UWVBFUyA9IHsKICAgIGRpY3Q6IERpY3RbQW55LCBBbnldLAogICAgbGlzdDogTGlzdFtBbnldLAogICAgdHVwbGU6IFR1cGxlW0FueSwgLi4uXSwKICAgIHNldDogU2V0W0FueV0sCiAgICAjIFVzaW5nIE5vbmUgZm9yIHRoZSBOb25lVHlwZSBpcyBhIGNvbW1vbiBjb252ZW50aW9uLgogICAgTm9uZTogdHlwZShOb25lKSwKfQoKCmRlZiBub3JtYWxpemUoeCk6CiAgaWYgeCBpbiBfS05PV05fUFJJTUlUSVZFX1RZUEVTOgogICAgcmV0dXJuIF9LTk9XTl9QUklNSVRJVkVfVFlQRVNbeF0KICByZXR1cm4geAoKCmRlZiBpc19jb25zaXN0ZW50X3dpdGgoc3ViLCBiYXNlKToKICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHR5cGUgYSBpcyBjb25zaXN0ZW50IHdpdGggYi4KCiAgVGhpcyBpcyBhY2NvcmRpZyB0byB0aGUgdGVybWlub2xvZ3kgb2YgUEVQIDQ4My80ODQuICBUaGlzIHJlbGF0aW9uc2hpcCBpcwogIG5laXRoZXIgc3ltbWV0cmljIG5vciB0cmFuc2l0aXZlLCBidXQgYSBnb29kIG1uZW1vbmljIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0CiAgaXNfY29uc2lzdGVudF93aXRoKGEsIGIpIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGUgaXNzdWJjbGFzcyhhLCBiKQogIHJlbGF0aW9uLCBidXQgYWxzbyBoYW5kbGVzIHRoZSBzcGVjaWFsIEFueSB0eXBlIGFzIHdlbGwgYXMgdHlwZQogIHBhcmFtZXRlcml6YXRpb24uCiAgIiIiCiAgaWYgc3ViID09IGJhc2U6CiAgICAjIENvbW1vbiBzcGVjaWFsIGNhc2UuCiAgICByZXR1cm4gVHJ1ZQogIGlmIGlzaW5zdGFuY2Uoc3ViLCBBbnlUeXBlQ29uc3RyYWludCkgb3IgaXNpbnN0YW5jZShiYXNlLCBBbnlUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gVHJ1ZQogIHN1YiA9IG5vcm1hbGl6ZShzdWIpCiAgYmFzZSA9IG5vcm1hbGl6ZShiYXNlKQogIGlmIGlzaW5zdGFuY2UoYmFzZSwgVHlwZUNvbnN0cmFpbnQpOgogICAgaWYgaXNpbnN0YW5jZShzdWIsIFVuaW9uQ29uc3RyYWludCk6CiAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGMsIGJhc2UpIGZvciBjIGluIHN1Yi51bmlvbl90eXBlcykKICAgIHJldHVybiBiYXNlLl9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHN1YikKICBlbGlmIGlzaW5zdGFuY2Uoc3ViLCBUeXBlQ29uc3RyYWludCk6CiAgICAjIE5vdGhpbmcgYnV0IG9iamVjdCBsaXZlcyBhYm92ZSBhbnkgdHlwZSBjb25zdHJhaW50cy4KICAgIHJldHVybiBiYXNlID09IG9iamVjdAogIHJldHVybiBpc3N1YmNsYXNzKHN1YiwgYmFzZSkKfXLDAgAAKFgUAAAAVHlwZUNvbnN0cmFpbnQudmlzaXRYAwAAAGRlZkufS66HWBMAAABiaW5kX3R5cGVfdmFyaWFibGVzWAMAAABkZWZLtku6h1gdAAAAU2VxdWVuY2VUeXBlQ29uc3RyYWludC5fX2VxX19YAwAAAGRlZkvdS+GHWCoAAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZk0PAU0WAYdYIgAAAFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk3CAU3EAYdYIgAAAFNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk1tA01vA4dYIAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZN8AJN8wKHWCwAAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fX3JlcHJfX1gDAAAAZGVmTbcDTbkDh1gWAAAAV2luZG93ZWRUeXBlQ29uc3RyYWludFgFAAAAY2xhc3NN3ANNCQSHWCIAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNzAFN0AGHWCYAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9pbm5lcl90eXBlc1gDAAAAZGVmTUsCTU4Ch1g7AAAASXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja19YAwAAAGRlZk2PA02cA4dYKgAAAFR1cGxlSGludC5UdXBsZVNlcXVlbmNlQ29uc3RyYWludC5fX3JlcHJfX1gDAAAAZGVmTTECTTMCh1gQAAAAY2hlY2tfY29uc3RyYWludFgDAAAAZGVmTXABTY0Bh1gJAAAAVW5pb25IaW50WAUAAABjbGFzc02tAU0GAodYFQAAAFR5cGVWYXJpYWJsZS5fX2luaXRfX1gDAAAAZGVmTaABTaIBh1ggAAAAVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC5fX2VxX19YAwAAAGRlZk3FAU3IAYdYLAAAAEl0ZXJhdG9ySGludC5JdGVyYXRvclR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNtANNtgOHWBgAAABJdGVyYXRvckhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk3RA03XA4dYIgAAAFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk09Ak0/AodYFAAAAG1hdGNoX3R5cGVfdmFyaWFibGVzWAMAAABkZWZLsEu0h1gdAAAAdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW1YAwAAAGRlZk0+AU1dAYdYCAAAAERpY3RIaW50WAUAAABjbGFzc03nAk1eA4dYLQAAAFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQuYmluZF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTYECTYcCh1gvAAAAVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludC5fY29uc3RyYWludF9mb3JfaW5kZXhYAwAAAGRlZk1PAk1SAodYCAAAAExpc3RIaW50WAUAAABjbGFzc02nAk29AodYEgAAAEtWSGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTcoCTdcCh1gUAAAATGlzdEhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk25Ak29AodYFQAAAFR5cGVWYXJpYWJsZS5fX3JlcHJfX1gDAAAAZGVmTaMBTaUBh1gMAAAAT3B0aW9uYWxIaW50WAUAAABjbGFzc00LAk0YAodYHgAAAENvbXBvc2l0ZVR5cGVIaW50Ll9fZ2V0aXRlbV9fX1gDAAAAZGVmTSkBTTwBh1gHAAAAU2V0SGludFgFAAAAY2xhc3NNYwNNegOHWDAAAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZk26A028A4dYLAAAAEl0ZXJhYmxlSGludC5JdGVyYWJsZVR5cGVDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNjANNjgOHWC4AAABXaW5kb3dlZFR5cGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZN8wNN9gOHWCoAAABUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk0tAk0wAodYBgAAAEtWSGludFgFAAAAY2xhc3NNwgJN1wKHWAkAAABUdXBsZUhpbnRYBQAAAGNsYXNzTRoCTaECh1gjAAAAV2luZG93ZWRUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZk3wA03yA4dYEwAAAFNpbXBsZVR5cGVIaW50RXJyb3JYBQAAAGNsYXNzS11LX4dYGQAAAFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnRYBQAAAGNsYXNzTcABTfABh1gMAAAASXRlcmF0b3JIaW50WAUAAABjbGFzc02oA03XA4dYIAAAAFR5cGVWYXJpYWJsZS5iaW5kX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNqQFNqwGHWBcAAABMaXN0SGludC5MaXN0Q29uc3RyYWludFgFAAAAY2xhc3NNsQJNuAKHWCMAAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9pbm5lcl90eXBlc1gDAAAAZGVmS+VL54dYEQAAAEFueVR5cGVDb25zdHJhaW50WAUAAABjbGFzc02PAU2cAYdYHwAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZkvZS9yHWCIAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZNyQFNywGHWA8AAABrZXlfdmFsdWVfdHlwZXNYAwAAAGRlZk3ZAk3lAodYOQAAAFR1cGxlSGludC5UdXBsZVNlcXVlbmNlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmTTQCTToCh1gUAAAARGljdEhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk1FA01eA4dYDQAAAF91bmlmaWVkX3JlcHJYAwAAAGRlZk1fAU1uAYdYHwAAAFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk3mA03oA4dYDQAAAEdlbmVyYXRvckhpbnRYBQAAAGNsYXNzTQsETQ0Eh1gSAAAAR2V0aXRlbUNvbnN0cnVjdG9yWAUAAABjbGFzc0tlS2mHWCEAAABUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnRYBQAAAGNsYXNzTSsCTToCh1ghAAAAVHlwZVZhcmlhYmxlLm1hdGNoX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNpgFNqAGHWCIAAABUeXBlQ29uc3RyYWludC5iaW5kX3R5cGVfdmFyaWFibGVzWAMAAABkZWZLmEuah1gXAAAASW5kZXhhYmxlVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzS7xLyIdYIAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZN9AJN9wKHWCwAAABEaWN0SGludC5EaWN0Q29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTTQDTT0Dh1ghAAAAV2luZG93ZWRUeXBlQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZN9wNNCQSHWCIAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZNRAJNRgKHWC4AAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZL7Evvh1ggAAAATGlzdEhpbnQuTGlzdENvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk22Ak24AodYJgAAAFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX2lubmVyX3R5cGVzWAMAAABkZWZN0QFN1AGHWB0AAABXaW5kb3dlZFR5cGVDb25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTekDTewDh1gjAAAASXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzTYYDTZwDh1gcAAAAQW55VHlwZUNvbnN0cmFpbnQudHlwZV9jaGVja1gDAAAAZGVmTZoBTZwBh1giAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnQudHlwZV9jaGVja1gDAAAAZGVmTR4DTTMDh1gWAAAAQ29tcG9zaXRlVHlwZUhpbnRFcnJvclgFAAAAY2xhc3NLYUtjh1ggAAAATGlzdEhpbnQuTGlzdENvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk2zAk21AodYKwAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZk0+A01EA4dYHwAAAFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX19oYXNoX19YAwAAAGRlZk3tA03vA4dYGwAAAFR5cGVDb25zdHJhaW50Ll9pbm5lcl90eXBlc1gDAAAAZGVmS5tLnodYQAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb25YAwAAAGRlZk0JA00dA4dYDgAAAFR5cGVDb25zdHJhaW50WAUAAABjbGFzc0trS66HWDEAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZN1QFN3wGHWC8AAABEaWN0SGludC5EaWN0Q29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmTQQDTQgDh1gkAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnQuX2lubmVyX3R5cGVzWAMAAABkZWZNAANNAwOHWCIAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNRwJNSgKHWBgAAABPcHRpb25hbEhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk0RAk0YAodYHgAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTfgCTfwCh1ggAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnQuX19oYXNoX19YAwAAAGRlZk39Ak3/AodYEQAAAENvbXBvc2l0ZVR5cGVIaW50WAUAAABjbGFzc00YAU08AYdYHgAAAEdldGl0ZW1Db25zdHJ1Y3Rvci5fX2dldGl0ZW1fX1gDAAAAZGVmS2dLaYdYFgAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzS8pNFgGHWCAAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTUACTUMCh1gkAAAAVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZN4AFN8AGHWC4AAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNegJNgAKHWBMAAABTZXRIaW50Ll9fZ2V0aXRlbV9fWAMAAABkZWZNcwNNegOHWC4AAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZNwQNN0AOHWDEAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZNUwJNWQKHWCMAAABUeXBlQ29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmS5VLl4dYLQAAAEluZGV4YWJsZVR5cGVDb25zdHJhaW50Ll9jb25zdHJhaW50X2Zvcl9pbmRleFgDAAAAZGVmS8FLyIdYCQAAAG5vcm1hbGl6ZVgDAAAAZGVmTSgETSwEh1grAAAAU2VxdWVuY2VUeXBlQ29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTQoBTQ4Bh1gSAAAAaXNfY29uc2lzdGVudF93aXRoWAMAAABkZWZNLgRNRgSHWB8AAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZL4kvkh1gjAAAASXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzTbIDTdADh1gaAAAAQW55VHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk2XAU2ZAYdYGAAAAEl0ZXJhYmxlSGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTZ0DTaMDh1gVAAAAVHVwbGVIaW50Ll9fZ2V0aXRlbV9fWAMAAABkZWZNiAJNoQKHWCQAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50LnR5cGVfY2hlY2tYAwAAAGRlZk1aAk15AodYLAAAAEl0ZXJhYmxlSGludC5JdGVyYWJsZVR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNiANNiwOHWCYAAABUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmS3VLgodYIgAAAFNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk1wA01yA4dYFwAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50WAUAAABjbGFzc03uAk1EA4dYLAAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX2NvbnN0cmFpbnRfZm9yX2luZGV4WAMAAABkZWZL6Evrh1gZAAAAVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludFgFAAAAY2xhc3NNOwJNhwKHWBkAAABTZXRIaW50LlNldFR5cGVDb25zdHJhaW50WAUAAABjbGFzc01rA01yA4dYIQAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQudHlwZV9jaGVja1gDAAAAZGVmS/BNCQGHWDsAAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmTb0DTcADh1gZAAAAVHlwZUNvbnN0cmFpbnQudHlwZV9jaGVja1gDAAAAZGVmS4NLlIdYDAAAAFR5cGVWYXJpYWJsZVgFAAAAY2xhc3NNngFNqwGHWBUAAABVbmlvbkhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk3xAU0GAodYDAAAAEl0ZXJhYmxlSGludFgFAAAAY2xhc3NNfwNNowOHdX1yxAIAAChYDAAAAFR5cGVWYXJpYWJsZVgfAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c3LFAgAAWCEAAABUeXBlVmFyaWFibGUubWF0Y2hfdHlwZV92YXJpYWJsZXNqxQIAAFggAAAAVHlwZVZhcmlhYmxlLmJpbmRfdHlwZV92YXJpYWJsZXNqxQIAAHVoilgfAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c3LGAgAAhYFyxwIAAH1yyAIAAGJ0cskCAABVHGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsoWCYuAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZpbGUtYmFzZWQgc2luay4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCB0aW1lCmltcG9ydCB1dWlkCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCB1dGlsCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFN0YXRpY1ZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgY2hlY2tfYWNjZXNzaWJsZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCgpERUZBVUxUX1NIQVJEX05BTUVfVEVNUExBVEUgPSAnLVNTU1NTLW9mLU5OTk5OJwoKX19hbGxfXyA9IFsnRmlsZUJhc2VkU2luayddCgoKY2xhc3MgRmlsZUJhc2VkU2luayhpb2Jhc2UuU2luayk6CiAgIiIiQSBzaW5rIHRvIGEgR0NTIG9yIGxvY2FsIGZpbGVzLgoKICBUbyBpbXBsZW1lbnQgYSBmaWxlLWJhc2VkIHNpbmssIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBvdmVycmlkZQogIGVpdGhlciA6bWV0aDpgLndyaXRlX3JlY29yZCgpYCBvciA6bWV0aDpgLndyaXRlX2VuY29kZWRfcmVjb3JkKClgLgoKICBJZiBuZWVkZWQsIGFsc28gb3ZlcndyaXRlIDptZXRoOmAub3BlbigpYCBhbmQvb3IgOm1ldGg6YC5jbG9zZSgpYCB0byBjdXN0b21pemUKICB0aGUgZmlsZSBoYW5kbGluZyBvciB3cml0ZSBoZWFkZXJzIGFuZCBmb290ZXJzLgoKICBUaGUgb3V0cHV0IG9mIHRoaXMgd3JpdGUgaXMgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIG9mCiAgYWxsIHdyaXR0ZW4gc2hhcmRzLgogICIiIgoKICAjIE1heCBudW1iZXIgb2YgdGhyZWFkcyB0byBiZSB1c2VkIGZvciByZW5hbWluZy4KICBfTUFYX1JFTkFNRV9USFJFQURTID0gNjQKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIGNvZGVyLAogICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICAgICAgICAgICBudW1fc2hhcmRzPTAsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9Tm9uZSwKICAgICAgICAgICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiIKICAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgZmlsZSBwYXRoIHBhcmFtZXRlcnMgYXJlIG5vdCBhIDpjbGFzczpgc3RyYCBvcgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAsIG9yIGlmCiAgICAgICAgKipjb21wcmVzc2lvbl90eXBlKiogaXMgbm90IG1lbWJlciBvZgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlc2AuCiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmICoqc2hhcmRfbmFtZV90ZW1wbGF0ZSoqIGlzIG5vdCBvZiBleHBlY3RlZAogICAgICAgIGZvcm1hdC4KICAgICIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZV9wYXRoX3ByZWZpeCwgKGJhc2VzdHJpbmcsIFZhbHVlUHJvdmlkZXIpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdmaWxlX3BhdGhfcHJlZml4IG11c3QgYmUgYSBzdHJpbmcgb3IgVmFsdWVQcm92aWRlcjsnCiAgICAgICAgICAgICAgICAgICAgICAnZ290ICVyIGluc3RlYWQnICUgZmlsZV9wYXRoX3ByZWZpeCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVfbmFtZV9zdWZmaXgsIChiYXNlc3RyaW5nLCBWYWx1ZVByb3ZpZGVyKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignZmlsZV9uYW1lX3N1ZmZpeCBtdXN0IGJlIGEgc3RyaW5nIG9yIFZhbHVlUHJvdmlkZXI7JwogICAgICAgICAgICAgICAgICAgICAgJ2dvdCAlciBpbnN0ZWFkJyAlIGZpbGVfbmFtZV9zdWZmaXgpCgogICAgaWYgbm90IENvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZShjb21wcmVzc2lvbl90eXBlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdjb21wcmVzc2lvbl90eXBlIG11c3QgYmUgQ29tcHJlc3Npb25UeXBlIG9iamVjdCBidXQgJwogICAgICAgICAgICAgICAgICAgICAgJ3dhcyAlcycgJSB0eXBlKGNvbXByZXNzaW9uX3R5cGUpKQogICAgaWYgc2hhcmRfbmFtZV90ZW1wbGF0ZSBpcyBOb25lOgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlID0gREVGQVVMVF9TSEFSRF9OQU1FX1RFTVBMQVRFCiAgICBlbGlmIHNoYXJkX25hbWVfdGVtcGxhdGUgPT0gJyc6CiAgICAgIG51bV9zaGFyZHMgPSAxCiAgICBpZiBpc2luc3RhbmNlKGZpbGVfcGF0aF9wcmVmaXgsIGJhc2VzdHJpbmcpOgogICAgICBmaWxlX3BhdGhfcHJlZml4ID0gU3RhdGljVmFsdWVQcm92aWRlcihzdHIsIGZpbGVfcGF0aF9wcmVmaXgpCiAgICBpZiBpc2luc3RhbmNlKGZpbGVfbmFtZV9zdWZmaXgsIGJhc2VzdHJpbmcpOgogICAgICBmaWxlX25hbWVfc3VmZml4ID0gU3RhdGljVmFsdWVQcm92aWRlcihzdHIsIGZpbGVfbmFtZV9zdWZmaXgpCiAgICBzZWxmLmZpbGVfcGF0aF9wcmVmaXggPSBmaWxlX3BhdGhfcHJlZml4CiAgICBzZWxmLmZpbGVfbmFtZV9zdWZmaXggPSBmaWxlX25hbWVfc3VmZml4CiAgICBzZWxmLm51bV9zaGFyZHMgPSBudW1fc2hhcmRzCiAgICBzZWxmLmNvZGVyID0gY29kZXIKICAgIHNlbGYuc2hhcmRfbmFtZV9mb3JtYXQgPSBzZWxmLl90ZW1wbGF0ZV90b19mb3JtYXQoc2hhcmRfbmFtZV90ZW1wbGF0ZSkKICAgIHNlbGYuY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYubWltZV90eXBlID0gbWltZV90eXBlCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzaGFyZHMnOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5udW1fc2hhcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J051bWJlciBvZiBTaGFyZHMnKS5kcm9wX2lmX2RlZmF1bHQoMCksCiAgICAgICAgICAgICdjb21wcmVzc2lvbic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzdHIoc2VsZi5jb21wcmVzc2lvbl90eXBlKSksCiAgICAgICAgICAgICdmaWxlX3BhdHRlcm4nOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oJ3t9e317fScuZm9ybWF0KHNlbGYuZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNoYXJkX25hbWVfZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9uYW1lX3N1ZmZpeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nRmlsZSBQYXR0ZXJuJyl9CgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCddKQogIGRlZiBvcGVuKHNlbGYsIHRlbXBfcGF0aCk6CiAgICAiIiJPcGVucyBgYHRlbXBfcGF0aGBgLCByZXR1cm5pbmcgYW4gb3BhcXVlIGZpbGUgaGFuZGxlIG9iamVjdC4KCiAgICBUaGUgcmV0dXJuZWQgZmlsZSBoYW5kbGUgaXMgcGFzc2VkIHRvIGBgd3JpdGVfW2VuY29kZWRfXXJlY29yZGBgIGFuZAogICAgYGBjbG9zZWBgLgogICAgIiIiCiAgICByZXR1cm4gRmlsZVN5c3RlbXMuY3JlYXRlKHRlbXBfcGF0aCwgc2VsZi5taW1lX3R5cGUsIHNlbGYuY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIHdyaXRlX3JlY29yZChzZWxmLCBmaWxlX2hhbmRsZSwgdmFsdWUpOgogICAgIiIiV3JpdGVzIGEgc2luZ2xlIHJlY29yZCBnbyB0aGUgZmlsZSBoYW5kbGUgcmV0dXJuZWQgYnkgYGBvcGVuKClgYC4KCiAgICBCeSBkZWZhdWx0LCBjYWxscyBgYHdyaXRlX2VuY29kZWRfcmVjb3JkYGAgYWZ0ZXIgZW5jb2RpbmcgdGhlIHJlY29yZCB3aXRoCiAgICB0aGlzIHNpbmsncyBDb2Rlci4KICAgICIiIgogICAgc2VsZi53cml0ZV9lbmNvZGVkX3JlY29yZChmaWxlX2hhbmRsZSwgc2VsZi5jb2Rlci5lbmNvZGUodmFsdWUpKQoKICBkZWYgd3JpdGVfZW5jb2RlZF9yZWNvcmQoc2VsZiwgZmlsZV9oYW5kbGUsIGVuY29kZWRfdmFsdWUpOgogICAgIiIiV3JpdGVzIGEgc2luZ2xlIGVuY29kZWQgcmVjb3JkIHRvIHRoZSBmaWxlIGhhbmRsZSByZXR1cm5lZCBieSBgYG9wZW4oKWBgLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjbG9zZShzZWxmLCBmaWxlX2hhbmRsZSk6CiAgICAiIiJGaW5hbGl6ZSBhbmQgY2xvc2UgdGhlIGZpbGUgaGFuZGxlIHJldHVybmVkIGZyb20gYGBvcGVuKClgYC4KCiAgICBDYWxsZWQgYWZ0ZXIgYWxsIHJlY29yZHMgYXJlIHdyaXR0ZW4uCgogICAgQnkgZGVmYXVsdCwgY2FsbHMgYGBmaWxlX2hhbmRsZS5jbG9zZSgpYGAgaWZmIGl0IGlzIG5vdCBOb25lLgogICAgIiIiCiAgICBpZiBmaWxlX2hhbmRsZSBpcyBub3QgTm9uZToKICAgICAgZmlsZV9oYW5kbGUuY2xvc2UoKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ2ZpbGVfcGF0aF9wcmVmaXgnLCAnZmlsZV9uYW1lX3N1ZmZpeCddKQogIGRlZiBpbml0aWFsaXplX3dyaXRlKHNlbGYpOgogICAgZmlsZV9wYXRoX3ByZWZpeCA9IHNlbGYuZmlsZV9wYXRoX3ByZWZpeC5nZXQoKQoKICAgIHRtcF9kaXIgPSBzZWxmLl9jcmVhdGVfdGVtcF9kaXIoZmlsZV9wYXRoX3ByZWZpeCkKICAgIEZpbGVTeXN0ZW1zLm1rZGlycyh0bXBfZGlyKQogICAgcmV0dXJuIHRtcF9kaXIKCiAgZGVmIF9jcmVhdGVfdGVtcF9kaXIoc2VsZiwgZmlsZV9wYXRoX3ByZWZpeCk6CiAgICBiYXNlX3BhdGgsIGxhc3RfY29tcG9uZW50ID0gRmlsZVN5c3RlbXMuc3BsaXQoZmlsZV9wYXRoX3ByZWZpeCkKICAgIGlmIG5vdCBsYXN0X2NvbXBvbmVudDoKICAgICAgIyBUcnlpbmcgdG8gcmUtc3BsaXQgdGhlIGJhc2VfcGF0aCB0byBjaGVjayBpZiBpdCdzIGEgcm9vdC4KICAgICAgbmV3X2Jhc2VfcGF0aCwgXyA9IEZpbGVTeXN0ZW1zLnNwbGl0KGJhc2VfcGF0aCkKICAgICAgaWYgYmFzZV9wYXRoID09IG5ld19iYXNlX3BhdGg6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHJvb3QgcGF0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAncHJlZml4ICVzLiBQbGVhc2Ugc3BlY2lmeSBhIGZpbGUgcGF0aCBwcmVmaXggd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnYXQgbGVhc3QgdHdvIGNvbXBvbmVudHMuJywKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgpCiAgICBwYXRoX2NvbXBvbmVudHMgPSBbYmFzZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICdiZWFtLXRlbXAtJyArIGxhc3RfY29tcG9uZW50ICsgJy0nICsgdXVpZC51dWlkMSgpLmhleF0KICAgIHJldHVybiBGaWxlU3lzdGVtcy5qb2luKCpwYXRoX2NvbXBvbmVudHMpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCcsICdmaWxlX25hbWVfc3VmZml4J10pCiAgZGVmIG9wZW5fd3JpdGVyKHNlbGYsIGluaXRfcmVzdWx0LCB1aWQpOgogICAgIyBBIHByb3BlciBzdWZmaXggaXMgbmVlZGVkIGZvciBBVVRPIGNvbXByZXNzaW9uIGRldGVjdGlvbi4KICAgICMgV2UgYWxzbyBlbnN1cmUgdGhlcmUgd2lsbCBiZSBubyBjb2xsaXNpb25zIHdpdGggdWlkIGFuZCBhCiAgICAjIChwb3NzaWJseSB1bnNoYXJkZWQpIGZpbGVfcGF0aF9wcmVmaXggYW5kIGEgKHBvc3NpYmx5IGVtcHR5KQogICAgIyBmaWxlX25hbWVfc3VmZml4LgogICAgZmlsZV9wYXRoX3ByZWZpeCA9IHNlbGYuZmlsZV9wYXRoX3ByZWZpeC5nZXQoKQogICAgZmlsZV9uYW1lX3N1ZmZpeCA9IHNlbGYuZmlsZV9uYW1lX3N1ZmZpeC5nZXQoKQogICAgc3VmZml4ID0gKAogICAgICAgICcuJyArIG9zLnBhdGguYmFzZW5hbWUoZmlsZV9wYXRoX3ByZWZpeCkgKyBmaWxlX25hbWVfc3VmZml4KQogICAgcmV0dXJuIEZpbGVCYXNlZFNpbmtXcml0ZXIoc2VsZiwgb3MucGF0aC5qb2luKGluaXRfcmVzdWx0LCB1aWQpICsgc3VmZml4KQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ2ZpbGVfcGF0aF9wcmVmaXgnLCAnZmlsZV9uYW1lX3N1ZmZpeCddKQogIGRlZiBmaW5hbGl6ZV93cml0ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMpOgogICAgZmlsZV9wYXRoX3ByZWZpeCA9IHNlbGYuZmlsZV9wYXRoX3ByZWZpeC5nZXQoKQogICAgZmlsZV9uYW1lX3N1ZmZpeCA9IHNlbGYuZmlsZV9uYW1lX3N1ZmZpeC5nZXQoKQogICAgd3JpdGVyX3Jlc3VsdHMgPSBzb3J0ZWQod3JpdGVyX3Jlc3VsdHMpCiAgICBudW1fc2hhcmRzID0gbGVuKHdyaXRlcl9yZXN1bHRzKQogICAgbWluX3RocmVhZHMgPSBtaW4obnVtX3NoYXJkcywgRmlsZUJhc2VkU2luay5fTUFYX1JFTkFNRV9USFJFQURTKQogICAgbnVtX3RocmVhZHMgPSBtYXgoMSwgbWluX3RocmVhZHMpCgogICAgc291cmNlX2ZpbGVzID0gW10KICAgIGRlc3RpbmF0aW9uX2ZpbGVzID0gW10KICAgIGNodW5rX3NpemUgPSBGaWxlU3lzdGVtcy5nZXRfY2h1bmtfc2l6ZShmaWxlX3BhdGhfcHJlZml4KQogICAgZm9yIHNoYXJkX251bSwgc2hhcmQgaW4gZW51bWVyYXRlKHdyaXRlcl9yZXN1bHRzKToKICAgICAgZmluYWxfbmFtZSA9ICcnLmpvaW4oWwogICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwgc2VsZi5zaGFyZF9uYW1lX2Zvcm1hdCAlIGRpY3QoCiAgICAgICAgICAgICAgc2hhcmRfbnVtPXNoYXJkX251bSwgbnVtX3NoYXJkcz1udW1fc2hhcmRzKSwgZmlsZV9uYW1lX3N1ZmZpeAogICAgICBdKQogICAgICBzb3VyY2VfZmlsZXMuYXBwZW5kKHNoYXJkKQogICAgICBkZXN0aW5hdGlvbl9maWxlcy5hcHBlbmQoZmluYWxfbmFtZSkKCiAgICBzb3VyY2VfZmlsZV9iYXRjaCA9IFtzb3VyY2VfZmlsZXNbaTppICsgY2h1bmtfc2l6ZV0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlX2ZpbGVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19zaXplKV0KICAgIGRlc3RpbmF0aW9uX2ZpbGVfYmF0Y2ggPSBbZGVzdGluYXRpb25fZmlsZXNbaTppICsgY2h1bmtfc2l6ZV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihkZXN0aW5hdGlvbl9maWxlcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19zaXplKV0KCiAgICBsb2dnaW5nLmluZm8oCiAgICAgICAgJ1N0YXJ0aW5nIGZpbmFsaXplX3dyaXRlIHRocmVhZHMgd2l0aCBudW1fc2hhcmRzOiAlZCwgJwogICAgICAgICdiYXRjaGVzOiAlZCwgbnVtX3RocmVhZHM6ICVkJywKICAgICAgICBudW1fc2hhcmRzLCBsZW4oc291cmNlX2ZpbGVfYmF0Y2gpLCBudW1fdGhyZWFkcykKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQoKICAgICMgVXNlIGEgdGhyZWFkIHBvb2wgZm9yIHJlbmFtaW5nIG9wZXJhdGlvbnMuCiAgICBkZWYgX3JlbmFtZV9iYXRjaChiYXRjaCk6CiAgICAgICIiIl9yZW5hbWVfYmF0Y2ggZXhlY3V0ZXMgYmF0Y2ggcmVuYW1lIG9wZXJhdGlvbnMuIiIiCiAgICAgIHNvdXJjZV9maWxlcywgZGVzdGluYXRpb25fZmlsZXMgPSBiYXRjaAogICAgICBleGNlcHRpb25zID0gW10KICAgICAgdHJ5OgogICAgICAgIEZpbGVTeXN0ZW1zLnJlbmFtZShzb3VyY2VfZmlsZXMsIGRlc3RpbmF0aW9uX2ZpbGVzKQogICAgICAgIHJldHVybiBleGNlcHRpb25zCiAgICAgIGV4Y2VwdCBCZWFtSU9FcnJvciBhcyBleHA6CiAgICAgICAgaWYgZXhwLmV4Y2VwdGlvbl9kZXRhaWxzIGlzIE5vbmU6CiAgICAgICAgICByYWlzZQogICAgICAgIGZvciAoc3JjLCBkZXN0KSwgZXhjZXB0aW9uIGluIGV4cC5leGNlcHRpb25fZGV0YWlscy5pdGVyaXRlbXMoKToKICAgICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdSZW5hbWUgbm90IHN1Y2Nlc3NmdWw6ICVzIC0+ICVzLCAlcycsIHNyYywgZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbikKICAgICAgICAgICAgc2hvdWxkX3JlcG9ydCA9IFRydWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGNlcHRpb24sIElPRXJyb3IpOgogICAgICAgICAgICAgICMgTWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNvcGllZC4KICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpZiBGaWxlU3lzdGVtcy5leGlzdHMoZGVzdCk6CiAgICAgICAgICAgICAgICAgIHNob3VsZF9yZXBvcnQgPSBGYWxzZQogICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhpc3RzX2U6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnRXhjZXB0aW9uIHdoZW4gY2hlY2tpbmcgaWYgZmlsZSAlcyBleGlzdHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMnLCBkZXN0LCBleGlzdHNfZSkKICAgICAgICAgICAgaWYgc2hvdWxkX3JlcG9ydDoKICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoKCdFeGNlcHRpb24gaW4gX3JlbmFtZV9iYXRjaC4gc3JjOiAlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3Q6ICVzLCBlcnI6ICVzJyksIHNyYywgZGVzdCwgZXhjZXB0aW9uKQogICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4Y2VwdGlvbikKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1JlbmFtZSBzdWNjZXNzZnVsOiAlcyAtPiAlcycsIHNyYywgZGVzdCkKICAgICAgICByZXR1cm4gZXhjZXB0aW9ucwoKICAgIGV4Y2VwdGlvbl9iYXRjaGVzID0gdXRpbC5ydW5fdXNpbmdfdGhyZWFkcG9vbCgKICAgICAgICBfcmVuYW1lX2JhdGNoLCB6aXAoc291cmNlX2ZpbGVfYmF0Y2gsIGRlc3RpbmF0aW9uX2ZpbGVfYmF0Y2gpLAogICAgICAgIG51bV90aHJlYWRzKQoKICAgIGFsbF9leGNlcHRpb25zID0gW2UgZm9yIGV4Y2VwdGlvbl9iYXRjaCBpbiBleGNlcHRpb25fYmF0Y2hlcwogICAgICAgICAgICAgICAgICAgICAgZm9yIGUgaW4gZXhjZXB0aW9uX2JhdGNoXQogICAgaWYgYWxsX2V4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW5jb3VudGVyZWQgZXhjZXB0aW9ucyBpbiBmaW5hbGl6ZV93cml0ZTogJXMnLAogICAgICAgICAgICAgICAgICAgICAgYWxsX2V4Y2VwdGlvbnMpCgogICAgZm9yIGZpbmFsX25hbWUgaW4gZGVzdGluYXRpb25fZmlsZXM6CiAgICAgIHlpZWxkIGZpbmFsX25hbWUKCiAgICBsb2dnaW5nLmluZm8oJ1JlbmFtZWQgJWQgc2hhcmRzIGluICUuMmYgc2Vjb25kcy4nLCBudW1fc2hhcmRzLAogICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkKCiAgICB0cnk6CiAgICAgIEZpbGVTeXN0ZW1zLmRlbGV0ZShbaW5pdF9yZXN1bHRdKQogICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICMgTWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQuCiAgICAgIHBhc3MKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfdGVtcGxhdGVfdG9fZm9ybWF0KHNoYXJkX25hbWVfdGVtcGxhdGUpOgogICAgaWYgbm90IHNoYXJkX25hbWVfdGVtcGxhdGU6CiAgICAgIHJldHVybiAnJwogICAgbSA9IHJlLnNlYXJjaCgnUysnLCBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgaWYgbSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJTaGFyZCBudW1iZXIgcGF0dGVybiBTKyBub3QgZm91bmQgaW4gdGVtcGxhdGUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUpCiAgICBzaGFyZF9uYW1lX2Zvcm1hdCA9IHNoYXJkX25hbWVfdGVtcGxhdGUucmVwbGFjZSgKICAgICAgICBtLmdyb3VwKDApLCAnJSUoc2hhcmRfbnVtKTAlZGQnICUgbGVuKG0uZ3JvdXAoMCkpKQogICAgbSA9IHJlLnNlYXJjaCgnTisnLCBzaGFyZF9uYW1lX2Zvcm1hdCkKICAgIGlmIG06CiAgICAgIHNoYXJkX25hbWVfZm9ybWF0ID0gc2hhcmRfbmFtZV9mb3JtYXQucmVwbGFjZSgKICAgICAgICAgIG0uZ3JvdXAoMCksICclJShudW1fc2hhcmRzKTAlZGQnICUgbGVuKG0uZ3JvdXAoMCkpKQogICAgcmV0dXJuIHNoYXJkX25hbWVfZm9ybWF0CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPOiBDbGVhbiB1cCB3b3JraXRlbV90ZXN0IHdoaWNoIHVzZXMgdGhpcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXVuaWRpb21hdGljLXR5cGVjaGVjawogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KCgpjbGFzcyBGaWxlQmFzZWRTaW5rV3JpdGVyKGlvYmFzZS5Xcml0ZXIpOgogICIiIlRoZSB3cml0ZXIgZm9yIEZpbGVCYXNlZFNpbmsuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rLCB0ZW1wX3NoYXJkX3BhdGgpOgogICAgc2VsZi5zaW5rID0gc2luawogICAgc2VsZi50ZW1wX3NoYXJkX3BhdGggPSB0ZW1wX3NoYXJkX3BhdGgKICAgIHNlbGYudGVtcF9oYW5kbGUgPSBzZWxmLnNpbmsub3Blbih0ZW1wX3NoYXJkX3BhdGgpCgogIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLnNpbmsud3JpdGVfcmVjb3JkKHNlbGYudGVtcF9oYW5kbGUsIHZhbHVlKQoKICBkZWYgY2xvc2Uoc2VsZik6CiAgICBzZWxmLnNpbmsuY2xvc2Uoc2VsZi50ZW1wX2hhbmRsZSkKICAgIHJldHVybiBzZWxmLnRlbXBfc2hhcmRfcGF0aAp9csoCAAAoWBoAAABGaWxlQmFzZWRTaW5rLmRpc3BsYXlfZGF0YVgDAAAAZGVmS2ZLcYdYFgAAAEZpbGVCYXNlZFNpbmsuX19pbml0X19YAwAAAGRlZks7S2WHWBwAAABGaWxlQmFzZWRTaW5rV3JpdGVyLl9faW5pdF9fWAMAAABkZWZNJQFNKQGHWBIAAABGaWxlQmFzZWRTaW5rLm9wZW5YAwAAAGRlZktyS3qHWCIAAABGaWxlQmFzZWRTaW5rLndyaXRlX2VuY29kZWRfcmVjb3JkWAMAAABkZWZLg0uHh1gTAAAARmlsZUJhc2VkU2luay5jbG9zZVgDAAAAZGVmS4hLkYdYHgAAAEZpbGVCYXNlZFNpbmsuX2NyZWF0ZV90ZW1wX2RpclgDAAAAZGVmS5pLp4dYHgAAAEZpbGVCYXNlZFNpbmsuaW5pdGlhbGl6ZV93cml0ZVgDAAAAZGVmS5JLmYdYGQAAAEZpbGVCYXNlZFNpbmtXcml0ZXIuY2xvc2VYAwAAAGRlZk0tAU0wAYdYGQAAAEZpbGVCYXNlZFNpbmsub3Blbl93cml0ZXJYAwAAAGRlZkuoS7OHWCEAAABGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV90b19mb3JtYXRYAwAAAGRlZk0LAU0aAYdYGgAAAEZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3JkWAMAAABkZWZLe0uCh1gqAAAARmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZS5fcmVuYW1lX2JhdGNoWAMAAABkZWZL1kv0h1gcAAAARmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZVgDAAAAZGVmS7RNCgGHWBMAAABGaWxlQmFzZWRTaW5rV3JpdGVyWAUAAABjbGFzc00hAU0wAYdYDQAAAEZpbGVCYXNlZFNpbmtYBQAAAGNsYXNzSytNHwGHWBQAAABGaWxlQmFzZWRTaW5rLl9fZXFfX1gDAAAAZGVmTRsBTR8Bh1gZAAAARmlsZUJhc2VkU2lua1dyaXRlci53cml0ZVgDAAAAZGVmTSoBTSwBh3V9cssCAAAoWBoAAABGaWxlQmFzZWRTaW5rLmRpc3BsYXlfZGF0YVgcAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2lua3LMAgAAWBIAAABGaWxlQmFzZWRTaW5rLm9wZW5qzAIAAFgiAAAARmlsZUJhc2VkU2luay53cml0ZV9lbmNvZGVkX3JlY29yZGrMAgAAWBMAAABGaWxlQmFzZWRTaW5rLmNsb3NlaswCAABYHgAAAEZpbGVCYXNlZFNpbmsuaW5pdGlhbGl6ZV93cml0ZWrMAgAAWBkAAABGaWxlQmFzZWRTaW5rLm9wZW5fd3JpdGVyaswCAABYGgAAAEZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3JkaswCAABYHAAAAEZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGVqzAIAAFgNAAAARmlsZUJhc2VkU2lua2rMAgAAdWiKWBwAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rcs0CAACFgXLOAgAAfXLPAgAAYnRVImFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIoWGcMAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgVmFsdWVQcm92aWRlciBjbGFzcyB0byBpbXBsZW1lbnQgdGVtcGxhdGVzIHdpdGggYm90aCBzdGF0aWNhbGx5CmFuZCBkeW5hbWljYWxseSBwcm92aWRlZCB2YWx1ZXMuCiIiIgoKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBlcnJvcgoKX19hbGxfXyA9IFsKICAgICdWYWx1ZVByb3ZpZGVyJywKICAgICdTdGF0aWNWYWx1ZVByb3ZpZGVyJywKICAgICdSdW50aW1lVmFsdWVQcm92aWRlcicsCiAgICAnY2hlY2tfYWNjZXNzaWJsZScsCiAgICBdCgoKY2xhc3MgVmFsdWVQcm92aWRlcihvYmplY3QpOgogIGRlZiBpc19hY2Nlc3NpYmxlKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlIGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcycKICAgICkKCiAgZGVmIGdldChzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1ZhbHVlUHJvdmlkZXIuZ2V0IGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcycKICAgICkKCgpjbGFzcyBTdGF0aWNWYWx1ZVByb3ZpZGVyKFZhbHVlUHJvdmlkZXIpOgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZV90eXBlLCB2YWx1ZSk6CiAgICBzZWxmLnZhbHVlX3R5cGUgPSB2YWx1ZV90eXBlCiAgICBzZWxmLnZhbHVlID0gdmFsdWVfdHlwZSh2YWx1ZSkKCiAgZGVmIGlzX2FjY2Vzc2libGUoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgZ2V0KHNlbGYpOgogICAgcmV0dXJuIHNlbGYudmFsdWUKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gc3RyKHNlbGYudmFsdWUpCgoKY2xhc3MgUnVudGltZVZhbHVlUHJvdmlkZXIoVmFsdWVQcm92aWRlcik6CiAgcnVudGltZV9vcHRpb25zID0gTm9uZQoKICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX25hbWUsIHZhbHVlX3R5cGUsIGRlZmF1bHRfdmFsdWUpOgogICAgc2VsZi5vcHRpb25fbmFtZSA9IG9wdGlvbl9uYW1lCiAgICBzZWxmLmRlZmF1bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCiAgICBzZWxmLnZhbHVlX3R5cGUgPSB2YWx1ZV90eXBlCgogIGRlZiBpc19hY2Nlc3NpYmxlKHNlbGYpOgogICAgcmV0dXJuIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9ucyBpcyBub3QgTm9uZQoKICBkZWYgZ2V0KHNlbGYpOgogICAgaWYgUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zIGlzIE5vbmU6CiAgICAgIHJhaXNlIGVycm9yLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3IoCiAgICAgICAgICAnJXMuZ2V0KCkgbm90IGNhbGxlZCBmcm9tIGEgcnVudGltZSBjb250ZXh0JyAlIHNlbGYpCgogICAgY2FuZGlkYXRlID0gUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zLmdldChzZWxmLm9wdGlvbl9uYW1lKQogICAgaWYgY2FuZGlkYXRlOgogICAgICB2YWx1ZSA9IHNlbGYudmFsdWVfdHlwZShjYW5kaWRhdGUpCiAgICBlbHNlOgogICAgICB2YWx1ZSA9IHNlbGYuZGVmYXVsdF92YWx1ZQogICAgcmV0dXJuIHZhbHVlCgogIEBjbGFzc21ldGhvZAogIGRlZiBzZXRfcnVudGltZV9vcHRpb25zKGNscywgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICclcyhvcHRpb246ICVzLCB0eXBlOiAlcywgZGVmYXVsdF92YWx1ZTogJXMpJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICBzZWxmLm9wdGlvbl9uYW1lLAogICAgICAgIHNlbGYudmFsdWVfdHlwZS5fX25hbWVfXywKICAgICAgICByZXByKHNlbGYuZGVmYXVsdF92YWx1ZSkKICAgICkKCgpkZWYgY2hlY2tfYWNjZXNzaWJsZSh2YWx1ZV9wcm92aWRlcl9saXN0KToKICAiIiJDaGVjayBhY2Nlc3NpYmlsaXR5IG9mIGEgbGlzdCBvZiBWYWx1ZVByb3ZpZGVyIG9iamVjdHMuIiIiCiAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVfcHJvdmlkZXJfbGlzdCwgbGlzdCkKCiAgZGVmIF9jaGVja19hY2Nlc3NpYmxlKGZuYyk6CiAgICBAd3JhcHMoZm5jKQogICAgZGVmIF9mKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgIGZvciBvYmogaW4gW2dldGF0dHIoc2VsZiwgdnApIGZvciB2cCBpbiB2YWx1ZV9wcm92aWRlcl9saXN0XToKICAgICAgICBpZiBub3Qgb2JqLmlzX2FjY2Vzc2libGUoKToKICAgICAgICAgIHJhaXNlIGVycm9yLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3IoJyVzIG5vdCBhY2Nlc3NpYmxlJyAlIG9iaikKICAgICAgcmV0dXJuIGZuYyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAgICByZXR1cm4gX2YKICByZXR1cm4gX2NoZWNrX2FjY2Vzc2libGUKfXLQAgAAKFgbAAAAU3RhdGljVmFsdWVQcm92aWRlci5fX3N0cl9fWAMAAABkZWZLOUs7h1ghAAAAU3RhdGljVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlWAMAAABkZWZLM0s1h1gRAAAAVmFsdWVQcm92aWRlci5nZXRYAwAAAGRlZksoSyyHWB0AAABSdW50aW1lVmFsdWVQcm92aWRlci5fX2luaXRfX1gDAAAAZGVmS0BLRIdYGwAAAFZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZVgDAAAAZGVmSyNLJ4dYEAAAAGNoZWNrX2FjY2Vzc2libGVYAwAAAGRlZkthS26HWBQAAABSdW50aW1lVmFsdWVQcm92aWRlclgFAAAAY2xhc3NLPUtfh1gcAAAAU3RhdGljVmFsdWVQcm92aWRlci5fX2luaXRfX1gDAAAAZGVmSy9LModYEwAAAFN0YXRpY1ZhbHVlUHJvdmlkZXJYBQAAAGNsYXNzSy5LO4dYKAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnNYAwAAAGRlZktUS1eHWCIAAABSdW50aW1lVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlWAMAAABkZWZLRUtHh1gXAAAAU3RhdGljVmFsdWVQcm92aWRlci5nZXRYAwAAAGRlZks2SziHWBwAAABSdW50aW1lVmFsdWVQcm92aWRlci5fX3N0cl9fWAMAAABkZWZLWEtfh1gYAAAAUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0WAMAAABkZWZLSEtTh1gNAAAAVmFsdWVQcm92aWRlclgFAAAAY2xhc3NLIkssh1glAAAAY2hlY2tfYWNjZXNzaWJsZS5fY2hlY2tfYWNjZXNzaWJsZS5fZlgDAAAAZGVmS2ZLbIdYIgAAAGNoZWNrX2FjY2Vzc2libGUuX2NoZWNrX2FjY2Vzc2libGVYAwAAAGRlZktlS22HdX1y0QIAAChYIQAAAFN0YXRpY1ZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZVgiAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcnLSAgAAWBEAAABWYWx1ZVByb3ZpZGVyLmdldGrSAgAAWBsAAABWYWx1ZVByb3ZpZGVyLmlzX2FjY2Vzc2libGVq0gIAAFgQAAAAY2hlY2tfYWNjZXNzaWJsZWrSAgAAWBQAAABSdW50aW1lVmFsdWVQcm92aWRlcmrSAgAAWBMAAABTdGF0aWNWYWx1ZVByb3ZpZGVyatICAABYKAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnNq0gIAAFgiAAAAUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZWrSAgAAWBcAAABTdGF0aWNWYWx1ZVByb3ZpZGVyLmdldGrSAgAAWBgAAABSdW50aW1lVmFsdWVQcm92aWRlci5nZXRq0gIAAFgNAAAAVmFsdWVQcm92aWRlcmrSAgAAdWiKWCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyctMCAACFgXLUAgAAfXLVAgAAYnRy1gIAAFUfYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcnLXAgAAKFj5BgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIG9iamVjdCB0byBjb250cm9sIHRvIHRoZSBKb2IgQVBJIENvLVByb2Nlc3MKIiIiCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgdGltZQoKaW1wb3J0IGdycGMKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2pvYl9hcGlfcGIyX2dycGMKCgpjbGFzcyBEb2NrZXJSUENNYW5hZ2VyKG9iamVjdCk6CiAgIiIiQSBuYXRpdmUgY28tcHJvY2VzcyB0byBzdGFydCBhIGNvbnRpYW5lciB0aGF0IHNwZWFrcyB0aGUgSm9iQXBpCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bl9jb21tYW5kPU5vbmUpOgogICAgIyBUT0RPKEJFQU0tMjQzMSk6IENoYW5nZSB0aGlzIHRvIGEgZG9ja2VyIGNvbnRhaW5lciBmcm9tIGEgY29tbWFuZC4KICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCiAgICAgICAgWydweXRob24nLAogICAgICAgICAnLW0nLAogICAgICAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyJ10pCgogICAgc2VsZi5jaGFubmVsID0gZ3JwYy5pbnNlY3VyZV9jaGFubmVsKCdsb2NhbGhvc3Q6NTAwNTEnKQogICAgc2VsZi5zZXJ2aWNlID0gYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTdHViKHNlbGYuY2hhbm5lbCkKCiAgICAjIFNsZWVwIGZvciAyIHNlY29uZHMgZm9yIHByb2Nlc3MgdG8gc3RhcnQgY29tcGxldGVseQogICAgIyBUaGlzIGlzIGp1c3QgZm9yIHRoZSBjby1wcm9jZXNzIGFuZCB3b3VsZCBiZSByZW1vdmVkCiAgICAjIG9uY2Ugd2UgbWlncmF0ZSB0byBkb2NrZXIuCiAgICB0aW1lLnNsZWVwKDIpCgogIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgIiIiVGVybWluYXRlIHRoZSBjby1wcm9jZXNzIHdoZW4gdGhlIG1hbmFnZXIgaXMgR0MnZWQKICAgICIiIgogICAgbG9nZ2luZy5pbmZvKCdTaHV0dGluZyB0aGUgY28tcHJvY2VzcycpCiAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKfXLYAgAAKFgZAAAARG9ja2VyUlBDTWFuYWdlci5fX2luaXRfX1gDAAAAZGVmSyFLL4dYGAAAAERvY2tlclJQQ01hbmFnZXIuX19kZWxfX1gDAAAAZGVmSzBLNYdYEAAAAERvY2tlclJQQ01hbmFnZXJYBQAAAGNsYXNzSx5LNYd1fXLZAgAAWBAAAABEb2NrZXJSUENNYW5hZ2VyWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyctoCAABzaIpYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXJy2wIAAIWBctwCAAB9ct0CAABidHLeAgAAVR5hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UoWEFHAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHNvdXJjZXMgZm9yIG5ldyBmaWxlIHR5cGVzLgoKVG8gY3JlYXRlIGEgc291cmNlIGZvciBhIG5ldyBmaWxlIHR5cGUgYSBzdWItY2xhc3Mgb2YgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgCnNob3VsZCBiZSBjcmVhdGVkLiBTdWItY2xhc3NlcyBvZiA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbXVzdCBpbXBsZW1lbnQgdGhlCm1ldGhvZCA6bWV0aDpgRmlsZUJhc2VkU291cmNlLnJlYWRfcmVjb3JkcygpYC4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YKdGhhdCBtZXRob2QgZm9yIG1vcmUgZGV0YWlscy4KCkZvciBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgRmlsZUJhc2VkU291cmNlYCBzZWUKOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgLgoiIiIKaW1wb3J0IHV1aWQKCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgY29uY2F0X3NvdXJjZQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgcmFuZ2VfdHJhY2tlcnMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgaW1wb3J0IEZpbGVTeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMgaW1wb3J0IE9mZnNldFJhbmdlCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgU3RhdGljVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBjaGVja19hY2Nlc3NpYmxlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBGbGF0TWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBHcm91cEJ5S2V5CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBNYXAKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IERlZmF1bHRUcmlnZ2VyCgpNQVhfTlVNX1RIUkVBRFNfRk9SX1NJWkVfRVNUSU1BVElPTiA9IDI1CgpfX2FsbF9fID0gWydGaWxlQmFzZWRTb3VyY2UnXQoKCmNsYXNzIEZpbGVCYXNlZFNvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgIiIiQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAgZm9yIHJlYWRpbmcgYSBmaWxlIGdsb2Igb2YKICBhIGdpdmVuIHR5cGUuIiIiCgogIE1JTl9OVU1CRVJfT0ZfRklMRVNfVE9fU1RBVCA9IDEwMAogIE1JTl9GUkFDVElPTl9PRl9GSUxFU19UT19TVEFUID0gMC4wMQoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgICAgICAgIHNwbGl0dGFibGU9VHJ1ZSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQgYSBzdHJpbmcgb3IgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAKICAgICAgICAocGxhY2Vob2xkZXIgdG8gaW5qZWN0IGEgcnVudGltZSB2YWx1ZSkuCiAgICAgIG1pbl9idW5kbGVfc2l6ZSAoc3RyKTogbWluaW11bSBzaXplIG9mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICAgICAgd2hlbiBwZXJmb3JtaW5nIGluaXRpYWwgc3BsaXR0aW5nIG9uIHRoaXMgc291cmNlLgogICAgICBjb21wcmVzc2lvbl90eXBlIChzdHIpOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIG91dHB1dCBmaWxlcy4KICAgICAgICBUeXBpY2FsIHZhbHVlIGlzIDphdHRyOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwKICAgICAgICBpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBmaWxlIHBhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdAogICAgICAgIHRoZSBjb21wcmVzc2lvbi4KICAgICAgc3BsaXR0YWJsZSAoYm9vbCk6IHdoZXRoZXIgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHNob3VsZCB0cnkgdG8KICAgICAgICBsb2dpY2FsbHkgc3BsaXQgYSBzaW5nbGUgZmlsZSBpbnRvIGRhdGEgcmFuZ2VzIHNvIHRoYXQgZGlmZmVyZW50IHBhcnRzCiAgICAgICAgb2YgdGhlIHNhbWUgZmlsZSBjYW4gYmUgcmVhZCBpbiBwYXJhbGxlbC4gSWYgc2V0IHRvIDpkYXRhOmBGYWxzZWAsCiAgICAgICAgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHdpbGwgcHJldmVudCBib3RoIGluaXRpYWwgYW5kIGR5bmFtaWMgc3BsaXR0aW5nCiAgICAgICAgb2Ygc291cmNlcyBmb3Igc2luZ2xlIGZpbGVzLiBGaWxlIHBhdHRlcm5zIHRoYXQgcmVwcmVzZW50IG11bHRpcGxlIGZpbGVzCiAgICAgICAgbWF5IHN0aWxsIGdldCBzcGxpdCBpbnRvIHNvdXJjZXMgZm9yIGluZGl2aWR1YWwgZmlsZXMuIEV2ZW4gaWYgc2V0IHRvCiAgICAgICAgOmRhdGE6YFRydWVgIGJ5IHRoZSB1c2VyLCA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbWF5IGNob29zZSB0byBub3QKICAgICAgICBzcGxpdCB0aGUgZmlsZSwgZm9yIGV4YW1wbGUsIGZvciBjb21wcmVzc2VkIGZpbGVzIHdoZXJlIGN1cnJlbnRseSBpdCBpcwogICAgICAgIG5vdCBwb3NzaWJsZSB0byBlZmZpY2llbnRseSByZWFkIGEgZGF0YSByYW5nZSB3aXRob3V0IGRlY29tcHJlc3NpbmcgdGhlCiAgICAgICAgd2hvbGUgZmlsZS4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBCb29sZWFuIGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUKICAgICAgICBwaXBlbGluZSBjcmVhdGlvbiB0aW1lLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiB3aGVuICoqY29tcHJlc3Npb25fdHlwZSoqIGlzIG5vdCB2YWxpZCBvciBpZgogICAgICAgICoqZmlsZV9wYXR0ZXJuKiogaXMgbm90IGEgOmNsYXNzOmBzdHJgIG9yIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXJgLgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiB3aGVuIGNvbXByZXNzaW9uIGFuZCBzcGxpdHRhYmxlIGZpbGVzIGFyZQogICAgICAgIHNwZWNpZmllZC4KICAgICAgfmV4Y2VwdGlvbnMuSU9FcnJvcjogd2hlbiB0aGUgZmlsZSBwYXR0ZXJuIHNwZWNpZmllZCB5aWVsZHMgYW4gZW1wdHkKICAgICAgICByZXN1bHQuCiAgICAiIiIKCiAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlX3BhdHRlcm4sIChiYXNlc3RyaW5nLCBWYWx1ZVByb3ZpZGVyKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignJXM6IGZpbGVfcGF0dGVybiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgJyBvciBWYWx1ZVByb3ZpZGVyOyBnb3QgJXIgaW5zdGVhZCcKICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBmaWxlX3BhdHRlcm4pKQoKICAgIGlmIGlzaW5zdGFuY2UoZmlsZV9wYXR0ZXJuLCBiYXNlc3RyaW5nKToKICAgICAgZmlsZV9wYXR0ZXJuID0gU3RhdGljVmFsdWVQcm92aWRlcihzdHIsIGZpbGVfcGF0dGVybikKICAgIHNlbGYuX3BhdHRlcm4gPSBmaWxlX3BhdHRlcm4KCiAgICBzZWxmLl9jb25jYXRfc291cmNlID0gTm9uZQogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBpZiBub3QgQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlKGNvbXByZXNzaW9uX3R5cGUpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ2NvbXByZXNzaW9uX3R5cGUgbXVzdCBiZSBDb21wcmVzc2lvblR5cGUgb2JqZWN0IGJ1dCAnCiAgICAgICAgICAgICAgICAgICAgICAnd2FzICVzJyAlIHR5cGUoY29tcHJlc3Npb25fdHlwZSkpCiAgICBzZWxmLl9jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQogICAgc2VsZi5fc3BsaXR0YWJsZSA9IHNwbGl0dGFibGUKICAgIGlmIHZhbGlkYXRlIGFuZCBmaWxlX3BhdHRlcm4uaXNfYWNjZXNzaWJsZSgpOgogICAgICBzZWxmLl92YWxpZGF0ZSgpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydmaWxlX3BhdHRlcm4nOiBEaXNwbGF5RGF0YUl0ZW0oc3RyKHNlbGYuX3BhdHRlcm4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSJGaWxlIFBhdHRlcm4iKSwKICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzogRGlzcGxheURhdGFJdGVtKHN0cihzZWxmLl9jb21wcmVzc2lvbl90eXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdDb21wcmVzc2lvbiBUeXBlJyl9CgogIEBjaGVja19hY2Nlc3NpYmxlKFsnX3BhdHRlcm4nXSkKICBkZWYgX2dldF9jb25jYXRfc291cmNlKHNlbGYpOgogICAgaWYgc2VsZi5fY29uY2F0X3NvdXJjZSBpcyBOb25lOgogICAgICBwYXR0ZXJuID0gc2VsZi5fcGF0dGVybi5nZXQoKQoKICAgICAgc2luZ2xlX2ZpbGVfc291cmNlcyA9IFtdCiAgICAgIG1hdGNoX3Jlc3VsdCA9IEZpbGVTeXN0ZW1zLm1hdGNoKFtwYXR0ZXJuXSlbMF0KICAgICAgZmlsZXNfbWV0YWRhdGEgPSBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdAoKICAgICAgIyBXZSBjcmVhdGUgYSByZWZlcmVuY2UgZm9yIEZpbGVCYXNlZFNvdXJjZSB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhbG9uZwogICAgICAjIHdpdGggZWFjaCBfU2luZ2xlRmlsZVNvdXJjZS4gVG8gcHJldmVudCB0aGlzIEZpbGVCYXNlZFNvdXJjZSBmcm9tIGhhdmluZwogICAgICAjIGEgcmVmZXJlbmNlIHRvIENvbmNhdFNvdXJjZSAocmVzdWx0aW5nIGluIHF1YWRyYXRpYyBzcGFjZSBjb21wbGV4aXR5KQogICAgICAjIHdlIGNsb25lIGl0IGhlcmUuCiAgICAgIGZpbGVfYmFzZWRfc291cmNlX3JlZiA9IHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyhzZWxmKSkKCiAgICAgIGZvciBmaWxlX21ldGFkYXRhIGluIGZpbGVzX21ldGFkYXRhOgogICAgICAgIGZpbGVfbmFtZSA9IGZpbGVfbWV0YWRhdGEucGF0aAogICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfbWV0YWRhdGEuc2l6ZV9pbl9ieXRlcwogICAgICAgIGlmIGZpbGVfc2l6ZSA9PSAwOgogICAgICAgICAgY29udGludWUgICMgSWdub3JpbmcgZW1wdHkgZmlsZS4KCiAgICAgICAgIyBXZSBkZXRlcm1pbmUgc3BsaXR0YWJpbGl0eSBvZiB0aGlzIHNwZWNpZmljIGZpbGUuCiAgICAgICAgc3BsaXR0YWJsZSA9ICgKICAgICAgICAgICAgc2VsZi5zcGxpdHRhYmxlIGFuZAogICAgICAgICAgICBfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlKAogICAgICAgICAgICAgICAgZmlsZV9uYW1lLCBzZWxmLl9jb21wcmVzc2lvbl90eXBlKSkKCiAgICAgICAgc2luZ2xlX2ZpbGVfc291cmNlID0gX1NpbmdsZUZpbGVTb3VyY2UoCiAgICAgICAgICAgIGZpbGVfYmFzZWRfc291cmNlX3JlZiwgZmlsZV9uYW1lLAogICAgICAgICAgICAwLAogICAgICAgICAgICBmaWxlX3NpemUsCiAgICAgICAgICAgIG1pbl9idW5kbGVfc2l6ZT1zZWxmLl9taW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgIHNwbGl0dGFibGU9c3BsaXR0YWJsZSkKICAgICAgICBzaW5nbGVfZmlsZV9zb3VyY2VzLmFwcGVuZChzaW5nbGVfZmlsZV9zb3VyY2UpCiAgICAgIHNlbGYuX2NvbmNhdF9zb3VyY2UgPSBjb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZShzaW5nbGVfZmlsZV9zb3VyY2VzKQogICAgcmV0dXJuIHNlbGYuX2NvbmNhdF9zb3VyY2UKCiAgZGVmIG9wZW5fZmlsZShzZWxmLCBmaWxlX25hbWUpOgogICAgcmV0dXJuIEZpbGVTeXN0ZW1zLm9wZW4oCiAgICAgICAgZmlsZV9uYW1lLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICBjb21wcmVzc2lvbl90eXBlPXNlbGYuX2NvbXByZXNzaW9uX3R5cGUpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnX3BhdHRlcm4nXSkKICBkZWYgX3ZhbGlkYXRlKHNlbGYpOgogICAgIiIiVmFsaWRhdGUgaWYgdGhlcmUgYXJlIGFjdHVhbCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGdsb2IgcGF0dGVybgogICAgIiIiCiAgICBwYXR0ZXJuID0gc2VsZi5fcGF0dGVybi5nZXQoKQoKICAgICMgTGltaXQgdGhlIHJlc3BvbnNlcyBhcyB3ZSBvbmx5IHdhbnQgdG8gY2hlY2sgaWYgc29tZXRoaW5nIGV4aXN0cwogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMubWF0Y2goW3BhdHRlcm5dLCBsaW1pdHM9WzFdKVswXQogICAgaWYgbGVuKG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0KSA8PSAwOgogICAgICByYWlzZSBJT0Vycm9yKAogICAgICAgICAgJ05vIGZpbGVzIGZvdW5kIGJhc2VkIG9uIHRoZSBmaWxlIHBhdHRlcm4gJXMnICUgcGF0dGVybikKCiAgZGVmIHNwbGl0KAogICAgICBzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplPU5vbmUsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5zcGxpdCgKICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplPWRlc2lyZWRfYnVuZGxlX3NpemUsCiAgICAgICAgc3RhcnRfcG9zaXRpb249c3RhcnRfcG9zaXRpb24sCiAgICAgICAgc3RvcF9wb3NpdGlvbj1zdG9wX3Bvc2l0aW9uKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ19wYXR0ZXJuJ10pCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICBwYXR0ZXJuID0gc2VsZi5fcGF0dGVybi5nZXQoKQogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMubWF0Y2goW3BhdHRlcm5dKVswXQogICAgcmV0dXJuIHN1bShbZi5zaXplX2luX2J5dGVzIGZvciBmIGluIG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0XSkKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5yZWFkKHJhbmdlX3RyYWNrZXIpCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5nZXRfcmFuZ2VfdHJhY2tlcihzdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BfcG9zaXRpb24pCgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCBvZmZzZXRfcmFuZ2VfdHJhY2tlcik6CiAgICAiIiJSZXR1cm5zIGEgZ2VuZXJhdG9yIG9mIHJlY29yZHMgY3JlYXRlZCBieSByZWFkaW5nIGZpbGUgJ2ZpbGVfbmFtZScuCgogICAgQXJnczoKICAgICAgZmlsZV9uYW1lOiBhIGBgc3RyaW5nYGAgdGhhdCBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZWFkLiBNZXRob2QKICAgICAgICAgICAgICAgICBgYEZpbGVCYXNlZFNvdXJjZS5vcGVuX2ZpbGUoKWBgIG11c3QgYmUgdXNlZCB0byBvcGVuIHRoZSBmaWxlCiAgICAgICAgICAgICAgICAgYW5kIGNyZWF0ZSBhIHNlZWthYmxlIGZpbGUgb2JqZWN0LgogICAgICBvZmZzZXRfcmFuZ2VfdHJhY2tlcjogYSBvYmplY3Qgb2YgdHlwZSBgYE9mZnNldFJhbmdlVHJhY2tlcmBgLiBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBieXRlIHJhbmdlIG9mIHRoZSBmaWxlIHRoYXQgc2hvdWxkIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLiBTZWUgZG9jdW1lbnRhdGlvbiBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBpb2Jhc2UuQm91bmRlZFNvdXJjZS5yZWFkKClgYCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gcmVhZGluZyByZWNvcmRzIHdoaWxlIGNvbXBseWluZyB0byB0aGUgcmFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgYSBnaXZlbiBgYFJhbmdlVHJhY2tlcmBgLgoKICAgIFJldHVybnM6CiAgICAgIGFuIGl0ZXJhdG9yIHRoYXQgZ2l2ZXMgdGhlIHJlY29yZHMgcmVhZCBmcm9tIHRoZSBnaXZlbiBmaWxlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBwcm9wZXJ0eQogIGRlZiBzcGxpdHRhYmxlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3NwbGl0dGFibGUKCgpkZWYgX2RldGVybWluZV9zcGxpdHRhYmlsaXR5X2Zyb21fY29tcHJlc3Npb25fdHlwZSgKICAgIGZpbGVfcGF0aCwgY29tcHJlc3Npb25fdHlwZSk6CiAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkFVVE86CiAgICBjb21wcmVzc2lvbl90eXBlID0gQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZShmaWxlX3BhdGgpCgogIHJldHVybiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VECgoKY2xhc3MgX1NpbmdsZUZpbGVTb3VyY2UoaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICIiIkRlbm90ZXMgYSBzb3VyY2UgZm9yIGEgc3BlY2lmaWMgZmlsZSB0eXBlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9iYXNlZF9zb3VyY2UsIGZpbGVfbmFtZSwgc3RhcnRfb2Zmc2V0LCBzdG9wX29mZnNldCwKICAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPTAsIHNwbGl0dGFibGU9VHJ1ZSk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShzdGFydF9vZmZzZXQsIChpbnQsIGxvbmcpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ3N0YXJ0X29mZnNldCBtdXN0IGJlIGEgbnVtYmVyLiBSZWNlaXZlZDogJXInICUgc3RhcnRfb2Zmc2V0KQogICAgaWYgc3RvcF9vZmZzZXQgIT0gcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWToKICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3RvcF9vZmZzZXQsIChpbnQsIGxvbmcpKToKICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICdzdG9wX29mZnNldCBtdXN0IGJlIGEgbnVtYmVyLiBSZWNlaXZlZDogJXInICUgc3RvcF9vZmZzZXQpCiAgICAgIGlmIHN0YXJ0X29mZnNldCA+PSBzdG9wX29mZnNldDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnc3RhcnRfb2Zmc2V0IG11c3QgYmUgc21hbGxlciB0aGFuIHN0b3Bfb2Zmc2V0LiBSZWNlaXZlZCAlZCBhbmQgJWQgJwogICAgICAgICAgICAnZm9yIHN0YXJ0IGFuZCBzdG9wIG9mZnNldHMgcmVzcGVjdGl2ZWx5JyAlCiAgICAgICAgICAgIChzdGFydF9vZmZzZXQsIHN0b3Bfb2Zmc2V0KSkKCiAgICBzZWxmLl9maWxlX25hbWUgPSBmaWxlX25hbWUKICAgIHNlbGYuX2lzX2djc19maWxlID0gZmlsZV9uYW1lLnN0YXJ0c3dpdGgoJ2dzOi8vJykgaWYgZmlsZV9uYW1lIGVsc2UgRmFsc2UKICAgIHNlbGYuX3N0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldAogICAgc2VsZi5fc3RvcF9vZmZzZXQgPSBzdG9wX29mZnNldAogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZSA9IGZpbGVfYmFzZWRfc291cmNlCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfb2Zmc2V0PU5vbmUsIHN0b3Bfb2Zmc2V0PU5vbmUpOgogICAgaWYgc3RhcnRfb2Zmc2V0IGlzIE5vbmU6CiAgICAgIHN0YXJ0X29mZnNldCA9IHNlbGYuX3N0YXJ0X29mZnNldAogICAgaWYgc3RvcF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RvcF9vZmZzZXQgPSBzZWxmLl9zdG9wX29mZnNldAoKICAgIGlmIHNlbGYuX3NwbGl0dGFibGU6CiAgICAgIHNwbGl0cyA9IE9mZnNldFJhbmdlKHN0YXJ0X29mZnNldCwgc3RvcF9vZmZzZXQpLnNwbGl0KAogICAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc2VsZi5fbWluX2J1bmRsZV9zaXplKQogICAgICBmb3Igc3BsaXQgaW4gc3BsaXRzOgogICAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUoCiAgICAgICAgICAgIHNwbGl0LnN0b3AgLSBzcGxpdC5zdGFydCwKICAgICAgICAgICAgX1NpbmdsZUZpbGVTb3VyY2UoCiAgICAgICAgICAgICAgICAjIENvcHlpbmcgdGhpcyBzbyB0aGF0IGVhY2ggc3ViLXNvdXJjZSBnZXRzIGEgZnJlc2ggaW5zdGFuY2UuCiAgICAgICAgICAgICAgICBwaWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHMoc2VsZi5fZmlsZV9iYXNlZF9zb3VyY2UpKSwKICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgIHNwbGl0LnN0YXJ0LAogICAgICAgICAgICAgICAgc3BsaXQuc3RvcCwKICAgICAgICAgICAgICAgIG1pbl9idW5kbGVfc2l6ZT1zZWxmLl9taW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgICAgICBzcGxpdHRhYmxlPXNlbGYuX3NwbGl0dGFibGUpLAogICAgICAgICAgICBzcGxpdC5zdGFydCwKICAgICAgICAgICAgc3BsaXQuc3RvcCkKICAgIGVsc2U6CiAgICAgICMgUmV0dXJuaW5nIGEgc2luZ2xlIHN1Yi1zb3VyY2Ugd2l0aCBlbmQgb2Zmc2V0IHNldCB0byBPRkZTRVRfSU5GSU5JVFkgKHNvCiAgICAgICMgdGhhdCBhbGwgZGF0YSBvZiB0aGUgc291cmNlIGdldHMgcmVhZCkgc2luY2UgdGhpcyBzb3VyY2UgaXMKICAgICAgIyB1bnNwbGl0dGFibGUuIENob29zaW5nIHNpemUgb2YgdGhlIGZpbGUgYXMgZW5kIG9mZnNldCB3aWxsIGJlIHdyb25nIGZvcgogICAgICAjIGNlcnRhaW4gdW5zcGxpdHRhYmxlIHNvdXJjZSwgZS5nLiwgY29tcHJlc3NlZCBzb3VyY2VzLgogICAgICB5aWVsZCBpb2Jhc2UuU291cmNlQnVuZGxlKAogICAgICAgICAgc3RvcF9vZmZzZXQgLSBzdGFydF9vZmZzZXQsCiAgICAgICAgICBfU2luZ2xlRmlsZVNvdXJjZSgKICAgICAgICAgICAgICBzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZSwKICAgICAgICAgICAgICBzZWxmLl9maWxlX25hbWUsCiAgICAgICAgICAgICAgc3RhcnRfb2Zmc2V0LAogICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFksCiAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPXNlbGYuX21pbl9idW5kbGVfc2l6ZSwKICAgICAgICAgICAgICBzcGxpdHRhYmxlPXNlbGYuX3NwbGl0dGFibGUKICAgICAgICAgICksCiAgICAgICAgICBzdGFydF9vZmZzZXQsCiAgICAgICAgICByYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZCiAgICAgICkKCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RvcF9vZmZzZXQgLSBzZWxmLl9zdGFydF9vZmZzZXQKCiAgZGVmIGdldF9yYW5nZV90cmFja2VyKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gc2VsZi5fc3RhcnRfb2Zmc2V0CiAgICBpZiBzdG9wX3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgICMgSWYgZmlsZSBpcyB1bnNwbGl0dGFibGUgd2UgY2hvb3NlIE9GRlNFVF9JTkZJTklUWSBhcyB0aGUgZGVmYXVsdCBlbmQKICAgICAgIyBvZmZzZXQgc28gdGhhdCBhbGwgZGF0YSBvZiB0aGUgc291cmNlIGdldHMgcmVhZC4gQ2hvb3Npbmcgc2l6ZSBvZiB0aGUKICAgICAgIyBmaWxlIGFzIGVuZCBvZmZzZXQgd2lsbCBiZSB3cm9uZyBmb3IgY2VydGFpbiB1bnNwbGl0dGFibGUgc291cmNlLCBmb3IKICAgICAgIyBlLmcuLCBjb21wcmVzc2VkIHNvdXJjZXMuCiAgICAgIHN0b3BfcG9zaXRpb24gPSAoCiAgICAgICAgICBzZWxmLl9zdG9wX29mZnNldCBpZiBzZWxmLl9zcGxpdHRhYmxlCiAgICAgICAgICBlbHNlIHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFkpCgogICAgcmFuZ2VfdHJhY2tlciA9IHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlcigKICAgICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKICAgIGlmIG5vdCBzZWxmLl9zcGxpdHRhYmxlOgogICAgICByYW5nZV90cmFja2VyID0gcmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyKHJhbmdlX3RyYWNrZXIpCgogICAgcmV0dXJuIHJhbmdlX3RyYWNrZXIKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICByZXR1cm4gc2VsZi5fZmlsZV9iYXNlZF9zb3VyY2UucmVhZF9yZWNvcmRzKHNlbGYuX2ZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcikKCiAgZGVmIGRlZmF1bHRfb3V0cHV0X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2ZpbGVfYmFzZWRfc291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKCgpjbGFzcyBfRXhwYW5kSW50b1JhbmdlcyhEb0ZuKToKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBzcGxpdHRhYmxlLCBjb21wcmVzc2lvbl90eXBlLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBtaW5fYnVuZGxlX3NpemUpOgogICAgc2VsZi5fZGVzaXJlZF9idW5kbGVfc2l6ZSA9IGRlc2lyZWRfYnVuZGxlX3NpemUKICAgIHNlbGYuX21pbl9idW5kbGVfc2l6ZSA9IG1pbl9idW5kbGVfc2l6ZQogICAgc2VsZi5fc3BsaXR0YWJsZSA9IHNwbGl0dGFibGUKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBtYXRjaF9yZXN1bHRzID0gRmlsZVN5c3RlbXMubWF0Y2goW2VsZW1lbnRdKQogICAgZm9yIG1ldGFkYXRhIGluIG1hdGNoX3Jlc3VsdHNbMF0ubWV0YWRhdGFfbGlzdDoKICAgICAgc3BsaXR0YWJsZSA9ICgKICAgICAgICAgIHNlbGYuX3NwbGl0dGFibGUgYW5kCiAgICAgICAgICBfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlKAogICAgICAgICAgICAgIG1ldGFkYXRhLnBhdGgsIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUpKQoKICAgICAgaWYgc3BsaXR0YWJsZToKICAgICAgICBmb3Igc3BsaXQgaW4gT2Zmc2V0UmFuZ2UoCiAgICAgICAgICAgIDAsIG1ldGFkYXRhLnNpemVfaW5fYnl0ZXMpLnNwbGl0KAogICAgICAgICAgICAgICAgc2VsZi5fZGVzaXJlZF9idW5kbGVfc2l6ZSwgc2VsZi5fbWluX2J1bmRsZV9zaXplKToKICAgICAgICAgIHlpZWxkIChtZXRhZGF0YSwgc3BsaXQpCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgKG1ldGFkYXRhLCBPZmZzZXRSYW5nZSgKICAgICAgICAgICAgMCwgcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWSkpCgoKIyBSZXBsYWNlIGZvbGxvd2luZyB3aXRoIGEgZ2VuZXJpYyByZXNoYXJkIHRyYW5zZm9ybSBvbmNlCiMgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9CRUFNLTE4NzIgaXMgaW1wbGVtZW50ZWQuCmNsYXNzIF9SZXNoYXJkKFBUcmFuc2Zvcm0pOgoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICBrZXllZF9wYyA9IChwdmFsdWUKICAgICAgICAgICAgICAgIHwgJ0Fzc2lnbktleScgPj4gTWFwKGxhbWJkYSB4OiAodXVpZC51dWlkNCgpLCB4KSkpCiAgICBpZiBrZXllZF9wYy53aW5kb3dpbmcud2luZG93Zm4uaXNfbWVyZ2luZygpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUcmFuc2Zvcm0gUmVhZEFsbEZpbGVzIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBwcmVzZW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ29mIG1lcmdpbmcgd2luZG93cycpCiAgICBpZiBub3QgaXNpbnN0YW5jZShrZXllZF9wYy53aW5kb3dpbmcudHJpZ2dlcmZuLCBEZWZhdWx0VHJpZ2dlcik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RyYW5zZm9ybSBSZWFkQWxsRmlsZXMgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHByZXNlbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAnb2Ygbm9uLXRyaXZpYWwgdHJpZ2dlcnMnKQoKICAgIHJldHVybiAoa2V5ZWRfcGMgfCAnR3JvdXBCeUtleScgPj4gR3JvdXBCeUtleSgpCiAgICAgICAgICAgICMgVXNpbmcgRmxhdE1hcCBiZWxvdyBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGtleSBjb2xsaXNpb25zLgogICAgICAgICAgICB8ICdEcm9wS2V5JyA+PiBGbGF0TWFwKGxhbWJkYSBrX3ZhbHVlczoga192YWx1ZXNbMV0pKQoKCmNsYXNzIF9SZWFkUmFuZ2UoRG9Gbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2VfZnJvbV9maWxlKToKICAgIHNlbGYuX3NvdXJjZV9mcm9tX2ZpbGUgPSBzb3VyY2VfZnJvbV9maWxlCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBtZXRhZGF0YSwgcmFuZ2UgPSBlbGVtZW50CiAgICBzb3VyY2UgPSBzZWxmLl9zb3VyY2VfZnJvbV9maWxlKG1ldGFkYXRhLnBhdGgpCiAgICAjIEZvbGxvd2luZyBzcGxpdCgpIG9wZXJhdGlvbiBoYXMgdG8gYmUgcGVyZm9ybWVkIHRvIGNyZWF0ZSBhIHByb3BlcgogICAgIyBfU2luZ2xlRmlsZVNvdXJjZS4gT3RoZXJ3aXNlIHdoYXQgd2UgaGF2ZSBpcyBhIENvbmNhdFNvdXJjZSB0aGF0IGNvbnRhaW5zCiAgICAjIGEgc2luZ2xlIF9TaW5nbGVGaWxlU291cmNlLiBDb25jYXRTb3VyY2UucmVhZCgpIGV4cGVjdHMgYSBSYW5nZVRyYWtlciBmb3IKICAgICMgc3ViLXNvdXJjZSByYW5nZSBhbmQgcmVhZHMgZnVsbCBzdWItc291cmNlcyAobm90IGJ5dGUgcmFuZ2VzKS4KICAgIHNvdXJjZSA9IGxpc3Qoc291cmNlLnNwbGl0KGZsb2F0KCdpbmYnKSkpWzBdLnNvdXJjZQogICAgZm9yIHJlY29yZCBpbiBzb3VyY2UucmVhZChyYW5nZS5uZXdfdHJhY2tlcigpKToKICAgICAgeWllbGQgcmVjb3JkCgoKY2xhc3MgUmVhZEFsbEZpbGVzKFBUcmFuc2Zvcm0pOgogICIiIkEgUmVhZCB0cmFuc2Zvcm0gdGhhdCByZWFkcyBhIFBDb2xsZWN0aW9uIG9mIGZpbGVzLgoKICBQaXBlbGluZSBhdXRob3JzIHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFRoaXMgaXMgdG8gYmUgdXNlZCBieSBSZWFkCiAgUFRyYW5zZm9ybSBhdXRob3JzIHdobyB3aXNoZXMgdG8gaW1wbGVtZW50IGZpbGUtYmFzZWQgUmVhZCB0cmFuc2Zvcm1zIHRoYXQKICByZWFkIGEgUENvbGxlY3Rpb24gb2YgZmlsZXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgc3BsaXR0YWJsZSwgY29tcHJlc3Npb25fdHlwZSwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgbWluX2J1bmRsZV9zaXplLAogICAgICBzb3VyY2VfZnJvbV9maWxlKToKICAgICIiIgogICAgQXJnczoKICAgICAgc3BsaXR0YWJsZTogSWYgVHJ1ZSwgZmlsZXMgd29uJ3QgYmUgc3BsaXQgaW50byBzdWItcmFuZ2VzLiBJZiBGYWxzZSwgZmlsZXMKICAgICAgICAgICAgICAgICAgbWF5IG9yIG1heSBub3QgYmUgc3BsaXQgaW50byBkYXRhIHJhbmdlcy4KICAgICAgY29tcHJlc3Npb25fdHlwZTogQSBgYENvbXByZXNzaW9uVHlwZWBgIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUKICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSBvZiB0aGUgZmlsZXMgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZC4gSWYKICAgICAgICAgICAgICAgICAgYGBDb21wcmVzc2lvblR5cGUuQVVUT2BgLCBzeXN0ZW0gd2lsbCB0cnkgdG8gYXV0b21hdGljYWxseQogICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgdGhlIGNvbXByZXNzaW9uIHR5cGUgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZgogICAgICAgICAgICAgICAgICBmaWxlcy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSBvZiBkYXRhIHJhbmdlcyB0aGF0IHNob3VsZCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hlbiBzcGxpdHRpbmcgYSBmaWxlIGludG8gZGF0YSByYW5nZXMuCiAgICAgIG1pbl9idW5kbGVfc2l6ZTogbWluaW11bSBzaXplIG9mIGRhdGEgcmFuZ2VzIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyBhIGZpbGUgaW50byBkYXRhIHJhbmdlcy4KICAgICAgc291cmNlX2Zyb21fZmlsZTogYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEgYGBCb3VuZGVkU291cmNlYGAgZ2l2ZW4gYQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG5hbWUuIFN5c3RlbSB3aWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdlbmVyYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGBgQm91bmRlZFNvdXJjZWBgIG9iamVjdHMgZm9yIGZpbGUgcGF0aHMuIE5vdGUgdGhhdCBmaWxlCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzIHBhc3NlZCB0byB0aGlzIHdpbGwgYmUgZm9yIGluZGl2aWR1YWwgZmlsZXMsIG5vdAogICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZSBwYXR0ZXJucyBldmVuIGlmIHRoZSBgYFBDb2xsZWN0aW9uYGAgb2YgZmlsZXMKICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIGJ5IHRoZSB0cmFuc2Zvcm0gY29uc2lzdCBvZiBmaWxlIHBhdHRlcm5zLgogICAgIiIiCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYuX2Rlc2lyZWRfYnVuZGxlX3NpemUgPSBkZXNpcmVkX2J1bmRsZV9zaXplCiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIHNlbGYuX3NvdXJjZV9mcm9tX2ZpbGUgPSBzb3VyY2VfZnJvbV9maWxlCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiAocHZhbHVlCiAgICAgICAgICAgIHwgJ0V4cGFuZEludG9SYW5nZXMnID4+IFBhckRvKF9FeHBhbmRJbnRvUmFuZ2VzKAogICAgICAgICAgICAgICAgc2VsZi5fc3BsaXR0YWJsZSwgc2VsZi5fY29tcHJlc3Npb25fdHlwZSwKICAgICAgICAgICAgICAgIHNlbGYuX2Rlc2lyZWRfYnVuZGxlX3NpemUsIHNlbGYuX21pbl9idW5kbGVfc2l6ZSkpCiAgICAgICAgICAgIHwgJ1Jlc2hhcmQnID4+IF9SZXNoYXJkKCkKICAgICAgICAgICAgfCAnUmVhZFJhbmdlJyA+PiBQYXJEbyhfUmVhZFJhbmdlKHNlbGYuX3NvdXJjZV9mcm9tX2ZpbGUpKSkKfXLfAgAAKFgfAAAAX1NpbmdsZUZpbGVTb3VyY2UuZXN0aW1hdGVfc2l6ZVgDAAAAZGVmTS0BTS8Bh1giAAAARmlsZUJhc2VkU291cmNlLl9nZXRfY29uY2F0X3NvdXJjZVgDAAAAZGVmS4BLpIdYEwAAAFJlYWRBbGxGaWxlcy5leHBhbmRYAwAAAGRlZk2uAU21AYdYEQAAAF9TaW5nbGVGaWxlU291cmNlWAUAAABjbGFzc0vqTUgBh1gaAAAAX0V4cGFuZEludG9SYW5nZXMuX19pbml0X19YAwAAAGRlZk1MAU1SAYdYEQAAAF9FeHBhbmRJbnRvUmFuZ2VzWAUAAABjbGFzc01KAU1jAYdYGQAAAF9FeHBhbmRJbnRvUmFuZ2VzLnByb2Nlc3NYAwAAAGRlZk1TAU1jAYdYHAAAAEZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHNYAwAAAGRlZkvKS9yHWB0AAABGaWxlQmFzZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZVgDAAAAZGVmS71LwodYGQAAAEZpbGVCYXNlZFNvdXJjZS5vcGVuX2ZpbGVYAwAAAGRlZkulS6mHWA8AAABfUmVzaGFyZC5leHBhbmRYAwAAAGRlZk1pAU12AYdYFgAAAF9TaW5nbGVGaWxlU291cmNlLnJlYWRYAwAAAGRlZk1DAU1FAYdYCAAAAF9SZXNoYXJkWAUAAABjbGFzc01nAU12AYdYDwAAAEZpbGVCYXNlZFNvdXJjZVgFAAAAY2xhc3NLNkvgh1gVAAAAUmVhZEFsbEZpbGVzLl9faW5pdF9fWAMAAABkZWZNkQFNrQGHWBcAAABfU2luZ2xlRmlsZVNvdXJjZS5zcGxpdFgDAAAAZGVmTQQBTSwBh1gUAAAARmlsZUJhc2VkU291cmNlLnJlYWRYAwAAAGRlZkvDS8WHWCMAAABfU2luZ2xlRmlsZVNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmTTABTUIBh1gVAAAARmlsZUJhc2VkU291cmNlLnNwbGl0WAMAAABkZWZLtku8h1ghAAAARmlsZUJhc2VkU291cmNlLmdldF9yYW5nZV90cmFja2VyWAMAAABkZWZLxkvJh1gcAAAARmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YVgDAAAAZGVmS3pLf4dYGAAAAEZpbGVCYXNlZFNvdXJjZS5fX2luaXRfX1gDAAAAZGVmSz1LeYdYLgAAAF9kZXRlcm1pbmVfc3BsaXR0YWJpbGl0eV9mcm9tX2NvbXByZXNzaW9uX3R5cGVYAwAAAGRlZkviS+iHWBMAAABfUmVhZFJhbmdlLl9faW5pdF9fWAMAAABkZWZNegFNfAGHWBoAAABfU2luZ2xlRmlsZVNvdXJjZS5fX2luaXRfX1gDAAAAZGVmS+1NAwGHWBoAAABGaWxlQmFzZWRTb3VyY2Uuc3BsaXR0YWJsZVgDAAAAZGVmS91L4IdYDAAAAFJlYWRBbGxGaWxlc1gFAAAAY2xhc3NNiQFNtQGHWBIAAABfUmVhZFJhbmdlLnByb2Nlc3NYAwAAAGRlZk19AU2HAYdYJgAAAF9TaW5nbGVGaWxlU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyWAMAAABkZWZNRgFNSAGHWAoAAABfUmVhZFJhbmdlWAUAAABjbGFzc014AU2HAYdYGQAAAEZpbGVCYXNlZFNvdXJjZS5fdmFsaWRhdGVYAwAAAGRlZkuqS7WHdX1y4AIAAChYDwAAAEZpbGVCYXNlZFNvdXJjZVgeAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlcuECAABYHQAAAEZpbGVCYXNlZFNvdXJjZS5lc3RpbWF0ZV9zaXplauECAABYGQAAAEZpbGVCYXNlZFNvdXJjZS5vcGVuX2ZpbGVq4QIAAFgUAAAARmlsZUJhc2VkU291cmNlLnJlYWRq4QIAAFghAAAARmlsZUJhc2VkU291cmNlLmdldF9yYW5nZV90cmFja2VyauECAABYFQAAAEZpbGVCYXNlZFNvdXJjZS5zcGxpdGrhAgAAWBwAAABGaWxlQmFzZWRTb3VyY2UuZGlzcGxheV9kYXRhauECAABYHAAAAEZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHNq4QIAAHVoilgeAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlcuICAACFgXLjAgAAfXLkAgAAYnRVG2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeShYVPAAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQmlnUXVlcnkgc291cmNlcyBhbmQgc2lua3MuCgpUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBCaWdRdWVyeSB0YWJsZXMuIEl0IHJlbGllcwpvbiBzZXZlcmFsIGNsYXNzZXMgZXhwb3NlZCBieSB0aGUgQmlnUXVlcnkgQVBJOiBUYWJsZVNjaGVtYSwgVGFibGVGaWVsZFNjaGVtYSwKVGFibGVSb3csIGFuZCBUYWJsZUNlbGwuIFRoZSBkZWZhdWx0IG1vZGUgaXMgdG8gcmV0dXJuIHRhYmxlIHJvd3MgcmVhZCBmcm9tIGEKQmlnUXVlcnkgc291cmNlIGFzIGRpY3Rpb25hcmllcy4gU2ltaWxhcmx5IGEgV3JpdGUgdHJhbnNmb3JtIHRvIGEgQmlnUXVlcnlTaW5rCmFjY2VwdHMgUENvbGxlY3Rpb25zIG9mIGRpY3Rpb25hcmllcy4gVGhpcyBpcyBkb25lIGZvciBtb3JlIGNvbnZlbmllbnQKcHJvZ3JhbW1pbmcuICBJZiBkZXNpcmVkLCB0aGUgbmF0aXZlIFRhYmxlUm93IG9iamVjdHMgY2FuIGJlIHVzZWQgdGhyb3VnaG91dCB0bwpyZXByZXNlbnQgcm93cyAodXNlIGFuIGluc3RhbmNlIG9mIFRhYmxlUm93SnNvbkNvZGVyIGFzIGEgY29kZXIgYXJndW1lbnQgd2hlbgpjcmVhdGluZyB0aGUgc291cmNlcyBvciBzaW5rcyByZXNwZWN0aXZlbHkpLgoKQWxzbywgZm9yIHByb2dyYW1taW5nIGNvbnZlbmllbmNlLCBpbnN0YW5jZXMgb2YgVGFibGVSZWZlcmVuY2UgYW5kIFRhYmxlU2NoZW1hCmhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnRzOgoKICAtIFRhYmxlUmVmZXJlbmNlIGNhbiBiZSBhIFBST0pFQ1Q6REFUQVNFVC5UQUJMRSBvciBEQVRBU0VULlRBQkxFIHN0cmluZy4KICAtIFRhYmxlU2NoZW1hIGNhbiBiZSBhIE5BTUU6VFlQRXssTkFNRTpUWVBFfSogc3RyaW5nCiAgICAoZS5nLiAnbW9udGg6U1RSSU5HLGV2ZW50X2NvdW50OklOVEVHRVInKS4KClRoZSBzeW50YXggc3VwcG9ydGVkIGlzIGRlc2NyaWJlZCBoZXJlOgpodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvYnEtY29tbWFuZC1saW5lLXRvb2wtcXVpY2tzdGFydAoKQmlnUXVlcnkgc291cmNlcyBjYW4gYmUgdXNlZCBhcyBtYWluIGlucHV0cyBvciBzaWRlIGlucHV0cy4gQSBtYWluIGlucHV0Cihjb21tb24gY2FzZSkgaXMgZXhwZWN0ZWQgdG8gYmUgbWFzc2l2ZSBhbmQgd2lsbCBiZSBzcGxpdCBpbnRvIG1hbmFnZWFibGUgY2h1bmtzCmFuZCBwcm9jZXNzZWQgaW4gcGFyYWxsZWwuIFNpZGUgaW5wdXRzIGFyZSBleHBlY3RlZCB0byBiZSBzbWFsbCBhbmQgd2lsbCBiZSByZWFkCmNvbXBsZXRlbHkgZXZlcnkgdGltZSBhIFBhckRvIERvRm4gZ2V0cyBleGVjdXRlZC4gSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlCmxhbWJkYSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERvRm4gZm9yIHRoZSBNYXAgdHJhbnNmb3JtIHdpbGwgZ2V0IG9uIGVhY2gKY2FsbCAqb25lKiByb3cgb2YgdGhlIG1haW4gdGFibGUgYW5kICphbGwqIHJvd3Mgb2YgdGhlIHNpZGUgdGFibGUuIFRoZSBydW5uZXIKbWF5IHVzZSBzb21lIGNhY2hpbmcgdGVjaG5pcXVlcyB0byBzaGFyZSB0aGUgc2lkZSBpbnB1dHMgYmV0d2VlbiBjYWxscyBpbiBvcmRlcgp0byBhdm9pZCBleGNlc3NpdmUgcmVhZGluZzo6OgoKICBtYWluX3RhYmxlID0gcGlwZWxpbmUgfCAnVmVyeUJpZycgPj4gYmVhbS5pby5SZWFkKGJlYW0uaW8uQmlnUXVlcnlTb3VyY2UoKQogIHNpZGVfdGFibGUgPSBwaXBlbGluZSB8ICdOb3RCaWcnID4+IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKCkKICByZXN1bHRzID0gKAogICAgICBtYWluX3RhYmxlCiAgICAgIHwgJ1Byb2Nlc3NEYXRhJyA+PiBiZWFtLk1hcCgKICAgICAgICAgIGxhbWJkYSBlbGVtZW50LCBzaWRlX2lucHV0OiAuLi4sIEFzTGlzdChzaWRlX3RhYmxlKSkpCgpUaGVyZSBpcyBubyBkaWZmZXJlbmNlIGluIGhvdyBtYWluIGFuZCBzaWRlIGlucHV0cyBhcmUgcmVhZC4gV2hhdCBtYWtlcyB0aGUKc2lkZV90YWJsZSBhICdzaWRlIGlucHV0JyBpcyB0aGUgQXNMaXN0IHdyYXBwZXIgdXNlZCB3aGVuIHBhc3NpbmcgdGhlIHRhYmxlCmFzIGEgcGFyYW1ldGVyIHRvIHRoZSBNYXAgdHJhbnNmb3JtLiBBc0xpc3Qgc2lnbmFscyB0byB0aGUgZXhlY3V0aW9uIGZyYW1ld29yawp0aGF0IGl0cyBpbnB1dCBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgd2hvbGUuCgpUaGUgbWFpbiBhbmQgc2lkZSBpbnB1dHMgYXJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiBSZWFkaW5nIGEgQmlnUXVlcnkgdGFibGUKYXMgbWFpbiBpbnB1dCBlbnRhaWxzIGV4cG9ydGluZyB0aGUgdGFibGUgdG8gYSBzZXQgb2YgR0NTIGZpbGVzIChjdXJyZW50bHkgaW4KSlNPTiBmb3JtYXQpIGFuZCB0aGVuIHByb2Nlc3NpbmcgdGhvc2UgZmlsZXMuIFJlYWRpbmcgdGhlIHNhbWUgdGFibGUgYXMgYSBzaWRlCmlucHV0IGVudGFpbHMgcXVlcnlpbmcgdGhlIHRhYmxlIGZvciBhbGwgaXRzIHJvd3MuIFRoZSBjb2RlciBhcmd1bWVudCBvbgpCaWdRdWVyeVNvdXJjZSBjb250cm9scyB0aGUgcmVhZGluZyBvZiB0aGUgbGluZXMgaW4gdGhlIGV4cG9ydCBmaWxlcyAoaS5lLiwKdHJhbnNmb3JtIGEgSlNPTiBvYmplY3QgaW50byBhIFBDb2xsZWN0aW9uIGVsZW1lbnQpLiBUaGUgY29kZXIgaXMgbm90IGludm9sdmVkCndoZW4gdGhlIHNhbWUgdGFibGUgaXMgcmVhZCBhcyBhIHNpZGUgaW5wdXQgc2luY2UgdGhlcmUgaXMgbm8gaW50ZXJtZWRpYXRlCmZvcm1hdCBpbnZvbHZlZC4gV2UgZ2V0IHRoZSB0YWJsZSByb3dzIGRpcmVjdGx5IGZyb20gdGhlIEJpZ1F1ZXJ5IHNlcnZpY2Ugd2l0aAphIHF1ZXJ5LgoKVXNlcnMgbWF5IHByb3ZpZGUgYSBxdWVyeSB0byByZWFkIGZyb20gcmF0aGVyIHRoYW4gcmVhZGluZyBhbGwgb2YgYSBCaWdRdWVyeQp0YWJsZS4gSWYgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IG9idGFpbmVkIGJ5IGV4ZWN1dGluZyB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHdpbGwKYmUgdXNlZCBhcyB0aGUgZGF0YSBvZiB0aGUgaW5wdXQgdHJhbnNmb3JtLjo6CgogIHF1ZXJ5X3Jlc3VsdHMgPSBwaXBlbGluZSB8IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKAogICAgICBxdWVyeT0nU0VMRUNUIHllYXIsIG1lYW5fdGVtcCBGUk9NIHNhbXBsZXMud2VhdGhlcl9zdGF0aW9ucycpKQoKV2hlbiBjcmVhdGluZyBhIEJpZ1F1ZXJ5IGlucHV0IHRyYW5zZm9ybSwgdXNlcnMgc2hvdWxkIHByb3ZpZGUgZWl0aGVyIGEgcXVlcnkKb3IgYSB0YWJsZS4gUGlwZWxpbmUgY29uc3RydWN0aW9uIHdpbGwgZmFpbCB3aXRoIGEgdmFsaWRhdGlvbiBlcnJvciBpZiBuZWl0aGVyCm9yIGJvdGggYXJlIHNwZWNpZmllZC4KCioqVGltZSBwYXJ0aXRpb25lZCB0YWJsZXMqKgoKQmlnUXVlcnkgc2luayBjdXJyZW50bHkgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCB3cml0aW5nIHRvIEJpZ1F1ZXJ5CnRpbWUgcGFydGl0aW9uZWQgdGFibGVzLiBCdXQgd3JpdGluZyB0byBhICpzaW5nbGUqIHBhcnRpdGlvbiBtYXkgd29yayBpZgp0aGF0IGRvZXMgbm90IGludm9sdmUgY3JlYXRpbmcgYSBuZXcgdGFibGUgKGZvciBleGFtcGxlLCB3aGVuIHdyaXRpbmcgdG8gYW4KZXhpc3RpbmcgdGFibGUgd2l0aCBgY3JlYXRlX2Rpc3Bvc2l0aW9uPUNSRUFURV9ORVZFUmAgYW5kCmB3cml0ZV9kaXNwb3NpdGlvbj1XUklURV9BUFBFTkRgKS4KQmlnUXVlcnkgc291cmNlIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSB0aW1lIHBhcnRpdGlvbiB3aXRoIHRoZSBwYXJ0aXRpb24KZGVjb3JhdG9yIHNwZWNpZmllZCBhcyBhIHBhcnQgb2YgdGhlIHRhYmxlIGlkZW50aWZpZXIuCgoqKiogU2hvcnQgaW50cm9kdWN0aW9uIHRvIEJpZ1F1ZXJ5IGNvbmNlcHRzICoqKgpUYWJsZXMgaGF2ZSByb3dzIChUYWJsZVJvdykgYW5kIGVhY2ggcm93IGhhcyBjZWxscyAoVGFibGVDZWxsKS4KQSB0YWJsZSBoYXMgYSBzY2hlbWEgKFRhYmxlU2NoZW1hKSwgd2hpY2ggaW4gdHVybiBkZXNjcmliZXMgdGhlIHNjaGVtYSBvZiBlYWNoCmNlbGwgKFRhYmxlRmllbGRTY2hlbWEpLiBUaGUgdGVybXMgZmllbGQgYW5kIGNlbGwgYXJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LgoKVGFibGVTY2hlbWE6IERlc2NyaWJlcyB0aGUgc2NoZW1hICh0eXBlcyBhbmQgb3JkZXIpIGZvciB2YWx1ZXMgaW4gZWFjaCByb3cuCiAgSGFzIG9uZSBhdHRyaWJ1dGUsICdmaWVsZCcsIHdoaWNoIGlzIGxpc3Qgb2YgVGFibGVGaWVsZFNjaGVtYSBvYmplY3RzLgoKVGFibGVGaWVsZFNjaGVtYTogRGVzY3JpYmVzIHRoZSBzY2hlbWEgKHR5cGUsIG5hbWUpIGZvciBvbmUgZmllbGQuCiAgSGFzIHNldmVyYWwgYXR0cmlidXRlcywgaW5jbHVkaW5nICduYW1lJyBhbmQgJ3R5cGUnLiBDb21tb24gdmFsdWVzIGZvcgogIHRoZSB0eXBlIGF0dHJpYnV0ZSBhcmU6ICdTVFJJTkcnLCAnSU5URUdFUicsICdGTE9BVCcsICdCT09MRUFOJy4gQWxsIHBvc3NpYmxlCiAgdmFsdWVzIGFyZSBkZXNjcmliZWQgYXQ6CiAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L3ByZXBhcmluZy1kYXRhLWZvci1iaWdxdWVyeSNkYXRhdHlwZXMKClRhYmxlUm93OiBIb2xkcyBhbGwgdmFsdWVzIGluIGEgdGFibGUgcm93LiBIYXMgb25lIGF0dHJpYnV0ZSwgJ2YnLCB3aGljaCBpcyBhCiAgbGlzdCBvZiBUYWJsZUNlbGwgaW5zdGFuY2VzLgoKVGFibGVDZWxsOiBIb2xkcyB0aGUgdmFsdWUgZm9yIG9uZSBjZWxsIChvciBmaWVsZCkuICBIYXMgb25lIGF0dHJpYnV0ZSwKICAndicsIHdoaWNoIGlzIGEgSnNvblZhbHVlIGluc3RhbmNlLiBUaGlzIGNsYXNzIGlzIGRlZmluZWQgaW4KICBhcGl0b29scy5iYXNlLnB5LmV4dHJhX3R5cGVzLnB5IG1vZHVsZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBkYXRldGltZQppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmUKaW1wb3J0IHRpbWUKaW1wb3J0IHV1aWQKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcCBpbXBvcnQgYXV0aApmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlIGltcG9ydCBmcm9tX2pzb25fdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZSBpbXBvcnQgdG9fanNvbl92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBiaWdxdWVyeQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGJpZ3F1ZXJ5IGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5leGNlcHRpb25zIGltcG9ydCBIdHRwRXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKCl9fYWxsX18gPSBbCiAgICAnVGFibGVSb3dKc29uQ29kZXInLAogICAgJ0JpZ1F1ZXJ5RGlzcG9zaXRpb24nLAogICAgJ0JpZ1F1ZXJ5U291cmNlJywKICAgICdCaWdRdWVyeVNpbmsnLAogICAgJ1dyaXRlVG9CaWdRdWVyeScsCiAgICBdCgpKU09OX0NPTVBMSUFOQ0VfRVJST1IgPSAnTkFOLCBJTkYgYW5kIC1JTkYgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQuJwpNQVhfUkVUUklFUyA9IDMKCgpjbGFzcyBSb3dBc0RpY3RKc29uQ29kZXIoY29kZXJzLkNvZGVyKToKICAiIiJBIGNvZGVyIGZvciBhIHRhYmxlIHJvdyAocmVwcmVzZW50ZWQgYXMgYSBkaWN0KSB0by9mcm9tIGEgSlNPTiBzdHJpbmcuCgogIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29kZXIgZm9yIHNvdXJjZXMgYW5kIHNpbmtzIGlmIHRoZSBjb2RlciBhcmd1bWVudCBpcyBub3QKICBzcGVjaWZpZWQuCiAgIiIiCgogIGRlZiBlbmNvZGUoc2VsZiwgdGFibGVfcm93KToKICAgICMgVGhlIG5vcm1hbCBlcnJvciB3aGVuIGR1bXBpbmcgTkFOL0lORiB2YWx1ZXMgaXM6CiAgICAjIFZhbHVlRXJyb3I6IE91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudAogICAgIyBUaGlzIGNvZGUgd2lsbCBjYXRjaCB0aGlzIGVycm9yIHRvIGVtaXQgYW4gZXJyb3IgdGhhdCBleHBsYWlucwogICAgIyB0byB0aGUgcHJvZ3JhbW1lciB0aGF0IHRoZXkgaGF2ZSB1c2VkIE5BTi9JTkYgdmFsdWVzLgogICAgdHJ5OgogICAgICByZXR1cm4ganNvbi5kdW1wcyh0YWJsZV9yb3csIGFsbG93X25hbj1GYWxzZSkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiAlcycgJSAoZSwgSlNPTl9DT01QTElBTkNFX0VSUk9SKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkX3RhYmxlX3Jvdyk6CiAgICByZXR1cm4ganNvbi5sb2FkcyhlbmNvZGVkX3RhYmxlX3JvdykKCgpjbGFzcyBUYWJsZVJvd0pzb25Db2Rlcihjb2RlcnMuQ29kZXIpOgogICIiIkEgY29kZXIgZm9yIGEgVGFibGVSb3cgaW5zdGFuY2UgdG8vZnJvbSBhIEpTT04gc3RyaW5nLgoKICBOb3RlIHRoYXQgdGhlIGVuY29kaW5nIG9wZXJhdGlvbiAodXNlZCB3aGVuIHdyaXRpbmcgdG8gc2lua3MpIHJlcXVpcmVzIHRoZQogIHRhYmxlIHNjaGVtYSBpbiBvcmRlciB0byBvYnRhaW4gdGhlIG9yZGVyZWQgbGlzdCBvZiBmaWVsZCBuYW1lcy4gUmVhZGluZyBmcm9tCiAgc291cmNlcyBvbiB0aGUgb3RoZXIgaGFuZCBkb2VzIG5vdCBuZWVkIHRoZSB0YWJsZSBzY2hlbWEuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZV9zY2hlbWE9Tm9uZSk6CiAgICAjIFRoZSB0YWJsZSBzY2hlbWEgaXMgbmVlZGVkIGZvciBlbmNvZGluZyBUYWJsZVJvd3MgYXMgSlNPTiAod3JpdGluZyB0bwogICAgIyBzaW5rcykgYmVjYXVzZSB0aGUgb3JkZXJlZCBsaXN0IG9mIGZpZWxkIG5hbWVzIGlzIHVzZWQgaW4gdGhlIEpTT04KICAgICMgcmVwcmVzZW50YXRpb24uCiAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHRhYmxlX3NjaGVtYQogICAgIyBQcmVjb21wdXRlIGZpZWxkIG5hbWVzIHNpbmNlIHdlIG5lZWQgdGhlbSBmb3Igcm93IGVuY29kaW5nLgogICAgaWYgc2VsZi50YWJsZV9zY2hlbWE6CiAgICAgIHNlbGYuZmllbGRfbmFtZXMgPSB0dXBsZShmcy5uYW1lIGZvciBmcyBpbiBzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpCgogIGRlZiBlbmNvZGUoc2VsZiwgdGFibGVfcm93KToKICAgIGlmIHNlbGYudGFibGVfc2NoZW1hIGlzIE5vbmU6CiAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAogICAgICAgICAgJ1RoZSBUYWJsZVJvd0pzb25Db2RlciByZXF1aXJlcyBhIHRhYmxlIHNjaGVtYSBmb3IgJwogICAgICAgICAgJ2VuY29kaW5nIG9wZXJhdGlvbnMuIFBsZWFzZSBzcGVjaWZ5IGEgdGFibGVfc2NoZW1hIGFyZ3VtZW50LicpCiAgICB0cnk6CiAgICAgIHJldHVybiBqc29uLmR1bXBzKAogICAgICAgICAgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoCiAgICAgICAgICAgICAgemlwKHNlbGYuZmllbGRfbmFtZXMsCiAgICAgICAgICAgICAgICAgIFtmcm9tX2pzb25fdmFsdWUoZi52KSBmb3IgZiBpbiB0YWJsZV9yb3cuZl0pKSwKICAgICAgICAgIGFsbG93X25hbj1GYWxzZSkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiAlcycgJSAoZSwgSlNPTl9DT01QTElBTkNFX0VSUk9SKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkX3RhYmxlX3Jvdyk6CiAgICBvZCA9IGpzb24ubG9hZHMoCiAgICAgICAgZW5jb2RlZF90YWJsZV9yb3csIG9iamVjdF9wYWlyc19ob29rPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQogICAgcmV0dXJuIGJpZ3F1ZXJ5LlRhYmxlUm93KAogICAgICAgIGY9W2JpZ3F1ZXJ5LlRhYmxlQ2VsbCh2PXRvX2pzb25fdmFsdWUoZSkpIGZvciBlIGluIG9kLml0ZXJ2YWx1ZXMoKV0pCgoKZGVmIHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oc2NoZW1hX3N0cmluZyk6CiAgIiIiUGFyc2UgdGhlIFRhYmxlIFNjaGVtYSBwcm92aWRlZCBhcyBzdHJpbmcuCgogIEFyZ3M6CiAgICBzY2hlbWFfc3RyaW5nOiBTdHJpbmcgc2VyaWFsaXplZCB0YWJsZSBzY2hlbWEsIHNob3VsZCBiZSBhIHZhbGlkIEpTT04uCgogIFJldHVybnM6CiAgICBBIFRhYmxlU2NoZW1hIG9mIHRoZSBCaWdRdWVyeSBleHBvcnQgZnJvbSBlaXRoZXIgdGhlIFF1ZXJ5IG9yIHRoZSBUYWJsZS4KICAiIiIKICBqc29uX3NjaGVtYSA9IGpzb24ubG9hZHMoc2NoZW1hX3N0cmluZykKCiAgZGVmIF9wYXJzZV9zY2hlbWFfZmllbGQoZmllbGQpOgogICAgIiIiUGFyc2UgYSBzaW5nbGUgc2NoZW1hIGZpZWxkIGZyb20gZGljdGlvbmFyeS4KCiAgICBBcmdzOgogICAgICBmaWVsZDogRGljdGlvbmFyeSBvYmplY3QgY29udGFpbmluZyBzZXJpYWxpemVkIHNjaGVtYS4KCiAgICBSZXR1cm5zOgogICAgICBBIFRhYmxlRmllbGRTY2hlbWEgZm9yIGEgc2luZ2xlIGNvbHVtbiBpbiBCaWdRdWVyeS4KICAgICIiIgogICAgc2NoZW1hID0gYmlncXVlcnkuVGFibGVGaWVsZFNjaGVtYSgpCiAgICBzY2hlbWEubmFtZSA9IGZpZWxkWyduYW1lJ10KICAgIHNjaGVtYS50eXBlID0gZmllbGRbJ3R5cGUnXQogICAgaWYgJ21vZGUnIGluIGZpZWxkOgogICAgICBzY2hlbWEubW9kZSA9IGZpZWxkWydtb2RlJ10KICAgIGVsc2U6CiAgICAgIHNjaGVtYS5tb2RlID0gJ05VTExBQkxFJwogICAgaWYgJ2Rlc2NyaXB0aW9uJyBpbiBmaWVsZDoKICAgICAgc2NoZW1hLmRlc2NyaXB0aW9uID0gZmllbGRbJ2Rlc2NyaXB0aW9uJ10KICAgIGlmICdmaWVsZHMnIGluIGZpZWxkOgogICAgICBzY2hlbWEuZmllbGRzID0gW19wYXJzZV9zY2hlbWFfZmllbGQoeCkgZm9yIHggaW4gZmllbGRbJ2ZpZWxkcyddXQogICAgcmV0dXJuIHNjaGVtYQoKICBmaWVsZHMgPSBbX3BhcnNlX3NjaGVtYV9maWVsZChmKSBmb3IgZiBpbiBqc29uX3NjaGVtYVsnZmllbGRzJ11dCiAgcmV0dXJuIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKGZpZWxkcz1maWVsZHMpCgoKY2xhc3MgQmlnUXVlcnlEaXNwb3NpdGlvbihvYmplY3QpOgogICIiIkNsYXNzIGhvbGRpbmcgc3RhbmRhcmQgc3RyaW5ncyB1c2VkIGZvciBjcmVhdGUgYW5kIHdyaXRlIGRpc3Bvc2l0aW9ucy4iIiIKCiAgQ1JFQVRFX05FVkVSID0gJ0NSRUFURV9ORVZFUicKICBDUkVBVEVfSUZfTkVFREVEID0gJ0NSRUFURV9JRl9ORUVERUQnCiAgV1JJVEVfVFJVTkNBVEUgPSAnV1JJVEVfVFJVTkNBVEUnCiAgV1JJVEVfQVBQRU5EID0gJ1dSSVRFX0FQUEVORCcKICBXUklURV9FTVBUWSA9ICdXUklURV9FTVBUWScKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB2YWxpZGF0ZV9jcmVhdGUoZGlzcG9zaXRpb24pOgogICAgdmFsdWVzID0gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSLAogICAgICAgICAgICAgIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCkKICAgIGlmIGRpc3Bvc2l0aW9uIG5vdCBpbiB2YWx1ZXM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnSW52YWxpZCBjcmVhdGUgZGlzcG9zaXRpb24gJXMuIEV4cGVjdGluZyAlcycgJSAoZGlzcG9zaXRpb24sIHZhbHVlcykpCiAgICByZXR1cm4gZGlzcG9zaXRpb24KCiAgQHN0YXRpY21ldGhvZAogIGRlZiB2YWxpZGF0ZV93cml0ZShkaXNwb3NpdGlvbik6CiAgICB2YWx1ZXMgPSAoQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURSwKICAgICAgICAgICAgICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORCwKICAgICAgICAgICAgICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZKQogICAgaWYgZGlzcG9zaXRpb24gbm90IGluIHZhbHVlczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdJbnZhbGlkIHdyaXRlIGRpc3Bvc2l0aW9uICVzLiBFeHBlY3RpbmcgJXMnICUgKGRpc3Bvc2l0aW9uLCB2YWx1ZXMpKQogICAgcmV0dXJuIGRpc3Bvc2l0aW9uCgoKZGVmIF9wYXJzZV90YWJsZV9yZWZlcmVuY2UodGFibGUsIGRhdGFzZXQ9Tm9uZSwgcHJvamVjdD1Ob25lKToKICAiIiJQYXJzZXMgYSB0YWJsZSByZWZlcmVuY2UgaW50byBhIChwcm9qZWN0LCBkYXRhc2V0LCB0YWJsZSkgdHVwbGUuCgogIEFyZ3M6CiAgICB0YWJsZTogVGhlIElEIG9mIHRoZSB0YWJsZS4gVGhlIElEIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMKICAgICAgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgb3IgdW5kZXJzY29yZXMgKF8pLiBJZiBkYXRhc2V0IGFyZ3VtZW50IGlzIE5vbmUKICAgICAgdGhlbiB0aGUgdGFibGUgYXJndW1lbnQgbXVzdCBjb250YWluIHRoZSBlbnRpcmUgdGFibGUgcmVmZXJlbmNlOgogICAgICAnREFUQVNFVC5UQUJMRScgb3IgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRScuIFRoaXMgYXJndW1lbnQgY2FuIGJlIGEKICAgICAgYmlncXVlcnkuVGFibGVSZWZlcmVuY2UgaW5zdGFuY2UgaW4gd2hpY2ggY2FzZSBkYXRhc2V0IGFuZCBwcm9qZWN0IGFyZQogICAgICBpZ25vcmVkIGFuZCB0aGUgcmVmZXJlbmNlIGlzIHJldHVybmVkIGFzIGEgcmVzdWx0LiAgQWRkaXRpb25hbGx5LCBmb3IgZGF0ZQogICAgICBwYXJ0aXRpb25lZCB0YWJsZXMsIGFwcGVuZGluZyAnJFlZWVltbWRkJyB0byB0aGUgdGFibGUgbmFtZSBpcyBzdXBwb3J0ZWQsCiAgICAgIGUuZy4gJ0RBVEFTRVQuVEFCTEUkWVlZWW1tZGQnLgogICAgZGF0YXNldDogVGhlIElEIG9mIHRoZSBkYXRhc2V0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvciBudWxsIGlmIHRoZSB0YWJsZQogICAgICByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZSBhcmd1bWVudC4KICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IgbnVsbCBpZiB0aGUgdGFibGUKICAgICAgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUgKGFuZCBwb3NzaWJseSBkYXRhc2V0KQogICAgICBhcmd1bWVudC4KCiAgUmV0dXJuczoKICAgIEEgYmlncXVlcnkuVGFibGVSZWZlcmVuY2Ugb2JqZWN0LiBUaGUgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CiAgICBwcm9qZWN0SWQsIGRhdGFzZXRJZCwgYW5kIHRhYmxlSWQuCgogIFJhaXNlczoKICAgIFZhbHVlRXJyb3I6IGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgYXMgYSBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkCiAgICAgIGZvcm1hdC4KICAiIiIKCiAgaWYgaXNpbnN0YW5jZSh0YWJsZSwgYmlncXVlcnkuVGFibGVSZWZlcmVuY2UpOgogICAgcmV0dXJuIHRhYmxlCgogIHRhYmxlX3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5LlRhYmxlUmVmZXJlbmNlKCkKICAjIElmIGRhdGFzZXQgYXJndW1lbnQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCiAgIyB0YWJsZSBhcmd1bWVudCB3aWxsIGNvbnRhaW4gYSBmdWxsIHRhYmxlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGp1c3QgYQogICMgdGFibGUgbmFtZS4KICBpZiBkYXRhc2V0IGlzIE5vbmU6CiAgICBtYXRjaCA9IHJlLm1hdGNoKAogICAgICAgIHInXigoP1A8cHJvamVjdD4uKyk6KT8oP1A8ZGF0YXNldD5cdyspXC4oP1A8dGFibGU+W1x3XCRdKykkJywgdGFibGUpCiAgICBpZiBub3QgbWF0Y2g6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSB0YWJsZSByZWZlcmVuY2UgKFBST0pFQ1Q6REFUQVNFVC5UQUJMRSBvciAnCiAgICAgICAgICAnREFUQVNFVC5UQUJMRSkgaW5zdGVhZCBvZiAlcy4nICUgdGFibGUpCiAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkID0gbWF0Y2guZ3JvdXAoJ3Byb2plY3QnKQogICAgdGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCA9IG1hdGNoLmdyb3VwKCdkYXRhc2V0JykKICAgIHRhYmxlX3JlZmVyZW5jZS50YWJsZUlkID0gbWF0Y2guZ3JvdXAoJ3RhYmxlJykKICBlbHNlOgogICAgdGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCA9IHByb2plY3QKICAgIHRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQgPSBkYXRhc2V0CiAgICB0YWJsZV9yZWZlcmVuY2UudGFibGVJZCA9IHRhYmxlCiAgcmV0dXJuIHRhYmxlX3JlZmVyZW5jZQoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCaWdRdWVyeVNvdXJjZSwgQmlnUXVlcnlTaW5rLgoKCmNsYXNzIEJpZ1F1ZXJ5U291cmNlKGRhdGFmbG93X2lvLk5hdGl2ZVNvdXJjZSk6CiAgIiIiQSBzb3VyY2UgYmFzZWQgb24gYSBCaWdRdWVyeSB0YWJsZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRhYmxlPU5vbmUsIGRhdGFzZXQ9Tm9uZSwgcHJvamVjdD1Ob25lLCBxdWVyeT1Ob25lLAogICAgICAgICAgICAgICB2YWxpZGF0ZT1GYWxzZSwgY29kZXI9Tm9uZSwgdXNlX3N0YW5kYXJkX3NxbD1GYWxzZSwKICAgICAgICAgICAgICAgZmxhdHRlbl9yZXN1bHRzPVRydWUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIDpjbGFzczpgQmlnUXVlcnlTb3VyY2VgLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlIChzdHIpOiBUaGUgSUQgb2YgYSBCaWdRdWVyeSB0YWJsZS4gSWYgc3BlY2lmaWVkIGFsbCBkYXRhIG9mIHRoZQogICAgICAgIHRhYmxlIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBvZiB0aGUgY3VycmVudCBzb3VyY2UuIFRoZSBJRCBtdXN0IGNvbnRhaW4KICAgICAgICBvbmx5IGxldHRlcnMgYGBhLXpgYCwgYGBBLVpgYCwgbnVtYmVycyBgYDAtOWBgLCBvciB1bmRlcnNjb3JlcwogICAgICAgIGBgX2BgLiBJZiBkYXRhc2V0IGFuZCBxdWVyeSBhcmd1bWVudHMgYXJlIDpkYXRhOmBOb25lYCB0aGVuIHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50IG11c3QgY29udGFpbiB0aGUgZW50aXJlIHRhYmxlIHJlZmVyZW5jZSBzcGVjaWZpZWQgYXM6CiAgICAgICAgYGAnREFUQVNFVC5UQUJMRSdgYCBvciBgYCdQUk9KRUNUOkRBVEFTRVQuVEFCTEUnYGAuCiAgICAgIGRhdGFzZXQgKHN0cik6IFRoZSBJRCBvZiB0aGUgZGF0YXNldCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQgb3IgYSBxdWVyeSBpcyBzcGVjaWZpZWQuCiAgICAgIHByb2plY3QgKHN0cik6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQgb3IgYSBxdWVyeSBpcyBzcGVjaWZpZWQuCiAgICAgIHF1ZXJ5IChzdHIpOiBBIHF1ZXJ5IHRvIGJlIHVzZWQgaW5zdGVhZCBvZiBhcmd1bWVudHMgdGFibGUsIGRhdGFzZXQsIGFuZAogICAgICAgIHByb2plY3QuCiAgICAgIHZhbGlkYXRlIChib29sKTogSWYgOmRhdGE6YFRydWVgLCB2YXJpb3VzIGNoZWNrcyB3aWxsIGJlIGRvbmUgd2hlbiBzb3VyY2UKICAgICAgICBnZXRzIGluaXRpYWxpemVkIChlLmcuLCBpcyB0YWJsZSBwcmVzZW50PykuIFRoaXMgc2hvdWxkIGJlCiAgICAgICAgOmRhdGE6YFRydWVgIGZvciBtb3N0IHNjZW5hcmlvcyBpbiBvcmRlciB0byBjYXRjaCBlcnJvcnMgYXMgZWFybHkgYXMKICAgICAgICBwb3NzaWJsZSAocGlwZWxpbmUgY29uc3RydWN0aW9uIGluc3RlYWQgb2YgcGlwZWxpbmUgZXhlY3V0aW9uKS4gSXQKICAgICAgICBzaG91bGQgYmUgOmRhdGE6YEZhbHNlYCBpZiB0aGUgdGFibGUgaXMgY3JlYXRlZCBkdXJpbmcgcGlwZWxpbmUKICAgICAgICBleGVjdXRpb24gYnkgYSBwcmV2aW91cyBzdGVwLgogICAgICBjb2RlciAofmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIpOiBUaGUgY29kZXIgZm9yIHRoZSB0YWJsZQogICAgICAgIHJvd3MgaWYgc2VyaWFsaXplZCB0byBkaXNrLiBJZiA6ZGF0YTpgTm9uZWAsIHRoZW4gdGhlIGRlZmF1bHQgY29kZXIgaXMKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuUm93QXNEaWN0SnNvbkNvZGVyYCwKICAgICAgICB3aGljaCB3aWxsIGludGVycHJldCBldmVyeSBsaW5lIGluIGEgZmlsZSBhcyBhIEpTT04gc2VyaWFsaXplZAogICAgICAgIGRpY3Rpb25hcnkuIFRoaXMgYXJndW1lbnQgbmVlZHMgYSB2YWx1ZSBvbmx5IGluIHNwZWNpYWwgY2FzZXMgd2hlbgogICAgICAgIHJldHVybmluZyB0YWJsZSByb3dzIGFzIGRpY3Rpb25hcmllcyBpcyBub3QgZGVzaXJhYmxlLgogICAgICB1c2Vfc3RhbmRhcmRfc3FsIChib29sKTogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIEJpZ1F1ZXJ5J3Mgc3RhbmRhcmQgU1FMCiAgICAgICAgZGlhbGVjdCBmb3IgdGhpcyBxdWVyeS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOmRhdGE6YEZhbHNlYC4KICAgICAgICBJZiBzZXQgdG8gOmRhdGE6YFRydWVgLCB0aGUgcXVlcnkgd2lsbCB1c2UgQmlnUXVlcnkncyB1cGRhdGVkIFNRTAogICAgICAgIGRpYWxlY3Qgd2l0aCBpbXByb3ZlZCBzdGFuZGFyZHMgY29tcGxpYW5jZS4KICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGZvciB0YWJsZSBpbnB1dHMuCiAgICAgIGZsYXR0ZW5fcmVzdWx0cyAoYm9vbCk6IEZsYXR0ZW5zIGFsbCBuZXN0ZWQgYW5kIHJlcGVhdGVkIGZpZWxkcyBpbiB0aGUKICAgICAgICBxdWVyeSByZXN1bHRzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA6ZGF0YTpgVHJ1ZWAuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgoKICAgICAgICAxKSB0aGUgdGFibGUgcmVmZXJlbmNlIGFzIGEgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQKICAgICAgICAyKSBuZWl0aGVyIGEgdGFibGUgbm9yIGEgcXVlcnkgaXMgc3BlY2lmaWVkCiAgICAgICAgMykgYm90aCBhIHRhYmxlIGFuZCBhIHF1ZXJ5IGlzIHNwZWNpZmllZC4KICAgICIiIgoKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgIHRyeToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGl0b29scy5iYXNlIGltcG9ydCBweSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICAgJ0dvb2dsZSBDbG91ZCBJTyBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCgogICAgaWYgdGFibGUgaXMgbm90IE5vbmUgYW5kIHF1ZXJ5IGlzIG5vdCBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdCb3RoIGEgQmlnUXVlcnkgdGFibGUgYW5kIGEgcXVlcnkgd2VyZSBzcGVjaWZpZWQuJwogICAgICAgICAgICAgICAgICAgICAgICcgUGxlYXNlIHNwZWNpZnkgb25seSBvbmUgb2YgdGhlc2UuJykKICAgIGVsaWYgdGFibGUgaXMgTm9uZSBhbmQgcXVlcnkgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQSBCaWdRdWVyeSB0YWJsZSBvciBhIHF1ZXJ5IG11c3QgYmUgc3BlY2lmaWVkJykKICAgIGVsaWYgdGFibGUgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gX3BhcnNlX3RhYmxlX3JlZmVyZW5jZSh0YWJsZSwgZGF0YXNldCwgcHJvamVjdCkKICAgICAgc2VsZi5xdWVyeSA9IE5vbmUKICAgICAgc2VsZi51c2VfbGVnYWN5X3NxbCA9IFRydWUKICAgIGVsc2U6CiAgICAgIHNlbGYucXVlcnkgPSBxdWVyeQogICAgICAjIFRPRE8oQkVBTS0xMDgyKTogQ2hhbmdlIHRoZSBpbnRlcm5hbCBmbGFnIHRvIGJlIHN0YW5kYXJkX3NxbAogICAgICBzZWxmLnVzZV9sZWdhY3lfc3FsID0gbm90IHVzZV9zdGFuZGFyZF9zcWwKICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBOb25lCgogICAgc2VsZi52YWxpZGF0ZSA9IHZhbGlkYXRlCiAgICBzZWxmLmZsYXR0ZW5fcmVzdWx0cyA9IGZsYXR0ZW5fcmVzdWx0cwogICAgc2VsZi5jb2RlciA9IGNvZGVyIG9yIFJvd0FzRGljdEpzb25Db2RlcigpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICBpZiBzZWxmLnF1ZXJ5IGlzIG5vdCBOb25lOgogICAgICByZXMgPSB7J3F1ZXJ5JzogRGlzcGxheURhdGFJdGVtKHNlbGYucXVlcnksIGxhYmVsPSdRdWVyeScpfQogICAgZWxzZToKICAgICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgIHRhYmxlU3BlYyA9ICd7fTp7fS57fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgZWxzZToKICAgICAgICB0YWJsZVNwZWMgPSAne30ue30nLmZvcm1hdChzZWxmLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgcmVzID0geyd0YWJsZSc6IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpfQoKICAgIHJlc1sndmFsaWRhdGlvbiddID0gRGlzcGxheURhdGFJdGVtKHNlbGYudmFsaWRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nVmFsaWRhdGlvbiBFbmFibGVkJykKICAgIHJldHVybiByZXMKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNvdXJjZSBmb3JtYXQgbmFtZSByZXF1aXJlZCBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4iIiIKICAgIHJldHVybiAnYmlncXVlcnknCgogIGRlZiByZWFkZXIoc2VsZiwgdGVzdF9iaWdxdWVyeV9jbGllbnQ9Tm9uZSk6CiAgICByZXR1cm4gQmlnUXVlcnlSZWFkZXIoCiAgICAgICAgc291cmNlPXNlbGYsCiAgICAgICAgdGVzdF9iaWdxdWVyeV9jbGllbnQ9dGVzdF9iaWdxdWVyeV9jbGllbnQsCiAgICAgICAgdXNlX2xlZ2FjeV9zcWw9c2VsZi51c2VfbGVnYWN5X3NxbCwKICAgICAgICBmbGF0dGVuX3Jlc3VsdHM9c2VsZi5mbGF0dGVuX3Jlc3VsdHMpCgoKY2xhc3MgQmlnUXVlcnlTaW5rKGRhdGFmbG93X2lvLk5hdGl2ZVNpbmspOgogICIiIkEgc2luayBiYXNlZCBvbiBhIEJpZ1F1ZXJ5IHRhYmxlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFibGUsIGRhdGFzZXQ9Tm9uZSwgcHJvamVjdD1Ob25lLCBzY2hlbWE9Tm9uZSwKICAgICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPUJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCwKICAgICAgICAgICAgICAgd3JpdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9FTVBUWSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9RmFsc2UsIGNvZGVyPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIEJpZ1F1ZXJ5U2luay4KCiAgICBBcmdzOgogICAgICB0YWJsZSAoc3RyKTogVGhlIElEIG9mIHRoZSB0YWJsZS4gVGhlIElEIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMKICAgICAgICBgYGEtemBgLCBgYEEtWmBgLCBudW1iZXJzIGBgMC05YGAsIG9yIHVuZGVyc2NvcmVzIGBgX2BgLiBJZgogICAgICAgICoqZGF0YXNldCoqIGFyZ3VtZW50IGlzIDpkYXRhOmBOb25lYCB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0CiAgICAgICAgY29udGFpbiB0aGUgZW50aXJlIHRhYmxlIHJlZmVyZW5jZSBzcGVjaWZpZWQgYXM6IGBgJ0RBVEFTRVQuVEFCTEUnYGAgb3IKICAgICAgICBgYCdQUk9KRUNUOkRBVEFTRVQuVEFCTEUnYGAuCiAgICAgIGRhdGFzZXQgKHN0cik6IFRoZSBJRCBvZiB0aGUgZGF0YXNldCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQuCiAgICAgIHByb2plY3QgKHN0cik6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQuCiAgICAgIHNjaGVtYSAoc3RyKTogVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMKICAgICAgICB0byBiZSBjcmVhdGVkLiBUaGlzIGNhbiBiZSBlaXRoZXIgc3BlY2lmaWVkIGFzIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hYCBvYmplY3Qgb3IgYSBzaW5nbGUgc3RyaW5nICBvZiB0aGUgZm9ybQogICAgICAgIGBgJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJ2BgIHRoYXQgZGVmaW5lcyBhIGNvbW1hCiAgICAgICAgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGRzLiBIZXJlIGBgJ3R5cGUnYGAgc2hvdWxkIHNwZWNpZnkgdGhlIEJpZ1F1ZXJ5CiAgICAgICAgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQKICAgICAgICBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5IG1vZGUgZm9yIGZpZWxkcyAobW9kZQogICAgICAgIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgYCdOVUxMQUJMRSdgYCkuCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbiAoQmlnUXVlcnlEaXNwb3NpdGlvbik6IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdAogICAgICAgIGhhcHBlbnMgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKICAgICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRGA6IGNyZWF0ZSBpZiBkb2VzIG5vdAogICAgICAgICAgICBleGlzdC4KICAgICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSYDogZmFpbCB0aGUgd3JpdGUgaWYgZG9lcyBub3QKICAgICAgICAgICAgZXhpc3QuCgogICAgICB3cml0ZV9kaXNwb3NpdGlvbiAoQmlnUXVlcnlEaXNwb3NpdGlvbik6IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdAogICAgICAgIGhhcHBlbnMgaWYgdGhlIHRhYmxlIGhhcyBhbHJlYWR5IHNvbWUgZGF0YS4gUG9zc2libGUgdmFsdWVzIGFyZToKCiAgICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFYDogZGVsZXRlIGV4aXN0aW5nIHJvd3MuCiAgICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORGA6IGFkZCB0byBleGlzdGluZyByb3dzLgogICAgICAgICAgKiA6YXR0cjpgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9FTVBUWWA6IGZhaWwgdGhlIHdyaXRlIGlmIHRhYmxlIG5vdAogICAgICAgICAgICBlbXB0eS4KCiAgICAgIHZhbGlkYXRlIChib29sKTogSWYgOmRhdGE6YFRydWVgLCB2YXJpb3VzIGNoZWNrcyB3aWxsIGJlIGRvbmUgd2hlbiBzaW5rCiAgICAgICAgZ2V0cyBpbml0aWFsaXplZCAoZS5nLiwgaXMgdGFibGUgcHJlc2VudCBnaXZlbiB0aGUgZGlzcG9zaXRpb24KICAgICAgICBhcmd1bWVudHM/KS4gVGhpcyBzaG91bGQgYmUgOmRhdGE6YFRydWVgIGZvciBtb3N0IHNjZW5hcmlvcyBpbiBvcmRlciB0bwogICAgICAgIGNhdGNoIGVycm9ycyBhcyBlYXJseSBhcyBwb3NzaWJsZSAocGlwZWxpbmUgY29uc3RydWN0aW9uIGluc3RlYWQgb2YKICAgICAgICBwaXBlbGluZSBleGVjdXRpb24pLiBJdCBzaG91bGQgYmUgOmRhdGE6YEZhbHNlYCBpZiB0aGUgdGFibGUgaXMgY3JlYXRlZAogICAgICAgIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24gYnkgYSBwcmV2aW91cyBzdGVwLgogICAgICBjb2RlciAofmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIpOiBUaGUgY29kZXIgZm9yIHRoZQogICAgICAgIHRhYmxlIHJvd3MgaWYgc2VyaWFsaXplZCB0byBkaXNrLiBJZiA6ZGF0YTpgTm9uZWAsIHRoZW4gdGhlIGRlZmF1bHQKICAgICAgICBjb2RlciBpcyA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuUm93QXNEaWN0SnNvbkNvZGVyYCwKICAgICAgICB3aGljaCB3aWxsIGludGVycHJldCBldmVyeSBlbGVtZW50IHdyaXR0ZW4gdG8gdGhlIHNpbmsgYXMgYSBkaWN0aW9uYXJ5CiAgICAgICAgdGhhdCB3aWxsIGJlIEpTT04gc2VyaWFsaXplZCBhcyBhIGxpbmUgaW4gYSBmaWxlLiBUaGlzIGFyZ3VtZW50IG5lZWRzIGEKICAgICAgICB2YWx1ZSBvbmx5IGluIHNwZWNpYWwgY2FzZXMgd2hlbiB3cml0aW5nIHRhYmxlIHJvd3MgYXMgZGljdGlvbmFyaWVzIGlzCiAgICAgICAgbm90IGRlc2lyYWJsZS4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIHNjaGVtYSBhcmd1bWVudCBpcyBub3QgYSA6Y2xhc3M6YHN0cmAgb3IgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWFgIG9iamVjdC4KICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBhcyBhIHN0cmluZyBkb2VzIG5vdAogICAgICAgIG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuCiAgICAiIiIKCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICB0cnk6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIGZyb20gYXBpdG9vbHMuYmFzZSBpbXBvcnQgcHkgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgICAgICdHb29nbGUgQ2xvdWQgSU8gbm90IGF2YWlsYWJsZSwgJwogICAgICAgICAgJ3BsZWFzZSBpbnN0YWxsIGFwYWNoZV9iZWFtW2djcF0nKQoKICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gX3BhcnNlX3RhYmxlX3JlZmVyZW5jZSh0YWJsZSwgZGF0YXNldCwgcHJvamVjdCkKICAgICMgVHJhbnNmb3JtIHRoZSB0YWJsZSBzY2hlbWEgaW50byBhIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGluc3RhbmNlLgogICAgaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJhc2VzdHJpbmcpOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBhZGQgYSByZWdleC1iYXNlZCB2YWxpZGF0aW9uIG9mIHRoZSBmb3JtYXQuCiAgICAgIHRhYmxlX3NjaGVtYSA9IGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKCkKICAgICAgc2NoZW1hX2xpc3QgPSBbcy5zdHJpcCgnICcpIGZvciBzIGluIHNjaGVtYS5zcGxpdCgnLCcpXQogICAgICBmb3IgZmllbGRfYW5kX3R5cGUgaW4gc2NoZW1hX2xpc3Q6CiAgICAgICAgZmllbGRfbmFtZSwgZmllbGRfdHlwZSA9IGZpZWxkX2FuZF90eXBlLnNwbGl0KCc6JykKICAgICAgICBmaWVsZF9zY2hlbWEgPSBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKCkKICAgICAgICBmaWVsZF9zY2hlbWEubmFtZSA9IGZpZWxkX25hbWUKICAgICAgICBmaWVsZF9zY2hlbWEudHlwZSA9IGZpZWxkX3R5cGUKICAgICAgICBmaWVsZF9zY2hlbWEubW9kZSA9ICdOVUxMQUJMRScKICAgICAgICB0YWJsZV9zY2hlbWEuZmllbGRzLmFwcGVuZChmaWVsZF9zY2hlbWEpCiAgICAgIHNlbGYudGFibGVfc2NoZW1hID0gdGFibGVfc2NoZW1hCiAgICBlbGlmIHNjaGVtYSBpcyBOb25lOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBjaGVjayB0aGF0IHRhYmxlIGV4aXN0cyBpZiBubyBzY2hlbWEgc3BlY2lmaWVkLgogICAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHNjaGVtYQogICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgYmlncXVlcnkuVGFibGVTY2hlbWEpOgogICAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHNjaGVtYQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHNjaGVtYSBhcmd1bWVudDogJXMuJyAlIHNjaGVtYSkKCiAgICBzZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiA9IEJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfY3JlYXRlKAogICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlKAogICAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uKQogICAgc2VsZi52YWxpZGF0ZSA9IHZhbGlkYXRlCiAgICBzZWxmLmNvZGVyID0gY29kZXIgb3IgUm93QXNEaWN0SnNvbkNvZGVyKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHt9CiAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZSBpcyBub3QgTm9uZToKICAgICAgdGFibGVTcGVjID0gJ3t9Lnt9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Ont9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3BlYykKICAgICAgcmVzWyd0YWJsZSddID0gRGlzcGxheURhdGFJdGVtKHRhYmxlU3BlYywgbGFiZWw9J1RhYmxlJykKCiAgICByZXNbJ3ZhbGlkYXRpb24nXSA9IERpc3BsYXlEYXRhSXRlbShzZWxmLnZhbGlkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IlZhbGlkYXRpb24gRW5hYmxlZCIpCiAgICByZXR1cm4gcmVzCgogIGRlZiBzY2hlbWFfYXNfanNvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIFRhYmxlU2NoZW1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2luayBhcyBhIEpTT04gc3RyaW5nLiIiIgoKICAgIGRlZiBzY2hlbWFfbGlzdF9hc19vYmplY3Qoc2NoZW1hX2xpc3QpOgogICAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBUYWJsZUZpZWxkU2NoZW1hIG9iamVjdHMgYXMgYSBsaXN0IG9mIGRpY3RzLiIiIgogICAgICBmaWVsZHMgPSBbXQogICAgICBmb3IgZiBpbiBzY2hlbWFfbGlzdDoKICAgICAgICBmcyA9IHsnbmFtZSc6IGYubmFtZSwgJ3R5cGUnOiBmLnR5cGV9CiAgICAgICAgaWYgZi5kZXNjcmlwdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgIGZzWydkZXNjcmlwdGlvbiddID0gZi5kZXNjcmlwdGlvbgogICAgICAgIGlmIGYubW9kZSBpcyBub3QgTm9uZToKICAgICAgICAgIGZzWydtb2RlJ10gPSBmLm1vZGUKICAgICAgICBpZiBmLnR5cGUubG93ZXIoKSA9PSAncmVjb3JkJzoKICAgICAgICAgIGZzWydmaWVsZHMnXSA9IHNjaGVtYV9saXN0X2FzX29iamVjdChmLmZpZWxkcykKICAgICAgICBmaWVsZHMuYXBwZW5kKGZzKQogICAgICByZXR1cm4gZmllbGRzCiAgICByZXR1cm4ganNvbi5kdW1wcygKICAgICAgICB7J2ZpZWxkcyc6IHNjaGVtYV9saXN0X2FzX29iamVjdChzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpfSkKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNpbmsgZm9ybWF0IG5hbWUgcmVxdWlyZWQgZm9yIHJlbW90ZSBleGVjdXRpb24uIiIiCiAgICByZXR1cm4gJ2JpZ3F1ZXJ5JwoKICBkZWYgd3JpdGVyKHNlbGYsIHRlc3RfYmlncXVlcnlfY2xpZW50PU5vbmUsIGJ1ZmZlcl9zaXplPU5vbmUpOgogICAgcmV0dXJuIEJpZ1F1ZXJ5V3JpdGVyKAogICAgICAgIHNpbms9c2VsZiwgdGVzdF9iaWdxdWVyeV9jbGllbnQ9dGVzdF9iaWdxdWVyeV9jbGllbnQsCiAgICAgICAgYnVmZmVyX3NpemU9YnVmZmVyX3NpemUpCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJpZ1F1ZXJ5UmVhZGVyLCBCaWdRdWVyeVdyaXRlci4KCgpjbGFzcyBCaWdRdWVyeVJlYWRlcihkYXRhZmxvd19pby5OYXRpdmVTb3VyY2VSZWFkZXIpOgogICIiIkEgcmVhZGVyIGZvciBhIEJpZ1F1ZXJ5IHNvdXJjZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgdGVzdF9iaWdxdWVyeV9jbGllbnQ9Tm9uZSwgdXNlX2xlZ2FjeV9zcWw9VHJ1ZSwKICAgICAgICAgICAgICAgZmxhdHRlbl9yZXN1bHRzPVRydWUpOgogICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgaWYgYXV0aC5pc19ydW5uaW5nX2luX2djZToKICAgICAgc2VsZi5leGVjdXRpbmdfcHJvamVjdCA9IGF1dGguZXhlY3V0aW5nX3Byb2plY3QKICAgIGVsaWYgaGFzYXR0cihzb3VyY2UsICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSAoCiAgICAgICAgICBzb3VyY2UucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKICAgIGVsc2U6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSBOb25lCgogICAgIyBUT0RPKHNpbHZpdWMpOiBUcnkgdG8gYXV0b21hdGljYWxseSBnZXQgaXQgZnJvbSBnY2xvdWQgY29uZmlnIGluZm8uCiAgICBpZiBub3Qgc2VsZi5leGVjdXRpbmdfcHJvamVjdCBhbmQgdGVzdF9iaWdxdWVyeV9jbGllbnQgaXMgTm9uZToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgJ01pc3NpbmcgZXhlY3V0aW5nIHByb2plY3QgaW5mb3JtYXRpb24uIFBsZWFzZSB1c2UgdGhlIC0tcHJvamVjdCAnCiAgICAgICAgICAnY29tbWFuZCBsaW5lIG9wdGlvbiB0byBzcGVjaWZ5IGl0LicpCiAgICBzZWxmLnJvd19hc19kaWN0ID0gaXNpbnN0YW5jZShzZWxmLnNvdXJjZS5jb2RlciwgUm93QXNEaWN0SnNvbkNvZGVyKQogICAgIyBTY2hlbWEgZm9yIHRoZSByb3dzIGJlaW5nIHJlYWQgYnkgdGhlIHJlYWRlci4gSXQgaXMgaW5pdGlhbGl6ZWQgdGhlCiAgICAjIGZpcnN0IHRpbWUgc29tZXRoaW5nIGdldHMgcmVhZCBmcm9tIHRoZSB0YWJsZS4gSXQgaXMgbm90IHJlcXVpcmVkCiAgICAjIGZvciByZWFkaW5nIHRoZSBmaWVsZCB2YWx1ZXMgaW4gZWFjaCByb3cgYnV0IGNvdWxkIGJlIHVzZWZ1bCBmb3IKICAgICMgZ2V0dGluZyBhZGRpdGlvbmFsIGRldGFpbHMuCiAgICBzZWxmLnNjaGVtYSA9IE5vbmUKICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSB1c2VfbGVnYWN5X3NxbAogICAgc2VsZi5mbGF0dGVuX3Jlc3VsdHMgPSBmbGF0dGVuX3Jlc3VsdHMKCiAgICBpZiBzZWxmLnNvdXJjZS5xdWVyeSBpcyBOb25lOgogICAgICAjIElmIHRhYmxlIHNjaGVtYSBkaWQgbm90IGRlZmluZSBhIHByb2plY3Qgd2UgZGVmYXVsdCB0byBleGVjdXRpbmcKICAgICAgIyBwcm9qZWN0LgogICAgICBwcm9qZWN0X2lkID0gc2VsZi5zb3VyY2UudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZAogICAgICBpZiBub3QgcHJvamVjdF9pZDoKICAgICAgICBwcm9qZWN0X2lkID0gc2VsZi5leGVjdXRpbmdfcHJvamVjdAogICAgICBzZWxmLnF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gWyVzOiVzLiVzXTsnICUgKAogICAgICAgICAgcHJvamVjdF9pZCwKICAgICAgICAgIHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgICBzZWxmLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgIGVsc2U6CiAgICAgIHNlbGYucXVlcnkgPSBzZWxmLnNvdXJjZS5xdWVyeQoKICBkZWYgX2dldF9zb3VyY2VfdGFibGVfbG9jYXRpb24oc2VsZik6CiAgICB0ciA9IHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZQogICAgaWYgdHIgaXMgTm9uZToKICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgbG9jYXRpb24gcmV0cmlldmFsIGZvciBxdWVyeSBzb3VyY2VzCiAgICAgIHJldHVybgoKICAgIGlmIHRyLnByb2plY3RJZCBpcyBOb25lOgogICAgICBzb3VyY2VfcHJvamVjdF9pZCA9IHNlbGYuZXhlY3V0aW5nX3Byb2plY3QKICAgIGVsc2U6CiAgICAgIHNvdXJjZV9wcm9qZWN0X2lkID0gdHIucHJvamVjdElkCgogICAgc291cmNlX2RhdGFzZXRfaWQgPSB0ci5kYXRhc2V0SWQKICAgIHNvdXJjZV90YWJsZV9pZCA9IHRyLnRhYmxlSWQKICAgIHNvdXJjZV9sb2NhdGlvbiA9IHNlbGYuY2xpZW50LmdldF90YWJsZV9sb2NhdGlvbigKICAgICAgICBzb3VyY2VfcHJvamVjdF9pZCwgc291cmNlX2RhdGFzZXRfaWQsIHNvdXJjZV90YWJsZV9pZCkKICAgIHJldHVybiBzb3VyY2VfbG9jYXRpb24KCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHNlbGYuY2xpZW50ID0gQmlnUXVlcnlXcmFwcGVyKGNsaWVudD1zZWxmLnRlc3RfYmlncXVlcnlfY2xpZW50KQogICAgc2VsZi5jbGllbnQuY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0KAogICAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QsIGxvY2F0aW9uPXNlbGYuX2dldF9zb3VyY2VfdGFibGVfbG9jYXRpb24oKSkKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5jbGllbnQuY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZi5leGVjdXRpbmdfcHJvamVjdCkKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgZm9yIHJvd3MsIHNjaGVtYSBpbiBzZWxmLmNsaWVudC5ydW5fcXVlcnkoCiAgICAgICAgcHJvamVjdF9pZD1zZWxmLmV4ZWN1dGluZ19wcm9qZWN0LCBxdWVyeT1zZWxmLnF1ZXJ5LAogICAgICAgIHVzZV9sZWdhY3lfc3FsPXNlbGYudXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgZmxhdHRlbl9yZXN1bHRzPXNlbGYuZmxhdHRlbl9yZXN1bHRzKToKICAgICAgaWYgc2VsZi5zY2hlbWEgaXMgTm9uZToKICAgICAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgICBmb3Igcm93IGluIHJvd3M6CiAgICAgICAgaWYgc2VsZi5yb3dfYXNfZGljdDoKICAgICAgICAgIHlpZWxkIHNlbGYuY2xpZW50LmNvbnZlcnRfcm93X3RvX2RpY3Qocm93LCBzY2hlbWEpCiAgICAgICAgZWxzZToKICAgICAgICAgIHlpZWxkIHJvdwoKCmNsYXNzIEJpZ1F1ZXJ5V3JpdGVyKGRhdGFmbG93X2lvLk5hdGl2ZVNpbmtXcml0ZXIpOgogICIiIlRoZSBzaW5rIHdyaXRlciBmb3IgYSBCaWdRdWVyeVNpbmsuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rLCB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD1Ob25lLCBidWZmZXJfc2l6ZT1Ob25lKToKICAgIHNlbGYuc2luayA9IHNpbmsKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgc2VsZi5yb3dfYXNfZGljdCA9IGlzaW5zdGFuY2Uoc2VsZi5zaW5rLmNvZGVyLCBSb3dBc0RpY3RKc29uQ29kZXIpCiAgICAjIEJ1ZmZlciB1c2VkIHRvIGJhdGNoIHdyaXR0ZW4gcm93cyBzbyB3ZSByZWR1Y2UgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogICAgIyBCaWdRdWVyeSBzZXJ2aWNlLgogICAgc2VsZi5yb3dzX2J1ZmZlciA9IFtdCiAgICBzZWxmLnJvd3NfYnVmZmVyX2ZsdXNoX3RocmVzaG9sZCA9IGJ1ZmZlcl9zaXplIG9yIDEwMDAKICAgICMgRmlndXJlIG91dCB0aGUgcHJvamVjdCwgZGF0YXNldCwgYW5kIHRhYmxlIHVzZWQgZm9yIHRoZSBzaW5rLgogICAgc2VsZi5wcm9qZWN0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQKCiAgICAjIElmIHRhYmxlIHNjaGVtYSBkaWQgbm90IGRlZmluZSBhIHByb2plY3Qgd2UgZGVmYXVsdCB0byBleGVjdXRpbmcgcHJvamVjdC4KICAgIGlmIHNlbGYucHJvamVjdF9pZCBpcyBOb25lIGFuZCBoYXNhdHRyKHNpbmssICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYucHJvamVjdF9pZCA9ICgKICAgICAgICAgIHNpbmsucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKCiAgICBhc3NlcnQgc2VsZi5wcm9qZWN0X2lkIGlzIG5vdCBOb25lCgogICAgc2VsZi5kYXRhc2V0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQKICAgIHNlbGYudGFibGVfaWQgPSBzZWxmLnNpbmsudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQKCiAgZGVmIF9mbHVzaF9yb3dzX2J1ZmZlcihzZWxmKToKICAgIGlmIHNlbGYucm93c19idWZmZXI6CiAgICAgIGxvZ2dpbmcuaW5mbygnV3JpdGluZyAlZCByb3dzIHRvICVzOiVzLiVzIHRhYmxlLicsIGxlbihzZWxmLnJvd3NfYnVmZmVyKSwKICAgICAgICAgICAgICAgICAgIHNlbGYucHJvamVjdF9pZCwgc2VsZi5kYXRhc2V0X2lkLCBzZWxmLnRhYmxlX2lkKQogICAgICBwYXNzZWQsIGVycm9ycyA9IHNlbGYuY2xpZW50Lmluc2VydF9yb3dzKAogICAgICAgICAgcHJvamVjdF9pZD1zZWxmLnByb2plY3RfaWQsIGRhdGFzZXRfaWQ9c2VsZi5kYXRhc2V0X2lkLAogICAgICAgICAgdGFibGVfaWQ9c2VsZi50YWJsZV9pZCwgcm93cz1zZWxmLnJvd3NfYnVmZmVyKQogICAgICBzZWxmLnJvd3NfYnVmZmVyID0gW10KICAgICAgaWYgbm90IHBhc3NlZDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBzdWNjZXNzZnVsbHkgaW5zZXJ0IHJvd3MgdG8gQmlnUXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdGFibGUgWyVzOiVzLiVzXS4gRXJyb3JzOiAlcyclCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnByb2plY3RfaWQsIHNlbGYuZGF0YXNldF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGVfaWQsIGVycm9ycykpCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICBzZWxmLmNsaWVudCA9IEJpZ1F1ZXJ5V3JhcHBlcihjbGllbnQ9c2VsZi50ZXN0X2JpZ3F1ZXJ5X2NsaWVudCkKICAgIHNlbGYuY2xpZW50LmdldF9vcl9jcmVhdGVfdGFibGUoCiAgICAgICAgc2VsZi5wcm9qZWN0X2lkLCBzZWxmLmRhdGFzZXRfaWQsIHNlbGYudGFibGVfaWQsIHNlbGYuc2luay50YWJsZV9zY2hlbWEsCiAgICAgICAgc2VsZi5zaW5rLmNyZWF0ZV9kaXNwb3NpdGlvbiwgc2VsZi5zaW5rLndyaXRlX2Rpc3Bvc2l0aW9uKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHRyYWNlYmFjayk6CiAgICBzZWxmLl9mbHVzaF9yb3dzX2J1ZmZlcigpCgogIGRlZiBXcml0ZShzZWxmLCByb3cpOgogICAgc2VsZi5yb3dzX2J1ZmZlci5hcHBlbmQocm93KQogICAgaWYgbGVuKHNlbGYucm93c19idWZmZXIpID4gc2VsZi5yb3dzX2J1ZmZlcl9mbHVzaF90aHJlc2hvbGQ6CiAgICAgIHNlbGYuX2ZsdXNoX3Jvd3NfYnVmZmVyKCkKCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmlnUXVlcnlXcmFwcGVyLgoKCmNsYXNzIEJpZ1F1ZXJ5V3JhcHBlcihvYmplY3QpOgogICIiIkJpZ1F1ZXJ5IGNsaWVudCB3cmFwcGVyIHdpdGggdXRpbGl0aWVzIGZvciBxdWVyeWluZy4KCiAgVGhlIHdyYXBwZXIgaXMgdXNlZCB0byBvcmdhbml6ZSBhbGwgdGhlIEJpZ1F1ZXJ5IGludGVncmF0aW9uIHBvaW50cyBhbmQKICBvZmZlciBhIGNvbW1vbiBwbGFjZSB3aGVyZSByZXRyeSBsb2dpYyBmb3IgZmFpbHVyZXMgY2FuIGJlIGNvbnRyb2xsZWQuCiAgSW4gYWRkaXRpb24gaXQgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHVzZWQgYm90aCBpbiBzb3VyY2VzIGFuZCBzaW5rcwogIChlLmcuLCBmaW5kIGFuZCBjcmVhdGUgdGFibGVzLCBxdWVyeSBhIHRhYmxlLCBldGMuKS4KICAiIiIKCiAgVEVNUF9UQUJMRSA9ICd0ZW1wX3RhYmxlXycKICBURU1QX0RBVEFTRVQgPSAndGVtcF9kYXRhc2V0XycKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaWVudD1Ob25lKToKICAgIHNlbGYuY2xpZW50ID0gY2xpZW50IG9yIGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VjIoCiAgICAgICAgY3JlZGVudGlhbHM9YXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFscygpKQogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCA9IDAKICAgICMgRm9yIHRlc3Rpbmcgc2NlbmFyaW9zIHdoZXJlIHdlIHBhc3MgaW4gYSBjbGllbnQgd2UgZG8gbm90IHdhbnQgYQogICAgIyByYW5kb21pemVkIHByZWZpeCBmb3Igcm93IElEcy4KICAgIHNlbGYuX3Jvd19pZF9wcmVmaXggPSAnJyBpZiBjbGllbnQgZWxzZSB1dWlkLnV1aWQ0KCkKICAgIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXggPSB1dWlkLnV1aWQ0KCkuaGV4CgogIEBwcm9wZXJ0eQogIGRlZiB1bmlxdWVfcm93X2lkKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHVuaXF1ZSByb3cgSUQgKHN0cikgdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBpbnNlcnRpb25zLgoKICAgIElmIHRoZSByb3cgSUQgaXMgcHJvdmlkZWQsIEJpZ1F1ZXJ5IHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIG5vdCBpbnNlcnQKICAgIHRoZSBzYW1lIHJvdyBtdWx0aXBsZSB0aW1lcyBmb3IgZmFpbCBhbmQgcmV0cnkgc2NlbmFyaW9zIGluIHdoaWNoIHRoZSBpbnNlcnQKICAgIHJlcXVlc3QgbWF5IGJlIGlzc3VlZCBzZXZlcmFsIHRpbWVzLiBUaGlzIGNvbWVzIGludG8gcGxheSBmb3Igc2lua3MgZXhlY3V0ZWQKICAgIGluIGEgbG9jYWwgcnVubmVyLgoKICAgIFJldHVybnM6CiAgICAgIGEgdW5pcXVlIHJvdyBJRCBzdHJpbmcKICAgICIiIgogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCArPSAxCiAgICByZXR1cm4gJyVzXyVkJyAlIChzZWxmLl9yb3dfaWRfcHJlZml4LCBzZWxmLl91bmlxdWVfcm93X2lkKQoKICBkZWYgX2dldF90ZW1wX3RhYmxlKHNlbGYsIHByb2plY3RfaWQpOgogICAgcmV0dXJuIF9wYXJzZV90YWJsZV9yZWZlcmVuY2UoCiAgICAgICAgdGFibGU9QmlnUXVlcnlXcmFwcGVyLlRFTVBfVEFCTEUgKyBzZWxmLl90ZW1wb3JhcnlfdGFibGVfc3VmZml4LAogICAgICAgIGRhdGFzZXQ9QmlnUXVlcnlXcmFwcGVyLlRFTVBfREFUQVNFVCArIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXgsCiAgICAgICAgcHJvamVjdD1wcm9qZWN0X2lkKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfc3RhcnRfcXVlcnlfam9iKHNlbGYsIHByb2plY3RfaWQsIHF1ZXJ5LCB1c2VfbGVnYWN5X3NxbCwgZmxhdHRlbl9yZXN1bHRzLAogICAgICAgICAgICAgICAgICAgICAgIGpvYl9pZCwgZHJ5X3J1bj1GYWxzZSk6CiAgICByZWZlcmVuY2UgPSBiaWdxdWVyeS5Kb2JSZWZlcmVuY2Uoam9iSWQ9am9iX2lkLCBwcm9qZWN0SWQ9cHJvamVjdF9pZCkKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeUpvYnNJbnNlcnRSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLAogICAgICAgIGpvYj1iaWdxdWVyeS5Kb2IoCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249YmlncXVlcnkuSm9iQ29uZmlndXJhdGlvbigKICAgICAgICAgICAgICAgIGRyeVJ1bj1kcnlfcnVuLAogICAgICAgICAgICAgICAgcXVlcnk9YmlncXVlcnkuSm9iQ29uZmlndXJhdGlvblF1ZXJ5KAogICAgICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAogICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeVNxbD11c2VfbGVnYWN5X3NxbCwKICAgICAgICAgICAgICAgICAgICBhbGxvd0xhcmdlUmVzdWx0cz1UcnVlLAogICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uVGFibGU9c2VsZi5fZ2V0X3RlbXBfdGFibGUocHJvamVjdF9pZCksCiAgICAgICAgICAgICAgICAgICAgZmxhdHRlblJlc3VsdHM9ZmxhdHRlbl9yZXN1bHRzKSksCiAgICAgICAgICAgIGpvYlJlZmVyZW5jZT1yZWZlcmVuY2UpKQoKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuam9icy5JbnNlcnQocmVxdWVzdCkKICAgIHJldHVybiByZXNwb25zZS5qb2JSZWZlcmVuY2Uuam9iSWQKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2dldF9xdWVyeV9yZXN1bHRzKHNlbGYsIHByb2plY3RfaWQsIGpvYl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfdG9rZW49Tm9uZSwgbWF4X3Jlc3VsdHM9MTAwMDApOgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5Sm9ic0dldFF1ZXJ5UmVzdWx0c1JlcXVlc3QoCiAgICAgICAgam9iSWQ9am9iX2lkLCBwYWdlVG9rZW49cGFnZV90b2tlbiwgcHJvamVjdElkPXByb2plY3RfaWQsCiAgICAgICAgbWF4UmVzdWx0cz1tYXhfcmVzdWx0cykKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuam9icy5HZXRRdWVyeVJlc3VsdHMocmVxdWVzdCkKICAgIHJldHVybiByZXNwb25zZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVyKQogIGRlZiBfaW5zZXJ0X2FsbF9yb3dzKHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkLCByb3dzKToKICAgICMgVGhlIHJvd3MgYXJndW1lbnQgaXMgYSBsaXN0IG9mCiAgICAjIGJpZ3F1ZXJ5LlRhYmxlRGF0YUluc2VydEFsbFJlcXVlc3QuUm93c1ZhbHVlTGlzdEVudHJ5IGluc3RhbmNlcyBhcwogICAgIyByZXF1aXJlZCBieSB0aGUgSW5zZXJ0QWxsKCkgbWV0aG9kLgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VGFibGVkYXRhSW5zZXJ0QWxsUmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQsCiAgICAgICAgdGFibGVEYXRhSW5zZXJ0QWxsUmVxdWVzdD1iaWdxdWVyeS5UYWJsZURhdGFJbnNlcnRBbGxSZXF1ZXN0KAogICAgICAgICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBoYXZlIGFuIG9wdGlvbiBmb3Igc2tpcEludmFsaWRSb3dzPwogICAgICAgICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBoYXZlIGFuIG9wdGlvbiBmb3IgaWdub3JlVW5rbm93blZhbHVlcz8KICAgICAgICAgICAgcm93cz1yb3dzKSkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQudGFibGVkYXRhLkluc2VydEFsbChyZXF1ZXN0KQogICAgIyByZXNwb25zZS5pbnNlcnRFcnJvcnMgaXMgbm90IFtdIGlmIGVycm9ycyBlbmNvdW50ZXJlZC4KICAgIHJldHVybiBub3QgcmVzcG9uc2UuaW5zZXJ0RXJyb3JzLCByZXNwb25zZS5pbnNlcnRFcnJvcnMKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2dldF90YWJsZShzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlUYWJsZXNHZXRSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQudGFibGVzLkdldChyZXF1ZXN0KQogICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5UYWJsZSBpbnN0YW5jZS4KICAgIHJldHVybiByZXNwb25zZQoKICBkZWYgX2NyZWF0ZV90YWJsZShzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgc2NoZW1hKToKICAgIHRhYmxlID0gYmlncXVlcnkuVGFibGUoCiAgICAgICAgdGFibGVSZWZlcmVuY2U9YmlncXVlcnkuVGFibGVSZWZlcmVuY2UoCiAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCksCiAgICAgICAgc2NoZW1hPXNjaGVtYSkKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlc0luc2VydFJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkLCB0YWJsZT10YWJsZSkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQudGFibGVzLkluc2VydChyZXF1ZXN0KQogICAgbG9nZ2luZy5kZWJ1ZygiQ3JlYXRlZCB0aGUgdGFibGUgd2l0aCBpZCAlcyIsIHRhYmxlX2lkKQogICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5UYWJsZSBpbnN0YW5jZS4KICAgIHJldHVybiByZXNwb25zZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfb3JfY3JlYXRlX2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb249Tm9uZSk6CiAgICAjIENoZWNrIGlmIGRhdGFzZXQgYWxyZWFkeSBleGlzdHMgb3RoZXJ3aXNlIGNyZWF0ZSBpdAogICAgdHJ5OgogICAgICBkYXRhc2V0ID0gc2VsZi5jbGllbnQuZGF0YXNldHMuR2V0KGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNHZXRSZXF1ZXN0KAogICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkKSkKICAgICAgcmV0dXJuIGRhdGFzZXQKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIGRhdGFzZXRfcmVmZXJlbmNlID0gYmlncXVlcnkuRGF0YXNldFJlZmVyZW5jZSgKICAgICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkKQogICAgICAgIGRhdGFzZXQgPSBiaWdxdWVyeS5EYXRhc2V0KGRhdGFzZXRSZWZlcmVuY2U9ZGF0YXNldF9yZWZlcmVuY2UpCiAgICAgICAgaWYgbG9jYXRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICBkYXRhc2V0LmxvY2F0aW9uID0gbG9jYXRpb24KICAgICAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0luc2VydFJlcXVlc3QoCiAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0PWRhdGFzZXQpCiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kYXRhc2V0cy5JbnNlcnQocmVxdWVzdCkKICAgICAgICAjIFRoZSByZXNwb25zZSBpcyBhIGJpZ3F1ZXJ5LkRhdGFzZXQgaW5zdGFuY2UuCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2lzX3RhYmxlX2VtcHR5KHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKToKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlZGF0YUxpc3RSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCwKICAgICAgICBtYXhSZXN1bHRzPTEpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnRhYmxlZGF0YS5MaXN0KHJlcXVlc3QpCiAgICAjIFRoZSByZXNwb25zZSBpcyBhIGJpZ3F1ZXJ5LlRhYmxlRGF0YUxpc3QgaW5zdGFuY2UuCiAgICByZXR1cm4gcmVzcG9uc2UudG90YWxSb3dzID09IDAKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2RlbGV0ZV90YWJsZShzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlUYWJsZXNEZWxldGVSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCkKICAgIHRyeToKICAgICAgc2VsZi5jbGllbnQudGFibGVzLkRlbGV0ZShyZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBleG46CiAgICAgIGlmIGV4bi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdUYWJsZSAlczolcy4lcyBkb2VzIG5vdCBleGlzdCcsIHByb2plY3RfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRfaWQsIHRhYmxlX2lkKQogICAgICAgIHJldHVybgogICAgICBlbHNlOgogICAgICAgIHJhaXNlCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9kZWxldGVfZGF0YXNldChzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCBkZWxldGVfY29udGVudHM9VHJ1ZSk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0RlbGV0ZVJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkLAogICAgICAgIGRlbGV0ZUNvbnRlbnRzPWRlbGV0ZV9jb250ZW50cykKICAgIHRyeToKICAgICAgc2VsZi5jbGllbnQuZGF0YXNldHMuRGVsZXRlKHJlcXVlc3QpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0RhdGFzZXQgJXM6JXMgZG9lcyBub3QgZXhpc3QnLCBwcm9qZWN0X2lkLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2lkKQogICAgICAgIHJldHVybgogICAgICBlbHNlOgogICAgICAgIHJhaXNlCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGdldF90YWJsZV9sb2NhdGlvbihzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCk6CiAgICB0YWJsZSA9IHNlbGYuX2dldF90YWJsZShwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkKICAgIHJldHVybiB0YWJsZS5sb2NhdGlvbgoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBjcmVhdGVfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCwgbG9jYXRpb249Tm9uZSk6CiAgICAjIFRPRE86IG1ha2UgbG9jYXRpb24gcmVxdWlyZWQsIG9uY2UgInF1ZXJ5IiBsb2NhdGlvbnMgY2FuIGJlIGRldGVybWluZWQKICAgIGRhdGFzZXRfaWQgPSBCaWdRdWVyeVdyYXBwZXIuVEVNUF9EQVRBU0VUICsgc2VsZi5fdGVtcG9yYXJ5X3RhYmxlX3N1ZmZpeAogICAgIyBDaGVjayBpZiBkYXRhc2V0IGV4aXN0cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGVtcG9yYXJ5IGlkIGlzIHVuaXF1ZQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5kYXRhc2V0cy5HZXQoYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0dldFJlcXVlc3QoCiAgICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQpKQogICAgICBpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOgogICAgICAgICMgVW5pdHRlc3RzIGRvbid0IHBhc3MgcHJvamVjdElkcyBzbyB0aGV5IGNhbiBiZSBydW4gd2l0aG91dCBlcnJvcgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgJ0RhdGFzZXQgJXM6JXMgYWxyZWFkeSBleGlzdHMgc28gY2Fubm90IGJlIHVzZWQgYXMgdGVtcG9yYXJ5LicKICAgICAgICAgICAgJSAocHJvamVjdF9pZCwgZGF0YXNldF9pZCkpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAgICdEYXRhc2V0ICVzOiVzIGRvZXMgbm90IGV4aXN0IHNvIHdlIHdpbGwgY3JlYXRlIGl0IGFzIHRlbXBvcmFyeSAnCiAgICAgICAgICAgICd3aXRoIGxvY2F0aW9uPSVzJywKICAgICAgICAgICAgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb24pCiAgICAgICAgc2VsZi5nZXRfb3JfY3JlYXRlX2RhdGFzZXQocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb249bG9jYXRpb24pCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCk6CiAgICB0ZW1wX3RhYmxlID0gc2VsZi5fZ2V0X3RlbXBfdGFibGUocHJvamVjdF9pZCkKICAgIHRyeToKICAgICAgc2VsZi5jbGllbnQuZGF0YXNldHMuR2V0KGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNHZXRSZXF1ZXN0KAogICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD10ZW1wX3RhYmxlLmRhdGFzZXRJZCkpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0RhdGFzZXQgJXM6JXMgZG9lcyBub3QgZXhpc3QnLCBwcm9qZWN0X2lkLAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3RhYmxlLmRhdGFzZXRJZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQogICAgc2VsZi5fZGVsZXRlX2RhdGFzZXQodGVtcF90YWJsZS5wcm9qZWN0SWQsIHRlbXBfdGFibGUuZGF0YXNldElkLCBUcnVlKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfb3JfY3JlYXRlX3RhYmxlKAogICAgICBzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgc2NoZW1hLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb24sIHdyaXRlX2Rpc3Bvc2l0aW9uKToKICAgICIiIkdldHMgb3IgY3JlYXRlcyBhIHRhYmxlIGJhc2VkIG9uIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLgoKICAgIFRoZSBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIEJpZ1F1ZXJ5IGltcG9ydCBqb2JzIHdoZW4gdXNpbmcgdGhlCiAgICBzYW1lIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3RfaWQ6IFRoZSBwcm9qZWN0IGlkIG93bmluZyB0aGUgdGFibGUuCiAgICAgIGRhdGFzZXRfaWQ6IFRoZSBkYXRhc2V0IGlkIG93bmluZyB0aGUgdGFibGUuCiAgICAgIHRhYmxlX2lkOiBUaGUgdGFibGUgaWQuCiAgICAgIHNjaGVtYTogQSBiaWdxdWVyeS5UYWJsZVNjaGVtYSBpbnN0YW5jZSBvciBOb25lLgogICAgICBjcmVhdGVfZGlzcG9zaXRpb246IENSRUFURV9ORVZFUiBvciBDUkVBVEVfSUZfTkVFREVELgogICAgICB3cml0ZV9kaXNwb3NpdGlvbjogV1JJVEVfQVBQRU5ELCBXUklURV9FTVBUWSBvciBXUklURV9UUlVOQ0FURS4KCiAgICBSZXR1cm5zOgogICAgICBBIGJpZ3F1ZXJ5LlRhYmxlIGluc3RhbmNlIGlmIHRhYmxlIHdhcyBmb3VuZCBvciBjcmVhdGVkLgoKICAgIFJhaXNlczoKICAgICAgUnVudGltZUVycm9yOiBGb3IgdmFyaW91cyBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBhbmQKICAgICAgICB0aGUgY3JlYXRlL3dyaXRlIGRpc3Bvc2l0aW9ucyBwYXNzZWQgaW4uIEZvciBleGFtcGxlIGlmIHRoZSB0YWJsZSBpcyBub3QKICAgICAgICBlbXB0eSBhbmQgV1JJVEVfRU1QVFkgd2FzIHNwZWNpZmllZCB0aGVuIGFuIGVycm9yIHdpbGwgYmUgcmFpc2VkIHNpbmNlCiAgICAgICAgdGhlIHRhYmxlIHdhcyBleHBlY3RlZCB0byBiZSBlbXB0eS4KICAgICIiIgogICAgZm91bmRfdGFibGUgPSBOb25lCiAgICB0cnk6CiAgICAgIGZvdW5kX3RhYmxlID0gc2VsZi5fZ2V0X3RhYmxlKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBleG46CiAgICAgIGlmIGV4bi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgaWYgY3JlYXRlX2Rpc3Bvc2l0aW9uID09IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICdUYWJsZSAlczolcy4lcyBub3QgZm91bmQgYnV0IGNyZWF0ZSBkaXNwb3NpdGlvbiBpcyBDUkVBVEVfTkVWRVIuJwogICAgICAgICAgICAgICUgKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKSkKICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICAgICMgSWYgdGFibGUgZXhpc3RzIGFscmVhZHkgdGhlbiBoYW5kbGUgdGhlIHNlbWFudGljcyBmb3IgV1JJVEVfRU1QVFkgYW5kCiAgICAjIFdSSVRFX1RSVU5DQVRFIHdyaXRlIGRpc3Bvc2l0aW9ucy4KICAgIGlmIGZvdW5kX3RhYmxlOgogICAgICB0YWJsZV9lbXB0eSA9IHNlbGYuX2lzX3RhYmxlX2VtcHR5KHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKQogICAgICBpZiAobm90IHRhYmxlX2VtcHR5IGFuZAogICAgICAgICAgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9FTVBUWSk6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAnVGFibGUgJXM6JXMuJXMgaXMgbm90IGVtcHR5IGJ1dCB3cml0ZSBkaXNwb3NpdGlvbiBpcyBXUklURV9FTVBUWS4nCiAgICAgICAgICAgICUgKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKSkKICAgICAgIyBEZWxldGUgdGhlIHRhYmxlIGFuZCByZWNyZWF0ZSBpdCAobGF0ZXIpIGlmIFdSSVRFX1RSVU5DQVRFIHdhcwogICAgICAjIHNwZWNpZmllZC4KICAgICAgaWYgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURToKICAgICAgICBzZWxmLl9kZWxldGVfdGFibGUocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCgogICAgIyBDcmVhdGUgYSBuZXcgdGFibGUgcG90ZW50aWFsbHkgcmV1c2luZyB0aGUgc2NoZW1hIGZyb20gYSBwcmV2aW91c2x5CiAgICAjIGZvdW5kIHRhYmxlIGluIGNhc2UgdGhlIHNjaGVtYSB3YXMgbm90IHNwZWNpZmllZC4KICAgIGlmIHNjaGVtYSBpcyBOb25lIGFuZCBmb3VuZF90YWJsZSBpcyBOb25lOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAnVGFibGUgJXM6JXMuJXMgcmVxdWlyZXMgYSBzY2hlbWEuIE5vbmUgY2FuIGJlIGluZmVycmVkIGJlY2F1c2UgdGhlICcKICAgICAgICAgICd0YWJsZSBkb2VzIG5vdCBleGlzdC4nCiAgICAgICAgICAlIChwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkpCiAgICBpZiBmb3VuZF90YWJsZSBhbmQgd3JpdGVfZGlzcG9zaXRpb24gIT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURToKICAgICAgcmV0dXJuIGZvdW5kX3RhYmxlCiAgICBlbHNlOgogICAgICBjcmVhdGVkX3RhYmxlID0gc2VsZi5fY3JlYXRlX3RhYmxlKHByb2plY3RfaWQ9cHJvamVjdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2lkPWRhdGFzZXRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaWQ9dGFibGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXNjaGVtYSBvciBmb3VuZF90YWJsZS5zY2hlbWEpCiAgICAgICMgaWYgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURSB3ZSBkZWxldGUKICAgICAgIyB0aGUgdGFibGUgYmVmb3JlIHRoaXMgcG9pbnQuCiAgICAgIGlmIHdyaXRlX2Rpc3Bvc2l0aW9uID09IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEU6CiAgICAgICAgIyBCaWdRdWVyeSBjYW4gcm91dGUgZGF0YSB0byB0aGUgb2xkIHRhYmxlIGZvciAyIG1pbnMgbWF4IHNvIHdhaXQKICAgICAgICAjIHRoYXQgbXVjaCB0aW1lIGJlZm9yZSBjcmVhdGluZyB0aGUgdGFibGUgYW5kIHdyaXRpbmcgaXQKICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1NsZWVwaW5nIGZvciAxNTAgc2Vjb25kcyBiZWZvcmUgdGhlIHdyaXRlIGFzICcgKwogICAgICAgICAgICAgICAgICAgICAgICAnQmlnUXVlcnkgaW5zZXJ0cyBjYW4gYmUgcm91dGVkIHRvIGRlbGV0ZWQgdGFibGUgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgMiBtaW5zIGFmdGVyIHRoZSBkZWxldGUgYW5kIGNyZWF0ZS4nKQogICAgICAgICMgVE9ETyhCRUFNLTI2NzMpOiBSZW1vdmUgdGhpcyBzbGVlcCBieSBtaWdyYXRpbmcgdG8gbG9hZCBhcGkKICAgICAgICB0aW1lLnNsZWVwKDE1MCkKICAgICAgICByZXR1cm4gY3JlYXRlZF90YWJsZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBjcmVhdGVkX3RhYmxlCgogIGRlZiBydW5fcXVlcnkoc2VsZiwgcHJvamVjdF9pZCwgcXVlcnksIHVzZV9sZWdhY3lfc3FsLCBmbGF0dGVuX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICBkcnlfcnVuPUZhbHNlKToKICAgIGpvYl9pZCA9IHNlbGYuX3N0YXJ0X3F1ZXJ5X2pvYihwcm9qZWN0X2lkLCBxdWVyeSwgdXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbl9yZXN1bHRzLCBqb2JfaWQ9dXVpZC51dWlkNCgpLmhleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPWRyeV9ydW4pCiAgICBpZiBkcnlfcnVuOgogICAgICAjIElmIHRoaXMgd2FzIGEgZHJ5IHJ1biB0aGVuIHRoZSBmYWN0IHRoYXQgd2UgZ2V0IGhlcmUgbWVhbnMgdGhlCiAgICAgICMgcXVlcnkgaGFzIG5vIGVycm9ycy4gVGhlIHN0YXJ0X3F1ZXJ5X2pvYiB3b3VsZCByYWlzZSBhbiBlcnJvciBvdGhlcndpc2UuCiAgICAgIHJldHVybgogICAgcGFnZV90b2tlbiA9IE5vbmUKICAgIHdoaWxlIFRydWU6CiAgICAgIHJlc3BvbnNlID0gc2VsZi5fZ2V0X3F1ZXJ5X3Jlc3VsdHMocHJvamVjdF9pZCwgam9iX2lkLCBwYWdlX3Rva2VuKQogICAgICBpZiBub3QgcmVzcG9uc2Uuam9iQ29tcGxldGU6CiAgICAgICAgIyBUaGUgam9iQ29tcGxldGUgZmllbGQgY2FuIGJlIEZhbHNlIGlmIHRoZSBxdWVyeSByZXF1ZXN0IHRpbWVzIG91dAogICAgICAgICMgKGRlZmF1bHQgaXMgMTAgc2Vjb25kcykuIE5vdGUgdGhhdCB0aGlzIGlzIGEgdGltZW91dCBmb3IgdGhlIHF1ZXJ5CiAgICAgICAgIyByZXF1ZXN0IG5vdCBmb3IgdGhlIGFjdHVhbCBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5IGluIHRoZSBzZXJ2aWNlLiAgSWYKICAgICAgICAjIHRoZSByZXF1ZXN0IHRpbWVzIG91dCB3ZSBrZWVwIHRyeWluZy4gVGhpcyBzaXR1YXRpb24gaXMgcXVpdGUgcG9zc2libGUKICAgICAgICAjIGlmIHRoZSBxdWVyeSB3aWxsIHJldHVybiBhIGxhcmdlIG51bWJlciBvZiByb3dzLgogICAgICAgIGxvZ2dpbmcuaW5mbygnV2FpdGluZyBvbiByZXNwb25zZSBmcm9tIHF1ZXJ5OiAlcyAuLi4nLCBxdWVyeSkKICAgICAgICB0aW1lLnNsZWVwKDEuMCkKICAgICAgICBjb250aW51ZQogICAgICAjIFdlIGdvdCBzb21lIHJlc3VsdHMuIFRoZSBsYXN0IHBhZ2UgaXMgc2lnbmFsbGVkIGJ5IGEgbWlzc2luZyBwYWdlVG9rZW4uCiAgICAgIHlpZWxkIHJlc3BvbnNlLnJvd3MsIHJlc3BvbnNlLnNjaGVtYQogICAgICBpZiBub3QgcmVzcG9uc2UucGFnZVRva2VuOgogICAgICAgIGJyZWFrCiAgICAgIHBhZ2VfdG9rZW4gPSByZXNwb25zZS5wYWdlVG9rZW4KCiAgZGVmIGluc2VydF9yb3dzKHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkLCByb3dzKToKICAgICIiIkluc2VydHMgcm93cyBpbnRvIHRoZSBzcGVjaWZpZWQgdGFibGUuCgogICAgQXJnczoKICAgICAgcHJvamVjdF9pZDogVGhlIHByb2plY3QgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgZGF0YXNldF9pZDogVGhlIGRhdGFzZXQgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgdGFibGVfaWQ6IFRoZSB0YWJsZSBpZC4KICAgICAgcm93czogQSBsaXN0IG9mIHBsYWluIFB5dGhvbiBkaWN0aW9uYXJpZXMuIEVhY2ggZGljdGlvbmFyeSBpcyBhIHJvdyBhbmQKICAgICAgICBlYWNoIGtleSBpbiBpdCBpcyB0aGUgbmFtZSBvZiBhIGZpZWxkLgoKICAgIFJldHVybnM6CiAgICAgIEEgdHVwbGUgKGJvb2wsIGVycm9ycykuIElmIGZpcnN0IGVsZW1lbnQgaXMgRmFsc2UgdGhlbiB0aGUgc2Vjb25kIGVsZW1lbnQKICAgICAgd2lsbCBiZSBhIGJpZ3F1ZXJ5Lkluc2VydHRFcnJvcnNWYWx1ZUxpc3RFbnRyeSBpbnN0YW5jZSBjb250YWluaW5nCiAgICAgIHNwZWNpZmljIGVycm9ycy4KICAgICIiIgoKICAgICMgUHJlcGFyZSByb3dzIGZvciBpbnNlcnRpb24uIE9mIHNwZWNpYWwgbm90ZSBpcyB0aGUgcm93IElEIHRoYXQgd2UgYWRkIHRvCiAgICAjIGVhY2ggcm93IGluIG9yZGVyIHRvIGhlbHAgQmlnUXVlcnkgYXZvaWQgaW5zZXJ0aW5nIGEgcm93IG11bHRpcGxlIHRpbWVzLgogICAgIyBCaWdRdWVyeSB3aWxsIGRvIGEgYmVzdC1lZmZvcnQgaWYgdW5pcXVlIElEcyBhcmUgcHJvdmlkZWQuIFRoaXMgc2l0dWF0aW9uCiAgICAjIGNhbiBoYXBwZW4gZHVyaW5nIHJldHJpZXMgb24gZmFpbHVyZXMuCiAgICAjIFRPRE8oc2lsdml1Yyk6IE11c3QgYWRkIHN1cHBvcnQgdG8gd3JpdGluZyBUYWJsZVJvdydzIGluc3RlYWQgb2YgZGljdHMuCiAgICBmaW5hbF9yb3dzID0gW10KICAgIGZvciByb3cgaW4gcm93czoKICAgICAganNvbl9vYmplY3QgPSBiaWdxdWVyeS5Kc29uT2JqZWN0KCkKICAgICAgZm9yIGssIHYgaW4gcm93Lml0ZXJpdGVtcygpOgogICAgICAgIGpzb25fb2JqZWN0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmFwcGVuZCgKICAgICAgICAgICAgYmlncXVlcnkuSnNvbk9iamVjdC5BZGRpdGlvbmFsUHJvcGVydHkoCiAgICAgICAgICAgICAgICBrZXk9aywgdmFsdWU9dG9fanNvbl92YWx1ZSh2KSkpCiAgICAgIGZpbmFsX3Jvd3MuYXBwZW5kKAogICAgICAgICAgYmlncXVlcnkuVGFibGVEYXRhSW5zZXJ0QWxsUmVxdWVzdC5Sb3dzVmFsdWVMaXN0RW50cnkoCiAgICAgICAgICAgICAgaW5zZXJ0SWQ9c3RyKHNlbGYudW5pcXVlX3Jvd19pZCksCiAgICAgICAgICAgICAganNvbj1qc29uX29iamVjdCkpCiAgICByZXN1bHQsIGVycm9ycyA9IHNlbGYuX2luc2VydF9hbGxfcm93cygKICAgICAgICBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgZmluYWxfcm93cykKICAgIHJldHVybiByZXN1bHQsIGVycm9ycwoKICBkZWYgX2NvbnZlcnRfY2VsbF92YWx1ZV90b19kaWN0KHNlbGYsIHZhbHVlLCBmaWVsZCk6CiAgICBpZiBmaWVsZC50eXBlID09ICdTVFJJTkcnOgogICAgICAjIElucHV0OiAiWFlaIiAtLT4gT3V0cHV0OiAiWFlaIgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnQk9PTEVBTic6CiAgICAgICMgSW5wdXQ6ICJ0cnVlIiAtLT4gT3V0cHV0OiBUcnVlCiAgICAgIHJldHVybiB2YWx1ZSA9PSAndHJ1ZScKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnSU5URUdFUic6CiAgICAgICMgSW5wdXQ6ICIxMjMiIC0tPiBPdXRwdXQ6IDEyMwogICAgICByZXR1cm4gaW50KHZhbHVlKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdGTE9BVCc6CiAgICAgICMgSW5wdXQ6ICIxLjIzIiAtLT4gT3V0cHV0OiAxLjIzCiAgICAgIHJldHVybiBmbG9hdCh2YWx1ZSkKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnVElNRVNUQU1QJzoKICAgICAgIyBUaGUgVVRDIHNob3VsZCBjb21lIGZyb20gdGhlIHRpbWV6b25lIGxpYnJhcnkgYnV0IHRoaXMgaXMgYSBrbm93bgogICAgICAjIGlzc3VlIGluIHB5dGhvbiAyLjcgc28gd2UnbGwganVzdCBoYXJkY29kZSBpdCBhcyB3ZSdyZSByZWFkaW5nIHVzaW5nCiAgICAgICMgdXRjZnJvbXRpbWVzdGFtcC4KICAgICAgIyBJbnB1dDogMTQ3ODEzNDE3Ni45ODU4NjQgLS0+IE91dHB1dDogIjIwMTYtMTEtMDMgMDA6NDk6MzYuOTg1ODY0IFVUQyIKICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGZsb2F0KHZhbHVlKSkKICAgICAgcmV0dXJuIGR0LnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUy4lZiBVVEMnKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdCWVRFUyc6CiAgICAgICMgSW5wdXQ6ICJZbUppIiAtLT4gT3V0cHV0OiAiWW1KaSIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ0RBVEUnOgogICAgICAjIElucHV0OiAiMjAxNi0xMS0wMyIgLS0+IE91dHB1dDogIjIwMTYtMTEtMDMiCiAgICAgIHJldHVybiB2YWx1ZQogICAgZWxpZiBmaWVsZC50eXBlID09ICdEQVRFVElNRSc6CiAgICAgICMgSW5wdXQ6ICIyMDE2LTExLTAzVDAwOjQ5OjM2IiAtLT4gT3V0cHV0OiAiMjAxNi0xMS0wM1QwMDo0OTozNiIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ1RJTUUnOgogICAgICAjIElucHV0OiAiMDA6NDk6MzYiIC0tPiBPdXRwdXQ6ICIwMDo0OTozNiIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ1JFQ09SRCc6CiAgICAgICMgTm90ZSB0aGF0IGEgc2NoZW1hIGZpZWxkIG9iamVjdCBzdXBwb3J0cyBhbHNvIGEgUkVDT1JEIHR5cGUuIEhvd2V2ZXIKICAgICAgIyB3aGVuIHF1ZXJ5aW5nLCB0aGUgcmVwZWF0ZWQgYW5kL29yIHJlY29yZCBmaWVsZHMgYXJlIGZsYXR0ZW5lZAogICAgICAjIHVubGVzcyB3ZSBwYXNzIHRoZSBmbGF0dGVuX3Jlc3VsdHMgZmxhZyBhcyBGYWxzZSB0byB0aGUgc291cmNlCiAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcm93X3RvX2RpY3QodmFsdWUsIGZpZWxkKQogICAgZWxzZToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmV4cGVjdGVkIGZpZWxkIHR5cGU6ICVzJyAlIGZpZWxkLnR5cGUpCgogIGRlZiBjb252ZXJ0X3Jvd190b19kaWN0KHNlbGYsIHJvdywgc2NoZW1hKToKICAgICIiIkNvbnZlcnRzIGEgVGFibGVSb3cgaW5zdGFuY2UgdXNpbmcgdGhlIHNjaGVtYSB0byBhIFB5dGhvbiBkaWN0LiIiIgogICAgcmVzdWx0ID0ge30KICAgIGZvciBpbmRleCwgZmllbGQgaW4gZW51bWVyYXRlKHNjaGVtYS5maWVsZHMpOgogICAgICB2YWx1ZSA9IE5vbmUKICAgICAgaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKToKICAgICAgICBjZWxsID0gcm93LmZbaW5kZXhdCiAgICAgICAgdmFsdWUgPSBmcm9tX2pzb25fdmFsdWUoY2VsbC52KSBpZiBjZWxsLnYgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAgICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJpZ3F1ZXJ5LlRhYmxlRmllbGRTY2hlbWEpOgogICAgICAgIGNlbGwgPSByb3dbJ2YnXVtpbmRleF0KICAgICAgICB2YWx1ZSA9IGNlbGxbJ3YnXSBpZiAndicgaW4gY2VsbCBlbHNlIE5vbmUKICAgICAgaWYgZmllbGQubW9kZSA9PSAnUkVQRUFURUQnOgogICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAjIElkZWFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHJlcGVhdGVkIGZpZWxkcyBkZWZhdWx0IHRvCiAgICAgICAgICAjIHJldHVybmluZyBhbiBlbXB0eSBsaXN0CiAgICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBbXQogICAgICAgIGVsc2U6CiAgICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBbc2VsZi5fY29udmVydF9jZWxsX3ZhbHVlX3RvX2RpY3QoeFsndiddLCBmaWVsZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiB2YWx1ZV0KICAgICAgZWxpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgIGlmIG5vdCBmaWVsZC5tb2RlID09ICdOVUxMQUJMRSc6CiAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdSZWNlaXZlZCBcJ05vbmVcJyBhcyB0aGUgdmFsdWUgZm9yIHRoZSBmaWVsZCAlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgdGhlIGZpZWxkIGlzIG5vdCBOVUxMQUJMRS4nLCBmaWVsZC5uYW1lKQogICAgICAgIHJlc3VsdFtmaWVsZC5uYW1lXSA9IE5vbmUKICAgICAgZWxzZToKICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBzZWxmLl9jb252ZXJ0X2NlbGxfdmFsdWVfdG9fZGljdCh2YWx1ZSwgZmllbGQpCiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgQmlnUXVlcnlXcml0ZUZuKERvRm4pOgogICIiIkEgYGBEb0ZuYGAgdGhhdCBzdHJlYW1zIHdyaXRlcyB0byBCaWdRdWVyeSBvbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFibGVfaWQsIGRhdGFzZXRfaWQsIHByb2plY3RfaWQsIGJhdGNoX3NpemUsIHNjaGVtYSwKICAgICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uLCB3cml0ZV9kaXNwb3NpdGlvbiwgY2xpZW50KToKICAgICIiIkluaXRpYWxpemUgYSBXcml0ZVRvQmlnUXVlcnkgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlX2lkOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAgIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIG9yIHVuZGVyc2NvcmVzIChfKS4gSWYgZGF0YXNldCBhcmd1bWVudCBpcwogICAgICAgIE5vbmUgdGhlbiB0aGUgdGFibGUgYXJndW1lbnQgbXVzdCBjb250YWluIHRoZSBlbnRpcmUgdGFibGUgcmVmZXJlbmNlCiAgICAgICAgc3BlY2lmaWVkIGFzOiAnREFUQVNFVC5UQUJMRScgb3IgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRScuCiAgICAgIGRhdGFzZXRfaWQ6IFRoZSBJRCBvZiB0aGUgZGF0YXNldCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IgbnVsbCBpZiB0aGUKICAgICAgICB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZSBhcmd1bWVudC4KICAgICAgcHJvamVjdF9pZDogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvciBudWxsIGlmIHRoZQogICAgICAgIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlIGFyZ3VtZW50LgogICAgICBiYXRjaF9zaXplOiBOdW1iZXIgb2Ygcm93cyB0byBiZSB3cml0dGVuIHRvIEJRIHBlciBzdHJlYW1pbmcgQVBJIGluc2VydC4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcyB0byBiZQogICAgICAgIGNyZWF0ZWQuIFRoaXMgY2FuIGJlIGVpdGhlciBzcGVjaWZpZWQgYXMgYSAnYmlncXVlcnkuVGFibGVTY2hlbWEnIG9iamVjdAogICAgICAgIG9yIGEgc2luZ2xlIHN0cmluZyAgb2YgdGhlIGZvcm0gJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJwogICAgICAgIHRoYXQgZGVmaW5lcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkcy4gSGVyZSAndHlwZScgc2hvdWxkCiAgICAgICAgc3BlY2lmeSB0aGUgQmlnUXVlcnkgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbwogICAgICAgIG5vdCBzdXBwb3J0IG5lc3RlZCBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5CiAgICAgICAgbW9kZSBmb3IgZmllbGRzIChtb2RlIHdpbGwgYWx3YXlzIGJlIHNldCB0byAnTlVMTEFCTEUnKS4KICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucyBpZiB0aGUgdGFibGUgZG9lcyBub3QKICAgICAgICBleGlzdC4gUG9zc2libGUgdmFsdWVzIGFyZToKICAgICAgICAtIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRDogY3JlYXRlIGlmIGRvZXMgbm90IGV4aXN0LgogICAgICAgIC0gQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVI6IGZhaWwgdGhlIHdyaXRlIGlmIGRvZXMgbm90IGV4aXN0LgogICAgICB3cml0ZV9kaXNwb3NpdGlvbjogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IGhhcHBlbnMgaWYgdGhlIHRhYmxlIGhhcwogICAgICAgIGFscmVhZHkgc29tZSBkYXRhLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogICAgICAgIC0gIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEU6IGRlbGV0ZSBleGlzdGluZyByb3dzLgogICAgICAgIC0gIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfQVBQRU5EOiBhZGQgdG8gZXhpc3Rpbmcgcm93cy4KICAgICAgICAtICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QgZW1wdHkuCiAgICAgICAgRm9yIHN0cmVhbWluZyBwaXBlbGluZXMgV3JpdGVUcnVuY2F0ZSBjYW4gbm90IGJlIHVzZWQuCiAgICAgIHRlc3RfY2xpZW50OiBPdmVycmlkZSB0aGUgZGVmYXVsdCBiaWdxdWVyeSBjbGllbnQgdXNlZCBmb3IgdGVzdGluZy4KICAgICIiIgogICAgc2VsZi50YWJsZV9pZCA9IHRhYmxlX2lkCiAgICBzZWxmLmRhdGFzZXRfaWQgPSBkYXRhc2V0X2lkCiAgICBzZWxmLnByb2plY3RfaWQgPSBwcm9qZWN0X2lkCiAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgc2VsZi5jbGllbnQgPSBjbGllbnQKICAgIHNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uID0gY3JlYXRlX2Rpc3Bvc2l0aW9uCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gd3JpdGVfZGlzcG9zaXRpb24KICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KICAgICMgVGhlIGRlZmF1bHQgYmF0Y2ggc2l6ZSBpcyA1MDAKICAgIHNlbGYuX21heF9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSBvciA1MDAKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfdGFibGVfc2NoZW1hKHNjaGVtYSk6CiAgICAiIiJUcmFuc2Zvcm0gdGhlIHRhYmxlIHNjaGVtYSBpbnRvIGEgYmlncXVlcnkuVGFibGVTY2hlbWEgaW5zdGFuY2UuCgogICAgQXJnczoKICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcyB0byBiZQogICAgICAgIGNyZWF0ZWQuIFRoaXMgaXMgYSBkaWN0aW9uYXJ5IG9iamVjdCBjcmVhdGVkIGluIHRoZSBXcml0ZVRvQmlnUXVlcnkKICAgICAgICB0cmFuc2Zvcm0uCiAgICBSZXR1cm5zOgogICAgICB0YWJsZV9zY2hlbWE6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzCiAgICAgICAgIHRvIGJlIGNyZWF0ZWQgYnV0IGluIHRoZSBiaWdxdWVyeS5UYWJsZVNjaGVtYSBmb3JtYXQuCiAgICAiIiIKICAgIGlmIHNjaGVtYSBpcyBOb25lOgogICAgICByZXR1cm4gc2NoZW1hCiAgICBlbGlmIGlzaW5zdGFuY2Uoc2NoZW1hLCBkaWN0KToKICAgICAgcmV0dXJuIHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oanNvbi5kdW1wcyhzY2hlbWEpKQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHNjaGVtYSBhcmd1bWVudDogJXMuJyAlIHNjaGVtYSkKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KICAgIHNlbGYudGFibGVfc2NoZW1hID0gc2VsZi5nZXRfdGFibGVfc2NoZW1hKHNlbGYuc2NoZW1hKQoKICAgIHNlbGYuYmlncXVlcnlfd3JhcHBlciA9IEJpZ1F1ZXJ5V3JhcHBlcihjbGllbnQ9c2VsZi5jbGllbnQpCiAgICBzZWxmLmJpZ3F1ZXJ5X3dyYXBwZXIuZ2V0X29yX2NyZWF0ZV90YWJsZSgKICAgICAgICBzZWxmLnByb2plY3RfaWQsIHNlbGYuZGF0YXNldF9pZCwgc2VsZi50YWJsZV9pZCwgc2VsZi50YWJsZV9zY2hlbWEsCiAgICAgICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24sIHNlbGYud3JpdGVfZGlzcG9zaXRpb24pCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHVudXNlZF9jcmVhdGVfZm5fb3V0cHV0PU5vbmUpOgogICAgc2VsZi5fcm93c19idWZmZXIuYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fcm93c19idWZmZXIpID49IHNlbGYuX21heF9iYXRjaF9zaXplOgogICAgICBzZWxmLl9mbHVzaF9iYXRjaCgpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi5fcm93c19idWZmZXI6CiAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KCiAgZGVmIF9mbHVzaF9iYXRjaChzZWxmKToKICAgICMgRmx1c2ggdGhlIGN1cnJlbnQgYmF0Y2ggb2Ygcm93cyB0byBCaWdRdWVyeS4KICAgIHBhc3NlZCwgZXJyb3JzID0gc2VsZi5iaWdxdWVyeV93cmFwcGVyLmluc2VydF9yb3dzKAogICAgICAgIHByb2plY3RfaWQ9c2VsZi5wcm9qZWN0X2lkLCBkYXRhc2V0X2lkPXNlbGYuZGF0YXNldF9pZCwKICAgICAgICB0YWJsZV9pZD1zZWxmLnRhYmxlX2lkLCByb3dzPXNlbGYuX3Jvd3NfYnVmZmVyKQogICAgaWYgbm90IHBhc3NlZDoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3Qgc3VjY2Vzc2Z1bGx5IGluc2VydCByb3dzIHRvIEJpZ1F1ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgJyB0YWJsZSBbJXM6JXMuJXNdLiBFcnJvcnM6ICVzJyUKICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnByb2plY3RfaWQsIHNlbGYuZGF0YXNldF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX2lkLCBlcnJvcnMpKQogICAgbG9nZ2luZy5kZWJ1ZygiU3VjY2Vzc2Z1bGx5IHdyb3RlICVkIHJvd3MuIiwgbGVuKHNlbGYuX3Jvd3NfYnVmZmVyKSkKICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KCgpjbGFzcyBXcml0ZVRvQmlnUXVlcnkoUFRyYW5zZm9ybSk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUsIHNjaGVtYT1Ob25lLAogICAgICAgICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVELAogICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORCwKICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1Ob25lLCB0ZXN0X2NsaWVudD1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBXcml0ZVRvQmlnUXVlcnkgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlIChzdHIpOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAgIGBgYS16YGAsIGBgQS1aYGAsIG51bWJlcnMgYGAwLTlgYCwgb3IgdW5kZXJzY29yZXMgYGBfYGAuIElmIGRhdGFzZXQKICAgICAgICBhcmd1bWVudCBpcyA6ZGF0YTpgTm9uZWAgdGhlbiB0aGUgdGFibGUgYXJndW1lbnQgbXVzdCBjb250YWluIHRoZQogICAgICAgIGVudGlyZSB0YWJsZSByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOiBgYCdEQVRBU0VULlRBQkxFJ2BgIG9yCiAgICAgICAgYGAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJ2BgLgogICAgICBkYXRhc2V0IChzdHIpOiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBwcm9qZWN0IChzdHIpOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBzY2hlbWEgKHN0cik6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvCiAgICAgICAgYmUgY3JlYXRlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHNwZWNpZmllZCBhcyBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAKICAgICAgICBvYmplY3Qgb3IgYSBzaW5nbGUgc3RyaW5nICBvZiB0aGUgZm9ybQogICAgICAgIGBgJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJ2BgIHRoYXQgZGVmaW5lcyBhIGNvbW1hCiAgICAgICAgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGRzLiBIZXJlIGBgJ3R5cGUnYGAgc2hvdWxkIHNwZWNpZnkgdGhlIEJpZ1F1ZXJ5CiAgICAgICAgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQKICAgICAgICBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5IG1vZGUgZm9yIGZpZWxkcwogICAgICAgIChtb2RlIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgYCdOVUxMQUJMRSdgYCkuCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbiAoQmlnUXVlcnlEaXNwb3NpdGlvbik6IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdAogICAgICAgIGhhcHBlbnMgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9JRl9ORUVERURgOiBjcmVhdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSYDogZmFpbCB0aGUgd3JpdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgoKICAgICAgd3JpdGVfZGlzcG9zaXRpb24gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24pOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucwogICAgICAgIGlmIHRoZSB0YWJsZSBoYXMgYWxyZWFkeSBzb21lIGRhdGEuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEVgOiBkZWxldGUgZXhpc3Rpbmcgcm93cy4KICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORGA6IGFkZCB0byBleGlzdGluZyByb3dzLgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFlgOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QKICAgICAgICAgIGVtcHR5LgoKICAgICAgICBGb3Igc3RyZWFtaW5nIHBpcGVsaW5lcyBXcml0ZVRydW5jYXRlIGNhbiBub3QgYmUgdXNlZC4KCiAgICAgIGJhdGNoX3NpemUgKGludCk6IE51bWJlciBvZiByb3dzIHRvIGJlIHdyaXR0ZW4gdG8gQlEgcGVyIHN0cmVhbWluZyBBUEkKICAgICAgICBpbnNlcnQuCiAgICAgIHRlc3RfY2xpZW50OiBPdmVycmlkZSB0aGUgZGVmYXVsdCBiaWdxdWVyeSBjbGllbnQgdXNlZCBmb3IgdGVzdGluZy4KICAgICIiIgogICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBfcGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlLCBkYXRhc2V0LCBwcm9qZWN0KQogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZSgKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb24pCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZSgKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLmJhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICBzZWxmLnRlc3RfY2xpZW50ID0gdGVzdF9jbGllbnQKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfdGFibGVfc2NoZW1hX2Zyb21fc3RyaW5nKHNjaGVtYSk6CiAgICAiIiJUcmFuc2Zvcm0gdGhlIHN0cmluZyB0YWJsZSBzY2hlbWEgaW50byBhCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hYCBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICBzY2hlbWEgKHN0cik6IFRoZSBzdGluZyBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUKICAgICAgICBoYXMgdG8gYmUgY3JlYXRlZC4KCiAgICBSZXR1cm5zOgogICAgICB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYToKICAgICAgVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMgdG8gYmUgY3JlYXRlZAogICAgICBidXQgaW4gdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWFgIGZvcm1hdC4KICAgICIiIgogICAgdGFibGVfc2NoZW1hID0gYmlncXVlcnkuVGFibGVTY2hlbWEoKQogICAgc2NoZW1hX2xpc3QgPSBbcy5zdHJpcCgpIGZvciBzIGluIHNjaGVtYS5zcGxpdCgnLCcpXQogICAgZm9yIGZpZWxkX2FuZF90eXBlIGluIHNjaGVtYV9saXN0OgogICAgICBmaWVsZF9uYW1lLCBmaWVsZF90eXBlID0gZmllbGRfYW5kX3R5cGUuc3BsaXQoJzonKQogICAgICBmaWVsZF9zY2hlbWEgPSBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKCkKICAgICAgZmllbGRfc2NoZW1hLm5hbWUgPSBmaWVsZF9uYW1lCiAgICAgIGZpZWxkX3NjaGVtYS50eXBlID0gZmllbGRfdHlwZQogICAgICBmaWVsZF9zY2hlbWEubW9kZSA9ICdOVUxMQUJMRScKICAgICAgdGFibGVfc2NoZW1hLmZpZWxkcy5hcHBlbmQoZmllbGRfc2NoZW1hKQogICAgcmV0dXJuIHRhYmxlX3NjaGVtYQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHRhYmxlX3NjaGVtYV90b19kaWN0KHRhYmxlX3NjaGVtYSk6CiAgICAiIiJDcmVhdGUgYSBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRhYmxlIHNjaGVtYSBmb3Igc2VyaWFsaXphdGlvbgogICAgIiIiCiAgICBkZWYgZ2V0X3RhYmxlX2ZpZWxkKGZpZWxkKToKICAgICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIHRhYmxlIGZpZWxkCiAgICAgICIiIgogICAgICByZXN1bHQgPSB7fQogICAgICByZXN1bHRbJ25hbWUnXSA9IGZpZWxkLm5hbWUKICAgICAgcmVzdWx0Wyd0eXBlJ10gPSBmaWVsZC50eXBlCiAgICAgIHJlc3VsdFsnbW9kZSddID0gZ2V0YXR0cihmaWVsZCwgJ21vZGUnLCAnTlVMTEFCTEUnKQogICAgICBpZiBoYXNhdHRyKGZpZWxkLCAnZGVzY3JpcHRpb24nKSBhbmQgZmllbGQuZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgcmVzdWx0WydkZXNjcmlwdGlvbiddID0gZmllbGQuZGVzY3JpcHRpb24KICAgICAgaWYgaGFzYXR0cihmaWVsZCwgJ2ZpZWxkcycpIGFuZCBmaWVsZC5maWVsZHM6CiAgICAgICAgcmVzdWx0WydmaWVsZHMnXSA9IFtnZXRfdGFibGVfZmllbGQoZikgZm9yIGYgaW4gZmllbGQuZmllbGRzXQogICAgICByZXR1cm4gcmVzdWx0CgogICAgaWYgbm90IGlzaW5zdGFuY2UodGFibGVfc2NoZW1hLCBiaWdxdWVyeS5UYWJsZVNjaGVtYSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRhYmxlIHNjaGVtYSBtdXN0IGJlIG9mIHRoZSB0eXBlIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIikKICAgIHNjaGVtYSA9IHsnZmllbGRzJzogW119CiAgICBmb3IgZmllbGQgaW4gdGFibGVfc2NoZW1hLmZpZWxkczoKICAgICAgc2NoZW1hWydmaWVsZHMnXS5hcHBlbmQoZ2V0X3RhYmxlX2ZpZWxkKGZpZWxkKSkKICAgIHJldHVybiBzY2hlbWEKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZGljdF90YWJsZV9zY2hlbWEoc2NoZW1hKToKICAgICIiIlRyYW5zZm9ybSB0aGUgdGFibGUgc2NoZW1hIGludG8gYSBkaWN0aW9uYXJ5IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIHNjaGVtYSAofmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWEpOgogICAgICAgIFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvIGJlIGNyZWF0ZWQuCiAgICAgICAgVGhpcyBjYW4gZWl0aGVyIGJlIGEgZGljdCBvciBzdHJpbmcgb3IgaW4gdGhlIFRhYmxlU2NoZW1hIGZvcm1hdC4KCiAgICBSZXR1cm5zOgogICAgICBEaWN0W3N0ciwgQW55XTogVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMKICAgICAgdG8gYmUgY3JlYXRlZCBidXQgaW4gdGhlIGRpY3Rpb25hcnkgZm9ybWF0LgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHNjaGVtYSwgZGljdCk6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgc2NoZW1hIGlzIE5vbmU6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJhc2VzdHJpbmcpOgogICAgICB0YWJsZV9zY2hlbWEgPSBXcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZyhzY2hlbWEpCiAgICAgIHJldHVybiBXcml0ZVRvQmlnUXVlcnkudGFibGVfc2NoZW1hX3RvX2RpY3QodGFibGVfc2NoZW1hKQogICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgYmlncXVlcnkuVGFibGVTY2hlbWEpOgogICAgICByZXR1cm4gV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0KHNjaGVtYSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignVW5leHBlY3RlZCBzY2hlbWEgYXJndW1lbnQ6ICVzLicgJSBzY2hlbWEpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIE5vbmU6CiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCA9IHBjb2xsLnBpcGVsaW5lLm9wdGlvbnMudmlld19hcygKICAgICAgICAgIEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdAogICAgYmlncXVlcnlfd3JpdGVfZm4gPSBCaWdRdWVyeVdyaXRlRm4oCiAgICAgICAgdGFibGVfaWQ9c2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCwKICAgICAgICBkYXRhc2V0X2lkPXNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICBwcm9qZWN0X2lkPXNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICBiYXRjaF9zaXplPXNlbGYuYmF0Y2hfc2l6ZSwKICAgICAgICBzY2hlbWE9c2VsZi5nZXRfZGljdF90YWJsZV9zY2hlbWEoc2VsZi5zY2hlbWEpLAogICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1zZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1zZWxmLndyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgIGNsaWVudD1zZWxmLnRlc3RfY2xpZW50KQogICAgcmV0dXJuIHBjb2xsIHwgJ1dyaXRlVG9CaWdRdWVyeScgPj4gUGFyRG8oYmlncXVlcnlfd3JpdGVfZm4pCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSB7fQogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgIHRhYmxlU3BlYyA9ICd7fS57fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgIHRhYmxlU3BlYyA9ICd7fTp7fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNwZWMpCiAgICAgIHJlc1sndGFibGUnXSA9IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpCiAgICByZXR1cm4gcmVzCn1y5QIAAChYHwAAAEJpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX2RhdGFzZXRYAwAAAGRlZk2JA02ZA4dYIwAAAEJpZ1F1ZXJ5V3JhcHBlci5nZXRfb3JfY3JlYXRlX3RhYmxlWAMAAABkZWZNywNNHASHWBMAAABCaWdRdWVyeURpc3Bvc2l0aW9uWAUAAABjbGFzc0v9TRgBh1gYAAAAVGFibGVSb3dKc29uQ29kZXIuZGVjb2RlWAMAAABkZWZL0UvWh1gwAAAAcGFyc2VfdGFibGVfc2NoZW1hX2Zyb21fanNvbi5fcGFyc2Vfc2NoZW1hX2ZpZWxkWAMAAABkZWZL40v4h1gXAAAAQmlnUXVlcnlXcml0ZUZuLnByb2Nlc3NYAwAAAGRlZk3tBE3xBIdYFgAAAFdyaXRlVG9CaWdRdWVyeS5leHBhbmRYAwAAAGRlZk2QBU2eBYdYIAAAAEJpZ1F1ZXJ5V3JhcHBlci5fc3RhcnRfcXVlcnlfam9iWAMAAABkZWZNDgNNIwOHWBcAAABCaWdRdWVyeVJlYWRlci5fX2luaXRfX1gDAAAAZGVmTVsCTYECh1gPAAAAQmlnUXVlcnlXcml0ZUZuWAUAAABjbGFzc02hBE0DBYdYJQAAAEJpZ1F1ZXJ5V3JhcHBlci5nZXRfb3JfY3JlYXRlX2RhdGFzZXRYAwAAAGRlZk1WA01tA4dYHQAAAEJpZ1F1ZXJ5V3JhcHBlci5fY3JlYXRlX3RhYmxlWAMAAABkZWZNSgNNVQOHWA8AAABXcml0ZVRvQmlnUXVlcnlYBQAAAGNsYXNzTQUFTakFh1gSAAAAUm93QXNEaWN0SnNvbkNvZGVyWAUAAABjbGFzc0udS7CHWBMAAABCaWdRdWVyeVNpbmsud3JpdGVyWAMAAABkZWZNTgJNUgKHWBoAAABCaWdRdWVyeVdyYXBwZXIuX2dldF90YWJsZVgDAAAAZGVmTUADTUkDh1gVAAAAQmlnUXVlcnlTb3VyY2UuZm9ybWF0WAMAAABkZWZNsQFNtQGHWBsAAABCaWdRdWVyeVNvdXJjZS5kaXNwbGF5X2RhdGFYAwAAAGRlZk2gAU2wAYdYGwAAAEJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvblgDAAAAZGVmTTYCTUgCh1gRAAAAVGFibGVSb3dKc29uQ29kZXJYBQAAAGNsYXNzS7JL1odYHQAAAEJpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX3RhYmxlWAMAAABkZWZNeQNNiAOHWBwAAABwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uWAMAAABkZWZL2Ev7h1gYAAAAV3JpdGVUb0JpZ1F1ZXJ5Ll9faW5pdF9fWAMAAABkZWZNBwVNQQWHWBgAAABCaWdRdWVyeVdyaXRlci5fX2VudGVyX19YAwAAAGRlZk3QAk3WAodYGQAAAEJpZ1F1ZXJ5V3JhcHBlci5ydW5fcXVlcnlYAwAAAGRlZk0dBE03BIdYFQAAAEJpZ1F1ZXJ5U291cmNlLnJlYWRlclgDAAAAZGVmTbYBTbwBh1gbAAAAQmlnUXVlcnlXcmFwcGVyLmluc2VydF9yb3dzWAMAAABkZWZNOARNWwSHWBcAAABCaWdRdWVyeVJlYWRlci5fX2l0ZXJfX1gDAAAAZGVmTZwCTagCh1gYAAAAQmlnUXVlcnlXcml0ZUZuLl9faW5pdF9fWAMAAABkZWZNpQRN0ASHWBkAAABSb3dBc0RpY3RKc29uQ29kZXIuZGVjb2RlWAMAAABkZWZLrkuwh1gUAAAAQmlnUXVlcnlXcml0ZXIuV3JpdGVYAwAAAGRlZk3aAk3eAodYMQAAAEJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbi5zY2hlbWFfbGlzdF9hc19vYmplY3RYAwAAAGRlZk05Ak1GAodYFQAAAEJpZ1F1ZXJ5U2luay5fX2luaXRfX1gDAAAAZGVmTcEBTScCh1gaAAAAVGFibGVSb3dKc29uQ29kZXIuX19pbml0X19YAwAAAGRlZku6S8KHWA4AAABCaWdRdWVyeVJlYWRlclgFAAAAY2xhc3NNWAJNqAKHWCIAAABCaWdRdWVyeVdyYXBwZXIuX2dldF9xdWVyeV9yZXN1bHRzWAMAAABkZWZNJANNLgOHWBwAAABCaWdRdWVyeVdyaXRlRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZN5ARN7ASHWBkAAABSb3dBc0RpY3RKc29uQ29kZXIuZW5jb2RlWAMAAABkZWZLpEuth1gWAAAAX3BhcnNlX3RhYmxlX3JlZmVyZW5jZVgDAAAAZGVmTRoBTUsBh1gdAAAAQmlnUXVlcnlXcmFwcGVyLnVuaXF1ZV9yb3dfaWRYAwAAAGRlZk35Ak0HA4dYDgAAAEJpZ1F1ZXJ5U291cmNlWAUAAABjbGFzc01RAU28AYdYIAAAAEJpZ1F1ZXJ5V3JpdGVGbi5nZXRfdGFibGVfc2NoZW1hWAMAAABkZWZN0QRN4wSHWCwAAABXcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZ1gDAAAAZGVmTUIFTV0Fh1gYAAAAQmlnUXVlcnlXcmFwcGVyLl9faW5pdF9fWAMAAABkZWZN8AJN+AKHWBgAAABCaWdRdWVyeVJlYWRlci5fX2VudGVyX19YAwAAAGRlZk2TAk2YAodYJAAAAFdyaXRlVG9CaWdRdWVyeS50YWJsZV9zY2hlbWFfdG9fZGljdFgDAAAAZGVmTV4FTXUFh1gjAAAAQmlnUXVlcnlXcmFwcGVyLmNvbnZlcnRfcm93X3RvX2RpY3RYAwAAAGRlZk2EBE2fBIdYFwAAAEJpZ1F1ZXJ5V3JpdGVyLl9fZXhpdF9fWAMAAABkZWZN1wJN2QKHWB8AAABCaWdRdWVyeVdyYXBwZXIuX2lzX3RhYmxlX2VtcHR5WAMAAABkZWZNbgNNeAOHWBMAAABCaWdRdWVyeVNpbmsuZm9ybWF0WAMAAABkZWZNSQJNTQKHWBgAAABUYWJsZVJvd0pzb25Db2Rlci5lbmNvZGVYAwAAAGRlZkvDS9CHWCoAAABCaWdRdWVyeVdyYXBwZXIuY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXRYAwAAAGRlZk26A03KA4dYDwAAAEJpZ1F1ZXJ5V3JhcHBlclgFAAAAY2xhc3NN5AJNnwSHWCUAAABXcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1hWAMAAABkZWZNdgVNjwWHWCIAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlWAMAAABkZWZNDwFNGAGHWB8AAABCaWdRdWVyeVdyYXBwZXIuX2dldF90ZW1wX3RhYmxlWAMAAABkZWZNCANNDQOHWCIAAABCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9uWAMAAABkZWZNmgNNoAOHWBwAAABCaWdRdWVyeVdyaXRlRm4uX2ZsdXNoX2JhdGNoWAMAAABkZWZN9wRNAwWHWCsAAABCaWdRdWVyeVdyYXBwZXIuX2NvbnZlcnRfY2VsbF92YWx1ZV90b19kaWN0WAMAAABkZWZNXARNgwSHWBkAAABCaWdRdWVyeVNpbmsuZGlzcGxheV9kYXRhWAMAAABkZWZNKAJNNQKHWBcAAABCaWdRdWVyeVNvdXJjZS5fX2luaXRfX1gDAAAAZGVmTVQBTZ8Bh1gMAAAAQmlnUXVlcnlTaW5rWAUAAABjbGFzc02+AU1SAodYFwAAAEJpZ1F1ZXJ5V3JpdGVyLl9faW5pdF9fWAMAAABkZWZNrQJNwQKHWA4AAABCaWdRdWVyeVdyaXRlclgFAAAAY2xhc3NNqgJN3gKHWBcAAABCaWdRdWVyeVJlYWRlci5fX2V4aXRfX1gDAAAAZGVmTZkCTZsCh1g0AAAAV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0LmdldF90YWJsZV9maWVsZFgDAAAAZGVmTWIFTW4Fh1ghAAAAQmlnUXVlcnlXcml0ZXIuX2ZsdXNoX3Jvd3NfYnVmZmVyWAMAAABkZWZNwgJNzwKHWCMAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZVgDAAAAZGVmTQYBTQ4Bh1gpAAAAQmlnUXVlcnlSZWFkZXIuX2dldF9zb3VyY2VfdGFibGVfbG9jYXRpb25YAwAAAGRlZk2CAk2SAodYKAAAAEJpZ1F1ZXJ5V3JhcHBlci5jcmVhdGVfdGVtcG9yYXJ5X2RhdGFzZXRYAwAAAGRlZk2hA025A4dYIAAAAEJpZ1F1ZXJ5V3JhcHBlci5faW5zZXJ0X2FsbF9yb3dzWAMAAABkZWZNLwNNPwOHWB0AAABCaWdRdWVyeVdyaXRlRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTfIETfYEh1gcAAAAV3JpdGVUb0JpZ1F1ZXJ5LmRpc3BsYXlfZGF0YVgDAAAAZGVmTZ8FTakFh3V9cuYCAAAoWBsAAABCaWdRdWVyeVNvdXJjZS5kaXNwbGF5X2RhdGFYGwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeXLnAgAAWBwAAABXcml0ZVRvQmlnUXVlcnkuZGlzcGxheV9kYXRhaucCAABYGwAAAEJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbmrnAgAAWBEAAABUYWJsZVJvd0pzb25Db2RlcmrnAgAAWA4AAABCaWdRdWVyeVNvdXJjZWrnAgAAWAwAAABCaWdRdWVyeVNpbmtq5wIAAFgTAAAAQmlnUXVlcnlEaXNwb3NpdGlvbmrnAgAAWBgAAABUYWJsZVJvd0pzb25Db2Rlci5kZWNvZGVq5wIAAFgsAAAAV3JpdGVUb0JpZ1F1ZXJ5LmdldF90YWJsZV9zY2hlbWFfZnJvbV9zdHJpbmdq5wIAAFgWAAAAV3JpdGVUb0JpZ1F1ZXJ5LmV4cGFuZGrnAgAAWCMAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZWrnAgAAWBUAAABCaWdRdWVyeVNvdXJjZS5yZWFkZXJq5wIAAFgkAAAAV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0aucCAABYGAAAAFRhYmxlUm93SnNvbkNvZGVyLmVuY29kZWrnAgAAWCUAAABXcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1haucCAABYGQAAAEJpZ1F1ZXJ5U2luay5kaXNwbGF5X2RhdGFq5wIAAFgPAAAAV3JpdGVUb0JpZ1F1ZXJ5aucCAABYIgAAAEJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfd3JpdGVq5wIAAFgTAAAAQmlnUXVlcnlTaW5rLndyaXRlcmrnAgAAdWiKWBsAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnly6AIAAIWBcukCAAB9cuoCAABidFUbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlscusCAAAoWJBQAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlNpbXBsZSB1dGlsaXR5IFBUcmFuc2Zvcm1zLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGNvbnRleHRsaWIKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcyBpbXBvcnQgTWV0cmljcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ29tYmluZVBlcktleQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRmxhdE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRmxhdHRlbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgR3JvdXBCeUtleQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgTWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgV2luZG93SW50bwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgcHRyYW5zZm9ybV9mbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgQWNjdW11bGF0aW9uTW9kZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgQWZ0ZXJDb3VudApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBOb25NZXJnaW5nV2luZG93Rm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wQ29tYmluZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB3aW5kb3dlZF92YWx1ZQoKX19hbGxfXyA9IFsKICAgICdCYXRjaEVsZW1lbnRzJywKICAgICdDb0dyb3VwQnlLZXknLAogICAgJ0tleXMnLAogICAgJ0t2U3dhcCcsCiAgICAnUmVtb3ZlRHVwbGljYXRlcycsCiAgICAnUmVzaHVmZmxlJywKICAgICdWYWx1ZXMnLAogICAgXQoKSyA9IHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0snKQpWID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnVicpClQgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJykKCgpjbGFzcyBDb0dyb3VwQnlLZXkoUFRyYW5zZm9ybSk6CiAgIiIiR3JvdXBzIHJlc3VsdHMgYWNyb3NzIHNldmVyYWwgUENvbGxlY3Rpb25zIGJ5IGtleS4KCiAgR2l2ZW4gYW4gaW5wdXQgZGljdCBtYXBwaW5nIHNlcmlhbGl6YWJsZSBrZXlzIChjYWxsZWQgInRhZ3MiKSB0byAwIG9yIG1vcmUKICBQQ29sbGVjdGlvbnMgb2YgKGtleSwgdmFsdWUpIHR1cGxlcywgZS5nLjo6CgogICAgIHsncGMxJzogcGNvbGwxLCAncGMyJzogcGNvbGwyLCAzMzMzMzogcGNvbGwzfQoKICBjcmVhdGVzIGEgc2luZ2xlIG91dHB1dCBQQ29sbGVjdGlvbiBvZiAoa2V5LCB2YWx1ZSkgdHVwbGVzIHdob3NlIGtleXMgYXJlIHRoZQogIHVuaXF1ZSBpbnB1dCBrZXlzIGZyb20gYWxsIGlucHV0cywgYW5kIHdob3NlIHZhbHVlcyBhcmUgZGljdHMgbWFwcGluZyBlYWNoCiAgdGFnIHRvIGFuIGl0ZXJhYmxlIG9mIHdoYXRldmVyIHZhbHVlcyB3ZXJlIHVuZGVyIHRoZSBrZXkgaW4gdGhlIGNvcnJlc3BvbmRpbmcKICBQQ29sbGVjdGlvbjo6CgogICAgKCdzb21lIGtleScsIHsncGMxJzogWyd2YWx1ZSAxIHVuZGVyICJzb21lIGtleSIgaW4gcGNvbGwxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUgMiB1bmRlciAic29tZSBrZXkiIGluIHBjb2xsMSddLAogICAgICAgICAgICAgICAgICAncGMyJzogW10sCiAgICAgICAgICAgICAgICAgIDMzMzMzOiBbJ29ubHkgdmFsdWUgdW5kZXIgInNvbWUga2V5IiBpbiBwY29sbDMnXX0pCgogIE5vdGUgdGhhdCBwY29sbDIgaGFkIG5vIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggInNvbWUga2V5Ii4KCiAgQ29Hcm91cEJ5S2V5IGFsc28gd29ya3MgZm9yIHR1cGxlcywgbGlzdHMsIG9yIG90aGVyIGZsYXQgaXRlcmFibGVzIG9mCiAgUENvbGxlY3Rpb25zLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZXMgb2YgdGhlIHJlc3VsdGluZyBQQ29sbGVjdGlvbnMKICB3aWxsIGJlIHR1cGxlcyB3aG9zZSBudGggdmFsdWUgaXMgdGhlIGxpc3Qgb2YgdmFsdWVzIGZyb20gdGhlIG50aAogIFBDb2xsZWN0aW9uLS0tY29uY2VwdHVhbGx5LCB0aGUgInRhZ3MiIGFyZSB0aGUgaW5kaWNlcyBpbnRvIHRoZSBpbnB1dC4KICBUaHVzLCBmb3IgdGhpcyBpbnB1dDo6CgogICAgIChwY29sbDEsIHBjb2xsMiwgcGNvbGwzKQoKICB0aGUgb3V0cHV0IFBDb2xsZWN0aW9uJ3MgdmFsdWUgZm9yICJzb21lIGtleSIgaXM6OgoKICAgICgnc29tZSBrZXknLCAoWyd2YWx1ZSAxIHVuZGVyICJzb21lIGtleSIgaW4gcGNvbGwxJywKICAgICAgICAgICAgICAgICAgICd2YWx1ZSAyIHVuZGVyICJzb21lIGtleSIgaW4gcGNvbGwxJ10sCiAgICAgICAgICAgICAgICAgIFtdLAogICAgICAgICAgICAgICAgICBbJ29ubHkgdmFsdWUgdW5kZXIgInNvbWUga2V5IiBpbiBwY29sbDMnXSkpCgogIEFyZ3M6CiAgICBsYWJlbDogbmFtZSBvZiB0aGlzIHRyYW5zZm9ybSBpbnN0YW5jZS4gVXNlZnVsIHdoaWxlIG1vbml0b3JpbmcgYW5kCiAgICAgIGRlYnVnZ2luZyBhIHBpcGVsaW5lIGV4ZWN1dGlvbi4KICAgICoqa3dhcmdzOiBBY2NlcHRzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50ICJwaXBlbGluZSIsIHdoaWNoIHNwZWNpZmllcyB0aGUKICAgICAgcGlwZWxpbmUgdGhhdCAib3ducyIgdGhpcyBQVHJhbnNmb3JtLiBPcmRpbmFyaWx5IENvR3JvdXBCeUtleSBjYW4gb2J0YWluCiAgICAgIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBvbmUgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9ucywgYnV0IGlmIHRoZXJlIGFyZSBub25lCiAgICAgIChvciBpZiB0aGVyZSdzIGEgY2hhbmNlIHRoZXJlIG1heSBiZSBub25lKSwgdGhpcyBhcmd1bWVudCBpcyB0aGUgb25seSB3YXkKICAgICAgdG8gcHJvdmlkZSBwaXBlbGluZSBpbmZvcm1hdGlvbiwgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIG1hbmRhdG9yeS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgIHN1cGVyKENvR3JvdXBCeUtleSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5waXBlbGluZSA9IGt3YXJncy5wb3AoJ3BpcGVsaW5lJywgTm9uZSkKICAgIGlmIGt3YXJnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUga3dhcmdzLmtleXMoKSkKCiAgZGVmIF9leHRyYWN0X2lucHV0X3B2YWx1ZXMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHRyeToKICAgICAgIyBJZiB0aGlzIHdvcmtzLCBpdCdzIGEgZGljdC4KICAgICAgcmV0dXJuIHB2YWx1ZWlzaCwgdHVwbGUocHZhbHVlaXNoLnZpZXd2YWx1ZXMoKSkKICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgcGNvbGxzID0gdHVwbGUocHZhbHVlaXNoKQogICAgICByZXR1cm4gcGNvbGxzLCBwY29sbHMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbHMpOgogICAgIiIiUGVyZm9ybXMgQ29Hcm91cEJ5S2V5IG9uIGFyZ3VtZW50IHBjb2xsczsgc2VlIGNsYXNzIGRvY3N0cmluZy4iIiIKICAgICMgRm9yIGFzc29jaWF0aW5nIHZhbHVlcyBpbiBLLVYgcGFpcnMgd2l0aCB0aGUgUENvbGxlY3Rpb25zIHRoZXkgY2FtZSBmcm9tLgogICAgZGVmIF9wYWlyX3RhZ193aXRoX3ZhbHVlKGtleV92YWx1ZSwgdGFnKToKICAgICAgKGtleSwgdmFsdWUpID0ga2V5X3ZhbHVlCiAgICAgIHJldHVybiAoa2V5LCAodGFnLCB2YWx1ZSkpCgogICAgIyBDcmVhdGVzIHRoZSBrZXksIHZhbHVlIHBhaXJzIGZvciB0aGUgb3V0cHV0IFBDb2xsZWN0aW9uLiBWYWx1ZXMgYXJlIGVpdGhlcgogICAgIyBsaXN0cyBvciBkaWN0cyAocGVyIHRoZSBjbGFzcyBkb2NzdHJpbmcpLCBpbml0aWFsaXplZCBieSB0aGUgcmVzdWx0IG9mCiAgICAjIHJlc3VsdF9jdG9yKHJlc3VsdF9jdG9yX2FyZykuCiAgICBkZWYgX21lcmdlX3RhZ2dlZF92YWxzX3VuZGVyX2tleShrZXlfZ3JvdXBlZCwgcmVzdWx0X2N0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfY3Rvcl9hcmcpOgogICAgICAoa2V5LCBncm91cGVkKSA9IGtleV9ncm91cGVkCiAgICAgIHJlc3VsdF92YWx1ZSA9IHJlc3VsdF9jdG9yKHJlc3VsdF9jdG9yX2FyZykKICAgICAgZm9yIHRhZywgdmFsdWUgaW4gZ3JvdXBlZDoKICAgICAgICByZXN1bHRfdmFsdWVbdGFnXS5hcHBlbmQodmFsdWUpCiAgICAgIHJldHVybiAoa2V5LCByZXN1bHRfdmFsdWUpCgogICAgdHJ5OgogICAgICAjIElmIHBjb2xscyBpcyBhIGRpY3QsIHdlIHR1cm4gaXQgaW50byAodGFnLCBwY29sbCkgcGFpcnMgZm9yIHVzZSBpbiB0aGUKICAgICAgIyBnZW5lcmFsLXB1cnBvc2UgY29kZSBiZWxvdy4gVGhlIHJlc3VsdCB2YWx1ZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGRpY3RzCiAgICAgICMgd2hvc2Uga2V5cyBhcmUgdGhlIHRhZ3MuCiAgICAgIHJlc3VsdF9jdG9yX2FyZyA9IHBjb2xscy5rZXlzKCkKICAgICAgcmVzdWx0X2N0b3IgPSBsYW1iZGEgdGFnczogZGljdCgodGFnLCBbXSkgZm9yIHRhZyBpbiB0YWdzKQogICAgICBwY29sbHMgPSBwY29sbHMuaXRlbXMoKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAjIE90aGVyd2lzZSwgcGNvbGxzIGlzIGEgbGlzdC90dXBsZSwgc28gd2UgdHVybiBpdCBpbnRvIChpbmRleCwgcGNvbGwpCiAgICAgICMgcGFpcnMuIFRoZSByZXN1bHQgdmFsdWUgY29uc3RydWN0b3IgbWFrZXMgdHVwbGVzIHdpdGggbGVuKHBjb2xscykgc2xvdHMuCiAgICAgIHBjb2xscyA9IGxpc3QoZW51bWVyYXRlKHBjb2xscykpCiAgICAgIHJlc3VsdF9jdG9yX2FyZyA9IGxlbihwY29sbHMpCiAgICAgIHJlc3VsdF9jdG9yID0gbGFtYmRhIHNpemU6IHR1cGxlKFtdIGZvciBfIGluIHhyYW5nZShzaXplKSkKCiAgICAjIENoZWNrIGlucHV0IFBDb2xsZWN0aW9ucyBmb3IgUENvbGxlY3Rpb24tbmVzcywgYW5kIHRoYXQgdGhleSBhbGwgYmVsb25nCiAgICAjIHRvIHRoZSBzYW1lIHBpcGVsaW5lLgogICAgZm9yIF8sIHBjb2xsIGluIHBjb2xsczoKICAgICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICAgIGlmIHNlbGYucGlwZWxpbmU6CiAgICAgICAgYXNzZXJ0IHBjb2xsLnBpcGVsaW5lID09IHNlbGYucGlwZWxpbmUKCiAgICByZXR1cm4gKFtwY29sbCB8ICdwYWlyX3dpdGhfJXMnICUgdGFnID4+IE1hcChfcGFpcl90YWdfd2l0aF92YWx1ZSwgdGFnKQogICAgICAgICAgICAgZm9yIHRhZywgcGNvbGwgaW4gcGNvbGxzXQogICAgICAgICAgICB8IEZsYXR0ZW4ocGlwZWxpbmU9c2VsZi5waXBlbGluZSkKICAgICAgICAgICAgfCBHcm91cEJ5S2V5KCkKICAgICAgICAgICAgfCBNYXAoX21lcmdlX3RhZ2dlZF92YWxzX3VuZGVyX2tleSwgcmVzdWx0X2N0b3IsIHJlc3VsdF9jdG9yX2FyZykpCgoKZGVmIEtleXMobGFiZWw9J0tleXMnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gb2YgZmlyc3QgZWxlbWVudHMgb2YgMi10dXBsZXMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICByZXR1cm4gbGFiZWwgPj4gTWFwKGxhbWJkYSBrX3Y6IGtfdlswXSkKCgpkZWYgVmFsdWVzKGxhYmVsPSdWYWx1ZXMnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gb2Ygc2Vjb25kIGVsZW1lbnRzIG9mIDItdHVwbGVzIGluIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIGxhYmVsID4+IE1hcChsYW1iZGEga192MToga192MVsxXSkKCgpkZWYgS3ZTd2FwKGxhYmVsPSdLdlN3YXAnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gcmV2ZXJzaW5nIDItdHVwbGVzIGluIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIGxhYmVsID4+IE1hcChsYW1iZGEga192MjogKGtfdjJbMV0sIGtfdjJbMF0pKQoKCkBwdHJhbnNmb3JtX2ZuCmRlZiBSZW1vdmVEdXBsaWNhdGVzKHBjb2xsKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgdW5pcXVlIGVsZW1lbnRzIG9mIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIChwY29sbAogICAgICAgICAgfCAnVG9QYWlycycgPj4gTWFwKGxhbWJkYSB2OiAodiwgTm9uZSkpCiAgICAgICAgICB8ICdHcm91cCcgPj4gQ29tYmluZVBlcktleShsYW1iZGEgdnM6IE5vbmUpCiAgICAgICAgICB8ICdSZW1vdmVEdXBsaWNhdGVzJyA+PiBLZXlzKCkpCgoKY2xhc3MgX0JhdGNoU2l6ZUVzdGltYXRvcihvYmplY3QpOgogICIiIkVzdGltYXRlcyB0aGUgYmVzdCBzaXplIGZvciBiYXRjaGVzIGdpdmVuIGhpc3RvcmljYWwgdGltaW5nLgogICIiIgoKICBfTUFYX0RBVEFfUE9JTlRTID0gMTAwCiAgX01BWF9HUk9XVEhfRkFDVE9SID0gMgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgbWluX2JhdGNoX3NpemU9MSwKICAgICAgICAgICAgICAgbWF4X2JhdGNoX3NpemU9MTAwMCwKICAgICAgICAgICAgICAgdGFyZ2V0X2JhdGNoX292ZXJoZWFkPS4xLAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2Vjcz0xLAogICAgICAgICAgICAgICBjbG9jaz10aW1lLnRpbWUpOgogICAgaWYgbWluX2JhdGNoX3NpemUgPiBtYXhfYmF0Y2hfc2l6ZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTWluaW11bSAoJXMpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtICglcykiICUgKAogICAgICAgICAgbWluX2JhdGNoX3NpemUsIG1heF9iYXRjaF9zaXplKSkKICAgIGlmIHRhcmdldF9iYXRjaF9vdmVyaGVhZCBhbmQgbm90IDAgPCB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgPD0gMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGFyZ2V0X2JhdGNoX292ZXJoZWFkICglcykgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEiICUgKAogICAgICAgICAgdGFyZ2V0X2JhdGNoX292ZXJoZWFkKSkKICAgIGlmIHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzIGFuZCB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyAoJXMpIG11c3QgYmUgcG9zaXRpdmUiICUgKAogICAgICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpKQogICAgaWYgbWF4KDAsIHRhcmdldF9iYXRjaF9vdmVyaGVhZCwgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpID09IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkF0IGxlYXN0IG9uZSBvZiB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgb3IgIgogICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyBtdXN0IGJlIHBvc2l0aXZlLiIpCiAgICBzZWxmLl9taW5fYmF0Y2hfc2l6ZSA9IG1pbl9iYXRjaF9zaXplCiAgICBzZWxmLl9tYXhfYmF0Y2hfc2l6ZSA9IG1heF9iYXRjaF9zaXplCiAgICBzZWxmLl90YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgPSB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQKICAgIHNlbGYuX3RhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzID0gdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MKICAgIHNlbGYuX2Nsb2NrID0gY2xvY2sKICAgIHNlbGYuX2RhdGEgPSBbXQogICAgc2VsZi5faWdub3JlX25leHRfdGltaW5nID0gRmFsc2UKICAgIHNlbGYuX3NpemVfZGlzdHJpYnV0aW9uID0gTWV0cmljcy5kaXN0cmlidXRpb24oCiAgICAgICAgJ0JhdGNoRWxlbWVudHMnLCAnYmF0Y2hfc2l6ZScpCiAgICBzZWxmLl90aW1lX2Rpc3RyaWJ1dGlvbiA9IE1ldHJpY3MuZGlzdHJpYnV0aW9uKAogICAgICAgICdCYXRjaEVsZW1lbnRzJywgJ21zZWNfcGVyX2JhdGNoJykKICAgICMgQmVhbSBkaXN0cmlidXRpb25zIG9ubHkgYWNjZXB0IGludGVnZXIgdmFsdWVzLCBzbyB3ZSB1c2UgdGhpcyB0bwogICAgIyBhY2N1bXVsYXRlIHVuZGVyLXJlcG9ydGVkIHZhbHVlcyB1bnRpbCB0aGV5IGFkZCB1cCB0byB3aG9sZSBtaWxsaXNlY29uZHMuCiAgICAjIChNaWxsaXNlY29uZHMgYXJlIGNob3NlbiBiZWNhdXNlIHRoYXQncyBjb252ZW50aW9uYWxseSB1c2VkIGVsc2V3aGVyZSBpbgogICAgIyBwcm9maWxpbmctc3R5bGUgY291bnRlcnMuKQogICAgc2VsZi5fcmVtYWluZGVyX21zZWNzID0gMAoKICBkZWYgaWdub3JlX25leHRfdGltaW5nKHNlbGYpOgogICAgIiIiQ2FsbCB0byBpbmRpY2F0ZSB0aGUgbmV4dCB0aW1pbmcgc2hvdWxkIGJlIGlnbm9yZWQuCgogICAgRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBlbWl0IG9mIGEgUGFyRG8gb3BlcmF0aW9uIGlzIGtub3duIHRvIGJlIGFub21hbG91cwogICAgZHVlIHRvIHNldHVwIHRoYXQgbWF5IG9jY3VyLgogICAgIiIiCiAgICBzZWxmLl9pZ25vcmVfbmV4dF90aW1pbmcgPSBGYWxzZQoKICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgogIGRlZiByZWNvcmRfdGltZShzZWxmLCBiYXRjaF9zaXplKToKICAgIHN0YXJ0ID0gc2VsZi5fY2xvY2soKQogICAgeWllbGQKICAgIGVsYXBzZWQgPSBzZWxmLl9jbG9jaygpIC0gc3RhcnQKICAgIGVsYXBzZWRfbXNlYyA9IDFlMyAqIGVsYXBzZWQgKyBzZWxmLl9yZW1haW5kZXJfbXNlY3MKICAgIHNlbGYuX3NpemVfZGlzdHJpYnV0aW9uLnVwZGF0ZShiYXRjaF9zaXplKQogICAgc2VsZi5fdGltZV9kaXN0cmlidXRpb24udXBkYXRlKGludChlbGFwc2VkX21zZWMpKQogICAgc2VsZi5fcmVtYWluZGVyX21zZWNzID0gZWxhcHNlZF9tc2VjIC0gaW50KGVsYXBzZWRfbXNlYykKICAgIGlmIHNlbGYuX2lnbm9yZV9uZXh0X3RpbWluZzoKICAgICAgc2VsZi5faWdub3JlX25leHRfdGltaW5nID0gRmFsc2UKICAgIGVsc2U6CiAgICAgIHNlbGYuX2RhdGEuYXBwZW5kKChiYXRjaF9zaXplLCBlbGFwc2VkKSkKICAgICAgaWYgbGVuKHNlbGYuX2RhdGEpID49IHNlbGYuX01BWF9EQVRBX1BPSU5UUzoKICAgICAgICBzZWxmLl90aGluX2RhdGEoKQoKICBkZWYgX3RoaW5fZGF0YShzZWxmKToKICAgIHNvcnRlZF9kYXRhID0gc29ydGVkKHNlbGYuX2RhdGEpCiAgICBvZGRfb25lX291dCA9IFtzb3J0ZWRfZGF0YVstMV1dIGlmIGxlbihzb3J0ZWRfZGF0YSkgJSAyID09IDEgZWxzZSBbXQogICAgIyBTb3J0IHRoZSBwYWlycyBieSBob3cgZGlmZmVyZW50IHRoZXkgYXJlLgogICAgcGFpcnMgPSBzb3J0ZWQoemlwKHNvcnRlZF9kYXRhWzo6Ml0sIHNvcnRlZF9kYXRhWzE6OjJdKSwKICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgKCh4MSwgXzEpLCAoeDIsIF8yKSk6IHgyIC8geDEpCiAgICAjIEtlZXAgdGhlIHRvcCAxLzMgbW9zdCBkaWZmZXJlbnQgcGFpcnMsIGF2ZXJhZ2UgdGhlIHRvcCAyLzMgbW9zdCBzaW1pbGFyLgogICAgdGhyZXNob2xkID0gMiAqIGxlbihwYWlycykgLyAzCiAgICBzZWxmLl9kYXRhID0gKAogICAgICAgIGxpc3Qoc3VtKHBhaXJzW3RocmVzaG9sZDpdLCAoKSkpCiAgICAgICAgKyBbKCh4MSArIHgyKSAvIDIuMCwgKHQxICsgdDIpIC8gMi4wKQogICAgICAgICAgIGZvciAoeDEsIHQxKSwgKHgyLCB0MikgaW4gcGFpcnNbOnRocmVzaG9sZF1dCiAgICAgICAgKyBvZGRfb25lX291dCkKCiAgZGVmIG5leHRfYmF0Y2hfc2l6ZShzZWxmKToKICAgIGlmIHNlbGYuX21pbl9iYXRjaF9zaXplID09IHNlbGYuX21heF9iYXRjaF9zaXplOgogICAgICByZXR1cm4gc2VsZi5fbWluX2JhdGNoX3NpemUKICAgIGVsaWYgbGVuKHNlbGYuX2RhdGEpIDwgMToKICAgICAgcmV0dXJuIHNlbGYuX21pbl9iYXRjaF9zaXplCiAgICBlbGlmIGxlbihzZWxmLl9kYXRhKSA8IDI6CiAgICAgICMgRm9yY2Ugc29tZSB2YXJpZXR5IHNvIHdlIGhhdmUgZGlzdGluY3QgYmF0Y2ggc2l6ZXMgb24gd2hpY2ggdG8gZG8KICAgICAgIyBsaW5lYXIgcmVncmVzc2lvbiBiZWxvdy4KICAgICAgcmV0dXJuIGludChtYXgoCiAgICAgICAgICBtaW4oc2VsZi5fbWF4X2JhdGNoX3NpemUsCiAgICAgICAgICAgICAgc2VsZi5fbWluX2JhdGNoX3NpemUgKiBzZWxmLl9NQVhfR1JPV1RIX0ZBQ1RPUiksCiAgICAgICAgICBzZWxmLl9taW5fYmF0Y2hfc2l6ZSArIDEpKQoKICAgICMgTGluZWFyIHJlZ3Jlc3Npb24gZm9yIHkgPSBhICsgYngsIHdoZXJlIHggaXMgYmF0Y2ggc2l6ZSBhbmQgeSBpcyB0aW1lLgogICAgeHMsIHlzID0gemlwKCpzZWxmLl9kYXRhKQogICAgbiA9IGZsb2F0KGxlbihzZWxmLl9kYXRhKSkKICAgIHhiYXIgPSBzdW0oeHMpIC8gbgogICAgeWJhciA9IHN1bSh5cykgLyBuCiAgICBiID0gKHN1bShbKHggLSB4YmFyKSAqICh5IC0geWJhcikgZm9yIHgsIHkgaW4gc2VsZi5fZGF0YV0pCiAgICAgICAgIC8gc3VtKFsoeCAtIHhiYXIpKioyIGZvciB4IGluIHhzXSkpCiAgICBhID0geWJhciAtIGIgKiB4YmFyCgogICAgIyBBdm9pZCBub25zZW5zaWNhbCBvciBkaXZpc2lvbi1ieS16ZXJvIGVycm9ycyBiZWxvdyBkdWUgdG8gbm9pc2UuCiAgICBhID0gbWF4KGEsIDFlLTEwKQogICAgYiA9IG1heChiLCAxZS0yMCkKCiAgICBsYXN0X2JhdGNoX3NpemUgPSBzZWxmLl9kYXRhWy0xXVswXQogICAgY2FwID0gbWluKGxhc3RfYmF0Y2hfc2l6ZSAqIHNlbGYuX01BWF9HUk9XVEhfRkFDVE9SLCBzZWxmLl9tYXhfYmF0Y2hfc2l6ZSkKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjczoKICAgICAgIyBTb2x1dGlvbiB0byBhICsgYip4ID0gc2VsZi5fdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MuCiAgICAgIGNhcCA9IG1pbihjYXAsIChzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyAtIGEpIC8gYikKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ6CiAgICAgICMgU29sdXRpb24gdG8gYSAvIChhICsgYip4KSA9IHNlbGYuX3RhcmdldF9iYXRjaF9vdmVyaGVhZC4KICAgICAgY2FwID0gbWluKGNhcCwgKGEgLyBiKSAqICgxIC8gc2VsZi5fdGFyZ2V0X2JhdGNoX292ZXJoZWFkIC0gMSkpCgogICAgIyBBdm9pZCBnZXR0aW5nIHN0dWNrIGF0IG1pbl9iYXRjaF9zaXplLgogICAgaml0dGVyID0gbGVuKHNlbGYuX2RhdGEpICUgMgogICAgcmV0dXJuIGludChtYXgoc2VsZi5fbWluX2JhdGNoX3NpemUgKyBqaXR0ZXIsIGNhcCkpCgoKY2xhc3MgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4oRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGJhdGNoX3NpemVfZXN0aW1hdG9yKToKICAgIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yID0gYmF0Y2hfc2l6ZV9lc3RpbWF0b3IKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2JhdGNoID0gW10KICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQogICAgIyBUaGUgZmlyc3QgZW1pdCBvZnRlbiBpbnZvbHZlcyBub24tdHJpdmlhbCBzZXR1cC4KICAgIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLmlnbm9yZV9uZXh0X3RpbWluZygpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5fYmF0Y2guYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fYmF0Y2gpID49IHNlbGYuX2JhdGNoX3NpemU6CiAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgeWllbGQgc2VsZi5fYmF0Y2gKICAgICAgc2VsZi5fYmF0Y2ggPSBbXQogICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBpZiBzZWxmLl9iYXRjaDoKICAgICAgd2l0aCBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5yZWNvcmRfdGltZShzZWxmLl9iYXRjaF9zaXplKToKICAgICAgICB5aWVsZCB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShzZWxmLl9iYXRjaCkKICAgICAgc2VsZi5fYmF0Y2ggPSBOb25lCiAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQoKCmNsYXNzIF9XaW5kb3dBd2FyZUJhdGNoaW5nRG9GbihEb0ZuKToKCiAgX01BWF9MSVZFX1dJTkRPV1MgPSAxMAoKICBkZWYgX19pbml0X18oc2VsZiwgYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBiYXRjaF9zaXplX2VzdGltYXRvcgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fYmF0Y2hlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKICAgICMgVGhlIGZpcnN0IGVtaXQgb2Z0ZW4gaW52b2x2ZXMgbm9uLXRyaXZpYWwgc2V0dXAuCiAgICBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5pZ25vcmVfbmV4dF90aW1pbmcoKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICBzZWxmLl9iYXRjaGVzW3dpbmRvd10uYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fYmF0Y2hlc1t3aW5kb3ddKSA+PSBzZWxmLl9iYXRjaF9zaXplOgogICAgICB3aXRoIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLnJlY29yZF90aW1lKHNlbGYuX2JhdGNoX3NpemUpOgogICAgICAgIHlpZWxkIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgICAgICAgIHNlbGYuX2JhdGNoZXNbd2luZG93XSwgd2luZG93Lm1heF90aW1lc3RhbXAoKSwgKHdpbmRvdywpKQogICAgICBkZWwgc2VsZi5fYmF0Y2hlc1t3aW5kb3ddCiAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQogICAgZWxpZiBsZW4oc2VsZi5fYmF0Y2hlcykgPiBzZWxmLl9NQVhfTElWRV9XSU5ET1dTOgogICAgICB3aW5kb3csIF8gPSBzb3J0ZWQoCiAgICAgICAgICBzZWxmLl9iYXRjaGVzLml0ZW1zKCksCiAgICAgICAgICBrZXk9bGFtYmRhIHdpbmRvd19iYXRjaDogbGVuKHdpbmRvd19iYXRjaFsxXSksCiAgICAgICAgICByZXZlcnNlPVRydWUpWzBdCiAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgeWllbGQgd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSgKICAgICAgICAgICAgc2VsZi5fYmF0Y2hlc1t3aW5kb3ddLCB3aW5kb3cubWF4X3RpbWVzdGFtcCgpLCAod2luZG93LCkpCiAgICAgIGRlbCBzZWxmLl9iYXRjaGVzW3dpbmRvd10KICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZSgpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgZm9yIHdpbmRvdywgYmF0Y2ggaW4gc2VsZi5fYmF0Y2hlcy5pdGVtcygpOgogICAgICBpZiBiYXRjaDoKICAgICAgICB3aXRoIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLnJlY29yZF90aW1lKHNlbGYuX2JhdGNoX3NpemUpOgogICAgICAgICAgeWllbGQgd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSgKICAgICAgICAgICAgICBiYXRjaCwgd2luZG93Lm1heF90aW1lc3RhbXAoKSwgKHdpbmRvdywpKQogICAgc2VsZi5fYmF0Y2hlcyA9IE5vbmUKICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhUKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5MaXN0W1RdKQpjbGFzcyBCYXRjaEVsZW1lbnRzKFBUcmFuc2Zvcm0pOgogICIiIkEgVHJhbnNmb3JtIHRoYXQgYmF0Y2hlcyBlbGVtZW50cyBmb3IgYW1vcnRpemVkIHByb2Nlc3NpbmcuCgogIFRoaXMgdHJhbnNmb3JtIGlzIGRlc2lnbmVkIHRvIHByZWNlZGUgb3BlcmF0aW9ucyB3aG9zZSBwcm9jZXNzaW5nIGNvc3QKICBpcyBvZiB0aGUgZm9ybQoKICAgICAgdGltZSA9IGZpeGVkX2Nvc3QgKyBudW1fZWxlbWVudHMgKiBwZXJfZWxlbWVudF9jb3N0CgogIHdoZXJlIHRoZSBwZXIgZWxlbWVudCBjb3N0IGlzIChvZnRlbiBzaWduaWZpY2FudGx5KSBzbWFsbGVyIHRoYW4gdGhlIGZpeGVkCiAgY29zdCBhbmQgY291bGQgYmUgYW1vcnRpemVkIG92ZXIgbXVsdGlwbGUgZWxlbWVudHMuICBJdCBjb25zdW1lcyBhIFBDb2xsZWN0aW9uCiAgb2YgZWxlbWVudCB0eXBlIFQgYW5kIHByb2R1Y2VzIGEgUENvbGxlY3Rpb24gb2YgZWxlbWVudCB0eXBlIExpc3RbVF0uCgogIFRoaXMgdHJhbnNmb3JtIGF0dGVtcHRzIHRvIGZpbmQgdGhlIGJlc3QgYmF0Y2ggc2l6ZSBiZXR3ZWVuIHRoZSBtaW5pbWltCiAgYW5kIG1heGltdW0gcGFyYW1ldGVycyBieSBwcm9maWxpbmcgdGhlIHRpbWUgdGFrZW4gYnkgKGZ1c2VkKSBkb3duc3RyZWFtCiAgb3BlcmF0aW9ucy4gRm9yIGEgZml4ZWQgYmF0Y2ggc2l6ZSwgc2V0IHRoZSBtaW4gYW5kIG1heCB0byBiZSBlcXVhbC4KCiAgRWxlbWVudHMgYXJlIGJhdGNoZWQgcGVyLXdpbmRvdyBhbmQgYmF0Y2hlcyBlbWl0dGVkIGluIHRoZSB3aW5kb3cKICBjb3JyZXNwb25kaW5nIHRvIGl0cyBjb250ZW50cy4KCiAgQXJnczoKICAgIG1pbl9iYXRjaF9zaXplOiAob3B0aW9uYWwpIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgZWxlbWVudHMgcGVyIGJhdGNoCiAgICBtYXhfYmF0Y2hfc2l6ZTogKG9wdGlvbmFsKSB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgZWxlbWVudHMgcGVyIGJhdGNoCiAgICB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ6IChvcHRpb25hbCkgYSB0YXJnZXQgZm9yIGZpeGVkX2Nvc3QgLyB0aW1lLAogICAgICAgIGFzIHVzZWQgaW4gdGhlIGZvcm11bGEgYWJvdmUKICAgIHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzOiAob3B0aW9uYWwpIGEgdGFyZ2V0IGZvciB0b3RhbCB0aW1lIHBlciBidW5kbGUsCiAgICAgICAgaW4gc2Vjb25kcwogICAgY2xvY2s6IChvcHRpb25hbCkgYW4gYWx0ZXJuYXRpdmUgdG8gdGltZS50aW1lIGZvciBtZWFzdXJpbmcgdGhlIGNvc3Qgb2YKICAgICAgICBkb253c3RyZWFtIG9wZXJhdGlvbnMgKG1vc3RseSBmb3IgdGVzdGluZykKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIG1pbl9iYXRjaF9zaXplPTEsCiAgICAgICAgICAgICAgIG1heF9iYXRjaF9zaXplPTEwMDAwLAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ9LjA1LAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2Vjcz0xLAogICAgICAgICAgICAgICBjbG9jaz10aW1lLnRpbWUpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBfQmF0Y2hTaXplRXN0aW1hdG9yKAogICAgICAgIG1pbl9iYXRjaF9zaXplPW1pbl9iYXRjaF9zaXplLAogICAgICAgIG1heF9iYXRjaF9zaXplPW1heF9iYXRjaF9zaXplLAogICAgICAgIHRhcmdldF9iYXRjaF9vdmVyaGVhZD10YXJnZXRfYmF0Y2hfb3ZlcmhlYWQsCiAgICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M9dGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MsCiAgICAgICAgY2xvY2s9Y2xvY2spCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgaWYgZ2V0YXR0cihwY29sbC5waXBlbGluZS5ydW5uZXIsICdpc19zdHJlYW1pbmcnLCBGYWxzZSk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlJlcXVpcmVzIHN0YXRlZnVsIHByb2Nlc3NpbmcgKEJFQU0tMjY4NykiKQogICAgZWxpZiBwY29sbC53aW5kb3dpbmcuaXNfZGVmYXVsdCgpOgogICAgICAjIFRoaXMgaXMgdGhlIHNhbWUgbG9naWMgYXMgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4sIGJ1dCBvcHRpbWl6ZWQKICAgICAgIyBmb3IgdGhhdCBzaW1wbGVyIGNhc2UuCiAgICAgIHJldHVybiBwY29sbCB8IFBhckRvKF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuKAogICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpKQogICAgZWxzZToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuKHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yKSkKCgpjbGFzcyBfSWRlbnRpdHlXaW5kb3dGbihOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIldpbmRvd2luZyBmdW5jdGlvbiB0aGF0IHByZXNlcnZlcyBleGlzdGluZyB3aW5kb3dzLgoKICBUbyBiZSB1c2VkIGludGVybmFsbHkgd2l0aCB0aGUgUmVzaHVmZmxlIHRyYW5zZm9ybS4KICBXaWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHVzZWQgYWZ0ZXIgRG9GbnMgdGhhdCByZXR1cm4gVGltZXN0YW1wZWRWYWx1ZQogIGVsZW1lbnRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93X2NvZGVyKToKICAgICIiIkNyZWF0ZSBhIG5ldyBXaW5kb3dGbiB3aXRoIGNvbXBhdGlibGUgY29kZXIuCiAgICBUbyBiZSBhcHBsaWVkIHRvIFBDb2xsZWN0aW9ucyB3aXRoIHdpbmRvd3MgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZQogICAgZ2l2ZW4gY29kZXIuCgogICAgQXJndW1lbnRzOgogICAgICB3aW5kb3dfY29kZXI6IGNvZGVycy5Db2RlciBvYmplY3QgdG8gYmUgdXNlZCBvbiB3aW5kb3dzLgogICAgIiIiCiAgICBzdXBlcihfSWRlbnRpdHlXaW5kb3dGbiwgc2VsZikuX19pbml0X18oKQogICAgaWYgd2luZG93X2NvZGVyIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dpbmRvd19jb2RlciBzaG91bGQgbm90IGJlIE5vbmUnKQogICAgc2VsZi5fd2luZG93X2NvZGVyID0gd2luZG93X2NvZGVyCgogIGRlZiBhc3NpZ24oc2VsZiwgYXNzaWduX2NvbnRleHQpOgogICAgaWYgYXNzaWduX2NvbnRleHQud2luZG93IGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnYXNzaWduX2NvbnRleHQud2luZG93IHNob3VsZCBub3QgYmUgTm9uZS4gJwogICAgICAgICAgJ1RoaXMgbWlnaHQgYmUgZHVlIHRvIGEgRG9GbiByZXR1cm5pbmcgYSBUaW1lc3RhbXBlZFZhbHVlLicpCiAgICByZXR1cm4gW2Fzc2lnbl9jb250ZXh0LndpbmRvd10KCiAgZGVmIGdldF93aW5kb3dfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fd2luZG93X2NvZGVyCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCBWXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgVl0pCmNsYXNzIFJlc2h1ZmZsZVBlcktleShQVHJhbnNmb3JtKToKICAiIiJQVHJhbnNmb3JtIHRoYXQgcmV0dXJucyBhIFBDb2xsZWN0aW9uIGVxdWl2YWxlbnQgdG8gaXRzIGlucHV0LAogIGJ1dCBvcGVyYXRpb25hbGx5IHByb3ZpZGVzIHNvbWUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiBhIEdyb3VwQnlLZXksCiAgaW4gcGFydGljdWxhciBwcmV2ZW50aW5nIGZ1c2lvbiBvZiB0aGUgc3Vycm91bmRpbmcgdHJhbnNmb3JtcywKICBjaGVja3BvaW50aW5nLCBhbmQgZGVkdXBsaWNhdGlvbiBieSBpZC4KCiAgUmVzaHVmZmxlUGVyS2V5IGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBjbGFzcyBSZWlmeVRpbWVzdGFtcHMoRG9Gbik6CiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtKToKICAgICAgICB5aWVsZCBlbGVtZW50WzBdLCBUaW1lc3RhbXBlZFZhbHVlKGVsZW1lbnRbMV0sIHRpbWVzdGFtcCkKCiAgICBjbGFzcyBSZXN0b3JlVGltZXN0YW1wcyhEb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PURvRm4uV2luZG93UGFyYW0pOgogICAgICAgICMgUGFzcyB0aGUgY3VycmVudCB3aW5kb3cgc2luY2UgX0lkZW50aXR5V2luZG93Rm4gd291bGRuJ3Qga25vdyBob3cKICAgICAgICAjIHRvIGdlbmVyYXRlIGl0LgogICAgICAgIHlpZWxkIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgICAgICAgIChlbGVtZW50WzBdLCBlbGVtZW50WzFdLnZhbHVlKSwgZWxlbWVudFsxXS50aW1lc3RhbXAsIFt3aW5kb3ddKQoKICAgIHdpbmRvd2luZ19zYXZlZCA9IHBjb2xsLndpbmRvd2luZwogICAgIyBUaGUgbGludGVyIGlzIGNvbmZ1c2VkLgogICAgIyBweWxpbnQ6IGRpc2FibGU9YWJzdHJhY3QtY2xhc3MtaW5zdGFudGlhdGVkCiAgICByZXN1bHQgPSAocGNvbGwKICAgICAgICAgICAgICB8IFBhckRvKFJlaWZ5VGltZXN0YW1wcygpKQogICAgICAgICAgICAgIHwgJ0lkZW50aXR5V2luZG93JyA+PiBXaW5kb3dJbnRvKAogICAgICAgICAgICAgICAgICBfSWRlbnRpdHlXaW5kb3dGbigKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd2luZ19zYXZlZC53aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkpLAogICAgICAgICAgICAgICAgICB0cmlnZ2VyPUFmdGVyQ291bnQoMSksCiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlPUFjY3VtdWxhdGlvbk1vZGUuRElTQ0FSRElORywKICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyPVRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FQVJMSUVTVCwKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIHwgR3JvdXBCeUtleSgpCiAgICAgICAgICAgICAgfCAnRXhwYW5kSXRlcmFibGUnID4+IEZsYXRNYXAoCiAgICAgICAgICAgICAgICAgIGxhbWJkYSBlOiBbKGVbMF0sIHZhbHVlKSBmb3IgdmFsdWUgaW4gZVsxXV0pCiAgICAgICAgICAgICAgfCBQYXJEbyhSZXN0b3JlVGltZXN0YW1wcygpKSkKICAgIHJlc3VsdC5fd2luZG93aW5nID0gd2luZG93aW5nX3NhdmVkCiAgICByZXR1cm4gcmVzdWx0CgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKFQpCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoVCkKY2xhc3MgUmVzaHVmZmxlKFBUcmFuc2Zvcm0pOgogICIiIlBUcmFuc2Zvcm0gdGhhdCByZXR1cm5zIGEgUENvbGxlY3Rpb24gZXF1aXZhbGVudCB0byBpdHMgaW5wdXQsCiAgYnV0IG9wZXJhdGlvbmFsbHkgcHJvdmlkZXMgc29tZSBvZiB0aGUgc2lkZSBlZmZlY3RzIG9mIGEgR3JvdXBCeUtleSwKICBpbiBwYXJ0aWN1bGFyIHByZXZlbnRpbmcgZnVzaW9uIG9mIHRoZSBzdXJyb3VuZGluZyB0cmFuc2Zvcm1zLAogIGNoZWNrcG9pbnRpbmcsIGFuZCBkZWR1cGxpY2F0aW9uIGJ5IGlkLgoKICBSZXNodWZmbGUgYWRkcyBhIHRlbXBvcmFyeSByYW5kb20ga2V5IHRvIGVhY2ggZWxlbWVudCwgcGVyZm9ybXMgYQogIFJlc2h1ZmZsZVBlcktleSwgYW5kIGZpbmFsbHkgcmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGtleS4KCiAgUmVzaHVmZmxlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gKHBjb2xsCiAgICAgICAgICAgIHwgJ0FkZFJhbmRvbUtleXMnID4+IE1hcChsYW1iZGEgdDogKHJhbmRvbS5nZXRyYW5kYml0cygzMiksIHQpKQogICAgICAgICAgICB8IFJlc2h1ZmZsZVBlcktleSgpCiAgICAgICAgICAgIHwgJ1JlbW92ZVJhbmRvbUtleXMnID4+IE1hcChsYW1iZGEgdDogdFsxXSkpCn1y7AIAAChYFgAAAEJhdGNoRWxlbWVudHMuX19pbml0X19YAwAAAGRlZk2eAU2qAYdYFQAAAENvR3JvdXBCeUtleS5fX2luaXRfX1gDAAAAZGVmS2xLcYdYBgAAAEt2U3dhcFgDAAAAZGVmS7JLtYdYGgAAAF9JZGVudGl0eVdpbmRvd0ZuLl9faW5pdF9fWAMAAABkZWZNvwFNywGHWB8AAABfQmF0Y2hTaXplRXN0aW1hdG9yLnJlY29yZF90aW1lWAMAAABkZWZL8k0BAYdYMAAAAENvR3JvdXBCeUtleS5leHBhbmQuX21lcmdlX3RhZ2dlZF92YWxzX3VuZGVyX2tleVgDAAAAZGVmS4RLi4dYFAAAAEJhdGNoRWxlbWVudHMuZXhwYW5kWAMAAABkZWZNqwFNtQGHWCUAAABfV2luZG93QXdhcmVCYXRjaGluZ0RvRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNWwFNYAGHWA8AAABSZXNodWZmbGVQZXJLZXlYBQAAAGNsYXNzTdcBTQACh1gcAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5fX2luaXRfX1gDAAAAZGVmS8dL6YdYBgAAAFZhbHVlc1gDAAAAZGVmS61LsIdYEwAAAENvR3JvdXBCeUtleS5leHBhbmRYAwAAAGRlZkt6S6aHWBgAAABfSWRlbnRpdHlXaW5kb3dGbi5hc3NpZ25YAwAAAGRlZk3MAU3SAYdYBAAAAEtleXNYAwAAAGRlZkuoS6uHWCMAAABfQmF0Y2hTaXplRXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZVgDAAAAZGVmTRABTTgBh1geAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5fdGhpbl9kYXRhWAMAAABkZWZNAgFNDwGHWCYAAABfV2luZG93QXdhcmVCYXRjaGluZ0RvRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTXQBTXwBh1gwAAAAUmVzaHVmZmxlUGVyS2V5LmV4cGFuZC5SZXN0b3JlVGltZXN0YW1wcy5wcm9jZXNzWAMAAABkZWZN6AFN7QGHWBEAAABfSWRlbnRpdHlXaW5kb3dGblgFAAAAY2xhc3NNtwFN1QGHWCYAAABSZXNodWZmbGVQZXJLZXkuZXhwYW5kLlJlaWZ5VGltZXN0YW1wc1gFAAAAY2xhc3NN4wFN5gGHWCMAAABDb0dyb3VwQnlLZXkuX2V4dHJhY3RfaW5wdXRfcHZhbHVlc1gDAAAAZGVmS3JLeYdYDAAAAENvR3JvdXBCeUtleVgFAAAAY2xhc3NLP0umh1gYAAAAX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuWAUAAABjbGFzc01UAU18AYdYEwAAAF9CYXRjaFNpemVFc3RpbWF0b3JYBQAAAGNsYXNzS8BNOAGHWA0AAABCYXRjaEVsZW1lbnRzWAUAAABjbGFzc01+AU21AYdYJgAAAF9CYXRjaFNpemVFc3RpbWF0b3IuaWdub3JlX25leHRfdGltaW5nWAMAAABkZWZL6kvxh1ghAAAAX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuLl9faW5pdF9fWAMAAABkZWZNWAFNWgGHWCIAAABfR2xvYmFsV2luZG93c0JhdGNoaW5nRG9Gbi5wcm9jZXNzWAMAAABkZWZNRAFNSwGHWCcAAABfR2xvYmFsV2luZG93c0JhdGNoaW5nRG9Gbi5zdGFydF9idW5kbGVYAwAAAGRlZk0+AU1DAYdYCQAAAFJlc2h1ZmZsZVgFAAAAY2xhc3NNAgJNFQKHWBoAAABfR2xvYmFsV2luZG93c0JhdGNoaW5nRG9GblgFAAAAY2xhc3NNOgFNUgGHWCAAAABfV2luZG93QXdhcmVCYXRjaGluZ0RvRm4ucHJvY2Vzc1gDAAAAZGVmTWEBTXMBh1gjAAAAX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4uX19pbml0X19YAwAAAGRlZk07AU09AYdYFgAAAFJlc2h1ZmZsZVBlcktleS5leHBhbmRYAwAAAGRlZk3iAU0AAodYLgAAAFJlc2h1ZmZsZVBlcktleS5leHBhbmQuUmVpZnlUaW1lc3RhbXBzLnByb2Nlc3NYAwAAAGRlZk3kAU3mAYdYEAAAAFJlc2h1ZmZsZS5leHBhbmRYAwAAAGRlZk0QAk0VAodYEAAAAFJlbW92ZUR1cGxpY2F0ZXNYAwAAAGRlZku3S76HWCgAAABSZXNodWZmbGVQZXJLZXkuZXhwYW5kLlJlc3RvcmVUaW1lc3RhbXBzWAUAAABjbGFzc03nAU3tAYdYIgAAAF9JZGVudGl0eVdpbmRvd0ZuLmdldF93aW5kb3dfY29kZXJYAwAAAGRlZk3TAU3VAYdYKAAAAF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLmZpbmlzaF9idW5kbGVYAwAAAGRlZk1MAU1SAYdYKAAAAENvR3JvdXBCeUtleS5leHBhbmQuX3BhaXJfdGFnX3dpdGhfdmFsdWVYAwAAAGRlZkt9S4CHdX1y7QIAAChYCQAAAFJlc2h1ZmZsZVgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlscu4CAABYEwAAAENvR3JvdXBCeUtleS5leHBhbmRq7gIAAFgMAAAAQ29Hcm91cEJ5S2V5au4CAABYBgAAAEt2U3dhcGruAgAAWAQAAABLZXlzau4CAABYDQAAAEJhdGNoRWxlbWVudHNq7gIAAFgUAAAAQmF0Y2hFbGVtZW50cy5leHBhbmRq7gIAAFgQAAAAUmVzaHVmZmxlLmV4cGFuZGruAgAAWAYAAABWYWx1ZXNq7gIAAHVoilgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlscu8CAACFgXLwAgAAfXLxAgAAYnRy8gIAAFUfYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbChYOgsAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBjbGFzc2VzIHVzZWQgYnkgdGhlIERpcmVjdFJ1bm5lci4KCkZvciBpbnRlcm5hbCB1c2Ugb25seS4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKCmNsYXNzIFRyYW5zZm9ybVJlc3VsdChvYmplY3QpOgogICIiIlJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIEFwcGxpZWRQVHJhbnNmb3JtIHdpdGggYSBUcmFuc2Zvcm1FdmFsdWF0b3IuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm1fZXZhbHVhdG9yLCB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcywKICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcywgY291bnRlcnMsIGtleWVkX3dhdGVybWFya19ob2xkcywKICAgICAgICAgICAgICAgdW5kZWNsYXJlZF90YWdfdmFsdWVzPU5vbmUpOgogICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9hcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMgPSB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcwogICAgc2VsZi51bnByb2Nlc3NlZF9idW5kbGVzID0gdW5wcm9jZXNzZWRfYnVuZGxlcwogICAgc2VsZi5jb3VudGVycyA9IGNvdW50ZXJzCiAgICAjIE1hcHBpbmcgb2Yga2V5IC0+IGVhcmxpZXN0IGhvbGQgdGltZXN0YW1wIG9yIE5vbmUuICBLZXlzIHNob3VsZCBiZQogICAgIyBzdHJpbmdzIG9yIE5vbmUuCiAgICAjCiAgICAjIEZvciBlYWNoIGtleSwgd2UgcmVjZWl2ZSBhcyBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZSB0aGUgZWFybGllc3QKICAgICMgd2F0ZXJtYXJrIGhvbGQgZm9yIHRoYXQga2V5ICh0aGUga2V5IGNhbiBiZSBOb25lIGZvciBnbG9iYWwgc3RhdGUpLCBwYXN0CiAgICAjIHdoaWNoIHRoZSBvdXRwdXQgd2F0ZXJtYXJrIGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwIHdpbGwgbm90CiAgICAjIGFkdmFuY2UuICBJZiB0aGUgdmFsdWUgaXMgTm9uZSBvciB1dGlscy50aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCwgdGhlCiAgICAjIHdhdGVybWFyayBob2xkIHdpbGwgYmUgcmVtb3ZlZC4KICAgIHNlbGYua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzID0ga2V5ZWRfd2F0ZXJtYXJrX2hvbGRzIG9yIHt9CiAgICAjIE9ubHkgdXNlZCB3aGVuIGNhY2hpbmcgKG1hdGVyaWFsaXppbmcpIGFsbCB2YWx1ZXMgaXMgcmVxdWVzdGVkLgogICAgc2VsZi51bmRlY2xhcmVkX3RhZ192YWx1ZXMgPSB1bmRlY2xhcmVkX3RhZ192YWx1ZXMKICAgICMgUG9wdWxhdGVkIGJ5IHRoZSBUcmFuc2Zvcm1FeGVjdXRvci4KICAgIHNlbGYubG9naWNhbF9tZXRyaWNfdXBkYXRlcyA9IE5vbmUKCiAgICBzdGVwX2NvbnRleHQgPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKICAgIHNlbGYucGFydGlhbF9rZXllZF9zdGF0ZSA9IHN0ZXBfY29udGV4dC5wYXJ0aWFsX2tleWVkX3N0YXRlCgoKY2xhc3MgVGltZXJGaXJpbmcob2JqZWN0KToKICAiIiJBIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGZpcmVkIHRpbWVyLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RlZF9rZXksIHdpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLmVuY29kZWRfa2V5ID0gZW5jb2RlZF9rZXkKICAgIHNlbGYud2luZG93ID0gd2luZG93CiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLnRpbWVfZG9tYWluID0gdGltZV9kb21haW4KICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCgoKY2xhc3MgS2V5ZWRXb3JrSXRlbShvYmplY3QpOgogICIiIkEga2V5ZWQgaXRlbSB0aGF0IGNhbiBlaXRoZXIgYmUgYSB0aW1lciBmaXJpbmcgb3IgYSBsaXN0IG9mIGVsZW1lbnRzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGVkX2tleSwgdGltZXJfZmlyaW5ncz1Ob25lLCBlbGVtZW50cz1Ob25lKToKICAgIHNlbGYuZW5jb2RlZF9rZXkgPSBlbmNvZGVkX2tleQogICAgc2VsZi50aW1lcl9maXJpbmdzID0gdGltZXJfZmlyaW5ncyBvciBbXQogICAgc2VsZi5lbGVtZW50cyA9IGVsZW1lbnRzIG9yIFtdCn1y8wIAAChYDwAAAFRyYW5zZm9ybVJlc3VsdFgFAAAAY2xhc3NLGks0h1gUAAAAVGltZXJGaXJpbmcuX19pbml0X19YAwAAAGRlZks5Sz+HWBYAAABLZXllZFdvcmtJdGVtLl9faW5pdF9fWAMAAABkZWZLQ0tHh1gLAAAAVGltZXJGaXJpbmdYBQAAAGNsYXNzSzZLP4dYGAAAAFRyYW5zZm9ybVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmSx1LNIdYDQAAAEtleWVkV29ya0l0ZW1YBQAAAGNsYXNzS0FLR4d1fXL0AgAAKFgLAAAAVGltZXJGaXJpbmdYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxy9QIAAFgNAAAAS2V5ZWRXb3JrSXRlbWr1AgAAWA8AAABUcmFuc2Zvcm1SZXN1bHRq9QIAAHVoilgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbHL2AgAAhYFy9wIAAH1y+AIAAGJ0VR9hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtcvkCAAAoWPMXAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlByb3ZpZGVzIFRlc3RTdHJlYW0gZm9yIHZlcmlmeWluZyBzdHJlYW1pbmcgcnVubmVyIHNlbWFudGljcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB0aW1lc3RhbXAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKX19hbGxfXyA9IFsKICAgICdFdmVudCcsCiAgICAnRWxlbWVudEV2ZW50JywKICAgICdXYXRlcm1hcmtFdmVudCcsCiAgICAnUHJvY2Vzc2luZ1RpbWVFdmVudCcsCiAgICAnVGVzdFN0cmVhbScsCiAgICBdCgoKY2xhc3MgRXZlbnQob2JqZWN0KToKICAiIiJUZXN0IHN0cmVhbSBldmVudCB0byBiZSBlbWl0dGVkIGR1cmluZyBleGVjdXRpb24gb2YgYSBUZXN0U3RyZWFtLiIiIgoKICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CiAgICBpZiB0eXBlKHNlbGYpIGlzIG5vdCB0eXBlKG90aGVyKToKICAgICAgcmV0dXJuIGNtcCh0eXBlKHNlbGYpLCB0eXBlKG90aGVyKSkKICAgIHJldHVybiBzZWxmLl90eXBlZF9jbXAob3RoZXIpCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBfdHlwZWRfY21wKHNlbGYsIG90aGVyKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBFbGVtZW50RXZlbnQoRXZlbnQpOgogICIiIkVsZW1lbnQtcHJvZHVjaW5nIHRlc3Qgc3RyZWFtIGV2ZW50LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wZWRfdmFsdWVzKToKICAgIHNlbGYudGltZXN0YW1wZWRfdmFsdWVzID0gdGltZXN0YW1wZWRfdmFsdWVzCgogIGRlZiBfdHlwZWRfY21wKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBjbXAoc2VsZi50aW1lc3RhbXBlZF92YWx1ZXMsIG90aGVyLnRpbWVzdGFtcGVkX3ZhbHVlcykKCgpjbGFzcyBXYXRlcm1hcmtFdmVudChFdmVudCk6CiAgIiIiV2F0ZXJtYXJrLWFkdmFuY2luZyB0ZXN0IHN0cmVhbSBldmVudC4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld193YXRlcm1hcmspOgogICAgc2VsZi5uZXdfd2F0ZXJtYXJrID0gdGltZXN0YW1wLlRpbWVzdGFtcC5vZihuZXdfd2F0ZXJtYXJrKQoKICBkZWYgX3R5cGVkX2NtcChzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gY21wKHNlbGYubmV3X3dhdGVybWFyaywgb3RoZXIubmV3X3dhdGVybWFyaykKCgpjbGFzcyBQcm9jZXNzaW5nVGltZUV2ZW50KEV2ZW50KToKICAiIiJQcm9jZXNzaW5nIHRpbWUtYWR2YW5jaW5nIHRlc3Qgc3RyZWFtIGV2ZW50LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgYWR2YW5jZV9ieSk6CiAgICBzZWxmLmFkdmFuY2VfYnkgPSB0aW1lc3RhbXAuRHVyYXRpb24ub2YoYWR2YW5jZV9ieSkKCiAgZGVmIF90eXBlZF9jbXAoc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIGNtcChzZWxmLmFkdmFuY2VfYnksIG90aGVyLmFkdmFuY2VfYnkpCgoKY2xhc3MgVGVzdFN0cmVhbShQVHJhbnNmb3JtKToKICAiIiJUZXN0IHN0cmVhbSB0aGF0IGdlbmVyYXRlcyBldmVudHMgb24gYW4gdW5ib3VuZGVkIFBDb2xsZWN0aW9uIG9mIGVsZW1lbnRzLgoKICBFYWNoIGV2ZW50IGVtaXRzIGVsZW1lbnRzLCBhZHZhbmNlcyB0aGUgd2F0ZXJtYXJrIG9yIGFkdmFuY2VzIHRoZSBwcm9jZXNzaW5nCiAgdGltZS4gIEFmdGVyIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzIGFyZSBlbWl0dGVkLCBjZWFzZXMgdG8gcHJvZHVjZQogIG91dHB1dC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGVyPWNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKToKICAgIGFzc2VydCBjb2RlciBpcyBub3QgTm9uZQogICAgc2VsZi5jb2RlciA9IGNvZGVyCiAgICBzZWxmLmN1cnJlbnRfd2F0ZXJtYXJrID0gdGltZXN0YW1wLk1JTl9USU1FU1RBTVAKICAgIHNlbGYuZXZlbnRzID0gW10KCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgdW51c2VkX2lucHV0cyk6CiAgICByZXR1cm4gY29yZS5XaW5kb3dpbmcod2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKQogICAgc2VsZi5waXBlbGluZSA9IHBiZWdpbi5waXBlbGluZQogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihzZWxmLnBpcGVsaW5lKQoKICBkZWYgX2luZmVyX291dHB1dF9jb2RlcihzZWxmLCBpbnB1dF90eXBlPU5vbmUsIGlucHV0X2NvZGVyPU5vbmUpOgogICAgcmV0dXJuIHNlbGYuY29kZXIKCiAgZGVmIF9hZGQoc2VsZiwgZXZlbnQpOgogICAgaWYgaXNpbnN0YW5jZShldmVudCwgRWxlbWVudEV2ZW50KToKICAgICAgZm9yIHR2IGluIGV2ZW50LnRpbWVzdGFtcGVkX3ZhbHVlczoKICAgICAgICBhc3NlcnQgdHYudGltZXN0YW1wIDwgdGltZXN0YW1wLk1BWF9USU1FU1RBTVAsICgKICAgICAgICAgICAgJ0VsZW1lbnQgdGltZXN0YW1wIG11c3QgYmUgYmVmb3JlIHRpbWVzdGFtcC5NQVhfVElNRVNUQU1QLicpCiAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIFdhdGVybWFya0V2ZW50KToKICAgICAgYXNzZXJ0IGV2ZW50Lm5ld193YXRlcm1hcmsgPiBzZWxmLmN1cnJlbnRfd2F0ZXJtYXJrLCAoCiAgICAgICAgICAnV2F0ZXJtYXJrIG11c3Qgc3RyaWN0bHktbW9ub3RvbmljYWxseSBhZHZhbmNlLicpCiAgICAgIHNlbGYuY3VycmVudF93YXRlcm1hcmsgPSBldmVudC5uZXdfd2F0ZXJtYXJrCiAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIFByb2Nlc3NpbmdUaW1lRXZlbnQpOgogICAgICBhc3NlcnQgZXZlbnQuYWR2YW5jZV9ieSA+IDAsICgKICAgICAgICAgICdNdXN0IGFkdmFuY2UgcHJvY2Vzc2luZyB0aW1lIGJ5IHBvc2l0aXZlIGFtb3VudC4nKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biBldmVudDogJXMnICUgZXZlbnQpCiAgICBzZWxmLmV2ZW50cy5hcHBlbmQoZXZlbnQpCgogIGRlZiBhZGRfZWxlbWVudHMoc2VsZiwgZWxlbWVudHMpOgogICAgIiIiQWRkIGVsZW1lbnRzIHRvIHRoZSBUZXN0U3RyZWFtLgoKICAgIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBUZXN0U3RyZWFtIHdpbGwgYmUgcHJvZHVjZWQgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4KICAgIFRoZXNlIGVsZW1lbnRzIGNhbiBiZSBUaW1lc3RhbXBlZFZhbHVlLCBXaW5kb3dlZFZhbHVlIG9yIHJhdyB1bndyYXBwZWQKICAgIGVsZW1lbnRzIHRoYXQgYXJlIHNlcmlhbGl6YWJsZSB1c2luZyB0aGUgVGVzdFN0cmVhbSdzIHNwZWNpZmllZCBDb2Rlci4gIFdoZW4KICAgIGEgVGltZXN0YW1wZWRWYWx1ZSBvciBhIFdpbmRvd2VkVmFsdWUgZWxlbWVudCBpcyB1c2VkLCB0aGUgdGltZXN0YW1wIG9mIHRoZQogICAgVGltZXN0YW1wZWRWYWx1ZSBvciBXaW5kb3dlZFZhbHVlIHdpbGwgYmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcHJvZHVjZWQKICAgIGVsZW1lbnQ7IG90aGVyd2lzZSwgdGhlIGN1cnJlbnQgd2F0ZXJtYXJrIHRpbWVzdGFtcCB3aWxsIGJlIHVzZWQgZm9yIHRoYXQKICAgIGVsZW1lbnQuICBUaGUgd2luZG93cyBvZiBhIGdpdmVuIFdpbmRvd2VkVmFsdWUgYXJlIGlnbm9yZWQgYnkgdGhlCiAgICBUZXN0U3RyZWFtLgogICAgIiIiCiAgICB0aW1lc3RhbXBlZF92YWx1ZXMgPSBbXQogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGltZXN0YW1wZWRWYWx1ZSk6CiAgICAgICAgdGltZXN0YW1wZWRfdmFsdWVzLmFwcGVuZChlbGVtZW50KQogICAgICBlbGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgV2luZG93ZWRWYWx1ZSk6CiAgICAgICAgIyBEcm9wIHdpbmRvd3MgZm9yIGVsZW1lbnRzIGluIHRlc3Qgc3RyZWFtLgogICAgICAgIHRpbWVzdGFtcGVkX3ZhbHVlcy5hcHBlbmQoCiAgICAgICAgICAgIFRpbWVzdGFtcGVkVmFsdWUoZWxlbWVudC52YWx1ZSwgZWxlbWVudC50aW1lc3RhbXApKQogICAgICBlbHNlOgogICAgICAgICMgQWRkIGVsZW1lbnRzIHdpdGggdGltZXN0YW1wIGVxdWFsIHRvIGN1cnJlbnQgd2F0ZXJtYXJrLgogICAgICAgIHRpbWVzdGFtcGVkX3ZhbHVlcy5hcHBlbmQoCiAgICAgICAgICAgIFRpbWVzdGFtcGVkVmFsdWUoZWxlbWVudCwgc2VsZi5jdXJyZW50X3dhdGVybWFyaykpCiAgICBzZWxmLl9hZGQoRWxlbWVudEV2ZW50KHRpbWVzdGFtcGVkX3ZhbHVlcykpCiAgICByZXR1cm4gc2VsZgoKICBkZWYgYWR2YW5jZV93YXRlcm1hcmtfdG8oc2VsZiwgbmV3X3dhdGVybWFyayk6CiAgICAiIiJBZHZhbmNlIHRoZSB3YXRlcm1hcmsgdG8gYSBnaXZlbiBVbml4IHRpbWVzdGFtcC4KCiAgICBUaGUgVW5peCB0aW1lc3RhbXAgdmFsdWUgdXNlZCBtdXN0IGJlIGxhdGVyIHRoYW4gdGhlIHByZXZpb3VzIHdhdGVybWFyawogICAgdmFsdWUgYW5kIHNob3VsZCBiZSBnaXZlbiBhcyBhbiBpbnQsIGZsb2F0IG9yIHV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAKICAgIG9iamVjdC4KICAgICIiIgogICAgc2VsZi5fYWRkKFdhdGVybWFya0V2ZW50KG5ld193YXRlcm1hcmspKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIGFkdmFuY2Vfd2F0ZXJtYXJrX3RvX2luZmluaXR5KHNlbGYpOgogICAgIiIiQWR2YW5jZSB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBlbmQgb2YgdGltZS4iIiIKICAgIHNlbGYuYWR2YW5jZV93YXRlcm1hcmtfdG8odGltZXN0YW1wLk1BWF9USU1FU1RBTVApCiAgICByZXR1cm4gc2VsZgoKICBkZWYgYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWUoc2VsZiwgYWR2YW5jZV9ieSk6CiAgICAiIiJBZHZhbmNlIHRoZSBjdXJyZW50IHByb2Nlc3NpbmcgdGltZSBieSBhIGdpdmVuIGR1cmF0aW9uIGluIHNlY29uZHMuCgogICAgVGhlIGR1cmF0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBzZWNvbmQgZHVyYXRpb24gYW5kIHNob3VsZCBiZSBnaXZlbiBhcyBhbgogICAgaW50LCBmbG9hdCBvciB1dGlscy50aW1lc3RhbXAuRHVyYXRpb24gb2JqZWN0LgogICAgIiIiCiAgICBzZWxmLl9hZGQoUHJvY2Vzc2luZ1RpbWVFdmVudChhZHZhbmNlX2J5KSkKICAgIHJldHVybiBzZWxmCn1y+gIAAChYHgAAAFByb2Nlc3NpbmdUaW1lRXZlbnQuX3R5cGVkX2NtcFgDAAAAZGVmS1VLV4dYCgAAAFRlc3RTdHJlYW1YBQAAAGNsYXNzS1lLtIdYDwAAAFRlc3RTdHJlYW0uX2FkZFgDAAAAZGVmS3JLgYdYDQAAAEV2ZW50Ll9fY21wX19YAwAAAGRlZksxSzWHWB8AAABUZXN0U3RyZWFtLmFkdmFuY2Vfd2F0ZXJtYXJrX3RvWAMAAABkZWZLnUumh1gXAAAAV2F0ZXJtYXJrRXZlbnQuX19pbml0X19YAwAAAGRlZktIS0qHWBgAAABUZXN0U3RyZWFtLmdldF93aW5kb3dpbmdYAwAAAGRlZktnS2mHWAUAAABFdmVudFgFAAAAY2xhc3NLLEs5h1gZAAAAV2F0ZXJtYXJrRXZlbnQuX3R5cGVkX2NtcFgDAAAAZGVmS0tLTYdYIgAAAFRlc3RTdHJlYW0uYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWVYAwAAAGRlZkusS7SHWBAAAABFdmVudC5fdHlwZWRfY21wWAMAAABkZWZLNks5h1gcAAAAUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2luaXRfX1gDAAAAZGVmS1JLVIdYDAAAAEVsZW1lbnRFdmVudFgFAAAAY2xhc3NLO0tDh1goAAAAVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eVgDAAAAZGVmS6dLq4dYFwAAAEVsZW1lbnRFdmVudC5fdHlwZWRfY21wWAMAAABkZWZLQUtDh1gOAAAAV2F0ZXJtYXJrRXZlbnRYBQAAAGNsYXNzS0VLTYdYHgAAAFRlc3RTdHJlYW0uX2luZmVyX291dHB1dF9jb2RlclgDAAAAZGVmS29LcYdYEwAAAFByb2Nlc3NpbmdUaW1lRXZlbnRYBQAAAGNsYXNzS09LV4dYEwAAAFRlc3RTdHJlYW0uX19pbml0X19YAwAAAGRlZkthS2aHWBUAAABFbGVtZW50RXZlbnQuX19pbml0X19YAwAAAGRlZks+S0CHWBEAAABUZXN0U3RyZWFtLmV4cGFuZFgDAAAAZGVmS2pLbodYFwAAAFRlc3RTdHJlYW0uYWRkX2VsZW1lbnRzWAMAAABkZWZLgkuch3V9cvsCAAAoWAoAAABUZXN0U3RyZWFtWB8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtcvwCAABYDgAAAFdhdGVybWFya0V2ZW50avwCAABYIgAAAFRlc3RTdHJlYW0uYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWVq/AIAAFgYAAAAVGVzdFN0cmVhbS5nZXRfd2luZG93aW5navwCAABYEwAAAFByb2Nlc3NpbmdUaW1lRXZlbnRq/AIAAFgFAAAARXZlbnRq/AIAAFgMAAAARWxlbWVudEV2ZW50avwCAABYHwAAAFRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9q/AIAAFgRAAAAVGVzdFN0cmVhbS5leHBhbmRq/AIAAFgoAAAAVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eWr8AgAAWBcAAABUZXN0U3RyZWFtLmFkZF9lbGVtZW50c2r8AgAAdWiKWB8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtcv0CAACFgXL+AgAAfXL/AgAAYnRyAAMAAFUfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja3IBAwAAKFjZGgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJSdW50aW1lIHR5cGUgY2hlY2tpbmcgc3VwcG9ydC4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHN5cwppbXBvcnQgdHlwZXMKCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBUYWdnZWRPdXRwdXQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBHZW5lcmF0b3JXcmFwcGVyCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IF9jaGVja19pbnN0YW5jZV90eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldGNhbGxhcmdzX2ZvcmhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IFNpbXBsZVR5cGVIaW50RXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBjaGVja19jb25zdHJhaW50CgoKY2xhc3MgQWJzdHJhY3REb0ZuV3JhcHBlcihEb0ZuKToKICAiIiJBbiBhYnN0cmFjdCBjbGFzcyB0byBjcmVhdGUgd3JhcHBlciBhcm91bmQgRG9GbiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbik6CiAgICBzdXBlcihBYnN0cmFjdERvRm5XcmFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLmRvZm4gPSBkb2ZuCgogIGRlZiBfaW5zcGVjdF9zdGFydF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ3N0YXJ0X2J1bmRsZScpCgogIGRlZiBfaW5zcGVjdF9wcm9jZXNzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZG9mbi5nZXRfZnVuY3Rpb25fYXJndW1lbnRzKCdwcm9jZXNzJykKCiAgZGVmIF9pbnNwZWN0X2ZpbmlzaF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ2ZpbmlzaF9idW5kbGUnKQoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICByZXR1cm4gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlcihzZWxmLmRvZm4uc3RhcnRfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBwcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5wcm9jZXNzLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5maW5pc2hfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBpc19wcm9jZXNzX2JvdW5kZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmlzX3Byb2Nlc3NfYm91bmRlZCgpCgoKY2xhc3MgT3V0cHV0Q2hlY2tXcmFwcGVyRG9GbihBYnN0cmFjdERvRm5XcmFwcGVyKToKICAiIiJBIERvRm4gdGhhdCB2ZXJpZmllcyBhZ2FpbnN0IGNvbW1vbiBlcnJvcnMgaW4gdGhlIG91dHB1dCB0eXBlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbiwgZnVsbF9sYWJlbCk6CiAgICBzdXBlcihPdXRwdXRDaGVja1dyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXyhkb2ZuKQogICAgc2VsZi5mdWxsX2xhYmVsID0gZnVsbF9sYWJlbAoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICB0cnk6CiAgICAgIHJlc3VsdCA9IG1ldGhvZCgqYXJncywgKiprd2FyZ3MpCiAgICBleGNlcHQgVHlwZUNoZWNrRXJyb3IgYXMgZToKICAgICAgZXJyb3JfbXNnID0gKCdSdW50aW1lIHR5cGUgdmlvbGF0aW9uIGRldGVjdGVkIHdpdGhpbiBQYXJEbyglcyk6ICcKICAgICAgICAgICAgICAgICAgICclcycgJSAoc2VsZi5mdWxsX2xhYmVsLCBlKSkKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IsIGVycm9yX21zZywgc3lzLmV4Y19pbmZvKClbMl0KICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLl9jaGVja190eXBlKHJlc3VsdCkKCiAgZGVmIF9jaGVja190eXBlKHNlbGYsIG91dHB1dCk6CiAgICBpZiBvdXRwdXQgaXMgTm9uZToKICAgICAgcmV0dXJuIG91dHB1dAogICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dCwgKGRpY3QsIGJhc2VzdHJpbmcpKToKICAgICAgb2JqZWN0X3R5cGUgPSB0eXBlKG91dHB1dCkuX19uYW1lX18KICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ1JldHVybmluZyBhICVzIGZyb20gYSBQYXJEbyBvciBGbGF0TWFwIGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgdXNlIGxpc3QoIiVzIikgaWYgeW91IHJlYWxseSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YW50IHRoaXMgYmVoYXZpb3IuJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3RfdHlwZSwgb3V0cHV0KSkKICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3V0cHV0LCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdGbGF0TWFwIGFuZCBQYXJEbyBtdXN0IHJldHVybiBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdGVyYWJsZS4gJXMgd2FzIHJldHVybmVkIGluc3RlYWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUob3V0cHV0KSkKICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBUeXBlQ2hlY2tXcmFwcGVyRG9GbihBYnN0cmFjdERvRm5XcmFwcGVyKToKICAiIiJBIHdyYXBwZXIgYXJvdW5kIGEgRG9GbiB3aGljaCBwZXJmb3JtcyB0eXBlLWNoZWNraW5nIG9mIGlucHV0IGFuZCBvdXRwdXQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb2ZuLCB0eXBlX2hpbnRzLCBsYWJlbD1Ob25lKToKICAgIHN1cGVyKFR5cGVDaGVja1dyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXyhkb2ZuKQogICAgc2VsZi5kb2ZuID0gZG9mbgogICAgc2VsZi5fcHJvY2Vzc19mbiA9IHNlbGYuZG9mbi5fcHJvY2Vzc19hcmdzcGVjX2ZuKCkKICAgIGlmIHR5cGVfaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIGlucHV0X2FyZ3MsIGlucHV0X2t3YXJncyA9IHR5cGVfaGludHMuaW5wdXRfdHlwZXMKICAgICAgc2VsZi5faW5wdXRfaGludHMgPSBnZXRjYWxsYXJnc19mb3JoaW50cygKICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfZm4sICppbnB1dF9hcmdzLCAqKmlucHV0X2t3YXJncykKICAgIGVsc2U6CiAgICAgIHNlbGYuX2lucHV0X2hpbnRzID0gTm9uZQogICAgIyBUT0RPKHJvYmVydHdiKTogTXVsdGktb3V0cHV0LgogICAgc2VsZi5fb3V0cHV0X3R5cGVfaGludCA9IHR5cGVfaGludHMuc2ltcGxlX291dHB1dF90eXBlKGxhYmVsKQoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICByZXN1bHQgPSBtZXRob2QoKmFyZ3MsICoqa3dhcmdzKQogICAgcmV0dXJuIHNlbGYuX3R5cGVfY2hlY2tfcmVzdWx0KHJlc3VsdCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIHNlbGYuX2lucHV0X2hpbnRzOgogICAgICBhY3R1YWxfaW5wdXRzID0gaW5zcGVjdC5nZXRjYWxsYXJncyhzZWxmLl9wcm9jZXNzX2ZuLCAqYXJncywgKiprd2FyZ3MpCiAgICAgIGZvciB2YXIsIGhpbnQgaW4gc2VsZi5faW5wdXRfaGludHMuaXRlbXMoKToKICAgICAgICBpZiBoaW50IGlzIGFjdHVhbF9pbnB1dHNbdmFyXToKICAgICAgICAgICMgc2VsZiBwYXJhbWV0ZXIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgX2NoZWNrX2luc3RhbmNlX3R5cGUoaGludCwgYWN0dWFsX2lucHV0c1t2YXJdLCB2YXIsIFRydWUpCiAgICByZXR1cm4gc2VsZi5fdHlwZV9jaGVja19yZXN1bHQoc2VsZi5kb2ZuLnByb2Nlc3MoKmFyZ3MsICoqa3dhcmdzKSkKCiAgZGVmIF90eXBlX2NoZWNrX3Jlc3VsdChzZWxmLCB0cmFuc2Zvcm1fcmVzdWx0cyk6CiAgICBpZiBzZWxmLl9vdXRwdXRfdHlwZV9oaW50IGlzIE5vbmUgb3IgdHJhbnNmb3JtX3Jlc3VsdHMgaXMgTm9uZToKICAgICAgcmV0dXJuIHRyYW5zZm9ybV9yZXN1bHRzCgogICAgZGVmIHR5cGVfY2hlY2tfb3V0cHV0KG8pOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBNdWx0aS1vdXRwdXQuCiAgICAgIHggPSBvLnZhbHVlIGlmIGlzaW5zdGFuY2UobywgKFRhZ2dlZE91dHB1dCwgV2luZG93ZWRWYWx1ZSkpIGVsc2UgbwogICAgICBzZWxmLl90eXBlX2NoZWNrKHNlbGYuX291dHB1dF90eXBlX2hpbnQsIHgsIGlzX2lucHV0PUZhbHNlKQoKICAgICMgSWYgdGhlIHJldHVybiB0eXBlIGlzIGEgZ2VuZXJhdG9yLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBpbnRlcmxlYXZlIG91cgogICAgIyB0eXBlLWNoZWNraW5nIHdpdGggaXRzIG5vcm1hbCBpdGVyYXRpb24gc28gd2UgZG9uJ3QgZGVwbGV0ZSB0aGUKICAgICMgZ2VuZXJhdG9yIGluaXRpYWxseSBqdXN0IGJ5IHR5cGUtY2hlY2tpbmcgaXRzIHlpZWxkZWQgY29udGVudHMuCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybV9yZXN1bHRzLCB0eXBlcy5HZW5lcmF0b3JUeXBlKToKICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXIodHJhbnNmb3JtX3Jlc3VsdHMsIHR5cGVfY2hlY2tfb3V0cHV0KQogICAgZm9yIG8gaW4gdHJhbnNmb3JtX3Jlc3VsdHM6CiAgICAgIHR5cGVfY2hlY2tfb3V0cHV0KG8pCiAgICByZXR1cm4gdHJhbnNmb3JtX3Jlc3VsdHMKCiAgZGVmIF90eXBlX2NoZWNrKHNlbGYsIHR5cGVfY29uc3RyYWludCwgZGF0dW0sIGlzX2lucHV0KToKICAgICIiIlR5cGVjaGVjayBhIFBUcmFuc2Zvcm0gcmVsYXRlZCBkYXR1bSBhY2NvcmRpbmcgdG8gYSB0eXBlIGNvbnN0cmFpbnQuCgogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wdGlvbmFsbHkgdHlwZS1jaGVjayBlaXRoZXIgYW4gaW5wdXQgb3IgYW4gb3V0cHV0CiAgICB0byBhIFBUcmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgICB0eXBlX2NvbnN0cmFpbnQ6IEFuIGluc3RhbmNlIG9mIGEgdHlwZWhpbnRzLlR5cGVDb250cmFpbnQsIG9uZSBvZiB0aGUKICAgICAgICAgIHdoaXRlLWxpc3RlZCBidWlsdGluIFB5dGhvbiB0eXBlcywgb3IgYSBjdXN0b20gdXNlciBjbGFzcy4KICAgICAgICBkYXR1bTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gb2JqZWN0LgogICAgICAgIGlzX2lucHV0OiBUcnVlIGlmICdkYXR1bScgaXMgYW4gaW5wdXQgdG8gYSBQVHJhbnNmb3JtJ3MgRG9Gbi4gRmFsc2UKICAgICAgICAgIG90aGVyd2lzZS4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogSWYgJ2RhdHVtJyBmYWlscyB0byB0eXBlLWNoZWNrIGFjY29yZGluZyB0byAndHlwZV9jb25zdHJhaW50Jy4KICAgICIiIgogICAgZGF0dW1fdHlwZSA9ICdpbnB1dCcgaWYgaXNfaW5wdXQgZWxzZSAnb3V0cHV0JwoKICAgIHRyeToKICAgICAgY2hlY2tfY29uc3RyYWludCh0eXBlX2NvbnN0cmFpbnQsIGRhdHVtKQogICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IsIGUubWVzc2FnZSwgc3lzLmV4Y19pbmZvKClbMl0KICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgICBlcnJvcl9tc2cgPSAoIkFjY29yZGluZyB0byB0eXBlLWhpbnQgZXhwZWN0ZWQgJXMgc2hvdWxkIGJlIG9mIHR5cGUgJXMuICIKICAgICAgICAgICAgICAgICAgICJJbnN0ZWFkLCByZWNlaXZlZCAnJXMnLCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLiIKICAgICAgICAgICAgICAgICAgICUgKGRhdHVtX3R5cGUsIHR5cGVfY29uc3RyYWludCwgZGF0dW0sIHR5cGUoZGF0dW0pKSkKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IsIGVycm9yX21zZywgc3lzLmV4Y19pbmZvKClbMl0KfXICAwAAKFggAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGVYAwAAAGRlZks7Sz2HWBsAAABBYnN0cmFjdERvRm5XcmFwcGVyLndyYXBwZXJYAwAAAGRlZks4SzqHWBMAAABBYnN0cmFjdERvRm5XcmFwcGVyWAUAAABjbGFzc0soS0aHWCkAAABBYnN0cmFjdERvRm5XcmFwcGVyLl9pbnNwZWN0X3N0YXJ0X2J1bmRsZVgDAAAAZGVmSy9LMYdYFAAAAFR5cGVDaGVja1dyYXBwZXJEb0ZuWAUAAABjbGFzc0tpS7WHWBwAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi53cmFwcGVyWAMAAABkZWZLekt9h1ggAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4uX3R5cGVfY2hlY2tYAwAAAGRlZkuaS7WHWB0AAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fX2luaXRfX1gDAAAAZGVmS21LeYdYHAAAAEFic3RyYWN0RG9GbldyYXBwZXIuX19pbml0X19YAwAAAGRlZksrSy6HWCEAAABBYnN0cmFjdERvRm5XcmFwcGVyLmZpbmlzaF9idW5kbGVYAwAAAGRlZktBS0OHWBYAAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuWAUAAABjbGFzc0tIS2eHWB8AAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuLl9faW5pdF9fWAMAAABkZWZLS0tOh1gkAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5faW5zcGVjdF9wcm9jZXNzWAMAAABkZWZLMks0h1gqAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5faW5zcGVjdF9maW5pc2hfYnVuZGxlWAMAAABkZWZLNUs3h1giAAAAT3V0cHV0Q2hlY2tXcmFwcGVyRG9Gbi5fY2hlY2tfdHlwZVgDAAAAZGVmS1lLZ4dYHgAAAE91dHB1dENoZWNrV3JhcHBlckRvRm4ud3JhcHBlclgDAAAAZGVmS09LWIdYJgAAAEFic3RyYWN0RG9GbldyYXBwZXIuaXNfcHJvY2Vzc19ib3VuZGVkWAMAAABkZWZLREtGh1gcAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4ucHJvY2Vzc1gDAAAAZGVmS35Lh4dYOQAAAFR5cGVDaGVja1dyYXBwZXJEb0ZuLl90eXBlX2NoZWNrX3Jlc3VsdC50eXBlX2NoZWNrX291dHB1dFgDAAAAZGVmS4xLkIdYJwAAAFR5cGVDaGVja1dyYXBwZXJEb0ZuLl90eXBlX2NoZWNrX3Jlc3VsdFgDAAAAZGVmS4hLmYdYGwAAAEFic3RyYWN0RG9GbldyYXBwZXIucHJvY2Vzc1gDAAAAZGVmSz5LQId1fXIDAwAAKFggAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGVYHwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2tyBAMAAFgbAAAAQWJzdHJhY3REb0ZuV3JhcHBlci53cmFwcGVyagQDAABYEwAAAEFic3RyYWN0RG9GbldyYXBwZXJqBAMAAFgUAAAAVHlwZUNoZWNrV3JhcHBlckRvRm5qBAMAAFgcAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4ud3JhcHBlcmoEAwAAWCEAAABBYnN0cmFjdERvRm5XcmFwcGVyLmZpbmlzaF9idW5kbGVqBAMAAFgWAAAAT3V0cHV0Q2hlY2tXcmFwcGVyRG9GbmoEAwAAWB4AAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXJqBAMAAFgcAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4ucHJvY2Vzc2oEAwAAWCYAAABBYnN0cmFjdERvRm5XcmFwcGVyLmlzX3Byb2Nlc3NfYm91bmRlZGoEAwAAWBsAAABBYnN0cmFjdERvRm5XcmFwcGVyLnByb2Nlc3NqBAMAAHVoilgfAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja3IFAwAAhYFyBgMAAH1yBwMAAGJ0cggDAABVHmFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc3IJAwAAKFiXDwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IG1ldGhvZHMgZm9yIHRlc3RpbmcKCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgppbXBvcnQgaGFzaGxpYgppbXBvcnQgaW1wCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0ZW1wZmlsZQoKZnJvbSBtb2NrIGltcG9ydCBNb2NrCmZyb20gbW9jayBpbXBvcnQgcGF0Y2gKCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgaW1wb3J0IEZpbGVTeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgpERUZBVUxUX0hBU0hJTkdfQUxHID0gJ3NoYTEnCgoKY2xhc3MgVGVtcERpcihvYmplY3QpOgogICIiIkNvbnRleHQgTWFuYWdlciB0byBjcmVhdGUgYW5kIGNsZWFuLXVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3RlbXBkaXIpOgogICAgICBzaHV0aWwucm10cmVlKHNlbGYuX3RlbXBkaXIpCgogIGRlZiBnZXRfcGF0aChzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIiIiCiAgICByZXR1cm4gc2VsZi5fdGVtcGRpcgoKICBkZWYgY3JlYXRlX3RlbXBfZmlsZShzZWxmLCBzdWZmaXg9JycsIGxpbmVzPU5vbmUpOgogICAgIiIiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgoKICAgIEFyZ3M6CiAgICAgIHN1ZmZpeCAoc3RyKTogVGhlIGZpbGVuYW1lIHN1ZmZpeCBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgKGUuZy4gJy50eHQnKQogICAgICBsaW5lcyAoTGlzdFtzdHJdKTogQSBsaXN0IG9mIGxpbmVzIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSB0ZW1wb3JhcnkKICAgICAgICBmaWxlLgogICAgUmV0dXJuczoKICAgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQuCiAgICAiIiIKICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKAogICAgICAgIGRlbGV0ZT1GYWxzZSwgZGlyPXNlbGYuX3RlbXBkaXIsIHN1ZmZpeD1zdWZmaXgpIGFzIGY6CiAgICAgIGlmIGxpbmVzOgogICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgZi53cml0ZShsaW5lKQoKICAgICAgcmV0dXJuIGYubmFtZQoKCmRlZiBjb21wdXRlX2hhc2goY29udGVudCwgaGFzaGluZ19hbGc9REVGQVVMVF9IQVNISU5HX0FMRyk6CiAgIiIiQ29tcHV0ZSBhIGhhc2ggdmFsdWUgZnJvbSBhIGxpc3Qgb2Ygc3RyaW5nLiIiIgogIGNvbnRlbnQuc29ydCgpCiAgbSA9IGhhc2hsaWIubmV3KGhhc2hpbmdfYWxnKQogIGZvciBlbGVtIGluIGNvbnRlbnQ6CiAgICBtLnVwZGF0ZShzdHIoZWxlbSkpCiAgcmV0dXJuIG0uaGV4ZGlnZXN0KCkKCgpkZWYgcGF0Y2hfcmV0cnkodGVzdGNhc2UsIG1vZHVsZSk6CiAgIiIiQSBmdW5jdGlvbiB0byBwYXRjaCByZXRyeSBtb2R1bGUgdG8gdXNlIG1vY2sgY2xvY2sgYW5kIGxvZ2dlci4KCiAgQ2xvY2sgYW5kIGxvZ2dlciB0aGF0IGRlZmluZWQgaW4gcmV0cnkgZGVjb3JhdG9yIHdpbGwgYmUgcmVwbGFjZWQgaW4gdGVzdAogIGluIG9yZGVyIHRvIHNraXAgc2xlZXAgcGhhc2Ugd2hlbiByZXRyeSBoYXBwZW5zLgoKICBBcmdzOgogICAgdGVzdGNhc2U6IEFuIGluc3RhbmNlIG9mIHVuaXR0ZXN0LlRlc3RDYXNlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB0bwogICAgICBwYXRjaCByZXRyeSBtb2R1bGUuCiAgICBtb2R1bGU6IFRoZSBtb2R1bGUgdGhhdCB1c2VzIHJldHJ5IGFuZCBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGggbW9jawogICAgICBjbG9jayBhbmQgbG9nZ2VyIGluIHRlc3QuCiAgIiIiCiAgcmVhbF9yZXRyeV93aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYgPSByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYKCiAgZGVmIHBhdGNoZWRfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKG51bV9yZXRyaWVzLCByZXRyeV9maWx0ZXIpOgogICAgIiIiQSBwYXRjaCBmb3IgcmV0cnkgZGVjb3JhdG9yIHRvIHVzZSBhIG1vY2sgZHVtbXkgY2xvY2sgYW5kIGxvZ2dlci4iIiIKICAgIHJldHVybiByZWFsX3JldHJ5X3dpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgICBudW1fcmV0cmllcz1udW1fcmV0cmllcywgcmV0cnlfZmlsdGVyPXJldHJ5X2ZpbHRlciwgbG9nZ2VyPU1vY2soKSwKICAgICAgICBjbG9jaz1Nb2NrKCkpCgogIHBhdGNoLm9iamVjdChyZXRyeSwgJ3dpdGhfZXhwb25lbnRpYWxfYmFja29mZicsCiAgICAgICAgICAgICAgIHNpZGVfZWZmZWN0PXBhdGNoZWRfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKS5zdGFydCgpCgogICMgUmVsb2FkIG1vZHVsZSBhZnRlciBwYXRjaGluZy4KICBpbXAucmVsb2FkKG1vZHVsZSkKCiAgZGVmIHJlbW92ZV9wYXRjaGVzKCk6CiAgICBwYXRjaC5zdG9wYWxsKCkKICAgICMgUmVsb2FkIG1vZHVsZSBhZ2FpbiBhZnRlciByZW1vdmluZyBwYXRjaC4KICAgIGltcC5yZWxvYWQobW9kdWxlKQoKICB0ZXN0Y2FzZS5hZGRDbGVhbnVwKHJlbW92ZV9wYXRjaGVzKQoKCkByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICBudW1fcmV0cmllcz0zLAogICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVyKQpkZWYgZGVsZXRlX2ZpbGVzKGZpbGVfcGF0aHMpOgogICIiIkEgZnVuY3Rpb24gdG8gY2xlYW4gdXAgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdXNpbmcgYGBGaWxlU3lzdGVtc2BgLgoKICBHbG9iIGlzIHN1cHBvcnRlZCBpbiBmaWxlIHBhdGggYW5kIGRpcmVjdG9yaWVzIHdpbGwgYmUgZGVsZXRlZCByZWN1cnNpdmVseS4KCiAgQXJnczoKICAgIGZpbGVfcGF0aHM6IEEgbGlzdCBvZiBzdHJpbmdzIGNvbnRhaW5zIGZpbGUgcGF0aHMgb3IgZGlyZWN0b3JpZXMuCiAgIiIiCiAgaWYgbGVuKGZpbGVfcGF0aHMpID09IDA6CiAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NsZWFuIHVwIGZhaWxlZC4gSW52YWxpZCBmaWxlIHBhdGg6ICVzLicgJQogICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aHMpCiAgRmlsZVN5c3RlbXMuZGVsZXRlKGZpbGVfcGF0aHMpCn1yCgMAAChYDAAAAGNvbXB1dGVfaGFzaFgDAAAAZGVmS0pLUYdYEQAAAFRlbXBEaXIuX19lbnRlcl9fWAMAAABkZWZLLEsuh1gQAAAAVGVtcERpci5fX2V4aXRfX1gDAAAAZGVmSy9LModYGAAAAFRlbXBEaXIuY3JlYXRlX3RlbXBfZmlsZVgDAAAAZGVmSzdLSIdYEAAAAFRlbXBEaXIuX19pbml0X19YAwAAAGRlZkspSyuHWAsAAABwYXRjaF9yZXRyeVgDAAAAZGVmS1NLc4dYMgAAAHBhdGNoX3JldHJ5LnBhdGNoZWRfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmWAMAAABkZWZLYUtmh1gaAAAAcGF0Y2hfcmV0cnkucmVtb3ZlX3BhdGNoZXNYAwAAAGRlZkttS3GHWBAAAABUZW1wRGlyLmdldF9wYXRoWAMAAABkZWZLM0s2h1gHAAAAVGVtcERpclgFAAAAY2xhc3NLJktIh1gMAAAAZGVsZXRlX2ZpbGVzWAMAAABkZWZLdUuEh3V9cgsDAAAoWAwAAABjb21wdXRlX2hhc2hYHgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc3IMAwAAWAcAAABUZW1wRGlyagwDAABYCwAAAHBhdGNoX3JldHJ5agwDAABYGAAAAFRlbXBEaXIuY3JlYXRlX3RlbXBfZmlsZWoMAwAAWBAAAABUZW1wRGlyLmdldF9wYXRoagwDAAB1aIpYHgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc3INAwAAhYFyDgMAAH1yDwMAAGJ0chADAABVLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zKFjMDQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGl0ZXJ0b29scwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbCBpbXBvcnQgQXJndW1lbnRQbGFjZWhvbGRlcgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLndpbmRvd2VkX3ZhbHVlIGltcG9ydCBXaW5kb3dlZFZhbHVlCgoKY2xhc3MgTGlmdGVkQ29tYmluZVBlcktleShiZWFtLlBUcmFuc2Zvcm0pOgogICIiIkFuIGltcGxlbWVudGF0aW9uIG9mIENvbWJpbmVQZXJLZXkgdGhhdCBkb2VzIG1hcHBlci1zaWRlIHByZS1jb21iaW5pbmcuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbWJpbmVfZm4sIGFyZ3MsIGt3YXJncyk6CiAgICBpZiBhbnkoaXNpbnN0YW5jZShhcmcsIEFyZ3VtZW50UGxhY2Vob2xkZXIpCiAgICAgICAgICAgZm9yIGFyZyBpbiBpdGVydG9vbHMuY2hhaW4oYXJncywga3dhcmdzLnZhbHVlcygpKSk6CiAgICAgICMgVGhpcyBpc24ndCBpbXBsZW1lbnRlZCBpbiBkYXRhZmxvdyBlaXRoZXIuLi4KICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRGVmZXJyZWQgQ29tYmluZUZuIHNpZGUgaW5wdXRzLicpCiAgICBzZWxmLl9jb21iaW5lX2ZuID0gYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5jdXJyeV9jb21iaW5lX2ZuKAogICAgICAgIGNvbWJpbmVfZm4sIGFyZ3MsIGt3YXJncykKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gKAogICAgICAgIHBjb2xsCiAgICAgICAgfCBiZWFtLlBhckRvKFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzKHNlbGYuX2NvbWJpbmVfZm4pKQogICAgICAgIHwgYmVhbS5Hcm91cEJ5S2V5KCkKICAgICAgICB8IGJlYW0uUGFyRG8oRmluaXNoQ29tYmluZShzZWxmLl9jb21iaW5lX2ZuKSkpCgoKY2xhc3MgUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMoYmVhbS5Eb0ZuKToKICAiIiJBZ2dyZWdhdGVzIHZhbHVlcyBpbnRvIGEgcGVyLWtleS13aW5kb3cgY2FjaGUuCgogIEFzIGJ1bmRsZXMgYXJlIGluLW1lbW9yeS1zaXplZCwgd2UgZG9uJ3QgYm90aGVyIGZsdXNoaW5nIHVudGlsIHRoZSB2ZXJ5IGVuZC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgY29tYmluZV9mbik6CiAgICBzZWxmLl9jb21iaW5lX2ZuID0gY29tYmluZV9mbgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fY2FjaGUgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZWxmLl9jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcikKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSk6CiAgICBrLCB2aSA9IGVsZW1lbnQKICAgIHNlbGYuX2NhY2hlW2ssIHdpbmRvd10gPSBzZWxmLl9jb21iaW5lX2ZuLmFkZF9pbnB1dChzZWxmLl9jYWNoZVtrLCB3aW5kb3ddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGZvciAoaywgdyksIHZhIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CiAgICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoKGssIHZhKSwgdy5lbmQsICh3LCkpCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuX2NvbWJpbmVfZm4uZ2V0X3R5cGVfaGludHMoKS5jb3B5KCkKICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgIGlmIGhpbnRzLmlucHV0X3R5cGVzOgogICAgICBhcmdzLCBrd2FyZ3MgPSBoaW50cy5pbnB1dF90eXBlcwogICAgICBhcmdzID0gKHR5cGVoaW50cy5UdXBsZVtLLCBhcmdzWzBdXSwpICsgYXJnc1sxOl0KICAgICAgaGludHMuc2V0X2lucHV0X3R5cGVzKCphcmdzLCAqKmt3YXJncykKICAgIGVsc2U6CiAgICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkFueV0pCiAgICBoaW50cy5zZXRfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCB0eXBlaGludHMuQW55XSkKICAgIHJldHVybiBoaW50cwoKCmNsYXNzIEZpbmlzaENvbWJpbmUoYmVhbS5Eb0ZuKToKICAiIiJNZXJnZXMgcGFydGlhbGx5IGNvbWJpbmVkIHJlc3VsdHMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbWJpbmVfZm4pOgogICAgc2VsZi5fY29tYmluZV9mbiA9IGNvbWJpbmVfZm4KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBrLCB2cyA9IGVsZW1lbnQKICAgIHJldHVybiBbKAogICAgICAgIGssCiAgICAgICAgc2VsZi5fY29tYmluZV9mbi5leHRyYWN0X291dHB1dCgKICAgICAgICAgICAgc2VsZi5fY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnModnMpKSldCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuX2NvbWJpbmVfZm4uZ2V0X3R5cGVfaGludHMoKS5jb3B5KCkKICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkFueV0pCiAgICBpZiBoaW50cy5vdXRwdXRfdHlwZXM6CiAgICAgIG1haW5fb3V0cHV0X3R5cGUgPSBoaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUoJycpCiAgICAgIGhpbnRzLnNldF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW0ssIG1haW5fb3V0cHV0X3R5cGVdKQogICAgcmV0dXJuIGhpbnRzCn1yEQMAAChYHAAAAExpZnRlZENvbWJpbmVQZXJLZXkuX19pbml0X19YAwAAAGRlZkseSyWHWCkAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5fX2luaXRfX1gDAAAAZGVmSzNLNYdYIAAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzWAUAAABjbGFzc0suS02HWCAAAABGaW5pc2hDb21iaW5lLmRlZmF1bHRfdHlwZV9oaW50c1gDAAAAZGVmS1xLZIdYKAAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnByb2Nlc3NYAwAAAGRlZks5Sz2HWBYAAABGaW5pc2hDb21iaW5lLl9faW5pdF9fWAMAAABkZWZLUktUh1gaAAAATGlmdGVkQ29tYmluZVBlcktleS5leHBhbmRYAwAAAGRlZksmSyyHWC0AAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5zdGFydF9idW5kbGVYAwAAAGRlZks2SziHWBMAAABMaWZ0ZWRDb21iaW5lUGVyS2V5WAUAAABjbGFzc0sbSyyHWDMAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZktCS02HWA0AAABGaW5pc2hDb21iaW5lWAUAAABjbGFzc0tPS2SHWC4AAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5maW5pc2hfYnVuZGxlWAMAAABkZWZLPktBh1gVAAAARmluaXNoQ29tYmluZS5wcm9jZXNzWAMAAABkZWZLVUtbh3V9chIDAAAoWCAAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc1gsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXNyEwMAAFggAAAARmluaXNoQ29tYmluZS5kZWZhdWx0X3R5cGVfaGludHNqEwMAAFgoAAAAUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMucHJvY2Vzc2oTAwAAWBoAAABMaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZGoTAwAAWC0AAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5zdGFydF9idW5kbGVqEwMAAFgTAAAATGlmdGVkQ29tYmluZVBlcktleWoTAwAAWDMAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5kZWZhdWx0X3R5cGVfaGludHNqEwMAAFgNAAAARmluaXNoQ29tYmluZWoTAwAAWC4AAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5maW5pc2hfYnVuZGxlahMDAABYFQAAAEZpbmlzaENvbWJpbmUucHJvY2Vzc2oTAwAAdWiKWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc3IUAwAAhYFyFQMAAH1yFgMAAGJ0VTZhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMoWEcVAAAjIEdlbmVyYXRlZCBieSB0aGUgZ1JQQyBQeXRob24gcHJvdG9jb2wgY29tcGlsZXIgcGx1Z2luLiBETyBOT1QgRURJVCEKaW1wb3J0IGdycGMKCmltcG9ydCBiZWFtX2FydGlmYWN0X2FwaV9wYjIgYXMgYmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyCgoKY2xhc3MgQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gc3RhZ2UgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCgogIFJQQ3MgbWFkZSB0byBhbiBBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlIGVuZHBvaW50IHNob3VsZCBpbmNsdWRlIHNvbWUgZm9ybSBvZiBpZGVudGlmaWNhdGlvbiBmb3IKICB0aGUgam9iIGFzIGEgaGVhZGVyLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5QdXRBcnRpZmFjdCA9IGNoYW5uZWwuc3RyZWFtX3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2UvUHV0QXJ0aWZhY3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuUHV0QXJ0aWZhY3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuUHV0QXJ0aWZhY3RSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuQ29tbWl0TWFuaWZlc3QgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2UvQ29tbWl0TWFuaWZlc3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQ29tbWl0TWFuaWZlc3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQ29tbWl0TWFuaWZlc3RSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gc3RhZ2UgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCgogIFJQQ3MgbWFkZSB0byBhbiBBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlIGVuZHBvaW50IHNob3VsZCBpbmNsdWRlIHNvbWUgZm9ybSBvZiBpZGVudGlmaWNhdGlvbiBmb3IKICB0aGUgam9iIGFzIGEgaGVhZGVyLgogICIiIgoKICBkZWYgUHV0QXJ0aWZhY3Qoc2VsZiwgcmVxdWVzdF9pdGVyYXRvciwgY29udGV4dCk6CiAgICAiIiJTdGFnZSBhbiBhcnRpZmFjdCB0byBiZSBhdmFpbGFibGUgZHVyaW5nIGpvYiBleGVjdXRpb24uIFRoZSBmaXJzdCByZXF1ZXN0IG11c3QgY29udGFpbiB0aGUKICAgIG5hbWUgb2YgdGhlIGFydGlmYWN0LiBBbGwgZnV0dXJlIHJlcXVlc3RzIG11c3QgY29udGFpbiBzZXF1ZW50aWFsIGNodW5rcyBvZiB0aGUgY29udGVudCBvZgogICAgdGhlIGFydGlmYWN0LgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgQ29tbWl0TWFuaWZlc3Qoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJDb21taXQgdGhlIG1hbmlmZXN0IGZvciBhIEpvYi4gQWxsIGFydGlmYWN0cyBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBsb2FkZWQKICAgIGJlZm9yZSB0aGlzIGNhbGwgaXMgbWFkZS4KCiAgICBUaHJvd3MgZXJyb3IgSU5WQUxJRF9BUkdVTUVOVCBpZiBub3QgYWxsIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBtYW5pZmVzdCBhcmUgcHJlc2VudAogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnUHV0QXJ0aWZhY3QnOiBncnBjLnN0cmVhbV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5QdXRBcnRpZmFjdCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLlB1dEFydGlmYWN0UmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdDb21taXRNYW5pZmVzdCc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuQ29tbWl0TWFuaWZlc3QsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQ29tbWl0TWFuaWZlc3RSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5Db21taXRNYW5pZmVzdFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuQXJ0aWZhY3RTdGFnaW5nU2VydmljZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgoKY2xhc3MgQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byByZXRyaWV2ZSBhcnRpZmFjdHMgZm9yIHVzZSBpbiBhIEpvYi4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuR2V0TWFuaWZlc3QgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0UmV0cmlldmFsU2VydmljZS9HZXRNYW5pZmVzdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRNYW5pZmVzdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRNYW5pZmVzdFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5HZXRBcnRpZmFjdCA9IGNoYW5uZWwudW5hcnlfc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0UmV0cmlldmFsU2VydmljZS9HZXRBcnRpZmFjdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRBcnRpZmFjdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5BcnRpZmFjdENodW5rLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyKG9iamVjdCk6CiAgIiIiQSBzZXJ2aWNlIHRvIHJldHJpZXZlIGFydGlmYWN0cyBmb3IgdXNlIGluIGEgSm9iLgogICIiIgoKICBkZWYgR2V0TWFuaWZlc3Qoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJHZXQgdGhlIG1hbmlmZXN0IGZvciB0aGUgam9iCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRBcnRpZmFjdChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkdldCBhbiBhcnRpZmFjdCBzdGFnZWQgZm9yIHRoZSBqb2IuIFRoZSByZXF1ZXN0ZWQgYXJ0aWZhY3QgbXVzdCBiZSB3aXRoaW4gdGhlIG1hbmlmZXN0CiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ0dldE1hbmlmZXN0JzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRNYW5pZmVzdCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRNYW5pZmVzdFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkdldE1hbmlmZXN0UmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdHZXRBcnRpZmFjdCc6IGdycGMudW5hcnlfc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldEFydGlmYWN0LAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkdldEFydGlmYWN0UmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQXJ0aWZhY3RDaHVuay5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0UmV0cmlldmFsU2VydmljZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCn1yFwMAAChYIAAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0tjS3SHWBoAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1YlgFAAAAY2xhc3NLB0seh1gtAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0WAMAAABkZWZLMEs5h1geAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0sgSzmHWCwAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlci5HZXRNYW5pZmVzdFgDAAAAZGVmS2dLbYdYLAAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldEFydGlmYWN0WAMAAABkZWZLbkt0h1glAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1Yi5fX2luaXRfX1gDAAAAZGVmS1FLYYdYLgAAAGFkZF9BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJYAwAAAGRlZkt2S4aHWCMAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1Yi5fX2luaXRfX1gDAAAAZGVmSw5LHodYLAAAAGFkZF9BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLO0tLh1gqAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLlB1dEFydGlmYWN0WAMAAABkZWZLJ0svh1gcAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YlgFAAAAY2xhc3NLTUthh3V9chgDAAAoWCAAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlclg2AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjchkDAABYGgAAAEFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTdHViahkDAABYLQAAAEFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5Db21taXRNYW5pZmVzdGoZAwAAWB4AAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJqGQMAAFgsAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIuR2V0TWFuaWZlc3RqGQMAAFgsAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIuR2V0QXJ0aWZhY3RqGQMAAFguAAAAYWRkX0FydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcmoZAwAAWCwAAABhZGRfQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcmoZAwAAWCoAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIuUHV0QXJ0aWZhY3RqGQMAAFgcAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YmoZAwAAdWiKWDYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGNyGgMAAIWBchsDAAB9chwDAABidHIdAwAAVRVhcGFjaGVfYmVhbS5pby5hdnJvaW8oWFVDAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiYGBQVHJhbnNmb3Jtc2BgIGZvciByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gQXZybyBmaWxlcy4KClByb3ZpZGVzIHR3byByZWFkIGBgUFRyYW5zZm9ybWBgcywgYGBSZWFkRnJvbUF2cm9gYCBhbmQgYGBSZWFkQWxsRnJvbUF2cm9gYCwKdGhhdCBwcm9kdWNlcyBhIGBgUENvbGxlY3Rpb25gYCBvZiByZWNvcmRzLgpFYWNoIHJlY29yZCBvZiB0aGlzIGBgUENvbGxlY3Rpb25gYCB3aWxsIGNvbnRhaW4gYSBzaW5nbGUgcmVjb3JkIHJlYWQgZnJvbQphbiBBdnJvIGZpbGUuIFJlY29yZHMgdGhhdCBhcmUgb2Ygc2ltcGxlIHR5cGVzIHdpbGwgYmUgbWFwcGVkIGludG8KY29ycmVzcG9uZGluZyBQeXRob24gdHlwZXMuIFJlY29yZHMgdGhhdCBhcmUgb2YgQXZybyB0eXBlICdSRUNPUkQnIHdpbGwgYmUKbWFwcGVkIHRvIFB5dGhvbiBkaWN0aW9uYXJpZXMgdGhhdCBjb21wbHkgd2l0aCB0aGUgc2NoZW1hIGNvbnRhaW5lZCBpbiB0aGUKQXZybyBmaWxlIHRoYXQgY29udGFpbnMgdGhvc2UgcmVjb3Jkcy4gSW4gdGhpcyBjYXNlLCBrZXlzIG9mIGVhY2ggZGljdGlvbmFyeQp3aWxsIGNvbnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgbmFtZXMgYW5kIHdpbGwgYmUgb2YgdHlwZSBgYHN0cmluZ2BgCndoaWxlIHRoZSB2YWx1ZXMgb2YgdGhlIGRpY3Rpb25hcnkgd2lsbCBiZSBvZiB0aGUgdHlwZSBkZWZpbmVkIGluIHRoZQpjb3JyZXNwb25kaW5nIEF2cm8gc2NoZW1hLgoKRm9yIGV4YW1wbGUsIGlmIHNjaGVtYSBvZiB0aGUgQXZybyBmaWxlIGlzIHRoZSBmb2xsb3dpbmcuCnsibmFtZXNwYWNlIjogImV4YW1wbGUuYXZybyIsInR5cGUiOiAicmVjb3JkIiwibmFtZSI6ICJVc2VyIiwiZmllbGRzIjoKW3sibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIn0sCnsibmFtZSI6ICJmYXZvcml0ZV9udW1iZXIiLCAgInR5cGUiOiBbImludCIsICJudWxsIl19LAp7Im5hbWUiOiAiZmF2b3JpdGVfY29sb3IiLCAidHlwZSI6IFsic3RyaW5nIiwgIm51bGwiXX1dfQoKVGhlbiByZWNvcmRzIGdlbmVyYXRlZCBieSByZWFkIHRyYW5zZm9ybXMgd2lsbCBiZSBkaWN0aW9uYXJpZXMgb2YgdGhlCmZvbGxvd2luZyBmb3JtLgp7dSduYW1lJzogdSdBbHlzc2EnLCB1J2Zhdm9yaXRlX251bWJlcic6IDI1NiwgdSdmYXZvcml0ZV9jb2xvcic6IE5vbmV9KS4KCkFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB3cml0ZSBgYFBUcmFuc2Zvcm1gYCBgYFdyaXRlVG9BdnJvYGAKdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBhIGdpdmVuIGBgUENvbGxlY3Rpb25gYCBvZiBQeXRob24gb2JqZWN0cyB0byBhbgpBdnJvIGZpbGUuCiIiIgoKaW1wb3J0IGNTdHJpbmdJTwppbXBvcnQgb3MKaW1wb3J0IHpsaWIKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCmltcG9ydCBhdnJvCmZyb20gYXZybyBpbXBvcnQgaW8gYXMgYXZyb2lvCmZyb20gYXZybyBpbXBvcnQgZGF0YWZpbGUKZnJvbSBhdnJvIGltcG9ydCBzY2hlbWEKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGViYXNlZHNpbmsKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc291cmNlCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCgpfX2FsbF9fID0gWydSZWFkRnJvbUF2cm8nLCAnUmVhZEFsbEZyb21BdnJvJywgJ1dyaXRlVG9BdnJvJ10KCgpjbGFzcyBSZWFkRnJvbUF2cm8oUFRyYW5zZm9ybSk6CiAgIiIiQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybWAgZm9yIHJlYWRpbmcgYXZybwogIGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXR0ZXJuPU5vbmUsIG1pbl9idW5kbGVfc2l6ZT0wLCB2YWxpZGF0ZT1UcnVlKToKICAgICIiIkluaXRpYWxpemVzIDpjbGFzczpgUmVhZEZyb21BdnJvYC4KCiAgICBVc2VzIHNvdXJjZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5fQXZyb1NvdXJjZWAgdG8gcmVhZCBhIHNldCBvZiBBdnJvCiAgICBmaWxlcyBkZWZpbmVkIGJ5IGEgZ2l2ZW4gZmlsZSBwYXR0ZXJuLgoKICAgIElmIGBgL215cGF0aC9teWF2cm9maWxlcypgYCBpcyBhIGZpbGUtcGF0dGVybiB0aGF0IHBvaW50cyB0byBhIHNldCBvZiBBdnJvCiAgICBmaWxlcywgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGZvciB0aGUgcmVjb3JkcyBpbgogICAgdGhlc2UgQXZybyBmaWxlcyBjYW4gYmUgY3JlYXRlZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4KCiAgICAuLiB0ZXN0Y29kZTo6CgogICAgICB3aXRoIGJlYW0uUGlwZWxpbmUoKSBhcyBwOgogICAgICAgIHJlY29yZHMgPSBwIHwgJ1JlYWQnID4+IGJlYW0uaW8uUmVhZEZyb21BdnJvKCcvbXlwYXRoL215YXZyb2ZpbGVzKicpCgogICAgLi4gTk9URTogV2UncmUgbm90IGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gdGhpcyBlcnJvcjsgYnV0IGlmIHdlIGdldCBoZXJlLAogICAgICAgaXQgbWVhbnMgdGhhdCB0aGUgd2F5IG9mIGNhbGxpbmcgdGhpcyB0cmFuc2Zvcm0gaGFzbid0IGNoYW5nZWQuCgogICAgLi4gdGVzdG91dHB1dDo6CiAgICAgIDpoaWRlOgoKICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCiAgICAgIElPRXJyb3I6IE5vIGZpbGVzIGZvdW5kIGJhc2VkIG9uIHRoZSBmaWxlIHBhdHRlcm4KCiAgICBFYWNoIHJlY29yZCBvZiB0aGlzIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgd2lsbCBjb250YWluCiAgICBhIHNpbmdsZSByZWNvcmQgcmVhZCBmcm9tIGEgc291cmNlLiBSZWNvcmRzIHRoYXQgYXJlIG9mIHNpbXBsZSB0eXBlcyB3aWxsIGJlCiAgICBtYXBwZWQgaW50byBjb3JyZXNwb25kaW5nIFB5dGhvbiB0eXBlcy4gUmVjb3JkcyB0aGF0IGFyZSBvZiBBdnJvIHR5cGUKICAgIGBgUkVDT1JEYGAgd2lsbCBiZSBtYXBwZWQgdG8gUHl0aG9uIGRpY3Rpb25hcmllcyB0aGF0IGNvbXBseSB3aXRoIHRoZSBzY2hlbWEKICAgIGNvbnRhaW5lZCBpbiB0aGUgQXZybyBmaWxlIHRoYXQgY29udGFpbnMgdGhvc2UgcmVjb3Jkcy4gSW4gdGhpcyBjYXNlLCBrZXlzCiAgICBvZiBlYWNoIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIG5hbWVzIGFuZCB3aWxsIGJlIG9mCiAgICB0eXBlIDpjbGFzczpgc3RyYCB3aGlsZSB0aGUgdmFsdWVzIG9mIHRoZSBkaWN0aW9uYXJ5IHdpbGwgYmUgb2YgdGhlIHR5cGUKICAgIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgQXZybyBzY2hlbWEuCgogICAgRm9yIGV4YW1wbGUsIGlmIHNjaGVtYSBvZiB0aGUgQXZybyBmaWxlIGlzIHRoZSBmb2xsb3dpbmcuIDo6CgogICAgICB7CiAgICAgICAgIm5hbWVzcGFjZSI6ICJleGFtcGxlLmF2cm8iLAogICAgICAgICJ0eXBlIjogInJlY29yZCIsCiAgICAgICAgIm5hbWUiOiAiVXNlciIsCiAgICAgICAgImZpZWxkcyI6IFsKCiAgICAgICAgICB7Im5hbWUiOiAibmFtZSIsCiAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIn0sCgogICAgICAgICAgeyJuYW1lIjogImZhdm9yaXRlX251bWJlciIsCiAgICAgICAgICAgInR5cGUiOiBbImludCIsICJudWxsIl19LAoKICAgICAgICAgIHsibmFtZSI6ICJmYXZvcml0ZV9jb2xvciIsCiAgICAgICAgICAgInR5cGUiOiBbInN0cmluZyIsICJudWxsIl19CgogICAgICAgIF0KICAgICAgfQoKICAgIFRoZW4gcmVjb3JkcyBnZW5lcmF0ZWQgYnkgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgIHdpbGwgYmUKICAgIGRpY3Rpb25hcmllcyBvZiB0aGUgZm9sbG93aW5nIGZvcm0uIDo6CgogICAgICB7dSduYW1lJzogdSdBbHlzc2EnLCB1J2Zhdm9yaXRlX251bWJlcic6IDI1NiwgdSdmYXZvcml0ZV9jb2xvcic6IE5vbmV9KS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm4gKHN0cik6IHRoZSBmaWxlIGdsb2IgdG8gcmVhZAogICAgICBtaW5fYnVuZGxlX3NpemUgKGludCk6IHRoZSBtaW5pbXVtIHNpemUgaW4gYnl0ZXMsIHRvIGJlIGNvbnNpZGVyZWQgd2hlbgogICAgICAgIHNwbGl0dGluZyB0aGUgaW5wdXQgaW50byBidW5kbGVzLgogICAgICB2YWxpZGF0ZSAoYm9vbCk6IGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICBjcmVhdGlvbiB0aW1lLgogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbUF2cm8sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NvdXJjZSA9IF9BdnJvU291cmNlKGZpbGVfcGF0dGVybiwgbWluX2J1bmRsZV9zaXplLCB2YWxpZGF0ZT12YWxpZGF0ZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc291cmNlX2RkJzogc2VsZi5fc291cmNlfQoKCmNsYXNzIFJlYWRBbGxGcm9tQXZybyhQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGBgUENvbGxlY3Rpb25gYCBvZiBBdnJvIGZpbGVzLgoKICAgVXNlcyBzb3VyY2UgJ19BdnJvU291cmNlJyB0byByZWFkIGEgYGBQQ29sbGVjdGlvbmBgIG9mIEF2cm8gZmlsZXMgb3IKICAgZmlsZSBwYXR0ZXJucyBhbmQgcHJvZHVjZSBhIGBgUENvbGxlY3Rpb25gYCBvZiBBdnJvIHJlY29yZHMuCiAgIiIiCgogIERFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSA9IDY0ICogMTAyNCAqIDEwMjQgICMgNjRNQgoKICBkZWYgX19pbml0X18oc2VsZiwgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgICAgICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9REVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFKToKICAgICIiIkluaXRpYWxpemVzIGBgUmVhZEFsbEZyb21BdnJvYGAuCgogICAgQXJnczoKICAgICAgbWluX2J1bmRsZV9zaXplOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAiIiIKICAgIHNvdXJjZV9mcm9tX2ZpbGUgPSBwYXJ0aWFsKAogICAgICAgIF9jcmVhdGVfYXZyb19zb3VyY2UsIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUpCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IGZpbGViYXNlZHNvdXJjZS5SZWFkQWxsRmlsZXMoCiAgICAgICAgVHJ1ZSwgQ29tcHJlc3Npb25UeXBlcy5BVVRPLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgc291cmNlX2Zyb21fZmlsZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZSB8ICdSZWFkQWxsRmlsZXMnID4+IHNlbGYuX3JlYWRfYWxsX2ZpbGVzCgoKY2xhc3MgX0F2cm9VdGlscyhvYmplY3QpOgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHJlYWRfbWV0YV9kYXRhX2Zyb21fZmlsZShmKToKICAgICIiIlJlYWRzIG1ldGFkYXRhIGZyb20gYSBnaXZlbiBBdnJvIGZpbGUuCgogICAgQXJnczoKICAgICAgZjogQXZybyBmaWxlIHRvIHJlYWQuCiAgICBSZXR1cm5zOgogICAgICBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvZGVjLCBzY2hlbWEsIGFuZCB0aGUgc3luYyBtYXJrZXIgb2YgdGhlIEF2cm8KICAgICAgZmlsZS4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBmaWxlIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGJ5dGUgc2VxdWVuY2UgZGVmaW5lZCBpbgogICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWNhdGlvbi4KICAgICIiIgogICAgaWYgZi50ZWxsKCkgPiAwOgogICAgICBmLnNlZWsoMCkKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcihmKQogICAgaGVhZGVyID0gYXZyb2lvLkRhdHVtUmVhZGVyKCkucmVhZF9kYXRhKGRhdGFmaWxlLk1FVEFfU0NIRU1BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFmaWxlLk1FVEFfU0NIRU1BLCBkZWNvZGVyKQogICAgaWYgaGVhZGVyLmdldCgnbWFnaWMnKSAhPSBkYXRhZmlsZS5NQUdJQzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGFuIEF2cm8gZmlsZS4gRmlsZSBoZWFkZXIgc2hvdWxkIHN0YXJ0IHdpdGggJXMgYnV0JwogICAgICAgICAgICAgICAgICAgICAgICdzdGFydGVkIHdpdGggJXMgaW5zdGVhZC4nLCBkYXRhZmlsZS5NQUdJQywKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZ2V0KCdtYWdpYycpKQoKICAgIG1ldGEgPSBoZWFkZXJbJ21ldGEnXQoKICAgIGlmIGRhdGFmaWxlLkNPREVDX0tFWSBpbiBtZXRhOgogICAgICBjb2RlYyA9IG1ldGFbZGF0YWZpbGUuQ09ERUNfS0VZXQogICAgZWxzZToKICAgICAgY29kZWMgPSAnbnVsbCcKCiAgICBzY2hlbWFfc3RyaW5nID0gbWV0YVtkYXRhZmlsZS5TQ0hFTUFfS0VZXQogICAgc3luY19tYXJrZXIgPSBoZWFkZXJbJ3N5bmMnXQoKICAgIHJldHVybiBjb2RlYywgc2NoZW1hX3N0cmluZywgc3luY19tYXJrZXIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZWFkX2Jsb2NrX2Zyb21fZmlsZShmLCBjb2RlYywgc2NoZW1hLCBleHBlY3RlZF9zeW5jX21hcmtlcik6CiAgICAiIiJSZWFkcyBhIGJsb2NrIGZyb20gYSBnaXZlbiBBdnJvIGZpbGUuCgogICAgQXJnczoKICAgICAgZjogQXZybyBmaWxlIHRvIHJlYWQuCiAgICAgIGNvZGVjOiBUaGUgY29kZWMgdG8gdXNlIGZvciBibG9jay1sZXZlbCBkZWNvbXByZXNzaW9uLgogICAgICAgIFN1cHBvcnRlZCBjb2RlY3M6ICdudWxsJywgJ2RlZmxhdGUnLCAnc25hcHB5JwogICAgICBzY2hlbWE6IEF2cm8gU2NoZW1hIGRlZmluaXRpb24gcmVwcmVzZW50ZWQgYXMgSlNPTiBzdHJpbmcuCiAgICAgIGV4cGVjdGVkX3N5bmNfbWFya2VyOiBBdnJvIHN5bmNocm9uaXphdGlvbiBtYXJrZXIuIElmIHRoZSBibG9jaydzIHN5bmMKICAgICAgICBtYXJrZXIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGlzIHBhcmFtZXRlciB0aGVuIFZhbHVlRXJyb3IgaXMgdGhyb3duLgogICAgUmV0dXJuczoKICAgICAgQSBzaW5nbGUgX0F2cm9CbG9jay4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBibG9jayBjYW5ub3QgYmUgcmVhZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBmaWxlIGRvZXNuJ3QKICAgICAgICBtYXRjaCB0aGUgc3BlY2lmaWNhdGlvbi4KICAgICIiIgogICAgb2Zmc2V0ID0gZi50ZWxsKCkKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcihmKQogICAgbnVtX3JlY29yZHMgPSBkZWNvZGVyLnJlYWRfbG9uZygpCiAgICBibG9ja19zaXplID0gZGVjb2Rlci5yZWFkX2xvbmcoKQogICAgYmxvY2tfYnl0ZXMgPSBkZWNvZGVyLnJlYWQoYmxvY2tfc2l6ZSkKICAgIHN5bmNfbWFya2VyID0gZGVjb2Rlci5yZWFkKGxlbihleHBlY3RlZF9zeW5jX21hcmtlcikpCiAgICBpZiBzeW5jX21hcmtlciAhPSBleHBlY3RlZF9zeW5jX21hcmtlcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBzeW5jIG1hcmtlciAoYWN0dWFsICIlcyIgdnMgZXhwZWN0ZWQgIiVzIikuICcKICAgICAgICAgICAgICAgICAgICAgICAnTWF5YmUgdGhlIHVuZGVybHlpbmcgYXZybyBmaWxlIGlzIGNvcnJ1cHRlZD8nLAogICAgICAgICAgICAgICAgICAgICAgIHN5bmNfbWFya2VyLCBleHBlY3RlZF9zeW5jX21hcmtlcikKICAgIHNpemUgPSBmLnRlbGwoKSAtIG9mZnNldAogICAgcmV0dXJuIF9BdnJvQmxvY2soYmxvY2tfYnl0ZXMsIG51bV9yZWNvcmRzLCBjb2RlYywgc2NoZW1hLCBvZmZzZXQsIHNpemUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcihmLCBzeW5jX21hcmtlcik6CiAgICBidWZfc2l6ZSA9IDEwMDAwCgogICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKICAgIHdoaWxlIGRhdGE6CiAgICAgIHBvcyA9IGRhdGEuZmluZChzeW5jX21hcmtlcikKICAgICAgaWYgcG9zID49IDA6CiAgICAgICAgIyBBZGp1c3RpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgc3luYwogICAgICAgICMgbWFya2VyLgogICAgICAgIGJhY2t0cmFjayA9IGxlbihkYXRhKSAtIHBvcyAtIGxlbihzeW5jX21hcmtlcikKICAgICAgICBmLnNlZWsoLTEgKiBiYWNrdHJhY2ssIG9zLlNFRUtfQ1VSKQogICAgICAgIHJldHVybiBUcnVlCiAgICAgIGVsc2U6CiAgICAgICAgaWYgZi50ZWxsKCkgPj0gbGVuKHN5bmNfbWFya2VyKToKICAgICAgICAgICMgQmFja3RyYWNraW5nIGluIGNhc2Ugd2UgcGFydGlhbGx5IHJlYWQgdGhlIHN5bmMgbWFya2VyIGR1cmluZyB0aGUKICAgICAgICAgICMgcHJldmlvdXMgcmVhZC4gV2Ugb25seSBoYXZlIHRvIGJhY2t0cmFjayBpZiB0aGVyZSBhcmUgYXQgbGVhc3QKICAgICAgICAgICMgbGVuKHN5bmNfbWFya2VyKSBieXRlcyBiZWZvcmUgY3VycmVudCBwb3NpdGlvbi4gV2Ugb25seSBoYXZlIHRvCiAgICAgICAgICAjIGJhY2t0cmFjayAobGVuKHN5bmNfbWFya2VyKSAtIDEpIGJ5dGVzLgogICAgICAgICAgZi5zZWVrKC0xICogKGxlbihzeW5jX21hcmtlcikgLSAxKSwgb3MuU0VFS19DVVIpCiAgICAgICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKCgpkZWYgX2NyZWF0ZV9hdnJvX3NvdXJjZShmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPU5vbmUpOgogIHJldHVybiBfQXZyb1NvdXJjZSgKICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgdmFsaWRhdGU9RmFsc2UpCgoKY2xhc3MgX0F2cm9CbG9jayhvYmplY3QpOgogICIiIlJlcHJlc2VudHMgYSBibG9jayBvZiBhbiBBdnJvIGZpbGUuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBibG9ja19ieXRlcywgbnVtX3JlY29yZHMsIGNvZGVjLCBzY2hlbWFfc3RyaW5nLAogICAgICAgICAgICAgICBvZmZzZXQsIHNpemUpOgogICAgIyBEZWNvbXByZXNzIGRhdGEgZWFybHkgb24gKGlmIG5lZWRlZCkgYW5kIHRodXMgZGVjcmVhc2UgdGhlIG51bWJlciBvZgogICAgIyBwYXJhbGxlbCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5IGF0IGFueSBnaXZlbiBpbiB0aW1lIGR1cmluZwogICAgIyBibG9jayBpdGVyYXRpb24uCiAgICBzZWxmLl9kZWNvbXByZXNzZWRfYmxvY2tfYnl0ZXMgPSBzZWxmLl9kZWNvbXByZXNzX2J5dGVzKGJsb2NrX2J5dGVzLCBjb2RlYykKICAgIHNlbGYuX251bV9yZWNvcmRzID0gbnVtX3JlY29yZHMKICAgIHNlbGYuX3NjaGVtYSA9IHNjaGVtYS5wYXJzZShzY2hlbWFfc3RyaW5nKQogICAgc2VsZi5fb2Zmc2V0ID0gb2Zmc2V0CiAgICBzZWxmLl9zaXplID0gc2l6ZQoKICBkZWYgc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9zaXplCgogIGRlZiBvZmZzZXQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fb2Zmc2V0CgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2RlY29tcHJlc3NfYnl0ZXMoZGF0YSwgY29kZWMpOgogICAgaWYgY29kZWMgPT0gJ251bGwnOgogICAgICByZXR1cm4gZGF0YQogICAgZWxpZiBjb2RlYyA9PSAnZGVmbGF0ZSc6CiAgICAgICMgemxpYi5NQVhfV0JJVFMgaXMgdGhlIHdpbmRvdyBzaXplLiAnLScgc2lnbiBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzCiAgICAgICMgcmF3IGRhdGEgKHdpdGhvdXQgaGVhZGVycykuIFNlZSB6bGliIGFuZCBBdnJvIGRvY3VtZW50YXRpb25zIGZvciBtb3JlCiAgICAgICMgZGV0YWlscy4KICAgICAgcmV0dXJuIHpsaWIuZGVjb21wcmVzcyhkYXRhLCAtemxpYi5NQVhfV0JJVFMpCiAgICBlbGlmIGNvZGVjID09ICdzbmFwcHknOgogICAgICAjIFNuYXBweSBpcyBhbiBvcHRpb25hbCBhdnJvIGNvZGVjLgogICAgICAjIFNlZSBTbmFwcHkgYW5kIEF2cm8gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICB0cnk6CiAgICAgICAgaW1wb3J0IHNuYXBweQogICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU25hcHB5IGRvZXMgbm90IHNlZW0gdG8gYmUgaW5zdGFsbGVkLicpCgogICAgICAjIENvbXByZXNzZWQgZGF0YSBpbmNsdWRlcyBhIDQtYnl0ZSBDUkMzMiBjaGVja3N1bSB3aGljaCB3ZSB2ZXJpZnkuCiAgICAgICMgV2UgdGFrZSBjYXJlIHRvIGF2b2lkIGV4dHJhIGNvcGllcyBvZiBkYXRhIHdoaWxlIHNsaWNpbmcgbGFyZ2Ugb2JqZWN0cwogICAgICAjIGJ5IHVzZSBvZiBhIGJ1ZmZlci4KICAgICAgcmVzdWx0ID0gc25hcHB5LmRlY29tcHJlc3MoYnVmZmVyKGRhdGEpWzotNF0pCiAgICAgIGF2cm9pby5CaW5hcnlEZWNvZGVyKGNTdHJpbmdJTy5TdHJpbmdJTyhkYXRhWy00Ol0pKS5jaGVja19jcmMzMihyZXN1bHQpCiAgICAgIHJldHVybiByZXN1bHQKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vua25vd24gY29kZWM6ICVyJywgY29kZWMpCgogIGRlZiBudW1fcmVjb3JkcyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9udW1fcmVjb3JkcwoKICBkZWYgcmVjb3JkcyhzZWxmKToKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcigKICAgICAgICBjU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi5fZGVjb21wcmVzc2VkX2Jsb2NrX2J5dGVzKSkKICAgIHJlYWRlciA9IGF2cm9pby5EYXR1bVJlYWRlcigKICAgICAgICB3cml0ZXJzX3NjaGVtYT1zZWxmLl9zY2hlbWEsIHJlYWRlcnNfc2NoZW1hPXNlbGYuX3NjaGVtYSkKCiAgICBjdXJyZW50X3JlY29yZCA9IDAKICAgIHdoaWxlIGN1cnJlbnRfcmVjb3JkIDwgc2VsZi5fbnVtX3JlY29yZHM6CiAgICAgIHlpZWxkIHJlYWRlci5yZWFkKGRlY29kZXIpCiAgICAgIGN1cnJlbnRfcmVjb3JkICs9IDEKCgpjbGFzcyBfQXZyb1NvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBBdnJvIGZpbGVzLgoKICBgYF9BdnJvU291cmNlYGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZpbGUtYmFzZWQgc291cmNlIGZyYW1ld29yayBhdmFpbGFibGUKICBpbiBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScuIEhlbmNlIHBsZWFzZSByZWZlciB0byBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScKICB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvdXJjZSBpbXBsZW1lbnRzIG9wZXJhdGlvbnMgY29tbW9uIHRvIGFsbAogIGZpbGUtYmFzZWQgc291cmNlcyBzdWNoIGFzIGZpbGUtcGF0dGVybiBleHBhbnNpb24gYW5kIHNwbGl0dGluZyBpbnRvIGJ1bmRsZXMKICBmb3IgcGFyYWxsZWwgcHJvY2Vzc2luZy4KICAiIiIKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIHJhbmdlX3RyYWNrZXIpOgogICAgbmV4dF9ibG9ja19zdGFydCA9IC0xCgogICAgZGVmIHNwbGl0X3BvaW50c191bmNsYWltZWQoc3RvcF9wb3NpdGlvbik6CiAgICAgIGlmIG5leHRfYmxvY2tfc3RhcnQgPj0gc3RvcF9wb3NpdGlvbjoKICAgICAgICAjIE5leHQgYmxvY2sgc3RhcnRzIGF0IG9yIGFmdGVyIHRoZSBzdWdnZXN0ZWQgc3RvcCBwb3NpdGlvbi4gSGVuY2UKICAgICAgICAjIHRoZXJlIHdpbGwgbm90IGJlIHNwbGl0IHBvaW50cyB0byBiZSBjbGFpbWVkIGZvciB0aGUgcmFuZ2UgZW5kaW5nIGF0CiAgICAgICAgIyBzdWdnZXN0ZWQgc3RvcCBwb3NpdGlvbi4KICAgICAgICByZXR1cm4gMAoKICAgICAgcmV0dXJuIGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04KCiAgICByYW5nZV90cmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNwbGl0X3BvaW50c191bmNsYWltZWQpCgogICAgc3RhcnRfb2Zmc2V0ID0gcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCiAgICBpZiBzdGFydF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RhcnRfb2Zmc2V0ID0gMAoKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmOgogICAgICBjb2RlYywgc2NoZW1hX3N0cmluZywgc3luY19tYXJrZXIgPSBfQXZyb1V0aWxzLnJlYWRfbWV0YV9kYXRhX2Zyb21fZmlsZSgKICAgICAgICAgIGYpCgogICAgICAjIFdlIGhhdmUgdG8gc3RhcnQgYXQgY3VycmVudCBwb3NpdGlvbiBpZiBwcmV2aW91cyBidW5kbGUgZW5kZWQgYXQgdGhlCiAgICAgICMgZW5kIG9mIGEgc3luYyBtYXJrZXIuCiAgICAgIHN0YXJ0X29mZnNldCA9IG1heCgwLCBzdGFydF9vZmZzZXQgLSBsZW4oc3luY19tYXJrZXIpKQogICAgICBmLnNlZWsoc3RhcnRfb2Zmc2V0KQogICAgICBfQXZyb1V0aWxzLmFkdmFuY2VfZmlsZV9wYXN0X25leHRfc3luY19tYXJrZXIoZiwgc3luY19tYXJrZXIpCgogICAgICB3aGlsZSByYW5nZV90cmFja2VyLnRyeV9jbGFpbShmLnRlbGwoKSk6CiAgICAgICAgYmxvY2sgPSBfQXZyb1V0aWxzLnJlYWRfYmxvY2tfZnJvbV9maWxlKGYsIGNvZGVjLCBzY2hlbWFfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX21hcmtlcikKICAgICAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gYmxvY2sub2Zmc2V0KCkgKyBibG9jay5zaXplKCkKICAgICAgICBmb3IgcmVjb3JkIGluIGJsb2NrLnJlY29yZHMoKToKICAgICAgICAgIHlpZWxkIHJlY29yZAoKCmNsYXNzIFdyaXRlVG9BdnJvKGJlYW0udHJhbnNmb3Jtcy5QVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciB3cml0aW5nIGF2cm8gZmlsZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICAgICAgIGNvZGVjPSdkZWZsYXRlJywKICAgICAgICAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD0nJywKICAgICAgICAgICAgICAgbnVtX3NoYXJkcz0wLAogICAgICAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgICAgICAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24veC1hdnJvJyk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb0F2cm8gdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIHVzZSwgYXMgcmV0dXJuZWQgYnkgYXZyby5zY2hlbWEucGFyc2UKICAgICAgY29kZWM6IFRoZSBjb2RlYyB0byB1c2UgZm9yIGJsb2NrLWxldmVsIGNvbXByZXNzaW9uLiBBbnkgc3RyaW5nIHN1cHBvcnRlZAogICAgICAgIGJ5IHRoZSBBdnJvIHNwZWNpZmljYXRpb24gaXMgYWNjZXB0ZWQgKGZvciBleGFtcGxlICdudWxsJykuCiAgICAgIGZpbGVfbmFtZV9zdWZmaXg6IFN1ZmZpeCBmb3IgdGhlIGZpbGVzIHdyaXR0ZW4uCiAgICAgIG51bV9zaGFyZHM6IFRoZSBudW1iZXIgb2YgZmlsZXMgKHNoYXJkcykgdXNlZCBmb3Igb3V0cHV0LiBJZiBub3Qgc2V0LCB0aGUKICAgICAgICBzZXJ2aWNlIHdpbGwgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIG51bWJlciBvZiBzaGFyZHMuCiAgICAgICAgQ29uc3RyYWluaW5nIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGlzIGxpa2VseSB0byByZWR1Y2UKICAgICAgICB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBwaXBlbGluZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQKICAgICAgICB1bmxlc3MgeW91IHJlcXVpcmUgYSBzcGVjaWZpYyBudW1iZXIgb2Ygb3V0cHV0IGZpbGVzLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgbWltZV90eXBlOiBUaGUgTUlNRSB0eXBlIHRvIHVzZSBmb3IgdGhlIHByb2R1Y2VkIGZpbGVzLCBpZiB0aGUgZmlsZXN5c3RlbQogICAgICAgIHN1cHBvcnRzIHNwZWNpZnlpbmcgTUlNRSB0eXBlcy4KCiAgICBSZXR1cm5zOgogICAgICBBIFdyaXRlVG9BdnJvIHRyYW5zZm9ybSB1c2FibGUgZm9yIHdyaXRpbmcuCiAgICAiIiIKICAgIHNlbGYuX3NpbmsgPSBfQXZyb1NpbmsoZmlsZV9wYXRoX3ByZWZpeCwgc2NoZW1hLCBjb2RlYywgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3NoYXJkcywgc2hhcmRfbmFtZV90ZW1wbGF0ZSwgbWltZV90eXBlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCB8IGJlYW0uaW8uaW9iYXNlLldyaXRlKHNlbGYuX3NpbmspCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzaW5rX2RkJzogc2VsZi5fc2lua30KCgpjbGFzcyBfQXZyb1NpbmsoZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rKToKICAiIiJBIHNpbmsgdG8gYXZybyBmaWxlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIHNjaGVtYSwKICAgICAgICAgICAgICAgY29kZWMsCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHMsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICAgICAgIG1pbWVfdHlwZSk6CiAgICBzdXBlcihfQXZyb1NpbmssIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD1maWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPXNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29kZXI9Tm9uZSwKICAgICAgICBtaW1lX3R5cGU9bWltZV90eXBlLAogICAgICAgICMgQ29tcHJlc3Npb24gaGFwcGVucyBhdCB0aGUgYmxvY2sgbGV2ZWwgdXNpbmcgdGhlIHN1cHBsaWVkIGNvZGVjLCBhbmQKICAgICAgICAjIG5vdCBhdCB0aGUgZmlsZSBsZXZlbC4KICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEKQogICAgc2VsZi5fc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLl9jb2RlYyA9IGNvZGVjCgogIGRlZiBvcGVuKHNlbGYsIHRlbXBfcGF0aCk6CiAgICBmaWxlX2hhbmRsZSA9IHN1cGVyKF9BdnJvU2luaywgc2VsZikub3Blbih0ZW1wX3BhdGgpCiAgICByZXR1cm4gYXZyby5kYXRhZmlsZS5EYXRhRmlsZVdyaXRlcigKICAgICAgICBmaWxlX2hhbmRsZSwgYXZyby5pby5EYXR1bVdyaXRlcigpLCBzZWxmLl9zY2hlbWEsIHNlbGYuX2NvZGVjKQoKICBkZWYgd3JpdGVfcmVjb3JkKHNlbGYsIHdyaXRlciwgdmFsdWUpOgogICAgd3JpdGVyLmFwcGVuZCh2YWx1ZSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHN1cGVyKHNlbGYuX19jbGFzc19fLCBzZWxmKS5kaXNwbGF5X2RhdGEoKQogICAgcmVzWydjb2RlYyddID0gc3RyKHNlbGYuX2NvZGVjKQogICAgcmVzWydzY2hlbWEnXSA9IHN0cihzZWxmLl9zY2hlbWEpCiAgICByZXR1cm4gcmVzCn1yHgMAAChYCwAAAF9BdnJvU291cmNlWAUAAABjbGFzc01OAU16AYdYDwAAAF9BdnJvQmxvY2suc2l6ZVgDAAAAZGVmTR8BTSEBh1gJAAAAX0F2cm9TaW5rWAUAAABjbGFzc02vAU3UAYdYFQAAAFJlYWRGcm9tQXZyby5fX2luaXRfX1gDAAAAZGVmS0ZLiodYLQAAAF9BdnJvVXRpbHMuYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlclgDAAAAZGVmS/RNCQGHWBgAAABSZWFkQWxsRnJvbUF2cm8uX19pbml0X19YAwAAAGRlZkubS6qHWB8AAABfQXZyb1V0aWxzLnJlYWRfYmxvY2tfZnJvbV9maWxlWAMAAABkZWZL1Uvzh1gPAAAAUmVhZEFsbEZyb21BdnJvWAUAAABjbGFzc0uSS62HWBMAAABfQXZyb0Jsb2NrLl9faW5pdF9fWAMAAABkZWZNFAFNHgGHWBYAAABfQXZyb0Jsb2NrLm51bV9yZWNvcmRzWAMAAABkZWZNPwFNQQGHWBYAAABfQXZyb1NpbmsuZGlzcGxheV9kYXRhWAMAAABkZWZNzwFN1AGHWAwAAABSZWFkRnJvbUF2cm9YBQAAAGNsYXNzS0JLkIdYIwAAAF9BdnJvVXRpbHMucmVhZF9tZXRhX2RhdGFfZnJvbV9maWxlWAMAAABkZWZLsUvUh1gTAAAAX2NyZWF0ZV9hdnJvX3NvdXJjZVgDAAAAZGVmTQsBTQ8Bh1gKAAAAX0F2cm9CbG9ja1gFAAAAY2xhc3NNEQFNTAGHWBYAAABfQXZyb1Npbmsud3JpdGVfcmVjb3JkWAMAAABkZWZNzAFNzgGHWC8AAABfQXZyb1NvdXJjZS5yZWFkX3JlY29yZHMuc3BsaXRfcG9pbnRzX3VuY2xhaW1lZFgDAAAAZGVmTVsBTWMBh1gcAAAAX0F2cm9CbG9jay5fZGVjb21wcmVzc19ieXRlc1gDAAAAZGVmTSUBTT4Bh1gWAAAAUmVhZEFsbEZyb21BdnJvLmV4cGFuZFgDAAAAZGVmS6tLrYdYGAAAAFdyaXRlVG9BdnJvLmRpc3BsYXlfZGF0YVgDAAAAZGVmTasBTa0Bh1gYAAAAX0F2cm9Tb3VyY2UucmVhZF9yZWNvcmRzWAMAAABkZWZNWAFNegGHWBIAAABfQXZyb0Jsb2NrLnJlY29yZHNYAwAAAGRlZk1CAU1MAYdYFAAAAFdyaXRlVG9BdnJvLl9faW5pdF9fWAMAAABkZWZNfwFNpwGHWBEAAABfQXZyb0Jsb2NrLm9mZnNldFgDAAAAZGVmTSIBTSQBh1gTAAAAUmVhZEZyb21BdnJvLmV4cGFuZFgDAAAAZGVmS4tLjYdYCgAAAF9BdnJvVXRpbHNYBQAAAGNsYXNzS69NCQGHWBkAAABSZWFkRnJvbUF2cm8uZGlzcGxheV9kYXRhWAMAAABkZWZLjkuQh1gOAAAAX0F2cm9TaW5rLm9wZW5YAwAAAGRlZk3HAU3LAYdYCwAAAFdyaXRlVG9BdnJvWAUAAABjbGFzc018AU2tAYdYEgAAAF9BdnJvU2luay5fX2luaXRfX1gDAAAAZGVmTbIBTcYBh1gSAAAAV3JpdGVUb0F2cm8uZXhwYW5kWAMAAABkZWZNqAFNqgGHdX1yHwMAAChYEwAAAFJlYWRGcm9tQXZyby5leHBhbmRYFQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pb3IgAwAAWBkAAABSZWFkRnJvbUF2cm8uZGlzcGxheV9kYXRhaiADAABYFgAAAFJlYWRBbGxGcm9tQXZyby5leHBhbmRqIAMAAFgLAAAAV3JpdGVUb0F2cm9qIAMAAFgSAAAAV3JpdGVUb0F2cm8uZXhwYW5kaiADAABYDwAAAFJlYWRBbGxGcm9tQXZyb2ogAwAAWBgAAABXcml0ZVRvQXZyby5kaXNwbGF5X2RhdGFqIAMAAFgMAAAAUmVhZEZyb21BdnJvaiADAAB1aIpYFQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pb3IhAwAAhYFyIgMAAH1yIwMAAGJ0VR1hcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3IkAwAAKFi8JAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJEZWZpbmVzIHRoZSBhY3Rpb25zIHZhcmlvdXMgYnl0ZWNvZGVzIGhhdmUgb24gdGhlIGZyYW1lLgoKRWFjaCBmdW5jdGlvbiBoZXJlIGNvcnJlc3BvbmRzIHRvIGEgYnl0ZWNvZGUgZG9jdW1lbnRlZCBpbgpodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAobXV0YWJsZSkKRnJhbWVTdGF0ZSBvYmplY3QsIHRoZSBzZWNvbmQgdGhlIGludGVnZXIgb3Bjb2RlIGFyZ3VtZW50LgoKQnl0ZWNvZGVzIHdpdGggbW9yZSBjb21wbGljYXRlZCBiZWhhdmlvciAoZS5nLiBtb2RpZnlpbmcgdGhlIHByb2dyYW0gY291bnRlcikKYXJlIGhhbmRsZWQgaW5saW5lIHJhdGhlciB0aGFuIGhlcmUuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHN5cwppbXBvcnQgdHlwZXMKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQoKaW1wb3J0IHNpeAoKZnJvbSAuIGltcG9ydCB0eXBlaGludHMKZnJvbSAudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IEJvdW5kTWV0aG9kCmZyb20gLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBDb25zdApmcm9tIC50cml2aWFsX2luZmVyZW5jZSBpbXBvcnQgZWxlbWVudF90eXBlCmZyb20gLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCB1bmlvbgpmcm9tIC50eXBlaGludHMgaW1wb3J0IEFueQpmcm9tIC50eXBlaGludHMgaW1wb3J0IERpY3QKZnJvbSAudHlwZWhpbnRzIGltcG9ydCBJdGVyYWJsZQpmcm9tIC50eXBlaGludHMgaW1wb3J0IExpc3QKZnJvbSAudHlwZWhpbnRzIGltcG9ydCBUdXBsZQpmcm9tIC50eXBlaGludHMgaW1wb3J0IFVuaW9uCgoKZGVmIHBvcF9vbmUoc3RhdGUsIHVudXNlZF9hcmcpOgogIGRlbCBzdGF0ZS5zdGFja1stMTpdCgoKZGVmIHBvcF90d28oc3RhdGUsIHVudXNlZF9hcmcpOgogIGRlbCBzdGF0ZS5zdGFja1stMjpdCgoKZGVmIHBvcF90aHJlZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgZGVsIHN0YXRlLnN0YWNrWy0zOl0KCgpkZWYgcHVzaF92YWx1ZSh2KToKCiAgZGVmIHB1c2hlcihzdGF0ZSwgdW51c2VkX2FyZyk6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQodikKCiAgcmV0dXJuIHB1c2hlcgoKCmRlZiBub3AodW51c2VkX3N0YXRlLCB1bnVzZWRfYXJnKToKICBwYXNzCgoKZGVmIHBvcF90b3Aoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrLnBvcCgpCgoKZGVmIHJvdF9uKHN0YXRlLCBuKToKICBzdGF0ZS5zdGFja1stbjpdID0gW3N0YXRlLnN0YWNrWy0xXV0gKyBzdGF0ZS5zdGFja1stbjotMV0KCgpkZWYgcm90X3R3byhzdGF0ZSwgdW51c2VkX2FyZyk6CiAgcm90X24oc3RhdGUsIDIpCgoKZGVmIHJvdF90aHJlZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgcm90X24oc3RhdGUsIDMpCgoKZGVmIHJvdF9mb3VyKHN0YXRlLCB1bnVzZWRfYXJnKToKICByb3RfbihzdGF0ZSwgNCkKCgpkZWYgZHVwX3RvcChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKHN0YXRlLnN0YWNrWy0xXSkKCgpkZWYgdW5hcnkoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrWy0xXSA9IENvbnN0LnVud3JhcChzdGF0ZS5zdGFja1stMV0pCgoKdW5hcnlfcG9zaXRpdmUgPSB1bmFyeV9uZWdhdGl2ZSA9IHVuYXJ5X2ludmVydCA9IHVuYXJ5CgoKZGVmIHVuYXJ5X25vdChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2tbLTFdID0gYm9vbAoKCmRlZiB1bmFyeV9jb252ZXJ0KHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFja1stMV0gPSBzdHIKCgpkZWYgZ2V0X2l0ZXIoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChJdGVyYWJsZVtlbGVtZW50X3R5cGUoc3RhdGUuc3RhY2sucG9wKCkpXSkKCgpkZWYgc3ltbWV0cmljX2JpbmFyeV9vcChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgIyBUT0RPKHJvYmVydHdiKTogVGhpcyBtYXkgbm90IGJlIGVudGlyZWx5IGNvcnJlY3QuLi4KICBiLCBhID0gc3RhdGUuc3RhY2sucG9wKCksIHN0YXRlLnN0YWNrLnBvcCgpCiAgaWYgYSA9PSBiOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKGEpCiAgZWxpZiB0eXBlKGEpID09IHR5cGUoYikgYW5kIGlzaW5zdGFuY2UoYSwgdHlwZWhpbnRzLlNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKHR5cGUoYSkodW5pb24oZWxlbWVudF90eXBlKGEpLCBlbGVtZW50X3R5cGUoYikpKSkKICBlbHNlOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKEFueSkKCgojIEV4Y2VwdCBmb3IgaW50ICoqIC1pbnQKYmluYXJ5X3Bvd2VyID0gaW5wbGFjZV9wb3dlciA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X211bHRpcGx5ID0gaW5wbGFjZV9tdWx0aXBseSA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X2RpdmlkZSA9IGlucGxhY2VfZGl2aWRlID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfZmxvb3JfZGl2aWRlID0gaW5wbGFjZV9mbG9vcl9kaXZpZGUgPSBzeW1tZXRyaWNfYmluYXJ5X29wCgoKZGVmIGJpbmFyeV90cnVlX2RpdmlkZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgdSA9IHVuaW9uKHN0YXRlLnN0YWNrLnBvcCgpLCBzdGF0ZS5zdGFjay5wb3ApCiAgaWYgdSA9PSBpbnQ6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoZmxvYXQpCiAgZWxzZToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZCh1KQoKCmlucGxhY2VfdHJ1ZV9kaXZpZGUgPSBiaW5hcnlfdHJ1ZV9kaXZpZGUKCmJpbmFyeV9tb2R1bG8gPSBpbnBsYWNlX21vZHVsbyA9IHN5bW1ldHJpY19iaW5hcnlfb3AKIyBUT0RPKHJvYmVydHdiKTogVHVwbGUgYWRkLgpiaW5hcnlfYWRkID0gaW5wbGFjZV9hZGQgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9zdWJ0cmFjdCA9IGlucGxhY2Vfc3VidHJhY3QgPSBzeW1tZXRyaWNfYmluYXJ5X29wCgoKZGVmIGJpbmFyeV9zdWJzY3Ioc3RhdGUsIHVudXNlZF9hcmcpOgogIGluZGV4ID0gc3RhdGUuc3RhY2sucG9wKCkKICBiYXNlID0gc3RhdGUuc3RhY2sucG9wKCkKICBpZiBiYXNlIGluIChzdHIsIHNpeC50ZXh0X3R5cGUpOgogICAgb3V0ID0gYmFzZQogIGVsaWYgKGlzaW5zdGFuY2UoaW5kZXgsIENvbnN0KSBhbmQgaXNpbnN0YW5jZShpbmRleC52YWx1ZSwgaW50KQogICAgICAgIGFuZCBpc2luc3RhbmNlKGJhc2UsIHR5cGVoaW50cy5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KSk6CiAgICBjb25zdF9pbmRleCA9IGluZGV4LnZhbHVlCiAgICBpZiAtbGVuKGJhc2UudHVwbGVfdHlwZXMpIDwgY29uc3RfaW5kZXggPCBsZW4oYmFzZS50dXBsZV90eXBlcyk6CiAgICAgIG91dCA9IGJhc2UudHVwbGVfdHlwZXNbY29uc3RfaW5kZXhdCiAgICBlbHNlOgogICAgICBvdXQgPSBlbGVtZW50X3R5cGUoYmFzZSkKICBlbHNlOgogICAgb3V0ID0gZWxlbWVudF90eXBlKGJhc2UpCiAgc3RhdGUuc3RhY2suYXBwZW5kKG91dCkKCgojIEFzIGZhciBhcyB0eXBlcyBhcmUgY29uY2VybmVkLgpiaW5hcnlfbHNoaWZ0ID0gaW5wbGFjZV9sc2hpZnQgPSBiaW5hcnlfcnNoaWZ0ID0gaW5wbGFjZV9yc2hpZnQgPSBwb3BfdG9wCgpiaW5hcnlfYW5kID0gaW5wbGFjZV9hbmQgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV94b3IgPSBpbnBsYWNlX3hvciA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X29yID0gaW5wYWxjZV9vciA9IHN5bW1ldHJpY19iaW5hcnlfb3AKCiMgQXMgZmFyIGFzIHR5cGVzIGFyZSBjb25jZXJuZWQuCnNsaWNlXzAgPSBub3AKc2xpY2VfMSA9IHNsaWNlXzIgPSBwb3BfdG9wCnNsaWNlXzMgPSBwb3BfdHdvCnN0b3JlX3NsaWNlXzAgPSBzdG9yZV9zbGljZV8xID0gc3RvcmVfc2xpY2VfMiA9IHN0b3JlX3NsaWNlXzMgPSBub3AKZGVsZXRlX3NsaWNlXzAgPSBkZWxldGVfc2xpY2VfMSA9IGRlbGV0ZV9zbGljZV8yID0gZGVsZXRlX3NsaWNlXzMgPSBub3AKCgpkZWYgc3RvcmVfc3Vic2NyKHVudXNlZF9zdGF0ZSwgdW51c2VkX2FyZ3MpOgogICMgVE9ETyhyb2JlcnR3Yik6IFVwZGF0ZSBlbGVtZW50L3ZhbHVlIHR5cGUgb2YgaXRlcmFibGUvZGljdC4KICBwYXNzCgoKYmluYXJ5X2RpdmlkZSA9IGJpbmFyeV9mbG9vcl9kaXZpZGUgPSBiaW5hcnlfbW9kdWxvID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfZGl2aWRlID0gYmluYXJ5X2Zsb29yX2RpdmlkZSA9IGJpbmFyeV9tb2R1bG8gPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9kaXZpZGUgPSBiaW5hcnlfZmxvb3JfZGl2aWRlID0gYmluYXJ5X21vZHVsbyA9IHN5bW1ldHJpY19iaW5hcnlfb3AKCiMgcHJpbnRfZXhwcgpwcmludF9pdGVtID0gcG9wX3RvcAojIHByaW50X2l0ZW1fdG8KcHJpbnRfbmV3bGluZSA9IG5vcAoKIyBwcmludF9uZXdsaW5lX3RvCgoKIyBicmVha19sb29wCiMgY29udGludWVfbG9vcApkZWYgbGlzdF9hcHBlbmQoc3RhdGUsIGFyZyk6CiAgbmV3X2VsZW1lbnRfdHlwZSA9IENvbnN0LnVud3JhcChzdGF0ZS5zdGFjay5wb3AoKSkKICBzdGF0ZS5zdGFja1stYXJnXSA9IExpc3RbVW5pb25bZWxlbWVudF90eXBlKHN0YXRlLnN0YWNrWy1hcmddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2VsZW1lbnRfdHlwZV1dCgoKbG9hZF9sb2NhbHMgPSBwdXNoX3ZhbHVlKERpY3Rbc3RyLCBBbnldKQoKIyByZXR1cm5fdmFsdWUKIyB5aWVsZF92YWx1ZQojIGltcG9ydF9zdGFyCmV4ZWNfc3RtdCA9IHBvcF90aHJlZQojIHBvcF9ibG9jawojIGVuZF9maW5hbGx5CmJ1aWxkX2NsYXNzID0gcG9wX3RocmVlCgojIHNldHVwX3dpdGgKIyB3aXRoX2NsZWFudXAKCgojIHN0b3JlX25hbWUKIyBkZWxldGVfbmFtZQpkZWYgdW5wYWNrX3NlcXVlbmNlKHN0YXRlLCBhcmcpOgogIHQgPSBzdGF0ZS5zdGFjay5wb3AoKQogIGlmIGlzaW5zdGFuY2UodCwgQ29uc3QpOgogICAgdHJ5OgogICAgICB1bnBhY2tlZCA9IFtDb25zdCh0aSkgZm9yIHRpIGluIHQudmFsdWVdCiAgICAgIGlmIGxlbih1bnBhY2tlZCkgIT0gYXJnOgogICAgICAgIHVucGFja2VkID0gW0FueV0gKiBhcmcKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIHVucGFja2VkID0gW0FueV0gKiBhcmcKICBlbGlmIChpc2luc3RhbmNlKHQsIHR5cGVoaW50cy5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KQogICAgICAgIGFuZCBsZW4odC50dXBsZV90eXBlcykgPT0gYXJnKToKICAgIHVucGFja2VkID0gbGlzdCh0LnR1cGxlX3R5cGVzKQogIGVsc2U6CiAgICB1bnBhY2tlZCA9IFtlbGVtZW50X3R5cGUodCldICogYXJnCiAgc3RhdGUuc3RhY2sgKz0gcmV2ZXJzZWQodW5wYWNrZWQpCgoKZGVmIGR1cF90b3B4KHN0YXRlLCBhcmcpOgogIHN0YXRlLnN0YWNrICs9IHN0YXRlWy1hcmc6XQoKCnN0b3JlX2F0dHIgPSBwb3BfdG9wCmRlbGV0ZV9hdHRyID0gbm9wCnN0b3JlX2dsb2JhbCA9IHBvcF90b3AKZGVsZXRlX2dsb2JhbCA9IG5vcAoKCmRlZiBsb2FkX2NvbnN0KHN0YXRlLCBhcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChzdGF0ZS5jb25zdF90eXBlKGFyZykpCgoKbG9hZF9uYW1lID0gcHVzaF92YWx1ZShBbnkpCgoKZGVmIGJ1aWxkX3R1cGxlKHN0YXRlLCBhcmcpOgogIGlmIGFyZyA9PSAwOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKFR1cGxlWygpXSkKICBlbHNlOgogICAgc3RhdGUuc3RhY2tbLWFyZzpdID0gW1R1cGxlW1tDb25zdC51bndyYXAodCkgZm9yIHQgaW4gc3RhdGUuc3RhY2tbLWFyZzpdXV1dCgoKZGVmIGJ1aWxkX2xpc3Qoc3RhdGUsIGFyZyk6CiAgaWYgYXJnID09IDA6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoTGlzdFtVbmlvblsoKV1dKQogIGVsc2U6CiAgICBzdGF0ZS5zdGFja1stYXJnOl0gPSBbTGlzdFtyZWR1Y2UodW5pb24sIHN0YXRlLnN0YWNrWy1hcmc6XSwgVW5pb25bKCldKV1dCgoKYnVpbGRfbWFwID0gcHVzaF92YWx1ZShEaWN0W0FueSwgQW55XSkKCgpkZWYgbG9hZF9hdHRyKHN0YXRlLCBhcmcpOgogICIiIlJlcGxhY2VzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBUT1MsIHdpdGgKICBnZXRhdHRyKFRPUywgY29fbmFtZXNbYXJnXSkKICAiIiIKICBvID0gc3RhdGUuc3RhY2sucG9wKCkKICBuYW1lID0gc3RhdGUuZ2V0X25hbWUoYXJnKQogIGlmIGlzaW5zdGFuY2UobywgQ29uc3QpIGFuZCBoYXNhdHRyKG8udmFsdWUsIG5hbWUpOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKENvbnN0KGdldGF0dHIoby52YWx1ZSwgbmFtZSkpKQogIGVsaWYgKGluc3BlY3QuaXNjbGFzcyhvKSBhbmQKICAgICAgICBpc2luc3RhbmNlKGdldGF0dHIobywgbmFtZSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAodHlwZXMuTWV0aG9kVHlwZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSkpOgogICAgIyBUT0RPKGx1a2Utemh1KTogU3VwcG9ydCBvdGhlciBjYWxsYWJsZSBvYmplY3RzCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CiAgICAgIGZ1bmMgPSBnZXRhdHRyKG8sIG5hbWUpLl9fZnVuY19fCiAgICBlbHNlOgogICAgICBmdW5jID0gZ2V0YXR0cihvLCBuYW1lKSAjIFB5dGhvbiAzIGhhcyBubyB1bmJvdW5kIG1ldGhvZHMKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChDb25zdChCb3VuZE1ldGhvZChmdW5jLCBvKSkpCiAgZWxzZToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChBbnkpCgoKZGVmIGNvbXBhcmVfb3Aoc3RhdGUsIHVudXNlZF9hcmcpOgogICMgQ291bGQgcmVhbGx5IGJlIGFueXRoaW5nLi4uCiAgc3RhdGUuc3RhY2tbLTI6XSA9IFtib29sXQoKCmRlZiBpbXBvcnRfbmFtZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2tbLTI6XSA9IFtBbnldCgoKaW1wb3J0X2Zyb20gPSBwdXNoX3ZhbHVlKEFueSkKCiMganVtcAoKIyBmb3JfaXRlcgoKCmRlZiBsb2FkX2dsb2JhbChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuZ2V0X2dsb2JhbChhcmcpKQoKCiMgc2V0dXBfbG9vcAojIHNldHVwX2V4Y2VwdAojIHNldHVwX2ZpbmFsbHkKc3RvcmVfbWFwID0gcG9wX3R3bwoKCmRlZiBsb2FkX2Zhc3Qoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKHN0YXRlLnZhcnNbYXJnXSkKCgpkZWYgc3RvcmVfZmFzdChzdGF0ZSwgYXJnKToKICBzdGF0ZS52YXJzW2FyZ10gPSBzdGF0ZS5zdGFjay5wb3AoKQoKCmRlZiBkZWxldGVfZmFzdChzdGF0ZSwgYXJnKToKICBzdGF0ZS52YXJzW2FyZ10gPSBBbnkgICMgcmVhbGx5IGFuIGVycm9yCgoKZGVmIGxvYWRfY2xvc3VyZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKEFueSkgICMgcmVhbGx5IGEgQ2VsbAoKCmRlZiBsb2FkX2RlcmVmKHN0YXRlLCBhcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChzdGF0ZS5jbG9zdXJlX3R5cGUoYXJnKSkKIyByYWlzZV92YXJhcmdzCgoKZGVmIGNhbGxfZnVuY3Rpb24oc3RhdGUsIGFyZywgaGFzX3Zhcj1GYWxzZSwgaGFzX2t3PUZhbHNlKToKICAjIFRPRE8ocm9iZXJ0d2IpOiBSZWNvZ25pemUgYnVpbHRpbnMgYW5kIGRhdGFmbG93IG9iamVjdHMKICAjIChlc3BlY2lhbGx5IHNwZWNpYWwgcmV0dXJuIHZhbHVlcykuCiAgcG9wX2NvdW50ID0gKGFyZyAmIDB4RikgKyAoYXJnICYgMHhGMCkgLyA4ICsgMSArIGhhc192YXIgKyBoYXNfa3cKICBzdGF0ZS5zdGFja1stcG9wX2NvdW50Ol0gPSBbQW55XQoKCmRlZiBtYWtlX2Z1bmN0aW9uKHN0YXRlLCBhcmcpOgogICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBhcmd1bWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCiAgIiIiCiAgIyBUT0RPKGx1a2Utemh1KTogSGFuZGxlIGRlZmF1bHQgYXJndW1lbnQgdHlwZXMKICBnbG9iYWxzID0gc3RhdGUuZi5fX2dsb2JhbHNfXyAjIEluaGVyaXRzIGdsb2JhbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZQogIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgIGZ1bmNfY29kZSA9IHN0YXRlLnN0YWNrWy0xXS52YWx1ZQogICAgZnVuYyA9IHR5cGVzLkZ1bmN0aW9uVHlwZShmdW5jX2NvZGUsIGdsb2JhbHMpCiAgZWxzZToKICAgIGZ1bmNfbmFtZSA9IHN0YXRlLnN0YWNrWy0xXS52YWx1ZQogICAgZnVuY19jb2RlID0gc3RhdGUuc3RhY2tbLTJdLnZhbHVlCiAgICBmdW5jID0gdHlwZXMuRnVuY3Rpb25UeXBlKGZ1bmNfY29kZSwgZ2xvYmFscywgbmFtZT1mdW5jX25hbWUpCiAgc3RhdGUuc3RhY2suYXBwZW5kKENvbnN0KGZ1bmMpKQoKCmRlZiBtYWtlX2Nsb3N1cmUoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2tbLWFyZyAtIDI6XSA9IFtBbnldICAjIGEgY2FsbGFibGUKCgpkZWYgYnVpbGRfc2xpY2Uoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2tbLWFyZzpdID0gW0FueV0gICMgYSBzbGljZSBvYmplY3QKCgpkZWYgY2FsbF9mdW5jdGlvbl92YXIoc3RhdGUsIGFyZyk6CiAgY2FsbF9mdW5jdGlvbihzdGF0ZSwgYXJnLCBoYXNfdmFyPVRydWUpCgoKZGVmIGNhbGxfZnVuY3Rpb25fa3coc3RhdGUsIGFyZyk6CiAgY2FsbF9mdW5jdGlvbihzdGF0ZSwgYXJnLCBoYXNfa3c9VHJ1ZSkKCgpkZWYgY2FsbF9mdW5jdGlvbl92YXJfd2soc3RhdGUsIGFyZyk6CiAgY2FsbF9mdW5jdGlvbihzdGF0ZSwgYXJnLCBoYXNfdmFyPVRydWUsIGhhc19rdz1UcnVlKQp9ciUDAAAoWBMAAABzeW1tZXRyaWNfYmluYXJ5X29wWAMAAABkZWZLdkt/h1gHAAAAcm90X3R3b1gDAAAAZGVmS1NLVYdYBwAAAGR1cF90b3BYAwAAAGRlZktfS2GHWAoAAABwdXNoX3ZhbHVlWAMAAABkZWZLP0tFh1gIAAAAZ2V0X2l0ZXJYAwAAAGRlZktyS3SHWAoAAABsb2FkX2RlcmVmWAMAAABkZWZNUwFNVQGHWBEAAABwdXNoX3ZhbHVlLnB1c2hlclgDAAAAZGVmS0FLQ4dYBQAAAHJvdF9uWAMAAABkZWZLT0tRh1gKAAAAc3RvcmVfZmFzdFgDAAAAZGVmTUcBTUkBh1gPAAAAdW5wYWNrX3NlcXVlbmNlWAMAAABkZWZL4Uvwh1gJAAAAbG9hZF9mYXN0WAMAAABkZWZNQwFNRQGHWAoAAABsb2FkX2NvbnN0WAMAAABkZWZL/Ev+h1gJAAAAdW5hcnlfbm90WAMAAABkZWZLaktsh1gLAAAAaW1wb3J0X25hbWVYAwAAAGRlZk0uAU0wAYdYBwAAAHBvcF90b3BYAwAAAGRlZktLS02HWAwAAABsb2FkX2Nsb3N1cmVYAwAAAGRlZk1PAU1RAYdYCAAAAHJvdF9mb3VyWAMAAABkZWZLW0tdh1gFAAAAdW5hcnlYAwAAAGRlZktjS2WHWAkAAABwb3BfdGhyZWVYAwAAAGRlZks7Sz2HWA0AAAB1bmFyeV9jb252ZXJ0WAMAAABkZWZLbktwh1gNAAAAY2FsbF9mdW5jdGlvblgDAAAAZGVmTVgBTV0Bh1gLAAAAZGVsZXRlX2Zhc3RYAwAAAGRlZk1LAU1NAYdYCwAAAGxvYWRfZ2xvYmFsWAMAAABkZWZNOQFNOwGHWAcAAABwb3BfdHdvWAMAAABkZWZLN0s5h1gLAAAAbGlzdF9hcHBlbmRYAwAAAGRlZkvLS8+HWAwAAABtYWtlX2Nsb3N1cmVYAwAAAGRlZk1uAU1wAYdYCwAAAGJ1aWxkX3R1cGxlWAMAAABkZWZNAwFNCAGHWAkAAAByb3RfdGhyZWVYAwAAAGRlZktXS1mHWBQAAABjYWxsX2Z1bmN0aW9uX3Zhcl93a1gDAAAAZGVmTX4BTYABh1gMAAAAc3RvcmVfc3Vic2NyWAMAAABkZWZLuEu7h1gRAAAAY2FsbF9mdW5jdGlvbl92YXJYAwAAAGRlZk12AU14AYdYCwAAAGJ1aWxkX3NsaWNlWAMAAABkZWZNcgFNdAGHWA0AAABtYWtlX2Z1bmN0aW9uWAMAAABkZWZNXwFNbAGHWAoAAABjb21wYXJlX29wWAMAAABkZWZNKQFNLAGHWBIAAABiaW5hcnlfdHJ1ZV9kaXZpZGVYAwAAAGRlZkuIS46HWAgAAABkdXBfdG9weFgDAAAAZGVmS/JL9IdYAwAAAG5vcFgDAAAAZGVmS0dLSYdYCQAAAGxvYWRfYXR0clgDAAAAZGVmTRQBTScBh1gKAAAAYnVpbGRfbGlzdFgDAAAAZGVmTQoBTQ8Bh1gNAAAAYmluYXJ5X3N1YnNjclgDAAAAZGVmS5hLp4dYEAAAAGNhbGxfZnVuY3Rpb25fa3dYAwAAAGRlZk16AU18AYdYBwAAAHBvcF9vbmVYAwAAAGRlZkszSzWHdX1yJgMAAChYEwAAAHN5bW1ldHJpY19iaW5hcnlfb3BYHQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzcicDAABYBwAAAHJvdF90d29qJwMAAFgHAAAAZHVwX3RvcGonAwAAWAoAAABwdXNoX3ZhbHVlaicDAABYCAAAAGdldF9pdGVyaicDAABYCgAAAGxvYWRfZGVyZWZqJwMAAFgFAAAAcm90X25qJwMAAFgKAAAAc3RvcmVfZmFzdGonAwAAWA8AAAB1bnBhY2tfc2VxdWVuY2VqJwMAAFgJAAAAbG9hZF9mYXN0aicDAABYCgAAAGxvYWRfY29uc3RqJwMAAFgJAAAAdW5hcnlfbm90aicDAABYCwAAAGltcG9ydF9uYW1laicDAABYBwAAAHBvcF90b3BqJwMAAFgMAAAAbG9hZF9jbG9zdXJlaicDAABYCAAAAHJvdF9mb3VyaicDAABYBQAAAHVuYXJ5aicDAABYCQAAAHBvcF90aHJlZWonAwAAWA0AAAB1bmFyeV9jb252ZXJ0aicDAABYDQAAAGNhbGxfZnVuY3Rpb25qJwMAAFgLAAAAZGVsZXRlX2Zhc3RqJwMAAFgLAAAAbG9hZF9nbG9iYWxqJwMAAFgHAAAAcG9wX3R3b2onAwAAWAsAAABsaXN0X2FwcGVuZGonAwAAWAwAAABtYWtlX2Nsb3N1cmVqJwMAAFgLAAAAYnVpbGRfdHVwbGVqJwMAAFgJAAAAcm90X3RocmVlaicDAABYFAAAAGNhbGxfZnVuY3Rpb25fdmFyX3draicDAABYDAAAAHN0b3JlX3N1YnNjcmonAwAAWBEAAABjYWxsX2Z1bmN0aW9uX3ZhcmonAwAAWAsAAABidWlsZF9zbGljZWonAwAAWA0AAABtYWtlX2Z1bmN0aW9uaicDAABYCgAAAGNvbXBhcmVfb3BqJwMAAFgSAAAAYmluYXJ5X3RydWVfZGl2aWRlaicDAABYCAAAAGR1cF90b3B4aicDAABYAwAAAG5vcGonAwAAWAkAAABsb2FkX2F0dHJqJwMAAFgKAAAAYnVpbGRfbGlzdGonAwAAWA0AAABiaW5hcnlfc3Vic2NyaicDAABYEAAAAGNhbGxfZnVuY3Rpb25fa3dqJwMAAFgHAAAAcG9wX29uZWonAwAAdWiKWB0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3IoAwAAhYFyKQMAAH1yKgMAAGJ0cisDAABVGWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0oWNtQAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiRmlsZSBzeXN0ZW0gYWJzdHJhY3Rpb24gZm9yIGZpbGUtYmFzZWQgc291cmNlcyBhbmQgc2lua3MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFiYwppbXBvcnQgYnoyCmltcG9ydCBjU3RyaW5nSU8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCB0aW1lCmltcG9ydCB6bGliCgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiBpbXBvcnQgQmVhbVBsdWdpbgoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUgPSAxNiAqIDEwMjQgKiAxMDI0CgpfX2FsbF9fID0gWydDb21wcmVzc2lvblR5cGVzJywgJ0NvbXByZXNzZWRGaWxlJywgJ0ZpbGVNZXRhZGF0YScsICdGaWxlU3lzdGVtJywKICAgICAgICAgICAnTWF0Y2hSZXN1bHQnXQoKCmNsYXNzIENvbXByZXNzaW9uVHlwZXMob2JqZWN0KToKICAiIiJFbnVtLWxpa2UgY2xhc3MgcmVwcmVzZW50aW5nIGtub3duIGNvbXByZXNzaW9uIHR5cGVzLiIiIgoKICAjIERldGVjdCBjb21wcmVzc2lvbiBiYXNlZCBvbiBmaWxlbmFtZSBleHRlbnNpb24uCiAgIwogICMgVGhlIGZvbGxvd2luZyBleHRlbnNpb25zIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBieSBhdXRvLWRldGVjdGlvbjoKICAjICAgLmJ6MiAoaW1wbGllcyBCWklQMiBhcyBkZXNjcmliZWQgYmVsb3cpLgogICMgICAuZ3ogIChpbXBsaWVzIEdaSVAgYXMgZGVzY3JpYmVkIGJlbG93KQogICMgQW55IG5vbi1yZWNvZ25pemVkIGV4dGVuc2lvbiBpbXBsaWVzIFVOQ09NUFJFU1NFRCBhcyBkZXNjcmliZWQgYmVsb3cuCiAgQVVUTyA9ICdhdXRvJwoKICAjIEJaSVAyIGNvbXByZXNzaW9uLgogIEJaSVAyID0gJ2J6aXAyJwoKICAjIEdaSVAgY29tcHJlc3Npb24gKGRlZmxhdGUgd2l0aCBHWklQIGhlYWRlcnMpLgogIEdaSVAgPSAnZ3ppcCcKCiAgIyBVbmNvbXByZXNzZWQgKGkuZS4sIG1heSBiZSBzcGxpdCkuCiAgVU5DT01QUkVTU0VEID0gJ3VuY29tcHJlc3NlZCcKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY2xzLCBjb21wcmVzc2lvbl90eXBlKToKICAgICIiIlJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29tcHJlc3Npb24gdHlwZXMsIEZhbHNlIG90aGVyd2lzZS4iIiIKICAgIHR5cGVzID0gc2V0KFsKICAgICAgICBDb21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5CWklQMiwKICAgICAgICBDb21wcmVzc2lvblR5cGVzLkdaSVAsCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQKICAgIF0pCiAgICByZXR1cm4gY29tcHJlc3Npb25fdHlwZSBpbiB0eXBlcwoKICBAY2xhc3NtZXRob2QKICBkZWYgbWltZV90eXBlKGNscywgY29tcHJlc3Npb25fdHlwZSwgZGVmYXVsdD0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk6CiAgICBtaW1lX3R5cGVzX2J5X2NvbXByZXNzaW9uX3R5cGUgPSB7CiAgICAgICAgY2xzLkJaSVAyOiAnYXBwbGljYXRpb24veC1iejInLAogICAgICAgIGNscy5HWklQOiAnYXBwbGljYXRpb24veC1nemlwJywKICAgIH0KICAgIHJldHVybiBtaW1lX3R5cGVzX2J5X2NvbXByZXNzaW9uX3R5cGUuZ2V0KGNvbXByZXNzaW9uX3R5cGUsIGRlZmF1bHQpCgogIEBjbGFzc21ldGhvZAogIGRlZiBkZXRlY3RfY29tcHJlc3Npb25fdHlwZShjbHMsIGZpbGVfcGF0aCk6CiAgICAiIiJSZXR1cm5zIHRoZSBjb21wcmVzc2lvbiB0eXBlIG9mIGEgZmlsZSAoYmFzZWQgb24gaXRzIHN1ZmZpeCkuIiIiCiAgICBjb21wcmVzc2lvbl90eXBlc19ieV9zdWZmaXggPSB7Jy5iejInOiBjbHMuQlpJUDIsICcuZ3onOiBjbHMuR1pJUH0KICAgIGxvd2VyY2FzZWRfcGF0aCA9IGZpbGVfcGF0aC5sb3dlcigpCiAgICBmb3Igc3VmZml4LCBjb21wcmVzc2lvbl90eXBlIGluIGNvbXByZXNzaW9uX3R5cGVzX2J5X3N1ZmZpeC5pdGVyaXRlbXMoKToKICAgICAgaWYgbG93ZXJjYXNlZF9wYXRoLmVuZHN3aXRoKHN1ZmZpeCk6CiAgICAgICAgcmV0dXJuIGNvbXByZXNzaW9uX3R5cGUKICAgIHJldHVybiBjbHMuVU5DT01QUkVTU0VECgoKY2xhc3MgQ29tcHJlc3NlZEZpbGUob2JqZWN0KToKICAiIiJGaWxlIHdyYXBwZXIgZm9yIGVhc2llciBoYW5kbGluZyBvZiBjb21wcmVzc2VkIGZpbGVzLiIiIgogICMgWFhYOiBUaGlzIGNsYXNzIGlzIG5vdCB0aHJlYWQgc2FmZSBpbiB0aGUgcmVhZCBwYXRoLgoKICAjIFRoZSBiaXQgbWFzayB0byB1c2UgZm9yIHRoZSB3Yml0cyBwYXJhbWV0ZXJzIG9mIHRoZSB6bGliIGNvbXByZXNzb3IgYW5kCiAgIyBkZWNvbXByZXNzb3Igb2JqZWN0cy4KICBfZ3ppcF9tYXNrID0gemxpYi5NQVhfV0JJVFMgfCAxNiAgIyBNYXNrIHdoZW4gdXNpbmcgR1pJUCBoZWFkZXJzLgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZW9iaiwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkdaSVAsCiAgICAgICAgICAgICAgIHJlYWRfc2l6ZT1ERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUpOgogICAgaWYgbm90IGZpbGVvYmo6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZpbGUgb2JqZWN0IG11c3Qgbm90IGJlIE5vbmUnKQoKICAgIGlmIG5vdCBDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY29tcHJlc3Npb25fdHlwZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignY29tcHJlc3Npb25fdHlwZSBtdXN0IGJlIENvbXByZXNzaW9uVHlwZSBvYmplY3QgYnV0ICcKICAgICAgICAgICAgICAgICAgICAgICd3YXMgJXMnICUgdHlwZShjb21wcmVzc2lvbl90eXBlKSkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgaW4gKENvbXByZXNzaW9uVHlwZXMuQVVUTywgQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdDYW5ub3QgY3JlYXRlIG9iamVjdCB3aXRoIHVuc3BlY2lmaWVkIG9yIG5vIGNvbXByZXNzaW9uJykKCiAgICBzZWxmLl9maWxlID0gZmlsZW9iagogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKCiAgICBpZiBzZWxmLl9maWxlLnRlbGwoKSAhPSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdGaWxlIG9iamVjdCBtdXN0IGJlIGF0IHBvc2l0aW9uIDAgYnV0IHdhcyAlZCcgJQogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUudGVsbCgpKQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgPSBOb25lCgogICAgaWYgc2VsZi5yZWFkYWJsZSgpOgogICAgICBzZWxmLl9yZWFkX3NpemUgPSByZWFkX3NpemUKICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICBzZWxmLl9yZWFkX3Bvc2l0aW9uID0gMAogICAgICBzZWxmLl9yZWFkX2VvZiA9IEZhbHNlCgogICAgICBzZWxmLl9pbml0aWFsaXplX2RlY29tcHJlc3NvcigpCiAgICBlbHNlOgogICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogICAgaWYgc2VsZi53cml0ZWFibGUoKToKICAgICAgc2VsZi5faW5pdGlhbGl6ZV9jb21wcmVzc29yKCkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfaW5pdGlhbGl6ZV9kZWNvbXByZXNzb3Ioc2VsZik6CiAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQlpJUDI6CiAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQogICAgZWxzZToKICAgICAgYXNzZXJ0IHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5HWklQCiAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHpsaWIuZGVjb21wcmVzc29iaihzZWxmLl9nemlwX21hc2spCgogIGRlZiBfaW5pdGlhbGl6ZV9jb21wcmVzc29yKHNlbGYpOgogICAgaWYgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkJaSVAyOgogICAgICBzZWxmLl9jb21wcmVzc29yID0gYnoyLkJaMkNvbXByZXNzb3IoKQogICAgZWxzZToKICAgICAgYXNzZXJ0IHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5HWklQCiAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCBzZWxmLl9nemlwX21hc2spCgogIGRlZiByZWFkYWJsZShzZWxmKToKICAgIG1vZGUgPSBzZWxmLl9maWxlLm1vZGUKICAgIHJldHVybiAncicgaW4gbW9kZSBvciAnYScgaW4gbW9kZQoKICBkZWYgd3JpdGVhYmxlKHNlbGYpOgogICAgbW9kZSA9IHNlbGYuX2ZpbGUubW9kZQogICAgcmV0dXJuICd3JyBpbiBtb2RlIG9yICdhJyBpbiBtb2RlCgogIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKICAgICIiIldyaXRlIGRhdGEgdG8gZmlsZS4iIiIKICAgIGlmIG5vdCBzZWxmLl9jb21wcmVzc29yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21wcmVzc29yIG5vdCBpbml0aWFsaXplZCcpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24gKz0gbGVuKGRhdGEpCiAgICBjb21wcmVzc2VkID0gc2VsZi5fY29tcHJlc3Nvci5jb21wcmVzcyhkYXRhKQogICAgaWYgY29tcHJlc3NlZDoKICAgICAgc2VsZi5fZmlsZS53cml0ZShjb21wcmVzc2VkKQoKICBkZWYgX2ZldGNoX3RvX2ludGVybmFsX2J1ZmZlcihzZWxmLCBudW1fYnl0ZXMpOgogICAgIiIiRmV0Y2ggdXAgdG8gbnVtX2J5dGVzIGludG8gdGhlIGludGVybmFsIGJ1ZmZlci4iIiIKICAgIGlmIChub3Qgc2VsZi5fcmVhZF9lb2YgYW5kIHNlbGYuX3JlYWRfcG9zaXRpb24gPiAwIGFuZAogICAgICAgIChzZWxmLl9yZWFkX2J1ZmZlci50ZWxsKCkgLSBzZWxmLl9yZWFkX3Bvc2l0aW9uKSA8IG51bV9ieXRlcyk6CiAgICAgICMgVGhlcmUgYXJlbid0IGVub3VnaCBudW1iZXIgb2YgYnl0ZXMgdG8gYWNjb21tb2RhdGUgYSByZWFkLCBzbyB3ZQogICAgICAjIHByZXBhcmUgZm9yIGEgcG9zc2libHkgbGFyZ2UgcmVhZCBieSBjbGVhcmluZyB1cCBhbGwgaW50ZXJuYWwgYnVmZmVycwogICAgICAjIGJ1dCB3aXRob3V0IGRyb3BwaW5nIGFueSBwcmV2aW91cyBoZWxkIGRhdGEuCiAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLnNlZWsoc2VsZi5fcmVhZF9wb3NpdGlvbikKICAgICAgZGF0YSA9IHNlbGYuX3JlYWRfYnVmZmVyLnJlYWQoKQogICAgICBzZWxmLl9jbGVhcl9yZWFkX2J1ZmZlcigpCiAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLndyaXRlKGRhdGEpCgogICAgd2hpbGUgbm90IHNlbGYuX3JlYWRfZW9mIGFuZCAoc2VsZi5fcmVhZF9idWZmZXIudGVsbCgpIC0gc2VsZi5fcmVhZF9wb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgbnVtX2J5dGVzOgogICAgICAjIENvbnRpbnVlIHJlYWRpbmcgZnJvbSB0aGUgdW5kZXJseWluZyBmaWxlIG9iamVjdCB1bnRpbCBlbm91Z2ggYnl0ZXMgYXJlCiAgICAgICMgYXZhaWxhYmxlLCBvciBFT0YgaXMgcmVhY2hlZC4KICAgICAgYnVmID0gc2VsZi5fZmlsZS5yZWFkKHNlbGYuX3JlYWRfc2l6ZSkKICAgICAgaWYgYnVmOgogICAgICAgIGRlY29tcHJlc3NlZCA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKGJ1ZikKICAgICAgICBkZWwgYnVmICAjIEZyZWUgdXAgc29tZSBwb3NzaWJseSBsYXJnZSBhbmQgbm8tbG9uZ2VyLW5lZWRlZCBtZW1vcnkuCiAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIud3JpdGUoZGVjb21wcmVzc2VkKQogICAgICBlbHNlOgogICAgICAgICMgRU9GIG9mIGN1cnJlbnQgc3RyZWFtIHJlYWNoZWQuCiAgICAgICAgIwogICAgICAgICMgQW55IHVuY29tcHJlc3NlZCBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvZiBhIGd6aXAgb3IgYnppcDIKICAgICAgICAjIGZpbGUgdGhhdCBpcyBub3QgY29ycnVwdGVkIHBvaW50cyB0byBhIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkCiAgICAgICAgIyBmaWxlLiBXZSByZWFkIGNvbmNhdGVuYXRlZCBmaWxlcyBieSByZWN1cnNpdmVseSBjcmVhdGluZyBkZWNvbXByZXNzb3IKICAgICAgICAjIG9iamVjdHMgZm9yIHRoZSB1bnVzZWQgY29tcHJlc3NlZCBkYXRhLgogICAgICAgIGlmIChzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQlpJUDIgb3IKICAgICAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkdaSVApOgogICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLnVudXNlZF9kYXRhICE9ICcnOgogICAgICAgICAgICBidWYgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gKAogICAgICAgICAgICAgICAgYnoyLkJaMkRlY29tcHJlc3NvcigpCiAgICAgICAgICAgICAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQlpJUDIKICAgICAgICAgICAgICAgIGVsc2UgemxpYi5kZWNvbXByZXNzb2JqKHNlbGYuX2d6aXBfbWFzaykpCiAgICAgICAgICAgIGRlY29tcHJlc3NlZCA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKGJ1ZikKICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIud3JpdGUoZGVjb21wcmVzc2VkKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAjIEd6aXAgYW5kIGJ6aXAyIGZvcm1hdHMgZG8gbm90IHJlcXVpcmUgZmx1c2hpbmcgcmVtYWluaW5nIGRhdGEgaW4gdGhlCiAgICAgICAgICAjIGRlY29tcHJlc3NvciBpbnRvIHRoZSByZWFkIGJ1ZmZlciB3aGVuIGZ1bGx5IGRlY29tcHJlc3NpbmcgZmlsZXMuCiAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlci53cml0ZShzZWxmLl9kZWNvbXByZXNzb3IuZmx1c2goKSkKCiAgICAgICAgIyBSZWNvcmQgdGhhdCB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGZpbGUsIHNvIHdlIHdvbid0IHVubmVjZXNzYXJpbHkKICAgICAgICAjIHJlcGVhdCB0aGUgY29tcGxldGVuZXNzIHZlcmlmaWNhdGlvbiBzdGVwIGFib3ZlLgogICAgICAgIHNlbGYuX3JlYWRfZW9mID0gVHJ1ZQoKICBkZWYgX3JlYWRfZnJvbV9pbnRlcm5hbF9idWZmZXIoc2VsZiwgcmVhZF9mbik6CiAgICAiIiJSZWFkIGZyb20gdGhlIGludGVybmFsIGJ1ZmZlciBieSB1c2luZyB0aGUgc3VwcGxpZWQgcmVhZF9mbi4iIiIKICAgIHNlbGYuX3JlYWRfYnVmZmVyLnNlZWsoc2VsZi5fcmVhZF9wb3NpdGlvbikKICAgIHJlc3VsdCA9IHJlYWRfZm4oKQogICAgc2VsZi5fcmVhZF9wb3NpdGlvbiArPSBsZW4ocmVzdWx0KQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uICs9IGxlbihyZXN1bHQpCiAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKDAsIG9zLlNFRUtfRU5EKSAgIyBBbGxvdyBmdXR1cmUgd3JpdGVzLgogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgcmVhZChzZWxmLCBudW1fYnl0ZXMpOgogICAgaWYgbm90IHNlbGYuX2RlY29tcHJlc3NvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGVjb21wcmVzc29yIG5vdCBpbml0aWFsaXplZCcpCgogICAgc2VsZi5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVyKG51bV9ieXRlcykKICAgIHJldHVybiBzZWxmLl9yZWFkX2Zyb21faW50ZXJuYWxfYnVmZmVyKAogICAgICAgIGxhbWJkYTogc2VsZi5fcmVhZF9idWZmZXIucmVhZChudW1fYnl0ZXMpKQoKICBkZWYgcmVhZGxpbmUoc2VsZik6CiAgICAiIiJFcXVpdmFsZW50IHRvIHN0YW5kYXJkIGZpbGUucmVhZGxpbmUoKS4gU2FtZSByZXR1cm4gY29udmVudGlvbnMgYXBwbHkuIiIiCiAgICBpZiBub3Qgc2VsZi5fZGVjb21wcmVzc29yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdkZWNvbXByZXNzb3Igbm90IGluaXRpYWxpemVkJykKCiAgICBpbyA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCiAgICB3aGlsZSBUcnVlOgogICAgICAjIEVuc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCBidWZmZXIgaGFzIGF0IGxlYXN0IGhhbGYgdGhlIHJlYWRfc2l6ZS4gR29pbmcKICAgICAgIyB3aXRoIGhhbGYgdGhlIF9yZWFkX3NpemUgKGFzIG9wcG9zZWQgdG8gYSBmdWxsIF9yZWFkX3NpemUpIHRvIGVuc3VyZQogICAgICAjIHRoYXQgYWN0dWFsIGZldGNoZXMgYXJlIG1vcmUgZXZlbmx5IHNwcmVhZCBvdXQsIGFzIG9wcG9zZWQgdG8gaGF2aW5nIDIKICAgICAgIyBjb25zZWN1dGl2ZSByZWFkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcmVhZC4KICAgICAgc2VsZi5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVyKHNlbGYuX3JlYWRfc2l6ZSAvIDIpCiAgICAgIGxpbmUgPSBzZWxmLl9yZWFkX2Zyb21faW50ZXJuYWxfYnVmZmVyKAogICAgICAgICAgbGFtYmRhOiBzZWxmLl9yZWFkX2J1ZmZlci5yZWFkbGluZSgpKQogICAgICBpby53cml0ZShsaW5lKQogICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcbicpIG9yIG5vdCBsaW5lOgogICAgICAgIGJyZWFrICAjIE5ld2xpbmUgb3IgRU9GIHJlYWNoZWQuCgogICAgcmV0dXJuIGlvLmdldHZhbHVlKCkKCiAgZGVmIGNsb3NlZChzZWxmKToKICAgIHJldHVybiBub3Qgc2VsZi5fZmlsZSBvciBzZWxmLl9maWxlLmNsb3NlZCgpCgogIGRlZiBjbG9zZShzZWxmKToKICAgIGlmIHNlbGYucmVhZGFibGUoKToKICAgICAgc2VsZi5fcmVhZF9idWZmZXIuY2xvc2UoKQoKICAgIGlmIHNlbGYud3JpdGVhYmxlKCk6CiAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQoKICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQoKICBkZWYgZmx1c2goc2VsZik6CiAgICBpZiBzZWxmLndyaXRlYWJsZSgpOgogICAgICBzZWxmLl9maWxlLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgIHNlbGYuX2ZpbGUuZmx1c2goKQoKICBAcHJvcGVydHkKICBkZWYgc2Vla2FibGUoc2VsZik6CiAgICByZXR1cm4gJ3InIGluIHNlbGYuX2ZpbGUubW9kZQoKICBkZWYgX2NsZWFyX3JlYWRfYnVmZmVyKHNlbGYpOgogICAgIiIiQ2xlYXJzIHRoZSByZWFkIGJ1ZmZlciBieSByZW1vdmluZyBhbGwgdGhlIGNvbnRlbnRzIGFuZAogICAgcmVzZXR0aW5nIF9yZWFkX3Bvc2l0aW9uIHRvIDAiIiIKICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gPSAwCiAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKDApCiAgICBzZWxmLl9yZWFkX2J1ZmZlci50cnVuY2F0ZSgwKQoKICBkZWYgX3Jld2luZF9maWxlKHNlbGYpOgogICAgIiIiU2Vla3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgZmlsZS4gSW5wdXQgZmlsZSdzIEVPRiBtYXJrZXIKICAgIGlzIGNsZWFyZWQgYW5kIF91bmNvbXByZXNzZWRfcG9zaXRpb24gaXMgcmVzZXQgdG8gemVybyIiIgogICAgc2VsZi5fZmlsZS5zZWVrKDAsIG9zLlNFRUtfU0VUKQogICAgc2VsZi5fcmVhZF9lb2YgPSBGYWxzZQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uID0gMAoKICBkZWYgX3Jld2luZChzZWxmKToKICAgICIiIlNlZWtzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGZpbGUgYW5kIHJlc2V0cyB0aGUgaW50ZXJuYWwgcmVhZAogICAgYnVmZmVyLiBUaGUgZGVjb21wcmVzc29yIG9iamVjdCBpcyByZS1pbml0aWFsaXplZCB0byBlbnN1cmUgdGhhdCBubyBkYXRhCiAgICBsZWZ0IGluIGl0J3MgYnVmZmVyLiIiIgogICAgc2VsZi5fY2xlYXJfcmVhZF9idWZmZXIoKQogICAgc2VsZi5fcmV3aW5kX2ZpbGUoKQoKICAgICMgUmUtaW5pdGlhbGl6ZSBkZWNvbXByZXNzb3IgdG8gY2xlYXIgYW55IGRhdGEgYnVmZmVyZWQgcHJpb3IgdG8gcmV3aW5kCiAgICBzZWxmLl9pbml0aWFsaXplX2RlY29tcHJlc3NvcigpCgogIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPW9zLlNFRUtfU0VUKToKICAgICIiIlNldCB0aGUgZmlsZSdzIGN1cnJlbnQgb2Zmc2V0LgoKICAgIFNlZWtpbmcgYmVoYXZpb3I6CgogICAgICAqIHNlZWtpbmcgZnJvbSB0aGUgZW5kIDpkYXRhOmBvcy5TRUVLX0VORGAgdGhlIHdob2xlIGZpbGUgaXMgZGVjb21wcmVzc2VkCiAgICAgICAgb25jZSB0byBkZXRlcm1pbmUgaXQncyBzaXplLiBUaGVyZWZvcmUgaXQgaXMgcHJlZmVycmVkIHRvIHVzZQogICAgICAgIDpkYXRhOmBvcy5TRUVLX1NFVGAgb3IgOmRhdGE6YG9zLlNFRUtfQ1VSYCB0byBhdm9pZCB0aGUgcHJvY2Vzc2luZwogICAgICAgIG92ZXJoZWFkCiAgICAgICogc2Vla2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiByZXdpbmRzIHRoZSBmaWxlIHRvIGBgMGBgCiAgICAgICAgYW5kIGRlY29tcHJlc3NlcyB0aGUgY2h1bmtzIHRvIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0CiAgICAgICogc2Vla2luZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBmaWxlcyBvcGVuZWQgZm9yIHJlYWRpbmcKICAgICAgKiBpZiB0aGUgbmV3IG9mZnNldCBpcyBvdXQgb2YgYm91bmQsIGl0IGlzIGFkanVzdGVkIHRvIGVpdGhlciBgYDBgYCBvcgogICAgICAgIGBgRU9GYGAuCgogICAgQXJnczoKICAgICAgb2Zmc2V0IChpbnQpOiBzZWVrIG9mZnNldCBpbiB0aGUgdW5jb21wcmVzc2VkIGNvbnRlbnQgcmVwcmVzZW50ZWQgYXMKICAgICAgICBudW1iZXIKICAgICAgd2hlbmNlIChpbnQpOiBzZWVrIG1vZGUuIFN1cHBvcnRlZCBtb2RlcyBhcmUgOmRhdGE6YG9zLlNFRUtfU0VUYAogICAgICAgIChhYnNvbHV0ZSBzZWVrKSwgOmRhdGE6YG9zLlNFRUtfQ1VSYCAoc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudAogICAgICAgIHBvc2l0aW9uKSwgYW5kIDpkYXRhOmBvcy5TRUVLX0VORGAgKHNlZWsgcmVsYXRpdmUgdG8gdGhlIGVuZCwgb2Zmc2V0CiAgICAgICAgc2hvdWxkIGJlIG5lZ2F0aXZlKS4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLklPRXJyb3I6IFdoZW4gdGhpcyBidWZmZXIgaXMgY2xvc2VkLgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBXaGVuIHdoZW5jZSBpcyBpbnZhbGlkIG9yIHRoZSBmaWxlIGlzIG5vdCBzZWVrYWJsZQogICAgIiIiCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19TRVQ6CiAgICAgIGFic29sdXRlX29mZnNldCA9IG9mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19DVVI6CiAgICAgIGFic29sdXRlX29mZnNldCA9IHNlbGYuX3VuY29tcHJlc3NlZF9wb3NpdGlvbiArIG9mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgICMgRGV0ZXJtaW5lIGFuZCBjYWNoZSB0aGUgdW5jb21wcmVzc2VkIHNpemUgb2YgdGhlIGZpbGUKICAgICAgaWYgbm90IHNlbGYuX3VuY29tcHJlc3NlZF9zaXplOgogICAgICAgIGxvZ2dlci53YXJuKCJTZWVraW5nIHJlbGF0aXZlIGZyb20gZW5kIG9mIGZpbGUgaXMgcmVxdWVzdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgIk5lZWQgdG8gZGVjb21wcmVzcyB0aGUgd2hvbGUgZmlsZSBvbmNlIHRvIGRldGVybWluZSAiCiAgICAgICAgICAgICAgICAgICAgIml0cyBzaXplLiBUaGlzIG1pZ2h0IHRha2UgYSB3aGlsZS4uLiIpCiAgICAgICAgdW5jb21wcmVzc19zdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICB3aGlsZSBzZWxmLnJlYWQoc2VsZi5fcmVhZF9zaXplKToKICAgICAgICAgIHBhc3MKICAgICAgICB1bmNvbXByZXNzX2VuZF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICBsb2dnZXIud2FybigiRnVsbCBmaWxlIGRlY29tcHJlc3Npb24gZm9yIHNlZWsgZnJvbSBlbmQgdG9vayAlLjJmIHNlY3MiLAogICAgICAgICAgICAgICAgICAgICh1bmNvbXByZXNzX2VuZF90aW1lIC0gdW5jb21wcmVzc19zdGFydF90aW1lKSkKICAgICAgICBzZWxmLl91bmNvbXByZXNzZWRfc2l6ZSA9IHNlbGYuX3VuY29tcHJlc3NlZF9wb3NpdGlvbgogICAgICBhYnNvbHV0ZV9vZmZzZXQgPSBzZWxmLl91bmNvbXByZXNzZWRfc2l6ZSArIG9mZnNldAogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiV2hlbmNlIG1vZGUgJXIgaXMgaW52YWxpZC4iICUgd2hlbmNlKQoKICAgICMgRGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIG5lZWRzIHRvIGJlIHJlYWQgYmVmb3JlIHdlIHJlYWNoCiAgICAjIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0LiBSZXdpbmQgaWYgd2UgYWxyZWFkeSBwYXNzZWQgdGhlIHBvc2l0aW9uLgogICAgaWYgYWJzb2x1dGVfb2Zmc2V0IDwgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uOgogICAgICBzZWxmLl9yZXdpbmQoKQogICAgYnl0ZXNfdG9fc2tpcCA9IGFic29sdXRlX29mZnNldCAtIHNlbGYuX3VuY29tcHJlc3NlZF9wb3NpdGlvbgoKICAgICMgUmVhZCB1bnRpbCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBpcyByZWFjaGVkIG9yIEVPRiBvY2N1cnMuCiAgICB3aGlsZSBieXRlc190b19za2lwOgogICAgICBkYXRhID0gc2VsZi5yZWFkKG1pbihzZWxmLl9yZWFkX3NpemUsIGJ5dGVzX3RvX3NraXApKQogICAgICBpZiBub3QgZGF0YToKICAgICAgICBicmVhawogICAgICBieXRlc190b19za2lwIC09IGxlbihkYXRhKQoKICBkZWYgdGVsbChzZWxmKToKICAgICIiIlJldHVybnMgY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZmlsZS4iIiIKICAgIHJldHVybiBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24KCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5jbG9zZSgpCgoKY2xhc3MgRmlsZU1ldGFkYXRhKG9iamVjdCk6CiAgIiIiTWV0YWRhdGEgYWJvdXQgYSBmaWxlIHBhdGggdGhhdCBpcyB0aGUgb3V0cHV0IG9mIEZpbGVTeXN0ZW0ubWF0Y2gKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgc2l6ZV9pbl9ieXRlcyk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRoLCBiYXNlc3RyaW5nKSBhbmQgcGF0aCwgIlBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2l6ZV9pbl9ieXRlcywgKGludCwgbG9uZykpIGFuZCBzaXplX2luX2J5dGVzID49IDAsIFwKICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3Igc2l6ZV9pbl9ieXRlcyBzaG91bGQgJXMgKG9mIHR5cGUgJXMpIiAlICgKICAgICAgICAgICAgc2l6ZV9pbl9ieXRlcywgdHlwZShzaXplX2luX2J5dGVzKSkKICAgIHNlbGYucGF0aCA9IHBhdGgKICAgIHNlbGYuc2l6ZV9pbl9ieXRlcyA9IHNpemVfaW5fYnl0ZXMKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAiIiJOb3RlOiBUaGlzIGlzIG9ubHkgdXNlZCBpbiB0ZXN0cyB3aGVyZSB3ZSB2ZXJpZnkgdGhhdCBtb2NrIG9iamVjdHMgbWF0Y2guCiAgICAiIiIKICAgIHJldHVybiAoaXNpbnN0YW5jZShvdGhlciwgRmlsZU1ldGFkYXRhKSBhbmQKICAgICAgICAgICAgc2VsZi5wYXRoID09IG90aGVyLnBhdGggYW5kCiAgICAgICAgICAgIHNlbGYuc2l6ZV9pbl9ieXRlcyA9PSBvdGhlci5zaXplX2luX2J5dGVzKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi5wYXRoLCBzZWxmLnNpemVfaW5fYnl0ZXMpKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRmlsZU1ldGFkYXRhKCVzLCAlcyknICUgKHNlbGYucGF0aCwgc2VsZi5zaXplX2luX2J5dGVzKQoKCmNsYXNzIE1hdGNoUmVzdWx0KG9iamVjdCk6CiAgIiIiUmVzdWx0IGZyb20gdGhlIGBgRmlsZVN5c3RlbWBgIG1hdGNoIG9wZXJhdGlvbiB3aGljaCBjb250YWlucyB0aGUgbGlzdAogICBvZiBtYXRjaGVkIEZpbGVNZXRhZGF0YS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcGF0dGVybiwgbWV0YWRhdGFfbGlzdCk6CiAgICBzZWxmLm1ldGFkYXRhX2xpc3QgPSBtZXRhZGF0YV9saXN0CiAgICBzZWxmLnBhdHRlcm4gPSBwYXR0ZXJuCgoKY2xhc3MgQmVhbUlPRXJyb3IoSU9FcnJvcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgZXhjZXB0aW9uX2RldGFpbHM9Tm9uZSk6CiAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgdGhlIGVycm9ycyB0aHJvd24gaW4gdGhlIGJhdGNoIGZpbGUgb3BlcmF0aW9ucy4KICAgIEFyZ3M6CiAgICAgIG1zZzogTWVzc2FnZSBzdHJpbmcgZm9yIHRoZSBleGNlcHRpb24gdGhyb3duCiAgICAgIGV4Y2VwdGlvbl9kZXRhaWxzOiBPcHRpb25hbCBtYXAgb2YgaW5kaXZpZHVhbCBpbnB1dCB0byBleGNlcHRpb24gZm9yCiAgICAgICAgZmFpbGVkIG9wZXJhdGlvbnMgaW4gYmF0Y2guIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHNvIGlmIHNwZWNpZmllZAogICAgICAgIHRoZSB1c2VyIGNhbiBhc3N1bWUgdGhhdCB0aGUgYWxsIGVycm9ycyBpbiB0aGUgZmlsZXN5c3RlbSBvcGVyYXRpb24KICAgICAgICBoYXZlIGJlZW4gcmVwb3J0ZWQuIFdoZW4gdGhlIGRldGFpbHMgYXJlIG1pc3NpbmcgdGhlbiB0aGUgb3BlcmF0aW9uCiAgICAgICAgbWF5IGhhdmUgZmFpbGVkIGFueXdoZXJlIHNvIHRoZSB1c2VyIHNob3VsZCB1c2UgbWF0Y2ggdG8gZGV0ZXJtaW5lCiAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbS4KICAgICIiIgogICAgbWVzc2FnZSA9ICIlcyB3aXRoIGV4Y2VwdGlvbnMgJXMiICUgKG1zZywgZXhjZXB0aW9uX2RldGFpbHMpCiAgICBzdXBlcihCZWFtSU9FcnJvciwgc2VsZikuX19pbml0X18obWVzc2FnZSkKICAgIHNlbGYuZXhjZXB0aW9uX2RldGFpbHMgPSBleGNlcHRpb25fZGV0YWlscwoKCmNsYXNzIEZpbGVTeXN0ZW0oQmVhbVBsdWdpbik6CiAgIiIiQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYSBmaWxlc3lzdGVtLgoKICBBbGwgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIHRoZXkgYXJlIGZvciBmaWxlIHN5c3RlbSBwcm92aWRlcnMgdG8KICBpbXBsZW1lbnQuIENsaWVudHMgc2hvdWxkIHVzZSB0aGUgRmlsZVN5c3RlbXMgY2xhc3MgdG8gaW50ZXJhY3Qgd2l0aAogIHRoZSBjb3JyZWN0IGZpbGUgc3lzdGVtIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBmaWxlIHBhdHRlcm4gc2NoZW1lLgogICIiIgogIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQogIENIVU5LX1NJWkUgPSAxICAjIENodWNrIHNpemUgaW4gdGhlIGJhdGNoIG9wZXJhdGlvbnMKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiCiAgICBBcmdzOgogICAgICBwaXBlbGluZV9vcHRpb25zOiBJbnN0YW5jZSBvZiBgYFBpcGVsaW5lT3B0aW9uc2BgLgogICAgIiIiCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2dldF9jb21wcmVzc2lvbl90eXBlKHBhdGgsIGNvbXByZXNzaW9uX3R5cGUpOgogICAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkFVVE86CiAgICAgIGNvbXByZXNzaW9uX3R5cGUgPSBDb21wcmVzc2lvblR5cGVzLmRldGVjdF9jb21wcmVzc2lvbl90eXBlKHBhdGgpCiAgICBlbGlmIG5vdCBDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY29tcHJlc3Npb25fdHlwZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignY29tcHJlc3Npb25fdHlwZSBtdXN0IGJlIENvbXByZXNzaW9uVHlwZSBvYmplY3QgYnV0ICcKICAgICAgICAgICAgICAgICAgICAgICd3YXMgJXMnICUgdHlwZShjb21wcmVzc2lvbl90eXBlKSkKICAgIHJldHVybiBjb21wcmVzc2lvbl90eXBlCgogIEBjbGFzc21ldGhvZAogIGRlZiBzY2hlbWUoY2xzKToKICAgICIiIlVSSSBzY2hlbWUgZm9yIHRoZSBGaWxlU3lzdGVtCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBqb2luKHNlbGYsIGJhc2VwYXRoLCAqcGF0aHMpOgogICAgIiIiSm9pbiB0d28gb3IgbW9yZSBwYXRobmFtZSBjb21wb25lbnRzIGZvciB0aGUgZmlsZXN5c3RlbQoKICAgIEFyZ3M6CiAgICAgIGJhc2VwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlyc3QgY29tcG9uZW50IG9mIHRoZSBwYXRoCiAgICAgIHBhdGhzOiBwYXRoIGNvbXBvbmVudHMgdG8gYmUgYWRkZWQKCiAgICBSZXR1cm5zOiBmdWxsIHBhdGggYWZ0ZXIgY29tYmluaW5nIGFsbCB0aGUgcGFzc2VkIGNvbXBvbmVudHMKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIHNwbGl0KHNlbGYsIHBhdGgpOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBwYXRoIGludG8gdHdvIHBhcnRzLgoKICAgIFNwbGl0cyB0aGUgcGF0aCBpbnRvIGEgcGFpciAoaGVhZCwgdGFpbCkgc3VjaCB0aGF0IHRhaWwgY29udGFpbnMgdGhlIGxhc3QKICAgIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBhbmQgaGVhZCBjb250YWlucyBldmVyeXRoaW5nIHVwIHRvIHRoYXQuCgogICAgRm9yIGZpbGUtc3lzdGVtcyBvdGhlciB0aGFuIHRoZSBsb2NhbCBmaWxlLXN5c3RlbSwgaGVhZCBzaG91bGQgaW5jbHVkZSB0aGUKICAgIHByZWZpeC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBwYXRoIGFzIGEgc3RyaW5nCiAgICBSZXR1cm5zOgogICAgICBhIHBhaXIgb2YgcGF0aCBjb21wb25lbnRzIGFzIHN0cmluZ3MuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBta2RpcnMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZWN1cnNpdmVseSBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm92aWRlZCBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQKCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3IgaWYgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBtYXRjaChzZWxmLCBwYXR0ZXJucywgbGltaXRzPU5vbmUpOgogICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgcGF0aHMgdG8gdGhlIHBhdHRlcm5zIHByb3ZpZGVkLgoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBwYXR0ZXJuIG1hdGNoIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgY3JlYXRlKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSB3cml0ZSBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIG9wZW4oc2VsZiwgcGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSByZWFkIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHJlYWQKICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGNvcHkoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogbGlzdCBvZiBzb3VyY2UgZmlsZSBvYmplY3RzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IGxpc3Qgb2YgZGVzdGluYXRpb24gb2YgdGhlIG5ldyBvYmplY3QKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVuYW1lIHRoZSBmaWxlcyBhdCB0aGUgc291cmNlIGxpc3QgdG8gdGhlIGRlc3RpbmF0aW9uIGxpc3QuCiAgICBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpc3RzIHNob3VsZCBiZSBvZiB0aGUgc2FtZSBzaXplLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBMaXN0IG9mIGZpbGUgcGF0aHMgdGhhdCBuZWVkIHRvIGJlIG1vdmVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBmb3IgdGhlIGZpbGVzCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSByZW5hbWUgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CiAgICAiIiJDaGVjayBpZiB0aGUgcHJvdmlkZWQgcGF0aCBleGlzdHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHBhdGggZXhpc3RzCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBkZWxldGUoc2VsZiwgcGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCn1yLAMAAChYJwAAAENvbXByZXNzZWRGaWxlLl9pbml0aWFsaXplX2RlY29tcHJlc3NvclgDAAAAZGVmS4hLjodYEQAAAEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZN5AFN7wGHWBMAAABDb21wcmVzc2VkRmlsZS5yZWFkWAMAAABkZWZL4Uvoh1gTAAAARmlsZU1ldGFkYXRhLl9fZXFfX1gDAAAAZGVmTX0BTYMBh1gKAAAARmlsZVN5c3RlbVgFAAAAY2xhc3NNqAFNTQKHWAsAAABCZWFtSU9FcnJvclgFAAAAY2xhc3NNlwFNpgGHWA8AAABGaWxlU3lzdGVtLm9wZW5YAwAAAGRlZk0NAk0aAodYEAAAAEZpbGVTeXN0ZW0ubWF0Y2hYAwAAAGRlZk3wAU3+AYdYGAAAAENvbXByZXNzZWRGaWxlLl9fZW50ZXJfX1gDAAAAZGVmTWsBTW0Bh1gQAAAAQ29tcHJlc3Npb25UeXBlc1gFAAAAY2xhc3NLJ0tXh1gqAAAAQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlWAMAAABkZWZLO0tFh1goAAAAQ29tcHJlc3NlZEZpbGUuX2ZldGNoX3RvX2ludGVybmFsX2J1ZmZlclgDAAAAZGVmS6hL14dYFwAAAENvbXByZXNzZWRGaWxlLl9faW5pdF9fWAMAAABkZWZLYUuHh1gUAAAAQ29tcHJlc3NlZEZpbGUuY2xvc2VYAwAAAGRlZk0AAU0IAYdYKAAAAENvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGVYAwAAAGRlZktOS1eHWBUAAABGaWxlTWV0YWRhdGEuX19pbml0X19YAwAAAGRlZk11AU18AYdYFQAAAEZpbGVNZXRhZGF0YS5fX2hhc2hfX1gDAAAAZGVmTYQBTYYBh1gXAAAAQ29tcHJlc3NlZEZpbGUuc2Vla2FibGVYAwAAAGRlZk0OAU0RAYdYGAAAAENvbXByZXNzZWRGaWxlLndyaXRlYWJsZVgDAAAAZGVmS5tLnodYFAAAAENvbXByZXNzZWRGaWxlLndyaXRlWAMAAABkZWZLn0unh1gTAAAAQ29tcHJlc3NlZEZpbGUuc2Vla1gDAAAAZGVmTSoBTWYBh1gPAAAARmlsZVN5c3RlbS5jb3B5WAMAAABkZWZNGwJNJwKHWA4AAABDb21wcmVzc2VkRmlsZVgFAAAAY2xhc3NLWU1wAYdYEwAAAEZpbGVNZXRhZGF0YS5fX25lX19YAwAAAGRlZk2HAU2JAYdYFwAAAENvbXByZXNzZWRGaWxlLnJlYWRhYmxlWAMAAABkZWZLl0uah1ghAAAAQ29tcHJlc3NlZEZpbGUuX2NsZWFyX3JlYWRfYnVmZmVyWAMAAABkZWZNEgFNGAGHWCkAAABDb21wcmVzc2VkRmlsZS5fcmVhZF9mcm9tX2ludGVybmFsX2J1ZmZlclgDAAAAZGVmS9hL4IdYDAAAAEZpbGVNZXRhZGF0YVgFAAAAY2xhc3NNcgFNjAGHWBEAAABGaWxlU3lzdGVtLmNyZWF0ZVgDAAAAZGVmTf8BTQwCh1gLAAAATWF0Y2hSZXN1bHRYBQAAAGNsYXNzTY4BTZUBh1gTAAAARmlsZVN5c3RlbS5fX2luaXRfX1gDAAAAZGVmTbIBTbcBh1gUAAAAQmVhbUlPRXJyb3IuX19pbml0X19YAwAAAGRlZk2YAU2mAYdYIAAAAEZpbGVTeXN0ZW0uX2dldF9jb21wcmVzc2lvbl90eXBlWAMAAABkZWZNuAFNwAGHWBcAAABDb21wcmVzc2VkRmlsZS5fX2V4aXRfX1gDAAAAZGVmTW4BTXABh1gQAAAARmlsZVN5c3RlbS5zcGxpdFgDAAAAZGVmTdMBTeMBh1gRAAAARmlsZVN5c3RlbS5yZW5hbWVYAwAAAGRlZk0oAk01AodYEQAAAEZpbGVTeXN0ZW0uZGVsZXRlWAMAAABkZWZNQQJNTQKHWBYAAABDb21wcmVzc2VkRmlsZS5fcmV3aW5kWAMAAABkZWZNIAFNKQGHWA8AAABGaWxlU3lzdGVtLmpvaW5YAwAAAGRlZk3HAU3SAYdYFQAAAENvbXByZXNzZWRGaWxlLmNsb3NlZFgDAAAAZGVmS/1L/4dYFwAAAENvbXByZXNzZWRGaWxlLnJlYWRsaW5lWAMAAABkZWZL6Uv8h1gaAAAAQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGVYAwAAAGRlZktGS02HWBMAAABDb21wcmVzc2VkRmlsZS50ZWxsWAMAAABkZWZNZwFNagGHWBsAAABDb21wcmVzc2VkRmlsZS5fcmV3aW5kX2ZpbGVYAwAAAGRlZk0ZAU0fAYdYFAAAAE1hdGNoUmVzdWx0Ll9faW5pdF9fWAMAAABkZWZNkgFNlQGHWBUAAABGaWxlTWV0YWRhdGEuX19yZXByX19YAwAAAGRlZk2KAU2MAYdYJQAAAENvbXByZXNzZWRGaWxlLl9pbml0aWFsaXplX2NvbXByZXNzb3JYAwAAAGRlZkuPS5aHWBEAAABGaWxlU3lzdGVtLmV4aXN0c1gDAAAAZGVmTTYCTUACh1gUAAAAQ29tcHJlc3NlZEZpbGUuZmx1c2hYAwAAAGRlZk0JAU0NAYdYEQAAAEZpbGVTeXN0ZW0uc2NoZW1lWAMAAABkZWZNwQFNxgGHdX1yLQMAAChYEQAAAEZpbGVTeXN0ZW0uY3JlYXRlWBkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtci4DAABYFAAAAENvbXByZXNzZWRGaWxlLndyaXRlai4DAABYEQAAAEZpbGVTeXN0ZW0ubWtkaXJzai4DAABYCgAAAEZpbGVTeXN0ZW1qLgMAAFgPAAAARmlsZVN5c3RlbS5vcGVuai4DAABYEAAAAEZpbGVTeXN0ZW0ubWF0Y2hqLgMAAFgQAAAAQ29tcHJlc3Npb25UeXBlc2ouAwAAWCoAAABDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGVqLgMAAFgUAAAAQ29tcHJlc3NlZEZpbGUuY2xvc2VqLgMAAFgoAAAAQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZWouAwAAWBgAAABDb21wcmVzc2VkRmlsZS53cml0ZWFibGVqLgMAAFgTAAAAQ29tcHJlc3NlZEZpbGUuc2Vla2ouAwAAWA8AAABGaWxlU3lzdGVtLmNvcHlqLgMAAFgOAAAAQ29tcHJlc3NlZEZpbGVqLgMAAFgXAAAAQ29tcHJlc3NlZEZpbGUucmVhZGFibGVqLgMAAFgTAAAAQ29tcHJlc3NlZEZpbGUucmVhZGouAwAAWAwAAABGaWxlTWV0YWRhdGFqLgMAAFgRAAAARmlsZVN5c3RlbS5leGlzdHNqLgMAAFgLAAAATWF0Y2hSZXN1bHRqLgMAAFgVAAAAQ29tcHJlc3NlZEZpbGUuY2xvc2Vkai4DAABYEAAAAEZpbGVTeXN0ZW0uc3BsaXRqLgMAAFgRAAAARmlsZVN5c3RlbS5yZW5hbWVqLgMAAFgRAAAARmlsZVN5c3RlbS5kZWxldGVqLgMAAFgPAAAARmlsZVN5c3RlbS5qb2luai4DAABYFAAAAENvbXByZXNzZWRGaWxlLmZsdXNoai4DAABYFwAAAENvbXByZXNzZWRGaWxlLnJlYWRsaW5lai4DAABYEwAAAENvbXByZXNzZWRGaWxlLnRlbGxqLgMAAFgaAAAAQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGVqLgMAAFgRAAAARmlsZVN5c3RlbS5zY2hlbWVqLgMAAHVoilgZAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXIvAwAAhYFyMAMAAH1yMQMAAGJ0VSxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcihY5TcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGhpcyBtb2R1bGUgY29udGFpbnMgU3BsaXR0YWJsZSBEb0ZuIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gRGlyZWN0UnVubmVyLgoiIiIKCmZyb20gdGhyZWFkaW5nIGltcG9ydCBMb2NrCmZyb20gdGhyZWFkaW5nIGltcG9ydCBUaW1lcgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgVGltZURvbWFpbgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlc3RyaWN0aW9uVHJhY2tlcgpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQVHJhbnNmb3JtT3ZlcnJpZGUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GbkNvbnRleHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9Gbkludm9rZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblNpZ25hdHVyZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuY29tbW9uIGltcG9ydCBPdXRwdXRQcm9jZXNzb3IKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQgaW1wb3J0IERpcmVjdFN0ZXBDb250ZXh0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgS2V5ZWRXb3JrSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyIGltcG9ydCBXYXRlcm1hcmtNYW5hZ2VyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uIGltcG9ydCBFbGVtZW50QW5kUmVzdHJpY3Rpb24KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24gaW1wb3J0IFByb2Nlc3NLZXllZEVsZW1lbnRzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQcm9jZXNzQ29udGludWF0aW9uCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfVmFsdWVTdGF0ZVRhZwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLndpbmRvd2VkX3ZhbHVlIGltcG9ydCBXaW5kb3dlZFZhbHVlCgoKY2xhc3MgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgIiIiQSB0cmFuc2Zvcm0gb3ZlcnJpZGUgZm9yIFByb2Nlc3NFbGVtZW50cyB0cmFuc2Zvcm0uIiIiCgogIGRlZiBnZXRfbWF0Y2hlcihzZWxmKToKICAgIGRlZiBfbWF0Y2hlcihhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICByZXR1cm4gaXNpbnN0YW5jZSgKICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIFByb2Nlc3NLZXllZEVsZW1lbnRzKQoKICAgIHJldHVybiBfbWF0Y2hlcgoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgIHJldHVybiBQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zKHB0cmFuc2Zvcm0pCgoKY2xhc3MgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcyhQVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHByb2Nlc3NlcyBTcGxpdHRhYmxlIERvRm4gaW5wdXQgdmlhIEtleWVkV29ya0l0ZW1zLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0pOgogICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0gPSBwcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCB8IGJlYW0uY29yZS5Hcm91cEJ5S2V5KCkgfCBQcm9jZXNzRWxlbWVudHMoCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0pCgoKY2xhc3MgUHJvY2Vzc0VsZW1lbnRzKFBUcmFuc2Zvcm0pOgogICIiIkEgcHJpbWl0aXZlIHRyYW5zZm9ybSBmb3IgcHJvY2Vzc2luZyBrZXllZCBlbGVtZW50cyBvciBLZXllZFdvcmtJdGVtcy4KCiAgV2lsbCBiZSBldmFsdWF0ZWQgYnkKICBgcnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5fUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yYC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtKToKICAgIHNlbGYuX3Byb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtID0gcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0KICAgIHNlbGYuc2RmID0gc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0uc2RmCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwY29sbC5waXBlbGluZSkKCiAgZGVmIG5ld19wcm9jZXNzX2ZuKHNlbGYsIHNkZik6CiAgICByZXR1cm4gUHJvY2Vzc0ZuKAogICAgICAgIHNkZiwKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybS5wdHJhbnNmb3JtX2FyZ3MsCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9rd2FyZ3MpCgoKY2xhc3MgUHJvY2Vzc0ZuKGJlYW0uRG9Gbik6CiAgIiIiQSBgRG9GbmAgdGhhdCBleGVjdXRlcyBtYWNoaW5lYXJ5IGZvciBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgoKICBJbnB1dCB0byB0aGUgYFBhckRvYCBzdGVwIHRoYXQgaW5jbHVkZXMgYSBgUHJvY2Vzc0ZuYCB3aWxsIGJlIGEgYFBDb2xsZWN0aW9uYAogIG9mIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdHMuCgogIFRoaXMgY2xhc3MgaXMgbWFpbmx5IHJlc3BvbnNpYmxlIGZvciBmb2xsb3dpbmcuCiAgKDEpIHNldHVwIGVudmlyb25tZW50IGZvciBwcm9wZXJseSBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgogICgyKSBpbnZva2UgYHByb2Nlc3MoKWAgbWV0aG9kIG9mIGEgU3BsaXR0YWJsZSBgRG9GbmAuCiAgKDMpIGFmdGVyIHRoZSBgcHJvY2VzcygpYCBpbnZvY2F0aW9uIG9mIHRoZSBTcGxpdHRhYmxlIGBEb0ZuYCwgZGV0ZXJtaW5lIGlmIGEKICByZS1pbnZvY2F0aW9uIG9mIHRoZSBlbGVtZW50IGlzIG5lZWRlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2V0IHN0YXRlIGFuZAogIGEgdGltZXIgZm9yIGEgcmUtaW52b2NhdGlvbiBhbmQgaG9sZCBvdXRwdXQgd2F0ZXJtYXJrIHRpbGwgdGhpcwogIHJlLWludm9jYXRpb24uCiAgKDQpIGFmdGVyIHRoZSBmaW5hbCBpbnZvY2F0aW9uIG9mIGEgZ2l2ZW4gZWxlbWVudCBjbGVhciBhbnkgcHJldmlvdXMgc3RhdGUgc2V0CiAgZm9yIHJlLWludm9raW5nIHRoZSBlbGVtZW50IGFuZCByZWxlYXNlIHRoZSBvdXRwdXQgd2F0ZXJtYXJrLgogICIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNkZiwgYXJnc19mb3JfaW52b2tlciwga3dhcmdzX2Zvcl9pbnZva2VyKToKICAgIHNlbGYuc2RmID0gc2RmCiAgICBzZWxmLl9lbGVtZW50X3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCdlbGVtZW50JykKICAgIHNlbGYuX3Jlc3RyaWN0aW9uX3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCdyZXN0cmljdGlvbicpCiAgICBzZWxmLndhdGVybWFya19ob2xkX3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCd3YXRlcm1hcmtfaG9sZCcpCiAgICBzZWxmLl9wcm9jZXNzX2VsZW1lbnRfaW52b2tlciA9IE5vbmUKCiAgICBzZWxmLnNkZl9pbnZva2VyID0gRG9Gbkludm9rZXIuY3JlYXRlX2ludm9rZXIoCiAgICAgICAgRG9GblNpZ25hdHVyZShzZWxmLnNkZiksIGNvbnRleHQ9RG9GbkNvbnRleHQoJ3VudXNlZF9jb250ZXh0JyksCiAgICAgICAgaW5wdXRfYXJncz1hcmdzX2Zvcl9pbnZva2VyLCBpbnB1dF9rd2FyZ3M9a3dhcmdzX2Zvcl9pbnZva2VyKQoKICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IE5vbmUKCiAgQHByb3BlcnR5CiAgZGVmIHN0ZXBfY29udGV4dChzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdGVwX2NvbnRleHQKCiAgQHN0ZXBfY29udGV4dC5zZXR0ZXIKICBkZWYgc3RlcF9jb250ZXh0KHNlbGYsIHN0ZXBfY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzdGVwX2NvbnRleHQsIERpcmVjdFN0ZXBDb250ZXh0KQogICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gc3RlcF9jb250ZXh0CgogIGRlZiBzZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXIoc2VsZiwgcHJvY2Vzc19lbGVtZW50X2ludm9rZXIpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvY2Vzc19lbGVtZW50X2ludm9rZXIsIFNERlByb2Nlc3NFbGVtZW50SW52b2tlcikKICAgIHNlbGYuX3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyID0gcHJvY2Vzc19lbGVtZW50X2ludm9rZXIKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgdGltZXN0YW1wPWJlYW0uRG9Gbi5UaW1lc3RhbXBQYXJhbSwKICAgICAgICAgICAgICB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBLZXllZFdvcmtJdGVtKToKICAgICAgIyBNdXN0IGJlIGEgdGltZXIgZmlyaW5nLgogICAgICBrZXkgPSBlbGVtZW50LmVuY29kZWRfa2V5CiAgICBlbHNlOgogICAgICBrZXksIHZhbHVlcyA9IGVsZW1lbnQKICAgICAgdmFsdWVzID0gbGlzdCh2YWx1ZXMpCiAgICAgIGFzc2VydCBsZW4odmFsdWVzKSA9PSAxCiAgICAgICMgVmFsdWUgaGVyZSB3aWxsIGVpdGhlciBiZSBhIFdpbmRvd2VkVmFsdWUgb3IgYW4gRWxlbWVudEFuZFJlc3RyaWN0aW9uCiAgICAgICMgb2JqZWN0LgogICAgICAjIFRPRE86IGhhbmRsZSBrZXkgY29sbGlzaW9ucyBoZXJlLgogICAgICBhc3NlcnQgbGVuKHZhbHVlcykgPT0gMSwgJ0ludGVybmFsIGVycm9yLiBQcm9jZXNzaW5nIG9mIHNwbGl0dGFibGUgJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9GbiBjYW5ub3QgY29udGludWUgc2luY2UgZWxlbWVudHMgZGlkIG5vdCAnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXZlIHVuaXF1ZSBrZXlzLicKICAgICAgdmFsdWUgPSB2YWx1ZXNbMF0KICAgICAgaWYgbGVuKHZhbHVlcykgIT0gMToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCcnKQoKICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShrZXkpCiAgICBlbGVtZW50X3N0YXRlID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5fZWxlbWVudF90YWcpCiAgICAjIEluaXRpYWxseSBlbGVtZW50X3N0YXRlIGlzIGFuIGVtcHR5IGxpc3QuCiAgICBpc19zZWVkX2NhbGwgPSBub3QgZWxlbWVudF9zdGF0ZQoKICAgIGlmIG5vdCBpc19zZWVkX2NhbGw6CiAgICAgIGVsZW1lbnQgPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLl9lbGVtZW50X3RhZykKICAgICAgcmVzdHJpY3Rpb24gPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLl9yZXN0cmljdGlvbl90YWcpCiAgICAgIHdpbmRvd2VkX2VsZW1lbnQgPSBXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIHRpbWVzdGFtcCwgW3dpbmRvd10pCiAgICBlbHNlOgogICAgICAjIEFmdGVyIHZhbHVlcyBpdGVyYXRvciBpcyBleHBhbmRlZCBhYm92ZSB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYSBsaXN0CiAgICAgICMgd2l0aCBhIHNpbmdsZSBFbGVtZW50QW5kUmVzdHJpY3Rpb24gb2JqZWN0LgogICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgRWxlbWVudEFuZFJlc3RyaWN0aW9uKQogICAgICBlbGVtZW50X2FuZF9yZXN0cmljdGlvbiA9IHZhbHVlCiAgICAgIGVsZW1lbnQgPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5lbGVtZW50CiAgICAgIHJlc3RyaWN0aW9uID0gZWxlbWVudF9hbmRfcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb24KCiAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFdpbmRvd2VkVmFsdWUpOgogICAgICAgIHdpbmRvd2VkX2VsZW1lbnQgPSBXaW5kb3dlZFZhbHVlKAogICAgICAgICAgICBlbGVtZW50LCB2YWx1ZS50aW1lc3RhbXAsIHZhbHVlLndpbmRvd3MpCiAgICAgIGVsc2U6CiAgICAgICAgd2luZG93ZWRfZWxlbWVudCA9IFdpbmRvd2VkVmFsdWUoZWxlbWVudCwgdGltZXN0YW1wLCBbd2luZG93XSkKCiAgICB0cmFja2VyID0gc2VsZi5zZGZfaW52b2tlci5pbnZva2VfY3JlYXRlX3RyYWNrZXIocmVzdHJpY3Rpb24pCiAgICBhc3NlcnQgc2VsZi5fcHJvY2Vzc19lbGVtZW50X2ludm9rZXIKICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuX3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyLAogICAgICAgICAgICAgICAgICAgICAgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyKQoKICAgIG91dHB1dF92YWx1ZXMgPSBzZWxmLl9wcm9jZXNzX2VsZW1lbnRfaW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50KAogICAgICAgIHNlbGYuc2RmX2ludm9rZXIsIHdpbmRvd2VkX2VsZW1lbnQsIHRyYWNrZXIpCgogICAgc2RmX3Jlc3VsdCA9IE5vbmUKICAgIGZvciBvdXRwdXQgaW4gb3V0cHV0X3ZhbHVlczoKICAgICAgaWYgaXNpbnN0YW5jZShvdXRwdXQsIFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQpOgogICAgICAgICMgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdCBzaG91bGQgYmUgdGhlIGxhc3QgaXRlbSB5aWVsZGVkLgogICAgICAgIHNkZl9yZXN1bHQgPSBvdXRwdXQKICAgICAgICBicmVhawogICAgICB5aWVsZCBvdXRwdXQKCiAgICBhc3NlcnQgc2RmX3Jlc3VsdCwgKCdTREZQcm9jZXNzRWxlbWVudEludm9rZXIgbXVzdCByZXR1cm4gYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0IG9iamVjdCBhcyB0aGUgbGFzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSBvZiBhIFNERiBpbnZva2VfcHJvY2Vzc19lbGVtZW50KCkgaW52b2NhdGlvbi4nKQoKICAgIGlmIG5vdCBzZGZfcmVzdWx0LnJlc2lkdWFsX3Jlc3RyaWN0aW9uOgogICAgICAjIEFsbCB3b3JrIGZvciBjdXJyZW50IHJlc2lkdWFsIGFuZCByZXN0cmljdGlvbiBwYWlyIGlzIGNvbXBsZXRlLgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuX2VsZW1lbnRfdGFnKQogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuX3Jlc3RyaWN0aW9uX3RhZykKICAgICAgIyBSZWxlYXNpbmcgb3V0cHV0IHdhdGVybWFyayBieSBzZXR0aW5nIGl0IHRvIHBvc2l0aXZlIGluZmluaXR5LgogICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLndhdGVybWFya19ob2xkX3RhZywKICAgICAgICAgICAgICAgICAgICAgIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCiAgICBlbHNlOgogICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLl9lbGVtZW50X3RhZywgZWxlbWVudCkKICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5fcmVzdHJpY3Rpb25fdGFnLAogICAgICAgICAgICAgICAgICAgICAgc2RmX3Jlc3VsdC5yZXNpZHVhbF9yZXN0cmljdGlvbikKICAgICAgIyBIb2xkaW5nIG91dHB1dCB3YXRlcm1hcmsgYnkgc2V0dGluZyBpdCB0byBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi53YXRlcm1hcmtfaG9sZF90YWcsCiAgICAgICAgICAgICAgICAgICAgICBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GKQoKICAgICAgIyBTZXR0aW5nIGEgdGltZXIgdG8gYmUgcmVpbnZva2VkIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGVsZW1lbnQuCiAgICAgICMgQ3VycmVudGx5IFB5dGhvbiBTREsgb25seSBzdXBwb3J0cyBzZXR0aW5nIHRpbWVycyBiYXNlZCBvbiB3YXRlcm1hcmsuIFNvCiAgICAgICMgZm9yY2luZyBhIHJlaW52b2NhdGlvbiBieSBzZXR0aW5nIGEgdGltZXIgZm9yIHdhdGVybWFyayBuZWdhdGl2ZQogICAgICAjIGluZmluaXR5LgogICAgICAjIFRPRE8oY2hhbWlrYXJhKTogdXBkYXRlIHRoaXMgYnkgc2V0dGluZyBhIHRpbWVyIGZvciB0aGUgcHJvcGVyCiAgICAgICMgcHJvY2Vzc2luZyB0aW1lIHdoZW4gUHl0aG9uIFNESyBzdXBwb3J0cyB0aGF0LgogICAgICBzdGF0ZS5zZXRfdGltZXIoCiAgICAgICAgICB3aW5kb3csICcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORikKCgpjbGFzcyBTREZQcm9jZXNzRWxlbWVudEludm9rZXIob2JqZWN0KToKICAiIiJBIHV0aWxpdHkgdGhhdCBpbnZva2VzIFNERiBgcHJvY2VzcygpYCBtZXRob2QgYW5kIHJlcXVlc3RzIGNoZWNrcG9pbnRzLgoKICBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyB0aGUgYHByb2Nlc3MoKWAgbWV0aG9kIG9mIGEgU3BsaXR0YWJsZQogIGBEb0ZuYCBhbmQgbWFraW5nIHN1cmUgdGhhdCBpbnZvY2F0aW9uIHRlcm1pbmF0ZWQgcHJvcGVybHkuIEJhc2VkIG9uIHRoZSBpbnB1dAogIGNvbmZpZ3VyYXRpb24sIHRoaXMgY2xhc3MgbWF5IGRlY2lkZSB0byByZXF1ZXN0IGEgY2hlY2twb2ludCBmb3IgYSBgcHJvY2VzcygpYAogIGV4ZWN1dGlvbiBzbyB0aGF0IHJ1bm5lciBjYW4gcHJvY2VzcyBjdXJyZW50IG91dHB1dCBhbmQgcmVzdW1lIHRoZSBpbnZvY2F0aW9uCiAgYXQgYSBsYXRlciB0aW1lLgoKICBNb3JlIHNwZWNpZmljYWxseSwgd2hlbiBpbml0aWFsaXppbmcgYSBgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyYCwgY2FsbGVyIG1heQogIHNwZWNpZnkgdGhlIG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMgb3IgcHJvY2Vzc2luZyB0aW1lIGFmdGVyIHdoaWNoIGEKICBjaGVja3BvaW50IHNob3VsZCBiZSByZXF1ZXN0ZWQuIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3Blcmx5CiAgcmVxdWVzdGluZyBhIGNoZWNrcG9pbnQgYmFzZWQgb24gZWl0aGVyIG9mIHRoZXNlIGNyaXRlcmlhLgogIFdoZW4gdGhlIGBwcm9jZXNzKClgIGNhbGwgb2YgU3BsaXR0YWJsZSBgRG9GbmAgZW5kcywgdGhpcyBjbGFzcyBwZXJmb3JtcwogIHZhbGlkYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGF0IHByb2Nlc3NpbmcgZW5kZWQgZ3JhY2VmdWxseSBhbmQgcmV0dXJucyBhCiAgYFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHRgIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHVzZWQKICBieSB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gYW5vdGhlciBgcHJvY2VzcygpYCBpbnZvY2F0aW9uIGZvciB0aGUgcmVzaWR1YWwuCgogIEEgYHByb2Nlc3MoKWAgaW52b2NhdGlvbiBtYXkgZGVjaWRlIHRvIGdpdmUgdXAgcHJvY2Vzc2luZyB2b2x1bnRhcmlseSBieQogIHJldHVybmluZyBhIGBQcm9jZXNzQ29udGludWF0aW9uYCBvYmplY3QgKHNlZSBkb2N1bWVudGF0aW9uIG9mCiAgYFByb2Nlc3NDb250aW51YXRpb25gIGZvciBtb3JlIGRldGFpbHMpLiBTbyBpZiBhICdQcm9jZXNzQ29udGludWF0aW9uJyBpcwogIHByb2R1Y2VkIHRoaXMgY2xhc3MgZW5kcyB0aGUgZXhlY3V0aW9uIGFuZCBwZXJmb3JtcyBzdGVwcyB0byBmaW5hbGl6ZSB0aGUKICBjdXJyZW50IGludm9jYXRpb24uCiAgIiIiCgogIGNsYXNzIFJlc3VsdChvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsIHJlc2lkdWFsX3Jlc3RyaWN0aW9uPU5vbmUsIHByb2Nlc3NfY29udGludWF0aW9uPU5vbmUsCiAgICAgICAgZnV0dXJlX291dHB1dF93YXRlcm1hcms9Tm9uZSk6CiAgICAgICIiIlJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGEgYGludm9rZV9wcm9jZXNzX2VsZW1lbnQoKWAgaW52b2NhdGlvbi4KCiAgICAgIEFyZ3M6CiAgICAgICAgcmVzaWR1YWxfcmVzdHJpY3Rpb246IGEgcmVzdHJpY3Rpb24gZm9yIHRoZSB1bnByb2Nlc3NlZCBwYXJ0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuCiAgICAgICAgcHJvY2Vzc19jb250aW51YXRpb246IGEgYFByb2Nlc3NDb250aW51YXRpb25gIGlmIG9uZSB3YXMgcmV0dXJuZWQgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgZWxlbWVudCBvZiB0aGUgU0RGIGBwcm9jZXNzKClgIGludm9jYXRpb24uCiAgICAgICAgZnV0dXJlX291dHB1dF93YXRlcm1hcms6IG91dHB1dCB3YXRlcm1hcmsgb2YgdGhlIHJlc3VsdHMgdGhhdCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkIHdoZW4gaW52b2tpbmcgdGhlIFNwbGl0dGFibGUgYERvRm5gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgY3VycmVudCBlbGVtZW50IHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJlc2lkdWFsX3Jlc3RyaWN0aW9uYC4KICAgICAgIiIiCgogICAgICBzZWxmLnJlc2lkdWFsX3Jlc3RyaWN0aW9uID0gcmVzaWR1YWxfcmVzdHJpY3Rpb24KICAgICAgc2VsZi5wcm9jZXNzX2NvbnRpbnVhdGlvbiA9IHByb2Nlc3NfY29udGludWF0aW9uCiAgICAgIHNlbGYuZnV0dXJlX291dHB1dF93YXRlcm1hcmsgPSBmdXR1cmVfb3V0cHV0X3dhdGVybWFyawoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIG1heF9udW1fb3V0cHV0cywgbWF4X2R1cmF0aW9uKToKICAgIHNlbGYuX21heF9udW1fb3V0cHV0cyA9IG1heF9udW1fb3V0cHV0cwogICAgc2VsZi5fbWF4X2R1cmF0aW9uID0gbWF4X2R1cmF0aW9uCiAgICBzZWxmLl9jaGVja3BvaW50X2xvY2sgPSBMb2NrKCkKCiAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgogICAgcmFpc2UgVmFsdWVFcnJvcgoKICBkZWYgaW52b2tlX3Byb2Nlc3NfZWxlbWVudChzZWxmLCBzZGZfaW52b2tlciwgZWxlbWVudCwgdHJhY2tlcik6CiAgICAiIiJJbnZva2VzIGBwcm9jZXNzKClgIG1ldGhvZCBvZiBhIFNwbGl0dGFibGUgYERvRm5gIGZvciBhIGdpdmVuIGVsZW1lbnQuCgogICAgIEFyZ3M6CiAgICAgICBzZGZfaW52b2tlcjogYSBgRG9Gbkludm9rZXJgIGZvciB0aGUgU3BsaXR0YWJsZSBgRG9GbmAuCiAgICAgICBlbGVtZW50OiB0aGUgZWxlbWVudCB0byBwcm9jZXNzCiAgICAgICB0cmFja2VyOiBhIGBSZXN0cmljdGlvblRyYWNrZXJgIGZvciB0aGUgZWxlbWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHdoZW4KICAgICAgICAgICAgICAgIGludm9raW5nIHRoZSBgcHJvY2VzcygpYCBtZXRob2Qgb2YgdGhlIFNwbGl0dGFibGUgYERvRm5gLgogICAgIFJldHVybnM6CiAgICAgICBhIGBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0YCBvYmplY3QuCiAgICAgIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZGZfaW52b2tlciwgRG9Gbkludm9rZXIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZSh0cmFja2VyLCBSZXN0cmljdGlvblRyYWNrZXIpCgogICAgY2xhc3MgQ2hlY2twb2ludFN0YXRlKG9iamVjdCk6CgogICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5jaGVja3BvaW50ZWQgPSBOb25lCiAgICAgICAgc2VsZi5yZXNpZHVhbF9yZXN0cmljdGlvbiA9IE5vbmUKCiAgICBjaGVja3BvaW50X3N0YXRlID0gQ2hlY2twb2ludFN0YXRlKCkKCiAgICBkZWYgaW5pdGlhdGVfY2hlY2twb2ludCgpOgogICAgICB3aXRoIHNlbGYuX2NoZWNrcG9pbnRfbG9jazoKICAgICAgICBpZiBjaGVja3BvaW50X3N0YXRlLmNoZWNrcG9pbnRlZDoKICAgICAgICAgIHJldHVybgogICAgICBjaGVja3BvaW50X3N0YXRlLnJlc2lkdWFsX3Jlc3RyaWN0aW9uID0gdHJhY2tlci5jaGVja3BvaW50KCkKICAgICAgY2hlY2twb2ludF9zdGF0ZS5jaGVja3BvaW50ZWQgPSBvYmplY3QoKQoKICAgIG91dHB1dF9wcm9jZXNzb3IgPSBfT3V0cHV0UHJvY2Vzc29yKCkKICAgIFRpbWVyKHNlbGYuX21heF9kdXJhdGlvbiwgaW5pdGlhdGVfY2hlY2twb2ludCkuc3RhcnQoKQogICAgc2RmX2ludm9rZXIuaW52b2tlX3Byb2Nlc3MoCiAgICAgICAgZWxlbWVudCwgcmVzdHJpY3Rpb25fdHJhY2tlcj10cmFja2VyLCBvdXRwdXRfcHJvY2Vzc29yPW91dHB1dF9wcm9jZXNzb3IpCgogICAgYXNzZXJ0IG91dHB1dF9wcm9jZXNzb3Iub3V0cHV0X2l0ZXIgaXMgbm90IE5vbmUKICAgIG91dHB1dF9jb3VudCA9IDAKCiAgICAjIFdlIGhhdmUgdG8gZXhwYW5kIGFuZCByZS15aWVsZCBoZXJlIHRvIHN1cHBvcnQgZW5kaW5nIGV4ZWN1dGlvbiBmb3IgYQogICAgIyBnaXZlbiBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIGFzIHdlbGwgYXMgdG8gY2FwdHVyZSB0aGUKICAgICMgUHJvY2Vzc0NvbnRpbnVhdGlvbiBvZiBvbmUgd2FzIHJldHVybmVkLgogICAgcHJvY2Vzc19jb250aW51YXRpb24gPSBOb25lCiAgICBmb3Igb3V0cHV0IGluIG91dHB1dF9wcm9jZXNzb3Iub3V0cHV0X2l0ZXI6CiAgICAgICMgQSBQcm9jZXNzQ29udGludWF0aW9uLCBpZiByZXR1cm5lZCwgc2hvdWxkIGJlIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgIGFzc2VydCBub3QgcHJvY2Vzc19jb250aW51YXRpb24KICAgICAgaWYgaXNpbnN0YW5jZShvdXRwdXQsIFByb2Nlc3NDb250aW51YXRpb24pOgogICAgICAgICMgVGFraW5nIGEgY2hlY2twb2ludCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgcHJpbWFyeSBhbmQgcmVzaWR1YWwKICAgICAgICAjIHJlc3RyaWN0aW9ucy4KICAgICAgICBpbml0aWF0ZV9jaGVja3BvaW50KCkKCiAgICAgICAgIyBBIFByb2Nlc3NDb250aW51YXRpb24gc2hvdWxkIGFsd2F5cyBiZSB0aGUgbGFzdCBlbGVtZW50IHByb2R1Y2VkIGJ5CiAgICAgICAgIyB0aGUgb3V0cHV0IGl0ZXJhdG9yLgogICAgICAgICMgVE9ETzogc3VwcG9ydCBjb250aW51aW5nIGFmdGVyIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGRlbGF5LgoKICAgICAgICAjIENvbnRpbnVpbmcgaGVyZSBpbnN0ZWFkIG9mIGJyZWFraW5nIHRvIGVuZm9yY2UgdGhhdCB0aGlzIGlzIHRoZSBsYXN0CiAgICAgICAgIyBlbGVtZW50LgogICAgICAgIHByb2Nlc3NfY29udGludWF0aW9uID0gb3V0cHV0CiAgICAgICAgY29udGludWUKCiAgICAgIHlpZWxkIG91dHB1dAogICAgICBvdXRwdXRfY291bnQgKz0gMQogICAgICBpZiBzZWxmLl9tYXhfbnVtX291dHB1dHMgYW5kIG91dHB1dF9jb3VudCA+PSBzZWxmLl9tYXhfbnVtX291dHB1dHM6CiAgICAgICAgaW5pdGlhdGVfY2hlY2twb2ludCgpCgogICAgdHJhY2tlci5jaGVja19kb25lKCkKICAgIHJlc3VsdCA9ICgKICAgICAgICBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0KAogICAgICAgICAgICByZXNpZHVhbF9yZXN0cmljdGlvbj1jaGVja3BvaW50X3N0YXRlLnJlc2lkdWFsX3Jlc3RyaWN0aW9uKQogICAgICAgIGlmIGNoZWNrcG9pbnRfc3RhdGUucmVzaWR1YWxfcmVzdHJpY3Rpb24KICAgICAgICBlbHNlIFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQoKSkKICAgIHlpZWxkIHJlc3VsdAoKCmNsYXNzIF9PdXRwdXRQcm9jZXNzb3IoT3V0cHV0UHJvY2Vzc29yKToKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5vdXRwdXRfaXRlciA9IE5vbmUKCiAgZGVmIHByb2Nlc3Nfb3V0cHV0cyhzZWxmLCB3aW5kb3dlZF9pbnB1dF9lbGVtZW50LCBvdXRwdXRfaXRlcik6CiAgICBzZWxmLm91dHB1dF9pdGVyID0gb3V0cHV0X2l0ZXIKfXIyAwAAKFglAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc1gFAAAAY2xhc3NLOktDh1gYAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyWAUAAABjbGFzc0vdTVoBh1goAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdC5fX2luaXRfX1gDAAAAZGVmS/dNCgGHWBEAAABQcm9jZXNzRm4ucHJvY2Vzc1gDAAAAZGVmS4ZL24dYQgAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5nZXRfbWF0Y2hlci5fbWF0Y2hlclgDAAAAZGVmSzBLM4dYLgAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuX19pbml0X19YAwAAAGRlZks9Sz+HWCAAAABfT3V0cHV0UHJvY2Vzc29yLnByb2Nlc3Nfb3V0cHV0c1gDAAAAZGVmTWEBTWMBh1geAAAAUHJvY2Vzc0VsZW1lbnRzLm5ld19wcm9jZXNzX2ZuWAMAAABkZWZLU0tYh1g5AAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLmdldF9tYXRjaGVyWAMAAABkZWZLL0s1h1gZAAAAX091dHB1dFByb2Nlc3Nvci5fX2luaXRfX1gDAAAAZGVmTV4BTWABh1gQAAAAX091dHB1dFByb2Nlc3NvclgFAAAAY2xhc3NNXAFNYwGHWAkAAABQcm9jZXNzRm5YBQAAAGNsYXNzS1pL24dYQwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50LmluaXRpYXRlX2NoZWNrcG9pbnRYAwAAAGRlZk0qAU0wAYdYDwAAAFByb2Nlc3NFbGVtZW50c1gFAAAAY2xhc3NLRUtYh1gsAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcy5leHBhbmRYAwAAAGRlZktAS0OHWEgAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIuaW52b2tlX3Byb2Nlc3NfZWxlbWVudC5DaGVja3BvaW50U3RhdGUuX19pbml0X19YAwAAAGRlZk0kAU0nAYdYLwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50WAMAAABkZWZNFAFNWgGHWCUAAABQcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyWAMAAABkZWZLgkuFh1g/AAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnQuQ2hlY2twb2ludFN0YXRlWAUAAABjbGFzc00iAU0nAYdYHwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHRYBQAAAGNsYXNzS/ZNCgGHWCQAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIudGVzdF9tZXRob2RYAwAAAGRlZk0RAU0TAYdYIQAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5fX2luaXRfX1gDAAAAZGVmTQsBTRABh1gYAAAAUHJvY2Vzc0VsZW1lbnRzLl9faW5pdF9fWAMAAABkZWZLTEtPh1gWAAAAUHJvY2Vzc0VsZW1lbnRzLmV4cGFuZFgDAAAAZGVmS1BLUodYEgAAAFByb2Nlc3NGbi5fX2luaXRfX1gDAAAAZGVmS2tLeIdYRwAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWAMAAABkZWZLNks4h1gWAAAAUHJvY2Vzc0ZuLnN0ZXBfY29udGV4dFgDAAAAZGVmS31LgYdYLQAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZVgFAAAAY2xhc3NLLEs4h3V9cjMDAAAoWCUAAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcnI0AwAAWB8AAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0ajQDAABYGAAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlcmo0AwAAWAkAAABQcm9jZXNzRm5qNAMAAFglAAAAUHJvY2Vzc0ZuLnNldF9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcmo0AwAAWA8AAABQcm9jZXNzRWxlbWVudHNqNAMAAFgkAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLnRlc3RfbWV0aG9kajQDAABYLAAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuZXhwYW5kajQDAABYHgAAAFByb2Nlc3NFbGVtZW50cy5uZXdfcHJvY2Vzc19mbmo0AwAAWBYAAABQcm9jZXNzRWxlbWVudHMuZXhwYW5kajQDAABYOQAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5nZXRfbWF0Y2hlcmo0AwAAWC0AAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGVqNAMAAFgvAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnRqNAMAAFhHAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1qNAMAAFgRAAAAUHJvY2Vzc0ZuLnByb2Nlc3NqNAMAAHVoilgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXJyNQMAAIWBcjYDAAB9cjcDAABidFUdYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHNyOAMAAChYdgQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVmZmljaWVudGx5IHByb2Nlc3Npbmcgd2l0aCB0aGUgam9iIEFQSQoiIiIKCmltcG9ydCBqc29uCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQganNvbl9mb3JtYXQKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHN0cnVjdF9wYjIKCgpkZWYgZGljdF90b19zdHJ1Y3QoZGljdF9vYmopOgogIHJldHVybiBqc29uX2Zvcm1hdC5QYXJzZShqc29uLmR1bXBzKGRpY3Rfb2JqKSwgc3RydWN0X3BiMi5TdHJ1Y3QoKSkKCgpkZWYgc3RydWN0X3RvX2RpY3Qoc3RydWN0X29iaik6CiAgcmV0dXJuIGpzb24ubG9hZHMoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihzdHJ1Y3Rfb2JqKSkKfXI5AwAAKFgOAAAAc3RydWN0X3RvX2RpY3RYAwAAAGRlZksfSyGHWA4AAABkaWN0X3RvX3N0cnVjdFgDAAAAZGVmSxtLHYd1fXI6AwAAKFgOAAAAc3RydWN0X3RvX2RpY3RYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcjsDAABYDgAAAGRpY3RfdG9fc3RydWN0ajsDAAB1aIpYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcjwDAACFgXI9AwAAfXI+AwAAYnRyPwMAAFUdYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnNyQAMAAChYBjgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiaW9iYXNlLlJhbmdlVHJhY2tlciBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZWQgd2l0aCBBcGFjaGUgQmVhbS4KIiIiCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgdGhyZWFkaW5nCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKCl9fYWxsX18gPSBbJ09mZnNldFJhbmdlVHJhY2tlcicsICdMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyJywKICAgICAgICAgICAnT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyJywgJ1Vuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciddCgoKY2xhc3MgT2Zmc2V0UmFuZ2VUcmFja2VyKGlvYmFzZS5SYW5nZVRyYWNrZXIpOgogICIiIkEgJ1JhbmdlVHJhY2tlcicgZm9yIG5vbi1uZWdhdGl2ZSBwb3NpdGlvbnMgb2YgdHlwZSAnbG9uZycuIiIiCgogICMgT2Zmc2V0IGNvcnJlc3BvbmRpbmcgdG8gaW5maW5pdHkuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBhcyB0aGUgdXBwZXItYm91bmQKICAjIG9mIGEgcmFuZ2UsIGFuZCBpbmRpY2F0ZXMgcmVhZGluZyBhbGwgb2YgdGhlIHJlY29yZHMgdW50aWwgdGhlIGVuZCB3aXRob3V0CiAgIyBzcGVjaWZ5aW5nIGV4YWN0bHkgd2hhdCB0aGUgZW5kIGlzLgogICMgSW5maW5pdGUgcmFuZ2VzIGNhbm5vdCBiZSBzcGxpdCBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gZXN0aW1hdGUKICAjIHByb2dyZXNzIHdpdGhpbiB0aGVtLgogIE9GRlNFVF9JTkZJTklUWSA9IGZsb2F0KCdpbmYnKQoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIGVuZCk6CiAgICBzdXBlcihPZmZzZXRSYW5nZVRyYWNrZXIsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdGFydCBvZmZzZXQgbXVzdCBub3QgYmUgXCdOb25lXCcnKQogICAgaWYgZW5kIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VuZCBvZmZzZXQgbXVzdCBub3QgYmUgXCdOb25lXCcnKQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3RhcnQsIChpbnQsIGxvbmcpKQogICAgaWYgZW5kICE9IHNlbGYuT0ZGU0VUX0lORklOSVRZOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShlbmQsIChpbnQsIGxvbmcpKQoKICAgIGFzc2VydCBzdGFydCA8PSBlbmQKCiAgICBzZWxmLl9zdGFydF9vZmZzZXQgPSBzdGFydAogICAgc2VsZi5fc3RvcF9vZmZzZXQgPSBlbmQKCiAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9IC0xCiAgICBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCA9IC0xCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICAgIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuID0gMAogICAgc2VsZi5fc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayA9IE5vbmUKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXJ0X29mZnNldAoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdG9wX29mZnNldAoKICBAcHJvcGVydHkKICBkZWYgbGFzdF9yZWNvcmRfc3RhcnQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQKCiAgZGVmIF92YWxpZGF0ZV9yZWNvcmRfc3RhcnQoc2VsZiwgcmVjb3JkX3N0YXJ0LCBzcGxpdF9wb2ludCk6CiAgICAjIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB1bmRlciB0aGUgbG9jayBzZWxmLmxvY2suCiAgICBpZiBub3Qgc2VsZi5fbG9jay5sb2NrZWQoKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgdW5kZXIgdGhlIGxvY2sgc2VsZi5sb2NrLicpCgogICAgaWYgcmVjb3JkX3N0YXJ0IDwgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnVHJ5aW5nIHRvIHJldHVybiBhIHJlY29yZCBbc3RhcnRpbmcgYXQgJWRdIHdoaWNoIGlzIGJlZm9yZSB0aGUgJwogICAgICAgICAgJ2xhc3QtcmV0dXJuZWQgcmVjb3JkIFtzdGFydGluZyBhdCAlZF0nICUKICAgICAgICAgIChyZWNvcmRfc3RhcnQsIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0KSkKCiAgICBpZiBzcGxpdF9wb2ludDoKICAgICAgaWYgKHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50ICE9IC0xIGFuZAogICAgICAgICAgcmVjb3JkX3N0YXJ0ID09IHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50KToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnUmVjb3JkIGF0IGEgc3BsaXQgcG9pbnQgaGFzIHNhbWUgb2Zmc2V0IGFzIHRoZSBwcmV2aW91cyBzcGxpdCAnCiAgICAgICAgICAgICdwb2ludDogJWQnICUgcmVjb3JkX3N0YXJ0KQogICAgZWxpZiBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9PSAtMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdUaGUgZmlyc3QgcmVjb3JkIFtzdGFydGluZyBhdCAlZF0gbXVzdCBiZSBhdCBhIHNwbGl0IHBvaW50JyAlCiAgICAgICAgICByZWNvcmRfc3RhcnQpCgogICAgaWYgKHNwbGl0X3BvaW50IGFuZCBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCAhPSAtMSBhbmQKICAgICAgICByZWNvcmRfc3RhcnQgPT0gc2VsZi5fb2Zmc2V0X29mX2xhc3Rfc3BsaXRfcG9pbnQpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1JlY29yZCBhdCBhIHNwbGl0IHBvaW50IGhhcyBzYW1lIG9mZnNldCBhcyB0aGUgcHJldmlvdXMgc3BsaXQgJwogICAgICAgICAgJ3BvaW50OiAlZCcgJSByZWNvcmRfc3RhcnQpCgogICAgaWYgbm90IHNwbGl0X3BvaW50IGFuZCBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9PSAtMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdUaGUgZmlyc3QgcmVjb3JkIFtzdGFydGluZyBhdCAlZF0gbXVzdCBiZSBhdCBhIHNwbGl0IHBvaW50JyAlCiAgICAgICAgICByZWNvcmRfc3RhcnQpCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcmVjb3JkX3N0YXJ0KToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fdmFsaWRhdGVfcmVjb3JkX3N0YXJ0KHJlY29yZF9zdGFydCwgVHJ1ZSkKICAgICAgaWYgcmVjb3JkX3N0YXJ0ID49IHNlbGYuc3RvcF9wb3NpdGlvbigpOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCA9IHJlY29yZF9zdGFydAogICAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9IHJlY29yZF9zdGFydAogICAgICBzZWxmLl9zcGxpdF9wb2ludHNfc2VlbiArPSAxCiAgICAgIHJldHVybiBUcnVlCgogIGRlZiBzZXRfY3VycmVudF9wb3NpdGlvbihzZWxmLCByZWNvcmRfc3RhcnQpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl92YWxpZGF0ZV9yZWNvcmRfc3RhcnQocmVjb3JkX3N0YXJ0LCBGYWxzZSkKICAgICAgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQgPSByZWNvcmRfc3RhcnQKCiAgZGVmIHRyeV9zcGxpdChzZWxmLCBzcGxpdF9vZmZzZXQpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3BsaXRfb2Zmc2V0LCAoaW50LCBsb25nKSkKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fc3RvcF9vZmZzZXQgPT0gT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWToKICAgICAgICBsb2dnaW5nLmRlYnVnKCdyZWZ1c2luZyB0byBzcGxpdCAlciBhdCAlZDogc3RvcCBwb3NpdGlvbiB1bnNwZWNpZmllZCcsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCiAgICAgIGlmIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0ID09IC0xOgogICAgICAgIGxvZ2dpbmcuZGVidWcoJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiB1bnN0YXJ0ZWQnLCBzZWxmLAogICAgICAgICAgICAgICAgICAgICAgc3BsaXRfb2Zmc2V0KQogICAgICAgIHJldHVybgoKICAgICAgaWYgc3BsaXRfb2Zmc2V0IDw9IHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0OgogICAgICAgIGxvZ2dpbmcuZGVidWcoCiAgICAgICAgICAgICdSZWZ1c2luZyB0byBzcGxpdCAlciBhdCAlZDogYWxyZWFkeSBwYXN0IHByb3Bvc2VkIHN0b3Agb2Zmc2V0JywKICAgICAgICAgICAgc2VsZiwgc3BsaXRfb2Zmc2V0KQogICAgICAgIHJldHVybgogICAgICBpZiAoc3BsaXRfb2Zmc2V0IDwgc2VsZi5zdGFydF9wb3NpdGlvbigpCiAgICAgICAgICBvciBzcGxpdF9vZmZzZXQgPj0gc2VsZi5zdG9wX3Bvc2l0aW9uKCkpOgogICAgICAgIGxvZ2dpbmcuZGVidWcoCiAgICAgICAgICAgICdSZWZ1c2luZyB0byBzcGxpdCAlciBhdCAlZDogcHJvcG9zZWQgc3BsaXQgcG9zaXRpb24gb3V0IG9mIHJhbmdlJywKICAgICAgICAgICAgc2VsZiwgc3BsaXRfb2Zmc2V0KQogICAgICAgIHJldHVybgoKICAgICAgbG9nZ2luZy5kZWJ1ZygnQWdyZWVpbmcgdG8gc3BsaXQgJXIgYXQgJWQnLCBzZWxmLCBzcGxpdF9vZmZzZXQpCgogICAgICBzcGxpdF9mcmFjdGlvbiA9IChmbG9hdChzcGxpdF9vZmZzZXQgLSBzZWxmLl9zdGFydF9vZmZzZXQpIC8gKAogICAgICAgICAgc2VsZi5fc3RvcF9vZmZzZXQgLSBzZWxmLl9zdGFydF9vZmZzZXQpKQogICAgICBzZWxmLl9zdG9wX29mZnNldCA9IHNwbGl0X29mZnNldAoKICAgICAgcmV0dXJuIHNlbGYuX3N0b3Bfb2Zmc2V0LCBzcGxpdF9mcmFjdGlvbgoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGZyYWN0aW9uID0gKCgxLjAgKiAoc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQgLSBzZWxmLnN0YXJ0X3Bvc2l0aW9uKCkpIC8KICAgICAgICAgICAgICAgICAgIChzZWxmLnN0b3BfcG9zaXRpb24oKSAtIHNlbGYuc3RhcnRfcG9zaXRpb24oKSkpIGlmCiAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9wb3NpdGlvbigpICE9IHNlbGYuc3RhcnRfcG9zaXRpb24oKSBlbHNlIDAuMCkKCiAgICAgICMgc2VsZi5sYXN0X3JlY29yZF9zdGFydCBtYXkgYmVjb21lIGxhcmdlciB0aGFuIHNlbGYuZW5kX29mZnNldCB3aGVuCiAgICAgICMgcmVhZGluZyB0aGUgcmVjb3JkcyBzaW5jZSBhbnkgcmVjb3JkIHRoYXQgc3RhcnRzIGJlZm9yZSB0aGUgZmlyc3QgJ3NwbGl0CiAgICAgICMgcG9pbnQnIGF0IG9yIGFmdGVyIHRoZSBkZWZpbmVkICdzdG9wIG9mZnNldCcgaXMgY29uc2lkZXJlZCB0byBiZSB3aXRoaW4KICAgICAgIyB0aGUgcmFuZ2Ugb2YgdGhlIE9mZnNldFJhbmdlVHJhY2tlci4gSGVuY2UgZnJhY3Rpb24gY291bGQgYmUgPiAxLgogICAgICAjIHNlbGYubGFzdF9yZWNvcmRfc3RhcnQgaXMgaW5pdGlhbGl6ZWQgdG8gLTEsIGhlbmNlIGZyYWN0aW9uIG1heSBiZSA8IDAuCiAgICAgICMgQm91bmRpbmcgdGhlIHRvIHJhbmdlIFswLCAxXS4KICAgICAgcmV0dXJuIG1heCgwLjAsIG1pbigxLjAsIGZyYWN0aW9uKSkKCiAgZGVmIHBvc2l0aW9uX2F0X2ZyYWN0aW9uKHNlbGYsIGZyYWN0aW9uKToKICAgIGlmIHNlbGYuc3RvcF9wb3NpdGlvbigpID09IE9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFk6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICdnZXRfcG9zaXRpb25fZm9yX2ZyYWN0aW9uX2NvbnN1bWVkIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBhbiAnCiAgICAgICAgICAndW5ib3VuZGVkIHJhbmdlJykKICAgIHJldHVybiBpbnQobWF0aC5jZWlsKHNlbGYuc3RhcnRfcG9zaXRpb24oKSArIGZyYWN0aW9uICogKAogICAgICAgIHNlbGYuc3RvcF9wb3NpdGlvbigpIC0gc2VsZi5zdGFydF9wb3NpdGlvbigpKSkpCgogIGRlZiBzcGxpdF9wb2ludHMoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHNwbGl0X3BvaW50c19jb25zdW1lZCA9ICgKICAgICAgICAgIDAgaWYgc2VsZi5fc3BsaXRfcG9pbnRzX3NlZW4gPT0gMCBlbHNlIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuIC0gMSkKICAgICAgc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCA9ICgKICAgICAgICAgIHNlbGYuX3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc2VsZi5zdG9wX3Bvc2l0aW9uKCkpCiAgICAgICAgICBpZiBzZWxmLl9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrCiAgICAgICAgICBlbHNlIGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04pCiAgICAgIHNwbGl0X3BvaW50c19yZW1haW5pbmcgPSAoCiAgICAgICAgICBpb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOIGlmCiAgICAgICAgICBzcGxpdF9wb2ludHNfdW5jbGFpbWVkID09IGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04KICAgICAgICAgIGVsc2UgKHNwbGl0X3BvaW50c191bmNsYWltZWQgKyAxKSkKCiAgICAgIHJldHVybiAoc3BsaXRfcG9pbnRzX2NvbnN1bWVkLCBzcGxpdF9wb2ludHNfcmVtYWluaW5nKQoKICBkZWYgc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgogICAgc2VsZi5fc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayA9IGNhbGxiYWNrCgoKY2xhc3MgT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyKGlvYmFzZS5SYW5nZVRyYWNrZXIpOgogICIiIgogIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHJhbmdlIHRyYWNrZXJzIHdob3NlIHBvc2l0aW9ucyBhcmUgY29tcGFyYWJsZS4KCiAgU3ViY2xhc3NlcyBvbmx5IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBtYXBwaW5nIGZyb20gcG9zaXRpb24gcmFuZ2VzCiAgdG8gYW5kIGZyb20gdGhlIGNsb3NlZCBpbnRlcnZhbCBbMCwgMV0uCiAgIiIiCgogIFVOU1RBUlRFRCA9IG9iamVjdCgpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgc2VsZi5fc3RhcnRfcG9zaXRpb24gPSBzdGFydF9wb3NpdGlvbgogICAgc2VsZi5fc3RvcF9wb3NpdGlvbiA9IHN0b3BfcG9zaXRpb24KICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLl9sYXN0X2NsYWltID0gc2VsZi5VTlNUQVJURUQKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uCgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fc3RvcF9wb3NpdGlvbgoKICBkZWYgdHJ5X2NsYWltKHNlbGYsIHBvc2l0aW9uKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fbGFzdF9jbGFpbSBpcyBub3Qgc2VsZi5VTlNUQVJURUQgYW5kIHBvc2l0aW9uIDwgc2VsZi5fbGFzdF9jbGFpbToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAiUG9zaXRpb25zIG11c3QgYmUgY2xhaW1lZCBpbiBvcmRlcjogIgogICAgICAgICAgICAiY2xhaW0gJyVzJyBhdHRlbXB0ZWQgYWZ0ZXIgY2xhaW0gJyVzJyIgJSAoCiAgICAgICAgICAgICAgICBwb3NpdGlvbiwgc2VsZi5fbGFzdF9jbGFpbSkpCiAgICAgIGVsaWYgc2VsZi5fc3RhcnRfcG9zaXRpb24gaXMgbm90IE5vbmUgYW5kIHBvc2l0aW9uIDwgc2VsZi5fc3RhcnRfcG9zaXRpb246CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2xhaW0gJyVzJyBpcyBiZWZvcmUgc3RhcnQgJyVzJyIgJSAoCiAgICAgICAgICAgIHBvc2l0aW9uLCBzZWxmLl9zdGFydF9wb3NpdGlvbikpCiAgICAgIGlmIHNlbGYuX3N0b3BfcG9zaXRpb24gaXMgTm9uZSBvciBwb3NpdGlvbiA8IHNlbGYuX3N0b3BfcG9zaXRpb246CiAgICAgICAgc2VsZi5fbGFzdF9jbGFpbSA9IHBvc2l0aW9uCiAgICAgICAgcmV0dXJuIFRydWUKICAgICAgZWxzZToKICAgICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIHBvc2l0aW9uX2F0X2ZyYWN0aW9uKHNlbGYsIGZyYWN0aW9uKToKICAgIHJldHVybiBzZWxmLmZyYWN0aW9uX3RvX3Bvc2l0aW9uKAogICAgICAgIGZyYWN0aW9uLCBzZWxmLl9zdGFydF9wb3NpdGlvbiwgc2VsZi5fc3RvcF9wb3NpdGlvbikKCiAgZGVmIHRyeV9zcGxpdChzZWxmLCBwb3NpdGlvbik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmICgoc2VsZi5fc3RvcF9wb3NpdGlvbiBpcyBub3QgTm9uZSBhbmQgcG9zaXRpb24gPj0gc2VsZi5fc3RvcF9wb3NpdGlvbikKICAgICAgICAgIG9yIChzZWxmLl9zdGFydF9wb3NpdGlvbiBpcyBub3QgTm9uZQogICAgICAgICAgICAgIGFuZCBwb3NpdGlvbiA8PSBzZWxmLl9zdGFydF9wb3NpdGlvbikpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlNwbGl0IGF0ICclcycgbm90IGluIHJhbmdlICVzIiAlICgKICAgICAgICAgICAgcG9zaXRpb24sIFtzZWxmLl9zdGFydF9wb3NpdGlvbiwgc2VsZi5fc3RvcF9wb3NpdGlvbl0pKQogICAgICBpZiBzZWxmLl9sYXN0X2NsYWltIGlzIHNlbGYuVU5TVEFSVEVEIG9yIHNlbGYuX2xhc3RfY2xhaW0gPCBwb3NpdGlvbjoKICAgICAgICBmcmFjdGlvbiA9IHNlbGYucG9zaXRpb25fdG9fZnJhY3Rpb24oCiAgICAgICAgICAgIHBvc2l0aW9uLCBzdGFydD1zZWxmLl9zdGFydF9wb3NpdGlvbiwgZW5kPXNlbGYuX3N0b3BfcG9zaXRpb24pCiAgICAgICAgc2VsZi5fc3RvcF9wb3NpdGlvbiA9IHBvc2l0aW9uCiAgICAgICAgcmV0dXJuIHBvc2l0aW9uLCBmcmFjdGlvbgogICAgICBlbHNlOgogICAgICAgIHJldHVybiBOb25lCgogIGRlZiBmcmFjdGlvbl9jb25zdW1lZChzZWxmKToKICAgIGlmIHNlbGYuX2xhc3RfY2xhaW0gaXMgc2VsZi5VTlNUQVJURUQ6CiAgICAgIHJldHVybiAwCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi5wb3NpdGlvbl90b19mcmFjdGlvbigKICAgICAgICAgIHNlbGYuX2xhc3RfY2xhaW0sIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBzZWxmLl9zdG9wX3Bvc2l0aW9uKQoKICBkZWYgcG9zaXRpb25fdG9fZnJhY3Rpb24oc2VsZiwgcG9zLCBzdGFydCwgZW5kKToKICAgICIiIgogICAgQ29udmVydHMgYSBwb3NpdGlvbiBgcG9zYCBiZXR3ZWVlbiBgc3RhcnRgIGFuZCBgZW5kYCAoaW5jbHVzaXZlKSB0byBhCiAgICBmcmFjdGlvbiBiZXR3ZWVuIDAgYW5kIDEuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGZyYWN0aW9uX3RvX3Bvc2l0aW9uKHNlbGYsIGZyYWN0aW9uLCBzdGFydCwgZW5kKToKICAgICIiIgogICAgQ29udmVydHMgYSBmcmFjdGlvbiBiZXR3ZWVuIDAgYW5kIDEgdG8gYSBwb3NpdGlvbiBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIoaW9iYXNlLlJhbmdlVHJhY2tlcik6CiAgIiIiQSBSYW5nZVRyYWNrZXIgdGhhdCBhbHdheXMgaWdub3JlcyBzcGxpdCByZXF1ZXN0cy4KCiAgVGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIGEgZ2l2ZW4KICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyYCBvYmplY3QgdW5zcGxpdHRhYmxlIGJ5CiAgaWdub3JpbmcgYWxsIGNhbGxzIHRvIDptZXRoOmAudHJ5X3NwbGl0KClgLiBBbGwgb3RoZXIgY2FsbHMgd2lsbCBiZSBkZWxlZ2F0ZWQKICB0byB0aGUgZ2l2ZW4gOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlcmAuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCByYW5nZV90cmFja2VyKToKICAgICIiIkluaXRpYWxpemVzIFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci4KCiAgICBBcmdzOgogICAgICByYW5nZV90cmFja2VyICh+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlcik6IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyYCB0byB3aGljaCBhbGwgbWV0aG9kCiAgICAgICAgY2FsbHMgZXhwZWN0IGNhbGxzIHRvIDptZXRoOmAudHJ5X3NwbGl0KClgIHdpbGwgYmUgZGVsZWdhdGVkLgogICAgIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShyYW5nZV90cmFja2VyLCBpb2Jhc2UuUmFuZ2VUcmFja2VyKQogICAgc2VsZi5fcmFuZ2VfdHJhY2tlciA9IHJhbmdlX3RyYWNrZXIKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9yYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb24oZnJhY3Rpb24pCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIudHJ5X2NsYWltKHBvc2l0aW9uKQoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHBvc2l0aW9uKToKICAgIHJldHVybiBOb25lCgogIGRlZiBzZXRfY3VycmVudF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CiAgICBzZWxmLl9yYW5nZV90cmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uKHBvc2l0aW9uKQoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZCgpCgogIGRlZiBzcGxpdF9wb2ludHMoc2VsZik6CiAgICAjIEFuIHVuc3BsaXR0YWJsZSByYW5nZSBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlIHNwbGl0IHBvaW50LgogICAgcmV0dXJuICgwLCAxKQoKICBkZWYgc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgogICAgc2VsZi5fcmFuZ2VfdHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhjYWxsYmFjaykKCgpjbGFzcyBMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyKE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlcik6CiAgIiIiCiAgQSByYW5nZSB0cmFja2VyIHRoYXQgdHJhY2tzIHByb2dyZXNzIHRocm91Z2ggYSBsZXhpY29ncmFwaGljYWxseQogIG9yZGVyZWQga2V5c3BhY2Ugb2Ygc3RyaW5ncy4KICAiIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyYWN0aW9uX3RvX3Bvc2l0aW9uKGNscywgZnJhY3Rpb24sIHN0YXJ0PU5vbmUsIGVuZD1Ob25lKToKICAgICIiIgogICAgTGluZWFybHkgaW50ZXJwb2xhdGVzIGEga2V5IHRoYXQgaXMgbGV4aWNvZ3JhcGhpY2FsbHkKICAgIGZyYWN0aW9uIG9mIHRoZSB3YXkgYmV0d2VlbiBzdGFydCBhbmQgZW5kLgogICAgIiIiCiAgICBhc3NlcnQgMCA8PSBmcmFjdGlvbiA8PSAxLCBmcmFjdGlvbgogICAgaWYgc3RhcnQgaXMgTm9uZToKICAgICAgc3RhcnQgPSAnJwogICAgaWYgZnJhY3Rpb24gPT0gMToKICAgICAgcmV0dXJuIGVuZAogICAgZWxpZiBmcmFjdGlvbiA9PSAwOgogICAgICByZXR1cm4gc3RhcnQKICAgIGVsc2U6CiAgICAgIGlmIG5vdCBlbmQ6CiAgICAgICAgY29tbW9uX3ByZWZpeF9sZW4gPSBsZW4oc3RhcnQpIC0gbGVuKHN0YXJ0LmxzdHJpcCgnXHhGRicpKQogICAgICBlbHNlOgogICAgICAgIGZvciBpeCwgKHMsIGUpIGluIGVudW1lcmF0ZSh6aXAoc3RhcnQsIGVuZCkpOgogICAgICAgICAgaWYgcyAhPSBlOgogICAgICAgICAgICBjb21tb25fcHJlZml4X2xlbiA9IGl4CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgIGNvbW1vbl9wcmVmaXhfbGVuID0gbWluKGxlbihzdGFydCksIGxlbihlbmQpKQogICAgICAjIENvbnZlcnQgdGhlIHJlbGF0aXZlIHByZWNpc2lvbiBvZiBmcmFjdGlvbiAofjUzIGJpdHMpIHRvIGFuIGFic29sdXRlCiAgICAgICMgcHJlY2lzaW9uIG5lZWRlZCB0byByZXByZXNlbnQgdmFsdWVzIGJldHdlZW4gc3RhcnQgYW5kIGVuZCBkaXN0aW5jdGx5LgogICAgICBwcmVjID0gY29tbW9uX3ByZWZpeF9sZW4gKyBpbnQoLW1hdGgubG9nKGZyYWN0aW9uLCAyNTYpKSArIDcKICAgICAgaXN0YXJ0ID0gY2xzLl9zdHJpbmdfdG9faW50KHN0YXJ0LCBwcmVjKQogICAgICBpZW5kID0gY2xzLl9zdHJpbmdfdG9faW50KGVuZCwgcHJlYykgaWYgZW5kIGVsc2UgMSA8PCAocHJlYyAqIDgpCiAgICAgIGlrZXkgPSBpc3RhcnQgKyBpbnQoKGllbmQgLSBpc3RhcnQpICogZnJhY3Rpb24pCiAgICAgICMgQ291bGQgYmUgZXF1YWwgZHVlIHRvIHJvdW5kaW5nLgogICAgICAjIEFkanVzdCB0byBlbnN1cmUgd2UgbmV2ZXIgcmV0dXJuIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZAogICAgICAjIHVubGVzcyBmcmFjdGlvbiBpcyBleGF0bHkgMCBvciAxLgogICAgICBpZiBpa2V5ID09IGlzdGFydDoKICAgICAgICBpa2V5ICs9IDEKICAgICAgZWxpZiBpa2V5ID09IGllbmQ6CiAgICAgICAgaWtleSAtPSAxCiAgICAgIHJldHVybiBjbHMuX3N0cmluZ19mcm9tX2ludChpa2V5LCBwcmVjKS5yc3RyaXAoJ1wwJykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHBvc2l0aW9uX3RvX2ZyYWN0aW9uKGNscywga2V5LCBzdGFydD1Ob25lLCBlbmQ9Tm9uZSk6CiAgICAiIiIKICAgIFJldHVybnMgdGhlIGZyYWN0aW9uIG9mIGtleXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKSB0aGF0CiAgICBhcmUgbGVzcyB0aGFuIHRoZSBnaXZlbiBrZXkuCiAgICAiIiIKICAgIGlmIG5vdCBrZXk6CiAgICAgIHJldHVybiAwCiAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICBzdGFydCA9ICcnCiAgICBwcmVjID0gbGVuKHN0YXJ0KSArIDcKICAgIGlmIGtleS5zdGFydHN3aXRoKHN0YXJ0KToKICAgICAgIyBIaWdoZXIgYWJzb2x1dGUgcHJlY2lzaW9uIG5lZWRlZCBmb3IgdmVyeSBzbWFsbCB2YWx1ZXMgb2YgZml4ZWQKICAgICAgIyByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgcHJlYyA9IG1heChwcmVjLCBsZW4oa2V5KSAtIGxlbihrZXlbbGVuKHN0YXJ0KTpdLnN0cmlwKCdcMCcpKSArIDcpCiAgICBpc3RhcnQgPSBjbHMuX3N0cmluZ190b19pbnQoc3RhcnQsIHByZWMpCiAgICBpa2V5ID0gY2xzLl9zdHJpbmdfdG9faW50KGtleSwgcHJlYykKICAgIGllbmQgPSBjbHMuX3N0cmluZ190b19pbnQoZW5kLCBwcmVjKSBpZiBlbmQgZWxzZSAxIDw8IChwcmVjICogOCkKICAgIHJldHVybiBmbG9hdChpa2V5IC0gaXN0YXJ0KSAvIChpZW5kIC0gaXN0YXJ0KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdHJpbmdfdG9faW50KHMsIHByZWMpOgogICAgIiIiCiAgICBSZXR1cm5zIGludCgyNTYqKnByZWMgKiBmKSB3aGVyZSBmIGlzIHRoZSBmcmFjdGlvbgogICAgcmVwcmVzZW50ZWQgYnkgaW50ZXJwcmV0aW5nICcuJyArIHMgYXMgYSBiYXNlLTI1NgogICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgogICAgIiIiCiAgICBpZiBub3QgczoKICAgICAgcmV0dXJuIDAKICAgIGVsaWYgbGVuKHMpIDwgcHJlYzoKICAgICAgcyArPSAnXDAnICogKHByZWMgLSBsZW4ocykpCiAgICBlbHNlOgogICAgICBzID0gc1s6cHJlY10KICAgIHJldHVybiBpbnQocy5lbmNvZGUoJ2hleCcpLCAxNikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfc3RyaW5nX2Zyb21faW50KGksIHByZWMpOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIF9zdHJpbmdfdG9faW50LgogICAgIiIiCiAgICBoID0gJyV4JyAlIGkKICAgIHJldHVybiAoJzAnICogKDIgKiBwcmVjIC0gbGVuKGgpKSArIGgpLmRlY29kZSgnaGV4JykKfXJBAwAAKFgkAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkWAMAAABkZWZLm0uoh1gtAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5fc3RyaW5nX2Zyb21faW50WAMAAABkZWZNkwFNmgGHWDAAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25YAwAAAGRlZkvrS+6HWBgAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXJYBQAAAGNsYXNzTRMBTUIBh1gpAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLl92YWxpZGF0ZV9yZWNvcmRfc3RhcnRYAwAAAGRlZktKS2uHWCkAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvblgDAAAAZGVmS9dL2odYIQAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5fX2luaXRfX1gDAAAAZGVmTRwBTSYBh1glAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c1gDAAAAZGVmTTwBTT8Bh1gnAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uWAMAAABkZWZLqUuwh1gkAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLmxhc3RfcmVjb3JkX3N0YXJ0WAMAAABkZWZLRktJh1gtAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uWAMAAABkZWZNLQFNLwGHWCIAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X2NsYWltWAMAAABkZWZNMAFNMgGHWC0AAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRYAwAAAGRlZkv+TQQBh1gcAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlclgFAAAAY2xhc3NNRAFNmgGHWC0AAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb25YAwAAAGRlZk02AU04AYdYEgAAAE9mZnNldFJhbmdlVHJhY2tlclgFAAAAY2xhc3NLH0vCh1ghAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9uWAMAAABkZWZLQEtCh1gbAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyWAUAAABjbGFzc0vETREBh1g2AAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrWAMAAABkZWZLwEvCh1gxAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvblgDAAAAZGVmTUoBTW8Bh1gcAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmS2xLdYdYJgAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZNKgFNLAGHWCsAAABMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyLl9zdHJpbmdfdG9faW50WAMAAABkZWZNhAFNkgGHWDAAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25YAwAAAGRlZk0FAU0LAYdYHwAAAE9mZnNldFJhbmdlVHJhY2tlci5zcGxpdF9wb2ludHNYAwAAAGRlZkuxS7+HWDEAAABMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyLnBvc2l0aW9uX3RvX2ZyYWN0aW9uWAMAAABkZWZNcAFNgwGHWBwAAABPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0WAMAAABkZWZLe0uah1gqAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkWAMAAABkZWZNOQFNOwGHWCUAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X3NwbGl0WAMAAABkZWZL70v9h1gbAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLl9faW5pdF9fWAMAAABkZWZLKUs/h1g8AAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrWAMAAABkZWZNQAFNQgGHWDAAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb25YAwAAAGRlZk0MAU0RAYdYJQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfY2xhaW1YAwAAAGRlZkvbS+qHWCQAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuX19pbml0X19YAwAAAGRlZkvOS9OHWCoAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZkvUS9aHWCcAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZk0nAU0pAYdYIgAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci50cnlfc3BsaXRYAwAAAGRlZk0zAU01AYdYIAAAAE9mZnNldFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZLQ0tFh1gnAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uWAMAAABkZWZLdkt6h3V9ckIDAAAoWCQAAABPZmZzZXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRYHQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzckMDAABYJgAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uakMDAABYMAAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbmpDAwAAWBgAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXJqQwMAAFgpAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25qQwMAAFgxAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbmpDAwAAWDAAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25qQwMAAFgtAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uakMDAABYIgAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci50cnlfY2xhaW1qQwMAAFgtAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkakMDAABYHAAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXJqQwMAAFgSAAAAT2Zmc2V0UmFuZ2VUcmFja2VyakMDAABYIQAAAE9mZnNldFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmpDAwAAWBsAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXJqQwMAAFg2AAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrakMDAABYMQAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb25qQwMAAFgcAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbWpDAwAAWC0AAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb25qQwMAAFgfAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c2pDAwAAWCUAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzakMDAABYHAAAAE9mZnNldFJhbmdlVHJhY2tlci50cnlfc3BsaXRqQwMAAFgqAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkakMDAABYJQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfc3BsaXRqQwMAAFg8AAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrakMDAABYMAAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbmpDAwAAWCUAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X2NsYWltakMDAABYKgAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmpDAwAAWCcAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25qQwMAAFgiAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9zcGxpdGpDAwAAWCAAAABPZmZzZXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmpDAwAAWCcAAABPZmZzZXRSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb25qQwMAAFgnAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uakMDAAB1aIpYHQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzckQDAACFgXJFAwAAfXJGAwAAYnRyRwMAAFUkYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsckgDAAAoWE4OAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgVXRpbGl0eSBmdW5jdGlvbnMgJiBjbGFzc2VzIHRoYXQgYXJlIF9ub3RfIHNwZWNpZmljIHRvIHRoZSBkYXRhc3RvcmUgY2xpZW50LgojCiMgRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKaW1wb3J0IG1hdGgKCgpjbGFzcyBNb3ZpbmdTdW0ob2JqZWN0KToKICAiIiJDbGFzcyB0aGF0IGtlZXBzIHRyYWNrIG9mIGEgcm9sbGluZyB3aW5kb3cgc3VtLgoKICBGb3IgdXNlIGluIHRyYWNraW5nIHJlY2VudCBwZXJmb3JtYW5jZSBvZiB0aGUgY29ubmVjdG9yLgoKICBJbnRlbmRlZCB0byBiZSBzaW1pbGFyIHRvCiAgb3JnLmFwYWNoZS5iZWFtLnNkay51dGlsLk1vdmluZ0Z1bmN0aW9uKC4uLiwgU3VtLm9mTG9uZ3MoKSksIGJ1dCBmb3IKICBjb252ZW5pZW5jZSB3ZSBleHBvc2UgdGhlIGNvdW50IG9mIGVudHJpZXMgYXMgd2VsbCBzbyB0aGlzIGRvdWJsZXMgYXMgYQogIG1vdmluZyBhdmVyYWdlIHRyYWNrZXIuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dfbXMsIGJ1Y2tldF9tcyk6CiAgICBpZiB3aW5kb3dfbXMgPD0gYnVja2V0X21zIG9yIGJ1Y2tldF9tcyA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3aW5kb3dfbXMgPiBidWNrZXRfbXMgPiAwIHBsZWFzZSIpCiAgICBzZWxmLl9udW1fYnVja2V0cyA9IGludChtYXRoLmNlaWwod2luZG93X21zIC8gYnVja2V0X21zKSkKICAgIHNlbGYuX2J1Y2tldF9tcyA9IGJ1Y2tldF9tcwogICAgc2VsZi5fUmVzZXQobm93PTApICAjIGluaXRpYWxpemUgdGhlIG1vdmluZyB3aW5kb3cgbWVtYmVycwoKICBkZWYgX1Jlc2V0KHNlbGYsIG5vdyk6CiAgICBzZWxmLl9jdXJyZW50X2luZGV4ID0gMCAgIyBwb2ludGVyIGludG8gc2VsZi5fYnVja2V0cwogICAgc2VsZi5fY3VycmVudF9tc19zaW5jZV9lcG9jaCA9IG1hdGguZmxvb3IoCiAgICAgICAgbm93IC8gc2VsZi5fYnVja2V0X21zKSAqIHNlbGYuX2J1Y2tldF9tcwoKICAgICMgX2J1Y2tldHMgaXMgYSBsaXN0IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIGxpc3QgW3N1bSwgbnVtX3NhbXBsZXNdCiAgICAjIFRoaXMgaXMgYSBjaXJjdWxhciBidWZmZXIgd2hlcmUKICAgICMgW19jdXJyZW50X2luZGV4XSByZXByZXNlbnRzIHRoZSB0aW1lIHJhbmdlCiAgICAjICAgICBbX2N1cnJlbnRfbXNfc2luY2VfZXBvY2gsIF9jdXJyZW50X21zX3NpbmNlX2Vwb2NoK19idWNrZXRfbXMpCiAgICAjIFtfY3VycmVudF9pbmRleC0xXSByZXByZXNlbnRzIGltbWVkaWF0bHkgcHJpb3IgdGltZSByYW5nZQogICAgIyAgICAgW19jdXJyZW50X21zX3NpbmNlX2Vwb2NoLV9idWNrZXRfbXMsIF9jdXJyZW50X21zX3NpbmNlX2Vwb2NoKQogICAgIyBldGMsIHdyYXBwaW5nIGFyb3VuZCBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSwgc28KICAgICMgW19jdXJyZW50X2luZGV4KzFdIGlzIHRoZSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgb2xkZXN0IGJ1Y2tldC4KICAgIHNlbGYuX2J1Y2tldHMgPSBbWzAsIDBdIGZvciBfIGluIHJhbmdlKDAsIHNlbGYuX251bV9idWNrZXRzKV0KCiAgZGVmIF9GbHVzaChzZWxmLCBub3cpOgogICAgIiIiCgogICAgQXJnczoKICAgICAgbm93OiBpbnQsIG1pbGxpc2Vjb25kcyBzaW5jZSBlcG9jaAogICAgIiIiCiAgICBpZiBub3cgPj0gKHNlbGYuX2N1cnJlbnRfbXNfc2luY2VfZXBvY2gKICAgICAgICAgICAgICAgKyBzZWxmLl9idWNrZXRfbXMgKiBzZWxmLl9udW1fYnVja2V0cyk6CiAgICAgICMgVGltZSBtb3ZlZCBmb3J3YXJkIHNvIGZhciB0aGF0IGFsbCBjdXJyZW50bHkgaGVsZCBkYXRhIGlzIG91dHNpZGUgb2YKICAgICAgIyB0aGUgd2luZG93LiAgSXQgaXMgZmFzdGVyIHRvIHNpbXBseSByZXNldCBvdXIgZGF0YS4KICAgICAgc2VsZi5fUmVzZXQobm93KQogICAgICByZXR1cm4KCiAgICB3aGlsZSBub3cgPiBzZWxmLl9jdXJyZW50X21zX3NpbmNlX2Vwb2NoICsgc2VsZi5fYnVja2V0X21zOgogICAgICAjIEFkdmFuY2UgdGltZSBieSBvbmUgX2J1Y2tldF9tcywgc2V0dGluZyB0aGUgbmV3IGJ1Y2tldCdzIGNvdW50cyB0byAwLgogICAgICBzZWxmLl9jdXJyZW50X21zX3NpbmNlX2Vwb2NoICs9IHNlbGYuX2J1Y2tldF9tcwogICAgICBzZWxmLl9jdXJyZW50X2luZGV4ID0gKHNlbGYuX2N1cnJlbnRfaW5kZXgrMSkgJSBzZWxmLl9udW1fYnVja2V0cwogICAgICBzZWxmLl9idWNrZXRzW3NlbGYuX2N1cnJlbnRfaW5kZXhdID0gWzAsIDBdCiAgICAgICMgSW50ZW50aW9uYWwgZGVhZCByZWNrb25pbmcgaGVyZTsgd2UgZG9uJ3QgY2FyZSBhYm91dCBzdGF5aW5nIHByZWNpc2VseQogICAgICAjIGFsaWduZWQgd2l0aCBtdWx0aXBsZXMgb2YgX2J1Y2tldF9tcyBzaW5jZSB0aGUgZXBvY2gsIHdlIGp1c3QgbmVlZCBvdXIKICAgICAgIyBidWNrZXRzIHRvIHJlcHJlc2VudCB0aGUgbW9zdCByZWNlbnQgX3dpbmRvd19tcyB0aW1lIHdpbmRvdy4KCiAgZGVmIHN1bShzZWxmLCBub3cpOgogICAgc2VsZi5fRmx1c2gobm93KQogICAgcmV0dXJuIHN1bShidWNrZXRbMF0gZm9yIGJ1Y2tldCBpbiBzZWxmLl9idWNrZXRzKQoKICBkZWYgYWRkKHNlbGYsIG5vdywgaW5jKToKICAgIHNlbGYuX0ZsdXNoKG5vdykKICAgIGJ1Y2tldCA9IHNlbGYuX2J1Y2tldHNbc2VsZi5fY3VycmVudF9pbmRleF0KICAgIGJ1Y2tldFswXSArPSBpbmMKICAgIGJ1Y2tldFsxXSArPSAxCgogIGRlZiBjb3VudChzZWxmLCBub3cpOgogICAgc2VsZi5fRmx1c2gobm93KQogICAgcmV0dXJuIHN1bShidWNrZXRbMV0gZm9yIGJ1Y2tldCBpbiBzZWxmLl9idWNrZXRzKQoKICBkZWYgaGFzX2RhdGEoc2VsZiwgbm93KToKICAgIHJldHVybiBzZWxmLmNvdW50KG5vdykgPiAwCn1ySQMAAChYEgAAAE1vdmluZ1N1bS5fX2luaXRfX1gDAAAAZGVmSyRLKodYCQAAAE1vdmluZ1N1bVgFAAAAY2xhc3NLGUtgh1gNAAAATW92aW5nU3VtLmFkZFgDAAAAZGVmS1RLWYdYEAAAAE1vdmluZ1N1bS5fUmVzZXRYAwAAAGRlZksrSzmHWBIAAABNb3ZpbmdTdW0uaGFzX2RhdGFYAwAAAGRlZkteS2CHWA0AAABNb3ZpbmdTdW0uc3VtWAMAAABkZWZLUEtTh1gPAAAATW92aW5nU3VtLmNvdW50WAMAAABkZWZLWktdh1gQAAAATW92aW5nU3VtLl9GbHVzaFgDAAAAZGVmSzpLTId1fXJKAwAAKFgSAAAATW92aW5nU3VtLmhhc19kYXRhWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxySwMAAFgNAAAATW92aW5nU3VtLnN1bWpLAwAAWA8AAABNb3ZpbmdTdW0uY291bnRqSwMAAFgJAAAATW92aW5nU3VtaksDAABYDQAAAE1vdmluZ1N1bS5hZGRqSwMAAHVoilgkAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsckwDAACFgXJNAwAAfXJOAwAAYnRyTwMAAFU3YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYyhYzAcAACMgR2VuZXJhdGVkIGJ5IHRoZSBnUlBDIFB5dGhvbiBwcm90b2NvbCBjb21waWxlciBwbHVnaW4uIERPIE5PVCBFRElUIQppbXBvcnQgZ3JwYwoKaW1wb3J0IGJlYW1fcHJvdmlzaW9uX2FwaV9wYjIgYXMgYmVhbV9fcHJvdmlzaW9uX19hcGlfX3BiMgoKCmNsYXNzIFByb3Zpc2lvblNlcnZpY2VTdHViKG9iamVjdCk6CiAgIiIiQSBzZXJ2aWNlIHRvIHByb3ZpZGUgcnVudGltZSBwcm92aXNpb25pbmcgaW5mb3JtYXRpb24gdG8gdGhlIFNESyBoYXJuZXNzCiAgd29ya2VyIGluc3RhbmNlcyAtLSBzdWNoIGFzIHBpcGVsaW5lIG9wdGlvbnMsIHJlc291cmNlIGNvbnN0cmFpbnRzIGFuZAogIG90aGVyIGpvYiBtZXRhZGF0YSAtLSBuZWVkZWQgYnkgYW4gU0RLIGhhcm5lc3MgaW5zdGFuY2UgdG8gaW5pdGlhbGl6ZS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuR2V0UHJvdmlzaW9uSW5mbyA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLlByb3Zpc2lvblNlcnZpY2UvR2V0UHJvdmlzaW9uSW5mbycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1JlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byBwcm92aWRlIHJ1bnRpbWUgcHJvdmlzaW9uaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBTREsgaGFybmVzcwogIHdvcmtlciBpbnN0YW5jZXMgLS0gc3VjaCBhcyBwaXBlbGluZSBvcHRpb25zLCByZXNvdXJjZSBjb25zdHJhaW50cyBhbmQKICBvdGhlciBqb2IgbWV0YWRhdGEgLS0gbmVlZGVkIGJ5IGFuIFNESyBoYXJuZXNzIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCiAgIiIiCgogIGRlZiBHZXRQcm92aXNpb25JbmZvKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiR2V0IHByb3Zpc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFNESyBoYXJuZXNzIHdvcmtlciBpbnN0YW5jZS4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX1Byb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ0dldFByb3Zpc2lvbkluZm8nOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldFByb3Zpc2lvbkluZm8sCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19wcm92aXNpb25fX2FwaV9fcGIyLkdldFByb3Zpc2lvbkluZm9SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLlByb3Zpc2lvblNlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQp9clADAAAoWBQAAABQcm92aXNpb25TZXJ2aWNlU3R1YlgFAAAAY2xhc3NLB0sYh1gYAAAAUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0saSyaHWCkAAABQcm92aXNpb25TZXJ2aWNlU2VydmljZXIuR2V0UHJvdmlzaW9uSW5mb1gDAAAAZGVmSyBLJodYJgAAAGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLKEszh1gdAAAAUHJvdmlzaW9uU2VydmljZVN0dWIuX19pbml0X19YAwAAAGRlZksNSxiHdX1yUQMAAChYFAAAAFByb3Zpc2lvblNlcnZpY2VTdHViWDcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjclIDAABYGAAAAFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcmpSAwAAWCYAAABhZGRfUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcmpSAwAAWCkAAABQcm92aXNpb25TZXJ2aWNlU2VydmljZXIuR2V0UHJvdmlzaW9uSW5mb2pSAwAAdWiKWDcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjclMDAACFgXJUAwAAfXJVAwAAYnRyVgMAAFUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzKFh7IgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKRGF0YWZsb3dSdW5uZXIgaW1wbGVtZW50YXRpb24gb2YgTWV0cmljUmVzdWx0cy4gSXQgaXMgaW4gY2hhcmdlIG9mCnJlc3BvbmRpbmcgdG8gcXVlcmllcyBvZiBjdXJyZW50IG1ldHJpY3MgYnkgZ29pbmcgdG8gdGhlIGRhdGFmbG93CnNlcnZpY2UuCiIiIgoKaW1wb3J0IG51bWJlcnMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgRGlzdHJpYnV0aW9uRGF0YQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgaW1wb3J0IERpc3RyaWJ1dGlvblJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNLZXkKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgTWV0cmljUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMgaW1wb3J0IE1ldHJpY1Jlc3VsdHMKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UgaW1wb3J0IE1ldHJpY05hbWUKCgpkZWYgX2dldF9tYXRjaChwcm90bywgZmlsdGVyX2ZuKToKICAiIiJGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgYSBxdWVyeS4KCiAgSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBxdWVyeSwgaXQgdGhyb3dzIFZhbHVlRXJyb3IuCiAgSWYgbW9yZSB0aGFuIG9uZSBlbGVtZW50IG1hdGNoZXMgdGhlIHF1ZXJ5LCBpdCByZXR1cm5zIG9ubHkgdGhlIGZpcnN0LgogICIiIgogIHF1ZXJ5ID0gW2VsbSBmb3IgZWxtIGluIHByb3RvIGlmIGZpbHRlcl9mbihlbG0pXQogIGlmIGxlbihxdWVyeSkgPT0gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGVsZW1lbnQnKQogIGVsaWYgbGVuKHF1ZXJ5KSA+IDE6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdUb28gbWFueSBtYXRjaGVzJykKCiAgcmV0dXJuIHF1ZXJ5WzBdCgoKY2xhc3MgRGF0YWZsb3dNZXRyaWNzKE1ldHJpY1Jlc3VsdHMpOgogICIiIkltcGxlbWVudGF0aW9uIG9mIE1ldHJpY1Jlc3VsdHMgY2xhc3MgZm9yIHRoZSBEYXRhZmxvdyBydW5uZXIuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhZmxvd19jbGllbnQ9Tm9uZSwgam9iX3Jlc3VsdD1Ob25lLCBqb2JfZ3JhcGg9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBEYXRhZmxvdyBtZXRyaWNzIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBkYXRhZmxvd19jbGllbnQ6IGFwaWNsaWVudC5EYXRhZmxvd0FwcGxpY2F0aW9uQ2xpZW50IHRvIGludGVyYWN0IHdpdGggdGhlCiAgICAgICAgZGF0YWZsb3cgc2VydmljZS4KICAgICAgam9iX3Jlc3VsdDogRGF0YWZsb3dQaXBlbGluZVJlc3VsdCB3aXRoIHRoZSBzdGF0ZSBhbmQgaWQgaW5mb3JtYXRpb24gb2YKICAgICAgICB0aGUgam9iLgogICAgICBqb2JfZ3JhcGg6IGFwaWNsaWVudC5Kb2IgaW5zdGFuY2UgdG8gYmUgYWJsZSB0byB0cmFuc2xhdGUgYmV0d2VlbiBpbnRlcm5hbAogICAgICAgIHN0ZXAgbmFtZXMgKGUuZy4gInMyIiksIGFuZCB1c2VyIHN0ZXAgbmFtZXMgKGUuZy4gInNwbGl0IikuCiAgICAiIiIKICAgIHN1cGVyKERhdGFmbG93TWV0cmljcywgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZGF0YWZsb3dfY2xpZW50ID0gZGF0YWZsb3dfY2xpZW50CiAgICBzZWxmLmpvYl9yZXN1bHQgPSBqb2JfcmVzdWx0CiAgICBzZWxmLl9xdWVyaWVkX2FmdGVyX3Rlcm1pbmF0aW9uID0gRmFsc2UKICAgIHNlbGYuX2NhY2hlZF9tZXRyaWNzID0gTm9uZQogICAgc2VsZi5fam9iX2dyYXBoID0gam9iX2dyYXBoCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2NvdW50ZXIobWV0cmljX3Jlc3VsdCk6CiAgICByZXR1cm4gaXNpbnN0YW5jZShtZXRyaWNfcmVzdWx0LmF0dGVtcHRlZCwgbnVtYmVycy5OdW1iZXIpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2Rpc3RyaWJ1dGlvbihtZXRyaWNfcmVzdWx0KToKICAgIHJldHVybiBpc2luc3RhbmNlKG1ldHJpY19yZXN1bHQuYXR0ZW1wdGVkLCBEaXN0cmlidXRpb25SZXN1bHQpCgogIGRlZiBfdHJhbnNsYXRlX3N0ZXBfbmFtZShzZWxmLCBpbnRlcm5hbF9uYW1lKToKICAgICIiIlRyYW5zbGF0ZSBiZXR3ZWVuIGludGVybmFsIHN0ZXAgbmFtZXMgKGUuZy4gInMxIikgYW5kIHVzZXIgc3RlcCBuYW1lcy4iIiIKICAgIGlmIG5vdCBzZWxmLl9qb2JfZ3JhcGg6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIGludGVybmFsIHN0ZXAgbmFtZS4nKQoKICAgIHRyeToKICAgICAgc3RlcCA9IF9nZXRfbWF0Y2goc2VsZi5fam9iX2dyYXBoLnByb3RvLnN0ZXBzLAogICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5uYW1lID09IGludGVybmFsX25hbWUpCiAgICAgIHVzZXJfc3RlcF9uYW1lID0gX2dldF9tYXRjaCgKICAgICAgICAgIHN0ZXAucHJvcGVydGllcy5hZGRpdGlvbmFsUHJvcGVydGllcywKICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAndXNlcl9uYW1lJykudmFsdWUuc3RyaW5nX3ZhbHVlCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ291bGQgbm90IHRyYW5zbGF0ZSB0aGUgaW50ZXJuYWwgc3RlcCBuYW1lLicpCiAgICByZXR1cm4gdXNlcl9zdGVwX25hbWUKCiAgZGVmIF9nZXRfbWV0cmljX2tleShzZWxmLCBtZXRyaWMpOgogICAgIiIiUG9wdWxhdGUgdGhlIE1ldHJpY0tleSBvYmplY3QgZm9yIGEgcXVlcmllZCBtZXRyaWMgcmVzdWx0LiIiIgogICAgdHJ5OgogICAgICAjIElmIFZhbHVlRXJyb3IgaXMgdGhyb3duIHdpdGhpbiB0aGlzIHRyeS1ibG9jaywgaXQgaXMgYmVjYXVzZSBvZgogICAgICAjIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAgICAjIDEuIFVuYWJsZSB0byB0cmFuc2xhdGUgdGhlIHN0ZXAgbmFtZS4gT25seSBoYXBwZW5pbmcgd2l0aCBpbXByb3Blcmx5CiAgICAgICMgICBmb3JtYXR0ZWQgam9iIGdyYXBoICh1bmxpa2VseSksIG9yIHN0ZXAgbmFtZSBub3QgYmVpbmcgdGhlIGludGVybmFsCiAgICAgICMgICBzdGVwIG5hbWUgKG9ubHkgaGFwcGVucyBmb3IgdW5zdHJ1Y3R1cmVkLW5hbWVkIG1ldHJpY3MpLgogICAgICAjIDIuIFVuYWJsZSB0byB1bnBhY2sgW3N0ZXBdIG9yIFtuYW1lc3BhY2VdOyB3aGljaCBzaG91bGQgb25seSBoYXBwZW4KICAgICAgIyAgIGZvciB1bnN0cnVjdHVyZWQgbmFtZXMuCiAgICAgIHN0ZXAgPSBfZ2V0X21hdGNoKG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnc3RlcCcpLnZhbHVlCiAgICAgIHN0ZXAgPSBzZWxmLl90cmFuc2xhdGVfc3RlcF9uYW1lKHN0ZXApCiAgICAgIG5hbWVzcGFjZSA9IF9nZXRfbWF0Y2gobWV0cmljLm5hbWUuY29udGV4dC5hZGRpdGlvbmFsUHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ25hbWVzcGFjZScpLnZhbHVlCiAgICAgIG5hbWUgPSBtZXRyaWMubmFtZS5uYW1lCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgcmV0dXJuIE5vbmUKCiAgICByZXR1cm4gTWV0cmljS2V5KHN0ZXAsIE1ldHJpY05hbWUobmFtZXNwYWNlLCBuYW1lKSkKCiAgZGVmIF9wb3B1bGF0ZV9tZXRyaWNfcmVzdWx0cyhzZWxmLCByZXNwb25zZSk6CiAgICAiIiJUYWtlIGEgbGlzdCBvZiBtZXRyaWNzLCBhbmQgY29udmVydCBpdCB0byBhIGxpc3Qgb2YgTWV0cmljUmVzdWx0LiIiIgogICAgdXNlcl9tZXRyaWNzID0gW21ldHJpYwogICAgICAgICAgICAgICAgICAgIGZvciBtZXRyaWMgaW4gcmVzcG9uc2UubWV0cmljcwogICAgICAgICAgICAgICAgICAgIGlmIG1ldHJpYy5uYW1lLm9yaWdpbiA9PSAndXNlciddCgogICAgIyBHZXQgdGhlIHRlbnRhdGl2ZS9jb21taXR0ZWQgdmVyc2lvbnMgb2YgZXZlcnkgbWV0cmljIHRvZ2V0aGVyLgogICAgbWV0cmljc19ieV9uYW1lID0gZGVmYXVsdGRpY3QobGFtYmRhOiB7fSkKICAgIGZvciBtZXRyaWMgaW4gdXNlcl9tZXRyaWNzOgogICAgICBpZiAobWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01JTl0nKSBvcgogICAgICAgICAgbWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01BWF0nKSBvcgogICAgICAgICAgbWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01FQU5dJykgb3IKICAgICAgICAgIG1ldHJpYy5uYW1lLm5hbWUuZW5kc3dpdGgoJ1tDT1VOVF0nKSk6CiAgICAgICAgIyBUaGUgRGF0YWZsb3cgU2VydmljZSBwcmVzZW50cyBkaXN0cmlidXRpb24gbWV0cmljcyBpbiB0d28gd2F5czoKICAgICAgICAjIE9uZSB3YXkgaXMgYXMgYSBzaW5nbGUgZGlzdHJpYnV0aW9uIG9iamVjdCB3aXRoIGFsbCBpdHMgZmllbGRzLCBhbmQKICAgICAgICAjIGFub3RoZXIgd2F5IGlzIGFzIGZvdXIgZGlmZmVyZW50IHNjYWxhciBtZXRyaWNzIGxhYmVsZWQgYXMgW01JTl0sCiAgICAgICAgIyBbTUFYXSwgW0NPVU5UXSwgW01FQU5dLgogICAgICAgICMgVE9ETyhwYWJsb2VtKSByZW1vdmUgdGhlc2Ugd2hlbiBkaXN0cmlidXRpb25zIGFyZSBub3QgYmVpbmcgYnJva2VuIHVwCiAgICAgICAgIyAgaW4gdGhlIHNlcnZpY2UuCiAgICAgICAgIyBUaGUgc2Vjb25kIHdheSBpcyBvbmx5IHVzZWZ1bCBmb3IgdGhlIFVJLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgICAgY29udGludWUKICAgICAgaXNfdGVudGF0aXZlID0gW3Byb3AKICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3Aua2V5ID09ICd0ZW50YXRpdmUnIGFuZCBwcm9wLnZhbHVlID09ICd0cnVlJ10KICAgICAgdGVudGF0aXZlX29yX2NvbW1pdHRlZCA9ICd0ZW50YXRpdmUnIGlmIGlzX3RlbnRhdGl2ZSBlbHNlICdjb21taXR0ZWQnCgogICAgICBtZXRyaWNfa2V5ID0gc2VsZi5fZ2V0X21ldHJpY19rZXkobWV0cmljKQogICAgICBpZiBtZXRyaWNfa2V5IGlzIE5vbmU6CiAgICAgICAgY29udGludWUKICAgICAgbWV0cmljc19ieV9uYW1lW21ldHJpY19rZXldW3RlbnRhdGl2ZV9vcl9jb21taXR0ZWRdID0gbWV0cmljCgogICAgIyBOb3cgd2UgY3JlYXRlIHRoZSBNZXRyaWNSZXN1bHQgZWxlbWVudHMuCiAgICByZXN1bHQgPSBbXQogICAgZm9yIG1ldHJpY19rZXksIG1ldHJpYyBpbiBtZXRyaWNzX2J5X25hbWUuaXRlcml0ZW1zKCk6CiAgICAgIGF0dGVtcHRlZCA9IHNlbGYuX2dldF9tZXRyaWNfdmFsdWUobWV0cmljWyd0ZW50YXRpdmUnXSkKICAgICAgY29tbWl0dGVkID0gc2VsZi5fZ2V0X21ldHJpY192YWx1ZShtZXRyaWNbJ2NvbW1pdHRlZCddKQogICAgICBpZiBhdHRlbXB0ZWQgaXMgTm9uZSBvciBjb21taXR0ZWQgaXMgTm9uZToKICAgICAgICBjb250aW51ZQogICAgICByZXN1bHQuYXBwZW5kKE1ldHJpY1Jlc3VsdChtZXRyaWNfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQ9YXR0ZW1wdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWQ9Y29tbWl0dGVkKSkKCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfZ2V0X21ldHJpY192YWx1ZShzZWxmLCBtZXRyaWMpOgogICAgIiIiR2V0IGEgbWV0cmljIHJlc3VsdCBvYmplY3QgZnJvbSBhIE1ldHJpY1VwZGF0ZSBmcm9tIERhdGFmbG93IEFQSS4iIiIKICAgIGlmIG1ldHJpYyBpcyBOb25lOgogICAgICByZXR1cm4gTm9uZQoKICAgIGlmIG1ldHJpYy5zY2FsYXIgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBtZXRyaWMuc2NhbGFyLmludGVnZXJfdmFsdWUKICAgIGVsaWYgbWV0cmljLmRpc3RyaWJ1dGlvbiBpcyBub3QgTm9uZToKICAgICAgZGlzdF9jb3VudCA9IF9nZXRfbWF0Y2gobWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6IHgua2V5ID09ICdjb3VudCcpLnZhbHVlLmludGVnZXJfdmFsdWUKICAgICAgZGlzdF9taW4gPSBfZ2V0X21hdGNoKG1ldHJpYy5kaXN0cmlidXRpb24ub2JqZWN0X3ZhbHVlLnByb3BlcnRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ21pbicpLnZhbHVlLmludGVnZXJfdmFsdWUKICAgICAgZGlzdF9tYXggPSBfZ2V0X21hdGNoKG1ldHJpYy5kaXN0cmlidXRpb24ub2JqZWN0X3ZhbHVlLnByb3BlcnRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ21heCcpLnZhbHVlLmludGVnZXJfdmFsdWUKICAgICAgZGlzdF9tZWFuID0gX2dldF9tYXRjaChtZXRyaWMuZGlzdHJpYnV0aW9uLm9iamVjdF92YWx1ZS5wcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnbWVhbicpLnZhbHVlLmludGVnZXJfdmFsdWUKICAgICAgIyBDYWxjdWxhdGluZyBkaXN0X3N1bSB3aXRoIGEgaGFjaywgYXMgZGlzdHJpYnV0aW9uIHN1bSBpcyBub3QgeWV0CiAgICAgICMgYXZhaWxhYmxlIGluIHRoZSBEYXRhZmxvdyBBUEkuCiAgICAgICMgVE9ETyhwYWJsb2VtKSBTd2l0Y2ggdG8gInN1bSIgZmllbGQgb25jZSBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgQVBJCiAgICAgIGRpc3Rfc3VtID0gZGlzdF9jb3VudCAqIGRpc3RfbWVhbgogICAgICByZXR1cm4gRGlzdHJpYnV0aW9uUmVzdWx0KAogICAgICAgICAgRGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICAgICAgICBkaXN0X3N1bSwgZGlzdF9jb3VudCwgZGlzdF9taW4sIGRpc3RfbWF4KSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBOb25lCgogIGRlZiBfZ2V0X21ldHJpY3NfZnJvbV9kYXRhZmxvdyhzZWxmKToKICAgICIiIlJldHVybiBjYWNoZWQgbWV0cmljcyBvciBxdWVyeSB0aGUgZGF0YWZsb3cgc2VydmljZS4iIiIKICAgIHRyeToKICAgICAgam9iX2lkID0gc2VsZi5qb2JfcmVzdWx0LmpvYl9pZCgpCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIGpvYl9pZCA9IE5vbmUKICAgIGlmIG5vdCBqb2JfaWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgcXVlcnkgbWV0cmljcy4gSm9iIGlkIGlzIHVua25vd24uJykKCiAgICBpZiBzZWxmLl9jYWNoZWRfbWV0cmljczoKICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9tZXRyaWNzCgogICAgam9iX21ldHJpY3MgPSBzZWxmLl9kYXRhZmxvd19jbGllbnQuZ2V0X2pvYl9tZXRyaWNzKGpvYl9pZCkKICAgICMgSWYgdGhlIGpvYiBoYXMgdGVybWluYXRlZCwgbWV0cmljcyB3aWxsIG5vdCBjaGFuZ2UgYW5kIHdlIGNhbiBjYWNoZSB0aGVtLgogICAgaWYgc2VsZi5qb2JfcmVzdWx0Ll9pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBzZWxmLl9jYWNoZWRfbWV0cmljcyA9IGpvYl9tZXRyaWNzCiAgICByZXR1cm4gam9iX21ldHJpY3MKCiAgZGVmIHF1ZXJ5KHNlbGYsIGZpbHRlcj1Ob25lKToKICAgIHJlc3BvbnNlID0gc2VsZi5fZ2V0X21ldHJpY3NfZnJvbV9kYXRhZmxvdygpCiAgICBtZXRyaWNfcmVzdWx0cyA9IHNlbGYuX3BvcHVsYXRlX21ldHJpY19yZXN1bHRzKHJlc3BvbnNlKQogICAgcmV0dXJuIHsnY291bnRlcnMnOiBbZWxtIGZvciBlbG0gaW4gbWV0cmljX3Jlc3VsdHMKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWF0Y2hlcyhmaWx0ZXIsIGVsbS5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgRGF0YWZsb3dNZXRyaWNzLl9pc19jb3VudGVyKGVsbSldLAogICAgICAgICAgICAnZGlzdHJpYnV0aW9ucyc6IFtlbG0gZm9yIGVsbSBpbiBtZXRyaWNfcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBlbG0ua2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgRGF0YWZsb3dNZXRyaWNzLl9pc19kaXN0cmlidXRpb24oZWxtKV0sCiAgICAgICAgICAgICdnYXVnZXMnOiBbXX0gIyBHYXVnZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGRhdGFmbG93Cn1yVwMAAChYGwAAAERhdGFmbG93TWV0cmljcy5faXNfY291bnRlclgDAAAAZGVmS0dLSodYKAAAAERhdGFmbG93TWV0cmljcy5fcG9wdWxhdGVfbWV0cmljX3Jlc3VsdHNYAwAAAGRlZktzS56HWBgAAABEYXRhZmxvd01ldHJpY3MuX19pbml0X19YAwAAAGRlZks1S0aHWBUAAABEYXRhZmxvd01ldHJpY3MucXVlcnlYAwAAAGRlZkvLS9WHWCEAAABEYXRhZmxvd01ldHJpY3MuX2dldF9tZXRyaWNfdmFsdWVYAwAAAGRlZkufS7iHWCAAAABEYXRhZmxvd01ldHJpY3MuX2lzX2Rpc3RyaWJ1dGlvblgDAAAAZGVmS0tLTodYKgAAAERhdGFmbG93TWV0cmljcy5fZ2V0X21ldHJpY3NfZnJvbV9kYXRhZmxvd1gDAAAAZGVmS7lLyodYDwAAAERhdGFmbG93TWV0cmljc1gFAAAAY2xhc3NLMkvVh1gkAAAARGF0YWZsb3dNZXRyaWNzLl90cmFuc2xhdGVfc3RlcF9uYW1lWAMAAABkZWZLT0tdh1gfAAAARGF0YWZsb3dNZXRyaWNzLl9nZXRfbWV0cmljX2tleVgDAAAAZGVmS15LcodYCgAAAF9nZXRfbWF0Y2hYAwAAAGRlZksjSzCHdX1yWAMAAChYFQAAAERhdGFmbG93TWV0cmljcy5xdWVyeVgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzclkDAABYDwAAAERhdGFmbG93TWV0cmljc2pZAwAAdWiKWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NyWgMAAIWBclsDAAB9clwDAABidHJdAwAAVR1hcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZShYdgUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKCiIiIk9ic2VydmFibGUgYmFzZSBjbGFzcyBmb3IgaXRlcmFibGVzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCgpjbGFzcyBPYnNlcnZhYmxlTWl4aW4ob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFuIG9ic2VydmFibGUgaXRlcmFibGUuCgogIFN1YmNsYXNzZXMgbmVlZCB0byBjYWxsIHNlbGYubm90aWZ5X29ic2VydmVycyB3aXRoIGFueSBvYmplY3QgeWllbGRlZC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5vYnNlcnZlcnMgPSBbXQoKICBkZWYgcmVnaXN0ZXJfb2JzZXJ2ZXIoc2VsZiwgY2FsbGJhY2spOgogICAgc2VsZi5vYnNlcnZlcnMuYXBwZW5kKGNhbGxiYWNrKQoKICBkZWYgbm90aWZ5X29ic2VydmVycyhzZWxmLCB2YWx1ZSwgKiprd2FyZ3MpOgogICAgIyBzZWxmLm9ic2VydmVycyBpcyBhbG1vc3QgYWx3YXlzIGVtcHR5CiAgICBpZiBzZWxmLm9ic2VydmVyczoKICAgICAgZm9yIG8gaW4gc2VsZi5vYnNlcnZlcnM6CiAgICAgICAgbyh2YWx1ZSwgKiprd2FyZ3MpCn1yXgMAAChYIAAAAE9ic2VydmFibGVNaXhpbi5ub3RpZnlfb2JzZXJ2ZXJzWAMAAABkZWZLJ0ssh1gYAAAAT2JzZXJ2YWJsZU1peGluLl9faW5pdF9fWAMAAABkZWZLIUsjh1ghAAAAT2JzZXJ2YWJsZU1peGluLnJlZ2lzdGVyX29ic2VydmVyWAMAAABkZWZLJEsmh1gPAAAAT2JzZXJ2YWJsZU1peGluWAUAAABjbGFzc0sZSyyHdX1yXwMAAChY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b3JlLyNoYW1jcmVzdC5jb3JlLmJhc2VfZGVzY3JpcHRpb24uQmFzZURlc2NyaXB0aW9uWAEAAAAtdHL3AwAAWB0AAABoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlcnL4AwAAKGrzAwAAavQDAABYTwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXJYAQAAAC10cvkDAABYKwAAAGhhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmdy+gMAAChq8wMAAGr0AwAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmdYAQAAAC10cvsDAABYMgAAAGhhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uLlN0cmluZ0Rlc2NyaXB0aW9ucvwDAAAoavMDAABq9AMAAFhkAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbi5TdHJpbmdEZXNjcmlwdGlvblgBAAAALXRy/QMAAFg1AAAAaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWVy/gMAAChq8wMAAGr0AwAAWGcAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmd2YWx1ZS5TZWxmRGVzY3JpYmluZ1ZhbHVlWAEAAAAtdHL/AwAAWCUAAABoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9ucgAEAAAoavMDAABq9AMAAFhXAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uWAEAAAAtdHIBBAAAdVgHAAAAc3RkOmRvY3ICBAAAfXIDBAAAKFgHAAAAbGlicmFyeXIEBAAAKGrzAwAAavQDAABYNAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbGlicmFyeS9YDwAAAE1hdGNoZXIgTGlicmFyeXRyBQQAAFgSAAAAZGVjb3JhdG9yX21hdGNoZXJzcgYEAAAoavMDAABq9AMAAFg/AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kZWNvcmF0b3JfbWF0Y2hlcnMvWBIAAABEZWNvcmF0b3IgTWF0Y2hlcnN0cgcEAABYDwAAAGN1c3RvbV9tYXRjaGVyc3IIBAAAKGrzAwAAavQDAABYPAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY3VzdG9tX21hdGNoZXJzL1gXAAAAV3JpdGluZyBDdXN0b20gTWF0Y2hlcnN0cgkEAABYCAAAAHR1dG9yaWFscgoEAAAoavMDAABq9AMAAFg1AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90dXRvcmlhbC9YEwAAAFB5SGFtY3Jlc3QgVHV0b3JpYWx0cgsEAABYEQAAAHNlcXVlbmNlX21hdGNoZXJzcgwEAAAoavMDAABq9AMAAFg+AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy9YEQAAAFNlcXVlbmNlIE1hdGNoZXJzdHINBAAAWA8AAABudW1iZXJfbWF0Y2hlcnNyDgQAAChq8wMAAGr0AwAAWDwAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L251bWJlcl9tYXRjaGVycy9YDwAAAE51bWJlciBNYXRjaGVyc3RyDwQAAFgLAAAAaW50ZWdyYXRpb25yEAQAAChq8wMAAGr0AwAAWDgAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2ludGVncmF0aW9uL1grAAAASW50ZWdyYXRpb24gd2l0aCBQeVVuaXQgYW5kIE90aGVyIExpYnJhcmllc3RyEQQAAFgFAAAAaW5kZXhyEgQAAChq8wMAAGr0AwAAWDYAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L1B5SGFtY3Jlc3RYDQAAAGRvY3VtZW50YXRpb250WA8AAABvYmplY3RfbWF0Y2hlcnNyEwQAAChq8wMAAGr0AwAAWDwAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy9YDwAAAE9iamVjdCBNYXRjaGVyc3RyFAQAAFgTAAAAZGljdGlvbmFyeV9tYXRjaGVyc3IVBAAAKGrzAwAAavQDAABYQAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZGljdGlvbmFyeV9tYXRjaGVycy9YEwAAAERpY3Rpb25hcnkgTWF0Y2hlcnN0chYEAABYDQAAAHRleHRfbWF0Y2hlcnNyFwQAAChq8wMAAGr0AwAAWDoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3RleHRfbWF0Y2hlcnMvWA0AAABUZXh0IE1hdGNoZXJzdHIYBAAAWAQAAABjb3JlchkEAAAoavMDAABq9AMAAFgxAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlL1gIAAAAQ29yZSBBUEl0choEAABYEAAAAGxvZ2ljYWxfbWF0Y2hlcnNyGwQAAChq8wMAAGr0AwAAWD0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2xvZ2ljYWxfbWF0Y2hlcnMvWBAAAABMb2dpY2FsIE1hdGNoZXJzdHIcBAAAWAcAAABoZWxwZXJzch0EAAAoavMDAABq9AMAAFg0AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9oZWxwZXJzL1gHAAAASGVscGVyc3RyHgQAAHVYCQAAAHN0ZDpsYWJlbHIfBAAAfXIgBAAAKFgFAAAAc3VnYXJyIQQAAChq8wMAAGr0AwAAWDsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3R1dG9yaWFsLyNzdWdhclgPAAAAU3ludGFjdGljIHN1Z2FydHIiBAAAWAYAAABzZWFyY2hyIwQAAChq8wMAAGr0AwAAWDMAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlYXJjaC9YCwAAAFNlYXJjaCBQYWdldFgIAAAAZ2VuaW5kZXhyJAQAAChq8wMAAGr0AwAAWDUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2dlbmluZGV4L1gFAAAASW5kZXh0WAgAAABtb2RpbmRleHIlBAAAKGrzAwAAavQDAABYOAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvcHktbW9kaW5kZXgvWAwAAABNb2R1bGUgSW5kZXh0dVgJAAAAcHk6bWV0aG9kciYEAAB9cicEAAAoWDsAAABoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF9kZXNjcmlwdGlvbl9vZnIoBAAAKGrzAwAAavQDAABYbQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbi5EZXNjcmlwdGlvbi5hcHBlbmRfZGVzY3JpcHRpb25fb2ZYAQAAAC10cikEAABYOAAAAGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNocioEAAAoavMDAABq9AMAAFhqAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaFgBAAAALXRyKwQAAFg1AAAAaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uLkJhc2VEZXNjcmlwdGlvbi5hcHBlbmRyLAQAAChq8wMAAGr0AwAAWGcAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5kWAEAAAAtdHItBAAAWC8AAABoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaHIuBAAAKGrzAwAAavQDAABYYQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hYAQAAAC10ci8EAABYMQAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2xpc3RyMAQAAChq8wMAAGr0AwAAWGMAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2xpc3RYAQAAAC10cjEEAABYMQAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX3RleHRyMgQAAChq8wMAAGr0AwAAWGMAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX3RleHRYAQAAAC10cjMEAABYMgAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX3ZhbHVlcjQEAAAoavMDAABq9AMAAFhkAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF92YWx1ZVgBAAAALXRyNQQAAFglAAAAaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIubWF0Y2hlc3I2BAAAKGrzAwAAavQDAABYVwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIubWF0Y2hlc1gBAAAALXRyNwQAAFgvAAAAaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuX21hdGNoZXNyOAQAAChq8wMAAGr0AwAAWGEAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLl9tYXRjaGVzWAEAAAAtdHI5BAAAWEEAAABoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWUuU2VsZkRlc2NyaWJpbmdWYWx1ZS5kZXNjcmliZV90b3I6BAAAKGrzAwAAavQDAABYcwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWUuZGVzY3JpYmVfdG9YAQAAAC10cjsEAABYLgAAAGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLm1hdGNoZXNyPAQAAChq8wMAAGr0AwAAWGAAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLm1hdGNoZXNYAQAAAC10cj0EAABYNwAAAGhhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmcuZGVzY3JpYmVfdG9yPgQAAChq8wMAAGr0AwAAWGkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmcuZGVzY3JpYmVfdG9YAQAAAC10cj8EAAB1WAkAAABweTptb2R1bGVyQAQAAH1yQQQAAChYGQAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb25yQgQAAChq8wMAAGr0AwAAWFIAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uWAEAAAAtdHJDBAAAWBoAAABoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlcnJEBAAAKGrzAwAAavQDAABYUwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyWAEAAAAtdHJFBAAAWCAAAABoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbnJGBAAAKGrzAwAAavQDAABYWQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uWAEAAAAtdHJHBAAAWDEAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nckgEAAAoavMDAABq9AMAAFh3AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdYAQAAAC10ckkEAABYJAAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aHJKBAAAKGrzAwAAavQDAABYZgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aFgBAAAALXRySwQAAFghAAAAaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nckwEAAAoavMDAABq9AMAAFhlAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNzdHJpbmdYAQAAAC10ck0EAABYMAAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2tleXJOBAAAKGrzAwAAavQDAABYeAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZGljdGlvbmFyeV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2tleVgBAAAALXRyTwQAAFgaAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzZXF1YWxyUAQAAChq8wMAAGr0AwAAWF4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsWAEAAAAtdHJRBAAAWCsAAABoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uclIEAAAoavMDAABq9AMAAFhvAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9udW1iZXJfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uWAEAAAAtdHJTBAAAWBUAAABoYW1jcmVzdC5jb3JlLm1hdGNoZXJyVAQAAChq8wMAAGr0AwAAWE4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLm1hdGNoZXJYAQAAAC10clUEAABYIQAAAGhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLmlzY2xvc2V0b3JWBAAAKGrzAwAAavQDAABYZQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbnVtYmVyX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvWAEAAAAtdHJXBAAAWCEAAABoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWVyWAQAAChq8wMAAGr0AwAAWFoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWVYAQAAAC10clkEAABYGQAAAGhhbWNyZXN0LmNvcmUuYXNzZXJ0X3RoYXRyWgQAAChq8wMAAGr0AwAAWFkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2ludGVncmF0aW9uLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5hc3NlcnRfdGhhdFgBAAAALXRyWwQAAFgkAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zclwEAAAoavMDAABq9AMAAFhmAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zWAEAAAAtdHJdBAAAWDEAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlcl4EAAAoavMDAABq9AMAAFhzAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZVgBAAAALXRyXwQAAFgZAAAAaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlc3JgBAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlc1gBAAAALXRyYQQAAFgeAAAAaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9ucmIEAAAoavMDAABq9AMAAFhXAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uWAEAAAAtdHJjBAAAWBwAAABoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ncmQEAAAoavMDAABq9AMAAFhVAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ1gBAAAALXRyZQQAAFgjAAAAaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHlyZgQAAChq8wMAAGr0AwAAWGcAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3Byb3BlcnR5WAEAAAAtdHJnBAAAWB8AAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mcmgEAAAoavMDAABq9AMAAFhjAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mWAEAAAAtdHJpBAAAWBgAAABoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2ZyagQAAChq8wMAAGr0AwAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2xvZ2ljYWxfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2ZYAQAAAC10cmsEAABYIwAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdtYXRjaGVzcmwEAAAoavMDAABq9AMAAFhlAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXNYAQAAAC10cm0EAABYJAAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc19lbXB0eXJuBAAAKGrzAwAAavQDAABYagAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHlYAQAAAC10cm8EAABYGQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc25vbmVycAQAAChq8wMAAGr0AwAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc25vbmVYAQAAAC10cnEEAABYHQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc2FueXRoaW5ncnIEAAAoavMDAABq9AMAAFhiAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9sb2dpY2FsX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzYW55dGhpbmdYAQAAAC10cnMEAABYHwAAAGhhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2RydAQAAChq8wMAAGr0AwAAWFsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2hlbHBlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmhlbHBlcnMuaGFzbWV0aG9kWAEAAAAtdHJ1BAAAWBgAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3RydgQAAChq8wMAAGr0AwAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2xvZ2ljYWxfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNub3RYAQAAAC10cncEAABYOwAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVycngEAAAoavMDAABq9AMAAFiBAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVyWAEAAAAtdHJ5BAAAWDgAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlcnJ6BAAAKGrzAwAAavQDAABYfgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlclgBAAAALXRyewQAAFgYAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mcnwEAAAoavMDAABq9AMAAFhdAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9sb2dpY2FsX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mWAEAAAAtdHJ9BAAAWDQAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzcn4EAAAoavMDAABq9AMAAFh8AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllc1gBAAAALXRyfwQAAFgWAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzX3KABAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZGVjb3JhdG9yX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzX1gBAAAALXRygQQAAFgmAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ3N0YXJ0c3dpdGhyggQAAChq8wMAAGr0AwAAWGgAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3RleHRfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nc3RhcnRzd2l0aFgBAAAALXRygwQAAFgZAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZXKEBAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZVgBAAAALXRyhQQAAFg1AAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2Vfb25seWNvbnRhaW5pbmdyhgQAAChq8wMAAGr0AwAAWHsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlcXVlbmNlX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2Vfb25seWNvbnRhaW5pbmdYAQAAAC10cocEAABYKwAAAGhhbWNyZXN0LmxpYnJhcnkuaW50ZWdyYXRpb24ubWF0Y2hfZXF1YWxpdHlyiAQAAChq8wMAAGr0AwAAWGsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2ludGVncmF0aW9uLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eVgBAAAALXRyiQQAAFgtAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ncooEAAAoavMDAABq9AMAAFh1AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nWAEAAAAtdHKLBAAAWB8AAABoYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzcowEAAAoavMDAABq9AMAAFhmAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kZWNvcmF0b3JfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzWAEAAAAtdHKNBAAAWCAAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbnKOBAAAKGrzAwAAavQDAABYZgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpblgBAAAALXRyjwQAAFgrAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlcnKQBAAAKGrzAwAAavQDAABYbQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWluc2lub3JkZXJYAQAAAC10cpEEAABYMgAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ3ZhbHVlcpIEAAAoavMDAABq9AMAAFh6AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWVYAQAAAC10cpMEAABYIQAAAGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aHKUBAAAKGrzAwAAavQDAABYZQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzbGVuZ3RoWAEAAAAtdHKVBAAAWCIAAABoYW1jcmVzdC5jb3JlLmhlbHBlcnMud3JhcF9tYXRjaGVycpYEAAAoavMDAABq9AMAAFheAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9oZWxwZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5oZWxwZXJzLndyYXBfbWF0Y2hlclgBAAAALXRylwQAAFgrAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3JpbmdfY2FzZXKYBAAAKGrzAwAAavQDAABYbQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2VYAQAAAC10cpkEAAB1WAsAAABweTpmdW5jdGlvbnKaBAAAfXKbBAAAKFgfAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmFsbG9mLmFsbF9vZnKcBAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmFsbG9mLmFsbF9vZlgBAAAALXRynQQAAFgvAAAAaGFtY3Jlc3QuY29yZS5oZWxwZXJzLndyYXBfbWF0Y2hlci53cmFwX21hdGNoZXJyngQAAChq8wMAAGr0AwAAWGQAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2hlbHBlcnMvI2hhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXIud3JhcF9tYXRjaGVyWAEAAAAtdHKfBAAAWDgAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXkuaGFzX2tleXKgBAAAKGrzAwAAavQDAABYeQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5Lmhhc19rZXlYAQAAAC10cqEEAABYMgAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdzdGFydHN3aXRoLnN0YXJ0c193aXRocqIEAAAoavMDAABq9AMAAFhtAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nc3RhcnRzd2l0aC5zdGFydHNfd2l0aFgBAAAALXRyowQAAFgiAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5ub3Rfbm9uZXKkBAAAKGrzAwAAavQDAABYXwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLm5vdF9ub25lWAEAAAAtdHKlBAAAWEQAAABoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmdyZWF0ZXJfdGhhbl9vcl9lcXVhbF90b3KmBAAAKGrzAwAAavQDAABYgQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmdyZWF0ZXJfdGhhbl9vcl9lcXVhbF90b1gBAAAALXRypwQAAFgqAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLmNsb3NlX3RvcqgEAAAoavMDAABq9AMAAFhnAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLmlzY2xvc2V0by5jbG9zZV90b1gBAAAALXRyqQQAAFg0AAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zLmNvbnRhaW5zX3N0cmluZ3KqBAAAKGrzAwAAavQDAABYbwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zLmNvbnRhaW5zX3N0cmluZ1gBAAAALXRyqwQAAFghAAAAaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5jYWxsaW5ncqwEAAAoavMDAABq9AMAAFheAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuY2FsbGluZ1gBAAAALXRyrQQAAFhDAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2Vfb25seWNvbnRhaW5pbmcub25seV9jb250YWluc3KuBAAAKGrzAwAAavQDAABYggAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLm9ubHlfY29udGFpbnNYAQAAAC10cq8EAABYLAAAAGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5oYXNfbGVuZ3RocrAEAAAoavMDAABq9AMAAFhpAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5oYXNfbGVuZ3RoWAEAAAAtdHKxBAAAWE8AAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5hbnlvcmRlci5jb250YWluc19pbmFueW9yZGVycrIEAAAoavMDAABq9AMAAFiOAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuY29udGFpbnNfaW5hbnlvcmRlclgBAAAALXRyswQAAFgmAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzaW4uaXNfaW5ytAQAAChq8wMAAGr0AwAAWGUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbi5pc19pblgBAAAALXRytQQAAFgyAAAAaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnRpZXNytgQAAChq8wMAAGr0AwAAWG8AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnRpZXNYAQAAAC10crcEAABYJQAAAGhhbWNyZXN0LmNvcmUuYXNzZXJ0X3RoYXQuYXNzZXJ0X3RoYXRyuAQAAChq8wMAAGr0AwAAWF4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2ludGVncmF0aW9uLyNoYW1jcmVzdC5jb3JlLmFzc2VydF90aGF0LmFzc2VydF90aGF0WAEAAAAtdHK5BAAAWCwAAABoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNzdHJpbmcuaGFzX3N0cmluZ3K6BAAAKGrzAwAAavQDAABYaQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNzdHJpbmcuaGFzX3N0cmluZ1gBAAAALXRyuwQAAFgfAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90LmlzX25vdHK8BAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90LmlzX25vdFgBAAAALXRyvQQAAFgsAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmRlc2NyaWJlZF9hcy5kZXNjcmliZWRfYXNyvgQAAChq8wMAAGr0AwAAWGwAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmRlc2NyaWJlZF9hcy5kZXNjcmliZWRfYXNYAQAAAC10cr8EAABYIAAAAGhhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMucmFpc2VzcsAEAAAoavMDAABq9AMAAFhdAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMucmFpc2VzWAEAAAAtdHLBBAAAWDAAAABoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eS5oYXNfcHJvcGVydHlywgQAAChq8wMAAGr0AwAAWG0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnR5WAEAAAAtdHLDBAAAWE4AAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlLmVxdWFsX3RvX2lnbm9yaW5nX3doaXRlc3BhY2VyxAQAAChq8wMAAGr0AwAAWIkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX3doaXRlc3BhY2UuZXF1YWxfdG9faWdub3Jpbmdfd2hpdGVzcGFjZVgBAAAALXRyxQQAAFgnAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZS5zYW1lX2luc3RhbmNlcsYEAAAoavMDAABq9AMAAFhkAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWUuc2FtZV9pbnN0YW5jZVgBAAAALXRyxwQAAFg4AAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW5yyAQAAChq8wMAAGr0AwAAWHUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW5YAQAAAC10cskEAABYHQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5ub3RfcsoEAAAoavMDAABq9AMAAFhbAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3Qubm90X1gBAAAALXRyywQAAFg8AAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWUuaGFzX3ZhbHVlcswEAAAoavMDAABq9AMAAFh9AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmd2YWx1ZS5oYXNfdmFsdWVYAQAAAC10cs0EAABYQQAAAGhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFuX29yX2VxdWFsX3Rvcs4EAAAoavMDAABq9AMAAFh+AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFuX29yX2VxdWFsX3RvWAEAAAAtdHLPBAAAWCoAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHkuZW1wdHly0AQAAChq8wMAAGr0AwAAWGkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHkuZW1wdHlYAQAAAC10ctEEAABYIwAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsLmVxdWFsX3RvctIEAAAoavMDAABq9AMAAFhgAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsLmVxdWFsX3RvWAEAAAAtdHLTBAAAWDUAAABoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmxlc3NfdGhhbnLUBAAAKGrzAwAAavQDAABYcgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmxlc3NfdGhhblgBAAAALXRy1QQAAFg7AAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbXNy1gQAAChq8wMAAGr0AwAAWHoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLmhhc19pdGVtc1gBAAAALXRy1wQAAFgmAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzYW55dGhpbmcuYW55dGhpbmdy2AQAAChq8wMAAGr0AwAAWGQAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2FueXRoaW5nLmFueXRoaW5nWAEAAAAtdHLZBAAAWDoAAABoYW1jcmVzdC5saWJyYXJ5LmludGVncmF0aW9uLm1hdGNoX2VxdWFsaXR5Lm1hdGNoX2VxdWFsaXR5ctoEAAAoavMDAABq9AMAAFhzAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9pbnRlZ3JhdGlvbi8jaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eS5tYXRjaF9lcXVhbGl0eVgBAAAALXRy2wQAAFgpAAAAaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb24udG9zdHJpbmdy3AQAAChq8wMAAGr0AwAAWFsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2NvcmUvI2hhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uLnRvc3RyaW5nWAEAAAAtdHLdBAAAWCsAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mLmluc3RhbmNlX29mct4EAAAoavMDAABq9AMAAFhoAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2luc3RhbmNlb2YuaW5zdGFuY2Vfb2ZYAQAAAC10ct8EAABYKQAAAGhhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2QuaGFzbWV0aG9kcuAEAAAoavMDAABq9AMAAFheAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9oZWxwZXJzLyNoYW1jcmVzdC5jb3JlLmhlbHBlcnMuaGFzbWV0aG9kLmhhc21ldGhvZFgBAAAALXRy4QQAAFgaAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5pc19y4gQAAChq8wMAAGr0AwAAWFoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5pc19YAQAAAC10cuMEAABYQQAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLmNvbnRhaW5zcuQEAAAoavMDAABq9AMAAFiAAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2lub3JkZXIuY29udGFpbnNYAQAAAC10cuUEAABYRAAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWluc2lub3JkZXIuc3RyaW5nX2NvbnRhaW5zX2luX29yZGVycuYEAAAoavMDAABq9AMAAFh/AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVyLnN0cmluZ19jb250YWluc19pbl9vcmRlclgBAAAALXRy5wQAAFgeAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5ub25lcugEAAAoavMDAABq9AMAAFhbAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc25vbmUubm9uZVgBAAAALXRy6QQAAFgfAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mLmFueV9vZnLqBAAAKGrzAwAAavQDAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mLmFueV9vZlgBAAAALXRy6wQAAFgrAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLmlzbnVtZXJpY3LsBAAAKGrzAwAAavQDAABYaAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uaXNudW1lcmljWAEAAAAtdHLtBAAAWC4AAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nZW5kc3dpdGguZW5kc193aXRocu4EAAAoavMDAABq9AMAAFhpAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nZW5kc3dpdGguZW5kc193aXRoWAEAAAAtdHLvBAAAWDcAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmcuaGFzX2VudHJ5cvAEAAAoavMDAABq9AMAAFh4AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmcuaGFzX2VudHJ5WAEAAAAtdHLxBAAAWEIAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ19jYXNlLmVxdWFsX3RvX2lnbm9yaW5nX2Nhc2Vy8gQAAChq8wMAAGr0AwAAWH0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2UuZXF1YWxfdG9faWdub3JpbmdfY2FzZVgBAAAALXRy8wQAAFgyAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXMubWF0Y2hlc19yZWdleHBy9AQAAChq8wMAAGr0AwAAWG0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdtYXRjaGVzLm1hdGNoZXNfcmVnZXhwWAEAAAAtdHL1BAAAWEAAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLmhhc19lbnRyaWVzcvYEAAAoavMDAABq9AMAAFiBAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLmhhc19lbnRyaWVzWAEAAAAtdHL3BAAAWDoAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLmhhc19pdGVtcvgEAAAoavMDAABq9AMAAFh5AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbVgBAAAALXRy+QQAAHV1h1UnaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvcvoEAABVBWhkZnMzcvsEAABKA1p/Wn1y/AQAAChYCAAAAHB5OmNsYXNzfXL9BAAAKFgXAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW1y/gQAAChYBQAAAGhkZnMzcv8EAABYBQAAADAuMy4wcgAFAABYRwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtWAEAAAAtdHIBBQAAWBEAAABoZGZzMy5jb3JlLkhERmlsZXICBQAAKGr/BAAAagAFAABYQQAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlWAEAAAAtdHIDBQAAWBUAAABoZGZzMy5tYXBwaW5nLkhERlNNYXByBAUAAChq/wQAAGoABQAAWEUAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5tYXBwaW5nLkhERlNNYXBYAQAAAC10cgUFAAB1WAkAAABweTptZXRob2R9cgYFAAAoWBwAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5vcGVucgcFAAAoav8EAABqAAUAAFhMAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ub3BlblgBAAAALXRyCAUAAFggAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubWFrZWRpcnNyCQUAAChq/wQAAGoABQAAWFAAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5tYWtlZGlyc1gBAAAALXRyCgUAAFgaAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubXZyCwUAAChq/wQAAGoABQAAWEoAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5tdlgBAAAALXRyDAUAAFgdAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uY2htb2RyDQUAAChq/wQAAGoABQAAWE0AAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5jaG1vZFgBAAAALXRyDgUAAFgeAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uaXNmaWxlcg8FAAAoav8EAABqAAUAAFhOAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uaXNmaWxlWAEAAAAtdHIQBQAAWBYAAABoZGZzMy5jb3JlLkhERmlsZS5zZWVrchEFAAAoav8EAABqAAUAAFhGAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUuc2Vla1gBAAAALXRyEgUAAFgcAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uZ2xvYnITBQAAKGr/BAAAagAFAABYTAAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmdsb2JYAQAAAC10chQFAABYGwAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmdldHIVBQAAKGr/BAAAagAFAABYSwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmdldFgBAAAALXRyFgUAAFgaAAAAaGRmczMuY29yZS5IREZpbGUucmVhZGxpbmVyFwUAAChq/wQAAGoABQAAWEoAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZS5yZWFkbGluZVgBAAAALXRyGAUAAFgrAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uZ2V0X2Jsb2NrX2xvY2F0aW9uc3IZBQAAKGr/BAAAagAFAABYWwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmdldF9ibG9ja19sb2NhdGlvbnNYAQAAAC10choFAABYHQAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmNob3duchsFAAAoav8EAABqAAUAAFhNAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uY2hvd25YAQAAAC10chwFAABYGwAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmNhdHIdBQAAKGr/BAAAagAFAABYSwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmNhdFgBAAAALXRyHgUAAFgnAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uc2V0X3JlcGxpY2F0aW9uch8FAAAoav8EAABqAAUAAFhXAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uc2V0X3JlcGxpY2F0aW9uWAEAAAAtdHIgBQAAWBoAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5kdXIhBQAAKGr/BAAAagAFAABYSgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmR1WAEAAAAtdHIiBQAAWCIAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5kaXNjb25uZWN0ciMFAAAoav8EAABqAAUAAFhSAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uZGlzY29ubmVjdFgBAAAALXRyJAUAAFgWAAAAaGRmczMuY29yZS5IREZpbGUuaW5mb3IlBQAAKGr/BAAAagAFAABYRgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlLmluZm9YAQAAAC10ciYFAABYFwAAAGhkZnMzLmNvcmUuSERGaWxlLmZsdXNocicFAAAoav8EAABqAAUAAFhHAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUuZmx1c2hYAQAAAC10cigFAABYHAAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLndhbGtyKQUAAChq/wQAAGoABQAAWEwAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS53YWxrWAEAAAAtdHIqBQAAWBoAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5kZnIrBQAAKGr/BAAAagAFAABYSgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmRmWAEAAAAtdHIsBQAAWBYAAABoZGZzMy5jb3JlLkhERmlsZS50ZWxsci0FAAAoav8EAABqAAUAAFhGAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUudGVsbFgBAAAALXRyLgUAAFgfAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uY29ubmVjdHIvBQAAKGr/BAAAagAFAABYTwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmNvbm5lY3RYAQAAAC10cjAFAABYFgAAAGhkZnMzLmNvcmUuSERGaWxlLnJlYWRyMQUAAChq/wQAAGoABQAAWEYAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZS5yZWFkWAEAAAAtdHIyBQAAWCMAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5yZW5ld190b2tlbnIzBQAAKGr/BAAAagAFAABYUwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLnJlbmV3X3Rva2VuWAEAAAAtdHI0BQAAWB4AAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5jb25jYXRyNQUAAChq/wQAAGoABQAAWE4AAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5jb25jYXRYAQAAAC10cjYFAABYFwAAAGhkZnMzLmNvcmUuSERGaWxlLmNsb3NlcjcFAAAoav8EAABqAAUAAFhHAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUuY2xvc2VYAQAAAC10cjgFAABYHgAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmV4aXN0c3I5BQAAKGr/BAAAagAFAABYTgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmV4aXN0c1gBAAAALXRyOgUAAFgaAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubHNyOwUAAChq/wQAAGoABQAAWEoAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5sc1gBAAAALXRyPAUAAFgdAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0udG91Y2hyPQUAAChq/wQAAGoABQAAWE0AAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS50b3VjaFgBAAAALXRyPgUAAFgmAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uZGVsZWdhdGVfdG9rZW5yPwUAAChq/wQAAGoABQAAWFYAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5kZWxlZ2F0ZV90b2tlblgBAAAALXRyQAUAAFggAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uZ2V0bWVyZ2VyQQUAAChq/wQAAGoABQAAWFAAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5nZXRtZXJnZVgBAAAALXRyQgUAAFgcAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0udGFpbHJDBQAAKGr/BAAAagAFAABYTAAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLnRhaWxYAQAAAC10ckQFAABYFgAAAGhkZnMzLmNvcmUuSERGaWxlLm5leHRyRQUAAChq/wQAAGoABQAAWEYAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZS5uZXh0WAEAAAAtdHJGBQAAWCIAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5yZWFkX2Jsb2NrckcFAAAoav8EAABqAAUAAFhSAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ucmVhZF9ibG9ja1gBAAAALXRySAUAAFgbAAAAaGRmczMuY29yZS5IREZpbGUucmVhZGxpbmVzckkFAAAoav8EAABqAAUAAFhLAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUucmVhZGxpbmVzWAEAAAAtdHJKBQAAWCQAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5jYW5jZWxfdG9rZW5ySwUAAChq/wQAAGoABQAAWFQAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbCNoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5jYW5jZWxfdG9rZW5YAQAAAC10ckwFAABYFwAAAGhkZnMzLmNvcmUuSERGaWxlLndyaXRlck0FAAAoav8EAABqAAUAAFhHAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGUud3JpdGVYAQAAAC10ck4FAABYHQAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLm1rZGlyck8FAAAoav8EAABqAAUAAFhNAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubWtkaXJYAQAAAC10clAFAABYGgAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLnJtclEFAAAoav8EAABqAAUAAFhKAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ucm1YAQAAAC10clIFAABYGwAAAGhkZnMzLmNvcmUuSERGaWxlU3lzdGVtLnB1dHJTBQAAKGr/BAAAagAFAABYSwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLnB1dFgBAAAALXRyVAUAAFgtAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubGlzdF9lbmNyeXB0aW9uX3pvbmVzclUFAAAoav8EAABqAAUAAFhdAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0ubGlzdF9lbmNyeXB0aW9uX3pvbmVzWAEAAAAtdHJWBQAAWB0AAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5pc2RpcnJXBQAAKGr/BAAAagAFAABYTQAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmlzZGlyWAEAAAAtdHJYBQAAWBwAAABoZGZzMy5jb3JlLkhERmlsZVN5c3RlbS5oZWFkclkFAAAoav8EAABqAAUAAFhMAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvYXBpLmh0bWwjaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uaGVhZFgBAAAALXRyWgUAAFgcAAAAaGRmczMuY29yZS5IREZpbGVTeXN0ZW0uaW5mb3JbBQAAKGr/BAAAagAFAABYTAAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2FwaS5odG1sI2hkZnMzLmNvcmUuSERGaWxlU3lzdGVtLmluZm9YAQAAAC10clwFAAB1WAcAAABzdGQ6ZG9jfXJdBQAAKFgTAAAAZXhhbXBsZXMvd29yZC1jb3VudHJeBQAAKGr/BAAAagAFAABYPwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2V4YW1wbGVzL3dvcmQtY291bnQuaHRtbFgKAAAAV29yZCBjb3VudHRyXwUAAFgKAAAAcXVpY2tzdGFydHJgBQAAKGr/BAAAagAFAABYNgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3F1aWNrc3RhcnQuaHRtbFgKAAAAUXVpY2tzdGFydHRyYQUAAFgFAAAAaW5kZXgoav8EAABqAAUAAFgxAAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvaW5kZXguaHRtbFgFAAAAaGRmczN0cmIFAABYCwAAAGxpbWl0YXRpb25zcmMFAAAoav8EAABqAAUAAFg3AAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbGltaXRhdGlvbnMuaHRtbFgRAAAAS25vd24gTGltaXRhdGlvbnN0cmQFAABYEQAAAGV4YW1wbGVzLW92ZXJ2aWV3cmUFAAAoav8EAABqAAUAAFg9AAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZXhhbXBsZXMtb3ZlcnZpZXcuaHRtbFgIAAAARXhhbXBsZXN0cmYFAABYBAAAAGhkZnNyZwUAAChq/wQAAGoABQAAWDAAAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9oZGZzLmh0bWxYEgAAAEhERlMgQ29uZmlndXJhdGlvbnRyaAUAAFgHAAAAaW5zdGFsbHJpBQAAKGr/BAAAagAFAABYMwAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2luc3RhbGwuaHRtbFgMAAAASW5zdGFsbGF0aW9udHJqBQAAWAMAAABhcGlyawUAAChq/wQAAGoABQAAWC8AAABodHRwczovL2hkZnMzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9hcGkuaHRtbFgDAAAAQVBJdHJsBQAAdVgJAAAAc3RkOmxhYmVsfXJtBQAAKFgGAAAAc2VhcmNoKGr/BAAAagAFAABYMgAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3NlYXJjaC5odG1sWAsAAABTZWFyY2ggUGFnZXRYCAAAAGdlbmluZGV4KGr/BAAAagAFAABYNAAAAGh0dHBzOi8vaGRmczMucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2dlbmluZGV4Lmh0bWxYBQAAAEluZGV4dFgIAAAAbW9kaW5kZXgoav8EAABqAAUAAFg3AAAAaHR0cHM6Ly9oZGZzMy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvcHktbW9kaW5kZXguaHRtbFgMAAAATW9kdWxlIEluZGV4dHV1h1UZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMnJuBQAAVQZweXRob25ybwUAAEoDWn9afXJwBQAAKFgIAAAAcHk6Y2xhc3N9cnEFAAAoWBEAAABzaGVsdmUuQnNkRGJTaGVsZnJyBQAAKFgGAAAAUHl0aG9ucnMFAABYAwAAADIuN3J0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLkJzZERiU2hlbGZYAQAAAC10cnUFAABYDAAAAHNtdHBsaWIuU01UUHJ2BQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQWAEAAAAtdHJ3BQAAWA8AAABjdHlwZXMuY191aW50MTZyeAUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDE2WAEAAAAtdHJ5BQAAWAsAAABhYmMuQUJDTWV0YXJ6BQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hYmMuaHRtbCNhYmMuQUJDTWV0YVgBAAAALXRyewUAAFgMAAAAYWV0eXBlcy5UeXBlcnwFAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLlR5cGVYAQAAAC10cn0FAABYDQAAAGN0eXBlcy5jX2ludDhyfgUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfaW50OFgBAAAALXRyfwUAAFgPAAAAbWFpbGJveC5NYWlsYm94coAFAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3hYAQAAAC10coEFAABYHgAAAHdzZ2lyZWYuaGFuZGxlcnMuU2ltcGxlSGFuZGxlcnKCBQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5TaW1wbGVIYW5kbGVyWAEAAAAtdHKDBQAAWA8AAABhZXR5cGVzLlFEUG9pbnRyhAUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuUURQb2ludFgBAAAALXRyhQUAAFgKAAAAdHRrLldpZGdldHKGBQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuV2lkZ2V0WAEAAAAtdHKHBQAAWBMAAABiejIuQloyRGVjb21wcmVzc29ycogFAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJEZWNvbXByZXNzb3JYAQAAAC10cokFAABYFAAAAGNvbGxlY3Rpb25zLlNlcXVlbmNlcooFAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuU2VxdWVuY2VYAQAAAC10cosFAABYDwAAAGN0eXBlcy5jX3NpemVfdHKMBQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19zaXplX3RYAQAAAC10co0FAABYEAAAAHhtbHJwY2xpYi5CaW5hcnlyjgUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkJpbmFyeVgBAAAALXRyjwUAAFgQAAAAYWV0eXBlcy5JbnRsVGV4dHKQBQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5JbnRsVGV4dFgBAAAALXRykQUAAFgMAAAAbWFpbGJveC5NTURGcpIFAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZYAQAAAC10cpMFAABYAwAAAHNldHKUBQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3NldFgBAAAALXRylQUAAFgRAAAAaW8uQnVmZmVyZWRXcml0ZXJylgUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFdyaXRlclgBAAAALXRylwUAAFgPAAAAdGFyZmlsZS5UYXJJbmZvcpgFAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm9YAQAAAC10cpkFAABYDgAAAFRpeC5PcHRpb25NZW51cpoFAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5PcHRpb25NZW51WAEAAAAtdHKbBQAAWB8AAABTb2NrZXRTZXJ2ZXIuVW5peERhdGFncmFtU2VydmVycpwFAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5Vbml4RGF0YWdyYW1TZXJ2ZXJYAQAAAC10cp0FAABYDQAAAFRpeC5GaWxlRW50cnlyngUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkZpbGVFbnRyeVgBAAAALXRynwUAAFgTAAAAbXVsdGlmaWxlLk11bHRpRmlsZXKgBQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlWAEAAAAtdHKhBQAAWBQAAABtYWlsYm94LkJhYnlsTWFpbGJveHKiBQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1haWxib3hYAQAAAC10cqMFAABYHgAAAGVtYWlsLm1pbWUubWVzc2FnZS5NSU1FTWVzc2FnZXKkBQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5tZXNzYWdlLk1JTUVNZXNzYWdlWAEAAAAtdHKlBQAAWAkAAAByZXByLlJlcHJypgUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwclgBAAAALXRypwUAAFgXAAAAd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnNyqAUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzWAEAAAAtdHKpBQAAWBoAAAB4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlcnKqBQAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlclgBAAAALXRyqwUAAFgWAAAAY3Vyc2VzLnRleHRwYWQuVGV4dGJveHKsBQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94WAEAAAAtdHKtBQAAWBIAAAB4bWxycGNsaWIuRGF0ZVRpbWVyrgUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkRhdGVUaW1lWAEAAAAtdHKvBQAAWA0AAABjdHlwZXMuY19sb25ncrAFAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2xvbmdYAQAAAC10crEFAABYFAAAAG1haWxib3guQmFieWxNZXNzYWdlcrIFAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZVgBAAAALXRyswUAAFgOAAAAY3R5cGVzLmNfdWludDhytAUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDhYAQAAAC10crUFAABYEQAAAGNhbGVuZGFyLkNhbGVuZGFycrYFAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXJYAQAAAC10crcFAABYGwAAAGNhbGVuZGFyLkxvY2FsZVRleHRDYWxlbmRhcnK4BQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkxvY2FsZVRleHRDYWxlbmRhclgBAAAALXRyuQUAAFgXAAAAZGVjaW1hbC5FeHRlbmRlZENvbnRleHRyugUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRXh0ZW5kZWRDb250ZXh0WAEAAAAtdHK7BQAAWAkAAABjc3YuZXhjZWxyvAUAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmV4Y2VsWAEAAAAtdHK9BQAAWBEAAABpby5CdWZmZXJlZFJhbmRvbXK+BQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUmFuZG9tWAEAAAAtdHK/BQAAWAoAAABmdHBsaWIuRlRQcsAFAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBYAQAAAC10csEFAABYEwAAAHR1cnRsZS5UdXJ0bGVTY3JlZW5ywgUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlR1cnRsZVNjcmVlblgBAAAALXRywwUAAFgPAAAAYWV0eXBlcy5PcmRpbmFscsQFAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLk9yZGluYWxYAQAAAC10csUFAABYDwAAAGN0eXBlcy5jX2RvdWJsZXLGBQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19kb3VibGVYAQAAAC10cscFAABYGwAAAFNvY2tldFNlcnZlci5UaHJlYWRpbmdNaXhJbnLIBQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW5YAQAAAC10cskFAABYEQAAAGNvbGxlY3Rpb25zLlNpemVkcsoFAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuU2l6ZWRYAQAAAC10cssFAABYDgAAAGN0eXBlcy5jX2ludDMycswFAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDMyWAEAAAAtdHLNBQAAWBMAAABodHRwbGliLkhUVFBNZXNzYWdlcs4FAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBNZXNzYWdlWAEAAAAtdHLPBQAAWA0AAABhc3luY2hhdC5maWZvctAFAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmb1gBAAAALXRy0QUAAFgVAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyctIFAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXJYAQAAAC10ctMFAABYDQAAAGRhdGV0aW1lLnRpbWVy1AUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lWAEAAAAtdHLVBQAAWBAAAAB0aW1lLnN0cnVjdF90aW1lctYFAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnN0cnVjdF90aW1lWAEAAAAtdHLXBQAAWBsAAABmb3JtYXR0ZXIuQWJzdHJhY3RGb3JtYXR0ZXJy2AUAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLkFic3RyYWN0Rm9ybWF0dGVyWAEAAAAtdHLZBQAAWB8AAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VDR0lIYW5kbGVyctoFAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VDR0lIYW5kbGVyWAEAAAAtdHLbBQAAWBIAAABzZ21sbGliLlNHTUxQYXJzZXJy3AUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlclgBAAAALXRy3QUAAFgPAAAAYXN0Lk5vZGVWaXNpdG9yct4FAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5Ob2RlVmlzaXRvclgBAAAALXRy3wUAAFgLAAAAaW8uU3RyaW5nSU9y4AUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5TdHJpbmdJT1gBAAAALXRy4QUAAFgVAAAAZG9jdGVzdC5Eb2NUZXN0UnVubmVycuIFAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXJYAQAAAC10cuMFAABYFgAAAHVybGxpYjIuT3BlbmVyRGlyZWN0b3Jy5AUAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuT3BlbmVyRGlyZWN0b3JYAQAAAC10cuUFAABYEAAAAGN0eXBlcy5weV9vYmplY3Ry5gUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnB5X29iamVjdFgBAAAALXRy5wUAAFgSAAAAcmZjODIyLkFkZHJlc3NMaXN0cugFAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdFgBAAAALXRy6QUAAFggAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHRy6gUAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHRYAQAAAC10cusFAABYEQAAAG1haWxib3guTUhNZXNzYWdlcuwFAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZVgBAAAALXRy7QUAAFgEAAAAZGljdHLuBQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3RYAQAAAC10cu8FAABYCwAAAFRpeC5EaXJMaXN0cvAFAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5EaXJMaXN0WAEAAAAtdHLxBQAAWAsAAABjc3YuU25pZmZlcnLyBQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuU25pZmZlclgBAAAALXRy8wUAAFgWAAAAY29kZW9wLkNvbW1hbmRDb21waWxlcnL0BQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbCNjb2Rlb3AuQ29tbWFuZENvbXBpbGVyWAEAAAAtdHL1BQAAWBEAAABjb21waWxlci5hc3QuTm9kZXL2BQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLmFzdC5Ob2RlWAEAAAAtdHL3BQAAWAsAAAByZXhlYy5SRXhlY3L4BQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjWAEAAAAtdHL5BQAAWAsAAABjaHVuay5DaHVua3L6BQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rWAEAAAAtdHL7BQAAWA0AAABjdHlwZXMuY19ieXRlcvwFAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2J5dGVYAQAAAC10cv0FAABYHAAAAGRpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGVy/gUAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlWAEAAAAtdHL/BQAAWBsAAAByb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXJyAAYAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNyb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXJYAQAAAC10cgEGAABYDwAAAGFldHlwZXMuQm9vbGVhbnICBgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5Cb29sZWFuWAEAAAAtdHIDBgAAWBcAAAB1cmxsaWIyLkNhY2hlRlRQSGFuZGxlcnIEBgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5DYWNoZUZUUEhhbmRsZXJYAQAAAC10cgUGAABYDQAAAGN0eXBlcy5XaW5ETExyBgYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLldpbkRMTFgBAAAALXRyBwYAAFgPAAAAVGl4LlBhbmVkV2luZG93cggGAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5QYW5lZFdpbmRvd1gBAAAALXRyCQYAAFgYAAAAZGlzdHV0aWxzLmNvcmUuRXh0ZW5zaW9ucgoGAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNvcmUuRXh0ZW5zaW9uWAEAAAAtdHILBgAAWAoAAABpby5CeXRlc0lPcgwGAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJT1gBAAAALXRyDQYAAFgTAAAAZW1haWwuaGVhZGVyLkhlYWRlcnIOBgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyWAEAAAAtdHIPBgAAWAUAAABzbGljZXIQBgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNzbGljZVgBAAAALXRyEQYAAFgYAAAAVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nchIGAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWwjVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nWAEAAAAtdHITBgAAWA8AAAB0aHJlYWRpbmcubG9jYWxyFAYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmxvY2FsWAEAAAAtdHIVBgAAWA8AAABjdHlwZXMuY191aW50NjRyFgYAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDY0WAEAAAAtdHIXBgAAWBUAAABjYWxlbmRhci5UZXh0Q2FsZW5kYXJyGAYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXJYAQAAAC10chkGAABYFAAAAG9wdHBhcnNlLk9wdGlvbkdyb3VwchoGAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uR3JvdXBYAQAAAC10chsGAABYEwAAAGFldHlwZXMuUURSZWN0YW5nbGVyHAYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuUURSZWN0YW5nbGVYAQAAAC10ch0GAABYDwAAAG1haWxib3guTWFpbGRpcnIeBgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyWAEAAAAtdHIfBgAAWBUAAABkaXN0dXRpbHMuY21kLkNvbW1hbmRyIAYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmRYAQAAAC10ciEGAABYFAAAAGNvbGxlY3Rpb25zLkNhbGxhYmxlciIGAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ2FsbGFibGVYAQAAAC10ciMGAABYKAAAAGVtYWlsLm1pbWUubm9ubXVsdGlwYXJ0Lk1JTUVOb25NdWx0aXBhcnRyJAYAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUubm9ubXVsdGlwYXJ0Lk1JTUVOb25NdWx0aXBhcnRYAQAAAC10ciUGAABYFAAAAGN0eXBlcy5MaWJyYXJ5TG9hZGVyciYGAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5MaWJyYXJ5TG9hZGVyWAEAAAAtdHInBgAAWA4AAABtc2lsaWIuQ29udHJvbHIoBgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbFgBAAAALXRyKQYAAFgQAAAAYWV0eXBlcy5SR0JDb2xvcnIqBgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5SR0JDb2xvclgBAAAALXRyKwYAAFgdAAAAbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWVyLAYAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWVYAQAAAC10ci0GAABYGgAAAGNvb2tpZWxpYi5Nb3ppbGxhQ29va2llSmFyci4GAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Nb3ppbGxhQ29va2llSmFyWAEAAAAtdHIvBgAAWAsAAABuZXRyYy5uZXRyY3IwBgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLm5ldHJjWAEAAAAtdHIxBgAAWCcAAABEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDUmVxdWVzdEhhbmRsZXJyMgYAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY1hNTFJQQ1JlcXVlc3RIYW5kbGVyWAEAAAAtdHIzBgAAWAwAAABwc3RhdHMuU3RhdHNyNAYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0c1gBAAAALXRyNQYAAFgEAAAAdHlwZXI2BgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN0eXBlWAEAAAAtdHI3BgAAWA4AAABjdHlwZXMuY193Y2hhcnI4BgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY193Y2hhclgBAAAALXRyOQYAAFgRAAAAU3RyaW5nSU8uU3RyaW5nSU9yOgYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5naW8uaHRtbCNTdHJpbmdJTy5TdHJpbmdJT1gBAAAALXRyOwYAAFgPAAAAc3RyaW5nLlRlbXBsYXRlcjwGAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5UZW1wbGF0ZVgBAAAALXRyPQYAAFgUAAAAZGVjaW1hbC5CYXNpY0NvbnRleHRyPgYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQmFzaWNDb250ZXh0WAEAAAAtdHI/BgAAWBUAAABjYWxlbmRhci5IVE1MQ2FsZW5kYXJyQAYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXJYAQAAAC10ckEGAABYGQAAAFVzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3RyQgYAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0WAEAAAAtdHJDBgAAWCAAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlcnJEBgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lTZXJ2ZXJYAQAAAC10ckUGAABYEwAAAGNvbGxlY3Rpb25zLkNvdW50ZXJyRgYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyWAEAAAAtdHJHBgAAWBAAAABpby5UZXh0SU9XcmFwcGVyckgGAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPV3JhcHBlclgBAAAALXRySQYAAFgOAAAAc3NsLlNTTENvbnRleHRySgYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHRYAQAAAC10cksGAABYDAAAAFRpeC5Ob3RlQm9va3JMBgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguTm90ZUJvb2tYAQAAAC10ck0GAABYFwAAAGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyck4GAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLk9iamVjdFNwZWNpZmllclgBAAAALXRyTwYAAFgRAAAAdW5pdHRlc3QuVGVzdENhc2VyUAYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZVgBAAAALXRyUQYAAFgRAAAAaW1hcGxpYi5JTUFQNF9TU0xyUgYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDRfU1NMWAEAAAAtdHJTBgAAWBAAAABjdHlwZXMuY19zc2l6ZV90clQGAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3NzaXplX3RYAQAAAC10clUGAABYDwAAAGNvbGxlY3Rpb25zLlNldHJWBgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLlNldFgBAAAALXRyVwYAAFgVAAAAbG9nZ2luZy5TdHJlYW1IYW5kbGVyclgGAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLlN0cmVhbUhhbmRsZXJYAQAAAC10clkGAABYFQAAAGRvY3Rlc3QuRG9jVGVzdEZpbmRlcnJaBgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0RmluZGVyWAEAAAAtdHJbBgAAWBIAAAB1bml0dGVzdC5UZXN0U3VpdGVyXAYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGVYAQAAAC10cl0GAABYEwAAAHRocmVhZGluZy5Db25kaXRpb25yXgYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkNvbmRpdGlvblgBAAAALXRyXwYAAFgWAAAAY29va2llbGliLkxXUENvb2tpZUphcnJgBgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuTFdQQ29va2llSmFyWAEAAAAtdHJhBgAAWCMAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcnJiBgAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lclgBAAAALXRyYwYAAFgSAAAAZGF0ZXRpbWUudGltZWRlbHRhcmQGAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhWAEAAAAtdHJlBgAAWA4AAABjdHlwZXMuY191bG9uZ3JmBgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191bG9uZ1gBAAAALXRyZwYAAFgOAAAAY3N2LkRpY3RSZWFkZXJyaAYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpY3RSZWFkZXJYAQAAAC10cmkGAABYDAAAAHR1cnRsZS5WZWMyRHJqBgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuVmVjMkRYAQAAAC10cmsGAABYGQAAAGN0eXBlcy5CaWdFbmRpYW5TdHJ1Y3R1cmVybAYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkJpZ0VuZGlhblN0cnVjdHVyZVgBAAAALXRybQYAAFgaAAAAY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmdybgYAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZ1gBAAAALXRybwYAAFgQAAAAY3R5cGVzLmNfd2NoYXJfcHJwBgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY193Y2hhcl9wWAEAAAAtdHJxBgAAWBAAAAB0dXJ0bGUuUmF3VHVydGxlcnIGAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5SYXdUdXJ0bGVYAQAAAC10cnMGAABYHQAAAHVybGxpYjIuUHJveHlCYXNpY0F1dGhIYW5kbGVycnQGAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5QmFzaWNBdXRoSGFuZGxlclgBAAAALXRydQYAAFgOAAAAY3R5cGVzLmNfZmxvYXRydgYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfZmxvYXRYAQAAAC10cncGAABYDQAAAFRpeC5Qb3B1cE1lbnVyeAYAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LlBvcHVwTWVudVgBAAAALXRyeQYAAFgLAAAAc2hsZXguc2hsZXhyegYAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleFgBAAAALXRyewYAAFgNAAAAc3RydWN0LlN0cnVjdHJ8BgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0WAEAAAAtdHJ9BgAAWBIAAABzcWxpdGUzLkNvbm5lY3Rpb25yfgYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvblgBAAAALXRyfwYAAFgUAAAAbXVsdGlwcm9jZXNzaW5nLkxvY2tygAYAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkxvY2tYAQAAAC10coEGAABYEgAAAGFldHlwZXMuQ29tcGFyaXNvbnKCBgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5Db21wYXJpc29uWAEAAAAtdHKDBgAAWBUAAABVc2VyU3RyaW5nLlVzZXJTdHJpbmdyhAYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyU3RyaW5nLlVzZXJTdHJpbmdYAQAAAC10coUGAABYDwAAAHNtdHBkLlB1cmVQcm94eXKGBgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlB1cmVQcm94eVgBAAAALXRyhwYAAFgOAAAAcmZjODIyLk1lc3NhZ2VyiAYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2VYAQAAAC10cokGAABYEwAAAGNvZGVjcy5TdHJlYW1SZWFkZXJyigYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlclgBAAAALXRyiwYAAFgiAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TSW1wbHKMBgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOU0ltcGxYAQAAAC10co0GAABYDgAAAGZ0cGxpYi5GVFBfVExTco4GAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTWAEAAAAtdHKPBgAAWBIAAABhcmdwYXJzZS5OYW1lc3BhY2VykAYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5OYW1lc3BhY2VYAQAAAC10cpEGAABYBwAAAHBkYi5QZGJykgYAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYlgBAAAALXRykwYAAFgZAAAAZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcnKUBgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yWAEAAAAtdHKVBgAAWBEAAAB6aXBmaWxlLlB5WmlwRmlsZXKWBgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QeVppcEZpbGVYAQAAAC10cpcGAABYHAAAAHhtbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXJymAYAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlclgBAAAALXRymQYAAFgVAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlcpoGAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZVgBAAAALXRymwYAAFgVAAAAY29sbGVjdGlvbnMuSXRlbXNWaWV3cpwGAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuSXRlbXNWaWV3WAEAAAAtdHKdBgAAWA8AAABzeW10YWJsZS5TeW1ib2xyngYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xYAQAAAC10cp8GAABYBwAAAGFzdC5BU1RyoAYAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LkFTVFgBAAAALXRyoQYAAFghAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVycqIGAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlclgBAAAALXRyowYAAFgSAAAAQ29va2llLlNtYXJ0Q29va2llcqQGAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5TbWFydENvb2tpZVgBAAAALXRypQYAAFgWAAAAZGlzdHV0aWxzLmNvcmUuQ29tbWFuZHKmBgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLkNvbW1hbmRYAQAAAC10cqcGAABYEAAAAFRpeC5MaXN0Tm90ZUJvb2tyqAYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4Lkxpc3ROb3RlQm9va1gBAAAALXRyqQYAAFgVAAAAeG1scnBjbGliLlNlcnZlclByb3h5cqoGAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5TZXJ2ZXJQcm94eVgBAAAALXRyqwYAAFgJAAAAaW8uRmlsZUlPcqwGAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uRmlsZUlPWAEAAAAtdHKtBgAAWAgAAABzZXRzLlNldHKuBgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0cy5TZXRYAQAAAC10cq8GAABYEwAAAGFzeW5jaGF0LmFzeW5jX2NoYXRysAYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0WAEAAAAtdHKxBgAAWBEAAABzeW10YWJsZS5GdW5jdGlvbnKyBgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uWAEAAAAtdHKzBgAAWA4AAABjb2Rlb3AuQ29tcGlsZXK0BgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbCNjb2Rlb3AuQ29tcGlsZVgBAAAALXRytQYAAFgkAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VycrYGAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlclgBAAAALXRytwYAAFgMAAAAYWV0eXBlcy5FbnVtcrgGAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkVudW1YAQAAAC10crkGAABYDQAAAHR1cnRsZS5UdXJ0bGVyugYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlR1cnRsZVgBAAAALXRyuwYAAFgYAAAAd3NnaXJlZi51dGlsLkZpbGVXcmFwcGVycrwGAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwuRmlsZVdyYXBwZXJYAQAAAC10cr0GAABYEAAAAHNtdHBkLlNNVFBTZXJ2ZXJyvgYAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQU2VydmVyWAEAAAAtdHK/BgAAWBsAAAB3c2dpcmVmLmhhbmRsZXJzLkNHSUhhbmRsZXJywAYAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlclgBAAAALXRywQYAAFgHAAAAVGl4LlRpeHLCBgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguVGl4WAEAAAAtdHLDBgAAWBMAAABsb2dnaW5nLk51bGxIYW5kbGVycsQGAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLk51bGxIYW5kbGVyWAEAAAAtdHLFBgAAWBgAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnNyxgYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9uc1gBAAAALXRyxwYAAFgXAAAAd2FybmluZ3MuY2F0Y2hfd2FybmluZ3NyyAYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5jYXRjaF93YXJuaW5nc1gBAAAALXRyyQYAAFgRAAAAVXNlckxpc3QuVXNlckxpc3RyygYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyTGlzdC5Vc2VyTGlzdFgBAAAALXRyywYAAFgDAAAAc3RycswGAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3N0clgBAAAALXRyzQYAAFgXAAAAY29sbGVjdGlvbnMuT3JkZXJlZERpY3RyzgYAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5PcmRlcmVkRGljdFgBAAAALXRyzwYAAFgPAAAAZG9jdGVzdC5Eb2NUZXN0ctAGAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RYAQAAAC10ctEGAABYEAAAAGpzb24uSlNPTkRlY29kZXJy0gYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkRlY29kZXJYAQAAAC10ctMGAABYDgAAAGN0eXBlcy5IUkVTVUxUctQGAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5IUkVTVUxUWAEAAAAtdHLVBgAAWCYAAABlbWFpbC5taW1lLmFwcGxpY2F0aW9uLk1JTUVBcHBsaWNhdGlvbnLWBgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5hcHBsaWNhdGlvbi5NSU1FQXBwbGljYXRpb25YAQAAAC10ctcGAABYGwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5RTmFtZXLYBgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuUU5hbWVYAQAAAC10ctkGAABYIwAAAHhtbC5zYXgueG1scmVhZGVyLkluY3JlbWVudGFsUGFyc2VyctoGAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXJYAQAAAC10ctsGAABYHQAAAGltcHV0aWwuRHluTG9hZFN1ZmZpeEltcG9ydGVyctwGAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkR5bkxvYWRTdWZmaXhJbXBvcnRlclgBAAAALXRy3QYAAFgTAAAAbWFpbGJveC5NbWRmTWFpbGJveHLeBgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NbWRmTWFpbGJveFgBAAAALXRy3wYAAFgiAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlcnLgBgAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlclgBAAAALXRy4QYAAFgXAAAAbXNpbGliLlJhZGlvQnV0dG9uR3JvdXBy4gYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJhZGlvQnV0dG9uR3JvdXBYAQAAAC10cuMGAABYCAAAAG1obGliLk1IcuQGAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUhYAQAAAC10cuUGAABYFAAAAGFldHlwZXMuSW5zZXJ0aW9uTG9jcuYGAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkluc2VydGlvbkxvY1gBAAAALXRy5wYAAFgUAAAAY29sbGVjdGlvbnMuSXRlcmF0b3Jy6AYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5JdGVyYXRvclgBAAAALXRy6QYAAFgPAAAAUXVldWUuTGlmb1F1ZXVlcuoGAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuTGlmb1F1ZXVlWAEAAAAtdHLrBgAAWBEAAABkYXRldGltZS5kYXRldGltZXLsBgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lWAEAAAAtdHLtBgAAWA4AAABhZXRvb2xzLlRhbGtUb3LuBgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjYWV0b29scy5UYWxrVG9YAQAAAC10cu8GAABYHAAAAGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXJy8AYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyWAEAAAAtdHLxBgAAWAwAAAB0dGsuTm90ZWJvb2ty8gYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rWAEAAAAtdHLzBgAAWA0AAABjdHlwZXMuY19jaGFycvQGAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2NoYXJYAQAAAC10cvUGAABYIgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHly9gYAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eVgBAAAALXRy9wYAAFgOAAAAYWV0eXBlcy5BRVRleHRy+AYAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuQUVUZXh0WAEAAAAtdHL5BgAAWAwAAAB0aW1laXQuVGltZXJy+gYAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyWAEAAAAtdHL7BgAAWBEAAABpby5CdWZmZXJlZFJXUGFpcnL8BgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUldQYWlyWAEAAAAtdHL9BgAAWBYAAABkZWNpbWFsLkRpdmlzaW9uQnlaZXJvcv4GAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRpdmlzaW9uQnlaZXJvWAEAAAAtdHL/BgAAWA4AAABjdHlwZXMuY191Ynl0ZXIABwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191Ynl0ZVgBAAAALXRyAQcAAFgRAAAAbG9nZ2luZy5Mb2dSZWNvcmRyAgcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nUmVjb3JkWAEAAAAtdHIDBwAAWA0AAABtYWlsYm94LkJhYnlscgQHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsWAEAAAAtdHIFBwAAWCEAAABTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXJyBgcAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyWAEAAAAtdHIHBwAAWBQAAABmb3JtYXR0ZXIuTnVsbFdyaXRlcnIIBwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuTnVsbFdyaXRlclgBAAAALXRyCQcAAFgPAAAAY3R5cGVzLmNfdm9pZF9wcgoHAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3ZvaWRfcFgBAAAALXRyCwcAAFgeAAAAbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVycgwHAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXJYAQAAAC10cg0HAABYCQAAAGZyb3plbnNldHIOBwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldFgBAAAALXRyDwcAAFgTAAAAYXN5bmNvcmUuZGlzcGF0Y2hlcnIQBwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXJYAQAAAC10chEHAABYFwAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVychIHAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlclgBAAAALXRyEwcAAFgNAAAAcGxpc3RsaWIuRGF0YXIUBwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLkRhdGFYAQAAAC10chUHAABYDAAAAHR0ay5UcmVldmlld3IWBwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXdYAQAAAC10chcHAABYEAAAAGRlY2ltYWwuT3ZlcmZsb3dyGAcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuT3ZlcmZsb3dYAQAAAC10chkHAABYDQAAAG1obGliLk1lc3NhZ2VyGgcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NZXNzYWdlWAEAAAAtdHIbBwAAWA8AAABkZWNpbWFsLkluZXhhY3RyHAcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuSW5leGFjdFgBAAAALXRyHQcAAFgfAAAAdXJsbGliMi5IVFRQRGVmYXVsdEVycm9ySGFuZGxlcnIeBwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRGVmYXVsdEVycm9ySGFuZGxlclgBAAAALXRyHwcAAFgVAAAAZG9jdGVzdC5Eb2NUZXN0UGFyc2VyciAHAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RQYXJzZXJYAQAAAC10ciEHAABYEgAAAGZyYWN0aW9ucy5GcmFjdGlvbnIiBwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb25YAQAAAC10ciMHAABYEwAAAFF1ZXVlLlByaW9yaXR5UXVldWVyJAcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNRdWV1ZS5Qcmlvcml0eVF1ZXVlWAEAAAAtdHIlBwAAWAoAAABUaXguU2VsZWN0ciYHAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5TZWxlY3RYAQAAAC10cicHAABYHAAAAGN0eXBlcy5MaXR0bGVFbmRpYW5TdHJ1Y3R1cmVyKAcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkxpdHRsZUVuZGlhblN0cnVjdHVyZVgBAAAALXRyKQcAAFgpAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2xyKgcAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2xYAQAAAC10cisHAABYEQAAAHBrZ3V0aWwuSW1wTG9hZGVyciwHAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLkltcExvYWRlclgBAAAALXRyLQcAAFgTAAAAVGl4LkRpclNlbGVjdERpYWxvZ3IuBwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguRGlyU2VsZWN0RGlhbG9nWAEAAAAtdHIvBwAAWB0AAABTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlcnIwBwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlclgBAAAALXRyMQcAAFgVAAAAYWV0eXBlcy5Db21wb25lbnRJdGVtcjIHAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkNvbXBvbmVudEl0ZW1YAQAAAC10cjMHAABYDwAAAHdlYWtyZWYuV2Vha1NldHI0BwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5XZWFrU2V0WAEAAAAtdHI1BwAAWBAAAABUaXguRGlyU2VsZWN0Qm94cjYHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5EaXJTZWxlY3RCb3hYAQAAAC10cjcHAABYDAAAAGN0eXBlcy5jX2ludHI4BwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19pbnRYAQAAAC10cjkHAABYHgAAAGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcnI6BwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyWAEAAAAtdHI7BwAAWA8AAABhZXR5cGVzLkxvZ2ljYWxyPAcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuTG9naWNhbFgBAAAALXRyPQcAAFgJAAAAdHRrLlN0eWxlcj4HAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZVgBAAAALXRyPwcAAFgMAAAAbWhsaWIuRm9sZGVyckAHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyWAEAAAAtdHJBBwAAWBIAAABjdHlwZXMuY191bG9uZ2xvbmdyQgcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWxvbmdsb25nWAEAAAAtdHJDBwAAWA8AAABtYWlsYm94Lk1lc3NhZ2VyRAcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWVzc2FnZVgBAAAALXRyRQcAAFgaAAAAZW1haWwubWltZS5hdWRpby5NSU1FQXVkaW9yRgcAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUuYXVkaW8uTUlNRUF1ZGlvWAEAAAAtdHJHBwAAWBcAAABpbXB1dGlsLkJ1aWx0aW5JbXBvcnRlcnJIBwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5CdWlsdGluSW1wb3J0ZXJYAQAAAC10ckkHAABYGwAAAE1pbmlBRUZyYW1lLk1pbmlBcHBsaWNhdGlvbnJKBwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW5pYWVmcmFtZS5odG1sI01pbmlBRUZyYW1lLk1pbmlBcHBsaWNhdGlvblgBAAAALXRySwcAAFgEAAAAYm9vbHJMBwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNib29sWAEAAAAtdHJNBwAAWBgAAABlbWFpbC5taW1lLmJhc2UuTUlNRUJhc2VyTgcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUuYmFzZS5NSU1FQmFzZVgBAAAALXRyTwcAAFgNAAAAZ3ppcC5HemlwRmlsZXJQBwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nemlwLmh0bWwjZ3ppcC5HemlwRmlsZVgBAAAALXRyUQcAAFgTAAAAdXJsbGliMi5CYXNlSGFuZGxlcnJSBwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlclgBAAAALXRyUwcAAFgMAAAAaW8uUmF3SU9CYXNlclQHAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uUmF3SU9CYXNlWAEAAAAtdHJVBwAAWA8AAAB0aHJlYWRpbmcuRXZlbnRyVgcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50WAEAAAAtdHJXBwAAWA4AAABwaWNrbGUuUGlja2xlcnJYBwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlclgBAAAALXRyWQcAAFgQAAAAc210cGxpYi5TTVRQX1NTTHJaBwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQX1NTTFgBAAAALXRyWwcAAFgOAAAAYmRiLkJyZWFrcG9pbnRyXAcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnRYAQAAAC10cl0HAABYEQAAAENvb2tpZS5CYXNlQ29va2llcl4HAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llWAEAAAAtdHJfBwAAWBMAAABmaWxlaW5wdXQuRmlsZUlucHV0cmAHAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5GaWxlSW5wdXRYAQAAAC10cmEHAABYDAAAAHR0ay5Db21ib2JveHJiBwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuQ29tYm9ib3hYAQAAAC10cmMHAABYEQAAAGRlY2ltYWwuVW5kZXJmbG93cmQHAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLlVuZGVyZmxvd1gBAAAALXRyZQcAAFgJAAAAYnl0ZWFycmF5cmYHAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2J5dGVhcnJheVgBAAAALXRyZwcAAFgXAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXJyaAcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclgBAAAALXRyaQcAAFgcAAAAdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlcnJqBwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlclgBAAAALXRyawcAAFgIAAAAVGl4LlRyZWVybAcAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LlRyZWVYAQAAAC10cm0HAABYFAAAAHVybGxpYjIuUHJveHlIYW5kbGVycm4HAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5SGFuZGxlclgBAAAALXRybwcAAFgNAAAAY3R5cGVzLk9sZURMTHJwBwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuT2xlRExMWAEAAAAtdHJxBwAAWA0AAABtc2lsaWIuRGlhbG9ncnIHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2dYAQAAAC10cnMHAABYEQAAAGlvLkJ1ZmZlcmVkUmVhZGVycnQHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXJYAQAAAC10cnUHAABYDAAAAHR1cnRsZS5TaGFwZXJ2BwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2hhcGVYAQAAAC10cncHAABYCwAAAG11dGV4Lm11dGV4cngHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211dGV4Lmh0bWwjbXV0ZXgubXV0ZXhYAQAAAC10cnkHAABYGQAAAHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnlyegcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha0tleURpY3Rpb25hcnlYAQAAAC10cnsHAABYHgAAAGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcnJ8BwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyWAEAAAAtdHJ9BwAAWA0AAABjdHlwZXMuX0NEYXRhcn4HAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGFYAQAAAC10cn8HAABYJQAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXJygAcAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlclgBAAAALXRygQcAAFgLAAAAVGl4LkRpclRyZWVyggcAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkRpclRyZWVYAQAAAC10coMHAABYEwAAAHVuaXR0ZXN0LlRlc3RMb2FkZXJyhAcAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyWAEAAAAtdHKFBwAAWA0AAABUaXguQnV0dG9uQm94coYHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5CdXR0b25Cb3hYAQAAAC10cocHAABYAwAAAGludHKIBwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpbnRYAQAAAC10cokHAABYJQAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaS5iZGlzdF9tc2lyigcAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2kuYmRpc3RfbXNpWAEAAAAtdHKLBwAAWA4AAABmaWxlY21wLmRpcmNtcHKMBwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXBYAQAAAC10co0HAABYCQAAAGlvLklPQmFzZXKOBwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZVgBAAAALXRyjwcAAFgpAAAAbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJykAcAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyWAEAAAAtdHKRBwAAWBUAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXRykgcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldFgBAAAALXRykwcAAFggAAAAbXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmVylAcAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmVYAQAAAC10cpUHAABYEAAAAG51bWJlcnMuUmF0aW9uYWxylgcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuUmF0aW9uYWxYAQAAAC10cpcHAABYDQAAAGRhdGV0aW1lLmRhdGVymAcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlWAEAAAAtdHKZBwAAWBUAAABNaW1lV3JpdGVyLk1pbWVXcml0ZXJymgcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI01pbWVXcml0ZXIuTWltZVdyaXRlclgBAAAALXRymwcAAFgVAAAAc210cGQuRGVidWdnaW5nU2VydmVycpwHAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuRGVidWdnaW5nU2VydmVyWAEAAAAtdHKdBwAAWBwAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVycp4HAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyWAEAAAAtdHKfBwAAWA4AAABUaXgudGl4Q29tbWFuZHKgBwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZFgBAAAALXRyoQcAAFgOAAAAZGlmZmxpYi5EaWZmZXJyogcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuRGlmZmVyWAEAAAAtdHKjBwAAWBUAAABhc3luY29yZS5maWxlX3dyYXBwZXJypAcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5maWxlX3dyYXBwZXJYAQAAAC10cqUHAABYEwAAAG1haWxib3gubWJveE1lc3NhZ2VypgcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2VYAQAAAC10cqcHAABYBQAAAGljLklDcqgHAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMuSUNYAQAAAC10cqkHAABYDQAAAHBvcGVuMi5Qb3BlbjNyqgcAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuM1gBAAAALXRyqwcAAFgiAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLk5hbWVzcGFjZXKsBwAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuTmFtZXNwYWNlWAEAAAAtdHKtBwAAWA8AAAB1cmxsaWIyLlJlcXVlc3RyrgcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdFgBAAAALXRyrwcAAFgNAAAAcG9wZW4yLlBvcGVuNHKwBwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIuUG9wZW40WAEAAAAtdHKxBwAAWCQAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXJysgcAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyWAEAAAAtdHKzBwAAWA4AAABudW1iZXJzLk51bWJlcnK0BwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5OdW1iZXJYAQAAAC10crUHAABYDwAAAHRocmVhZGluZy5UaW1lcnK2BwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGltZXJYAQAAAC10crcHAABYFgAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb25yuAcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb25YAQAAAC10crkHAABYFQAAAG11bHRpcHJvY2Vzc2luZy5FdmVudHK6BwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuRXZlbnRYAQAAAC10crsHAABYFgAAAFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXJyvAcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlRDUFNlcnZlclgBAAAALXRyvQcAAFghAAAAdXJsbGliMi5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVycr4HAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkFic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXJYAQAAAC10cr8HAABYDgAAAG1zaWxpYi5GZWF0dXJlcsAHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5GZWF0dXJlWAEAAAAtdHLBBwAAWA0AAABjc3YuZXhjZWxfdGFicsIHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5leGNlbF90YWJYAQAAAC10csMHAABYFgAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3lyxAcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeVgBAAAALXRyxQcAAFgKAAAAbWFpbGJveC5NSHLGBwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSFgBAAAALXRyxwcAAFgLAAAAUXVldWUuUXVldWVyyAcAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNRdWV1ZS5RdWV1ZVgBAAAALXRyyQcAAFgUAAAAdXJscGFyc2UuUGFyc2VSZXN1bHRyygcAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS5QYXJzZVJlc3VsdFgBAAAALXRyywcAAFgfAAAAU29ja2V0U2VydmVyLlRocmVhZGluZ1RDUFNlcnZlcnLMBwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVENQU2VydmVyWAEAAAAtdHLNBwAAWBQAAAB1cmxsaWIyLkhUVFBTSGFuZGxlcnLOBwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQU0hhbmRsZXJYAQAAAC10cs8HAABYDgAAAHJlLlJlZ2V4T2JqZWN0ctAHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3RYAQAAAC10ctEHAABYFAAAAGh0dHBsaWIuSFRUUFJlc3BvbnNlctIHAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZVgBAAAALXRy0wcAAFgTAAAAQ29va2llLlNpbXBsZUNvb2tpZXLUBwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuU2ltcGxlQ29va2llWAEAAAAtdHLVBwAAWBcAAAB1cmxsaWIyLkhUVFBQYXNzd29yZE1ncnLWBwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3JYAQAAAC10ctcHAABYFAAAAHRleHR3cmFwLlRleHRXcmFwcGVyctgHAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXJYAQAAAC10ctkHAABYEQAAAGlvLkJ1ZmZlcmVkSU9CYXNlctoHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2VYAQAAAC10ctsHAABYDwAAAGRhdGV0aW1lLnR6aW5mb3LcBwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnR6aW5mb1gBAAAALXRy3QcAAFgeAAAAdGVzdC5zdXBwb3J0LlRyYW5zaWVudFJlc291cmNlct4HAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVHJhbnNpZW50UmVzb3VyY2VYAQAAAC10ct8HAABYHgAAAHhtbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbXLgBwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW1YAQAAAC10cuEHAABYCgAAAFRraW50ZXIuVGty4gcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuVGtYAQAAAC10cuMHAABYDwAAAGFldHlwZXMuS2V5d29yZHLkBwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5LZXl3b3JkWAEAAAAtdHLlBwAAWBYAAAB1cmxsaWIyLlVua25vd25IYW5kbGVycuYHAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlVua25vd25IYW5kbGVyWAEAAAAtdHLnBwAAWAsAAABwb3BsaWIuUE9QM3LoBwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QM1gBAAAALXRy6QcAAFgTAAAAdXJsbGliMi5IVFRQSGFuZGxlcnLqBwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQSGFuZGxlclgBAAAALXRy6wcAAFgOAAAAY3N2LkRpY3RXcml0ZXJy7AcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpY3RXcml0ZXJYAQAAAC10cu0HAABYCAAAAHByb3BlcnR5cu4HAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Byb3BlcnR5WAEAAAAtdHLvBwAAWA8AAABjdHlwZXMuX1BvaW50ZXJy8AcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9Qb2ludGVyWAEAAAAtdHLxBwAAWA4AAABjdHlwZXMuY19pbnQ2NHLyBwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19pbnQ2NFgBAAAALXRy8wcAAFgUAAAAY29sbGVjdGlvbnMuSXRlcmFibGVy9AcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5JdGVyYWJsZVgBAAAALXRy9QcAAFghAAAAbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVycvYHAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXJYAQAAAC10cvcHAABYFwAAAHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0cvgHAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHRYAQAAAC10cvkHAABYDwAAAGRvY3Rlc3QuRXhhbXBsZXL6BwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlWAEAAAAtdHL7BwAAWBsAAABjb2xsZWN0aW9ucy5NdXRhYmxlU2VxdWVuY2Vy/AcAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlU2VxdWVuY2VYAQAAAC10cv0HAABYDwAAAGN0eXBlcy5jX3VzaG9ydHL+BwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191c2hvcnRYAQAAAC10cv8HAABYGQAAAHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2VyAAgAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlWAEAAAAtdHIBCAAAWB4AAAB4bWwuc2F4LmhhbmRsZXIuRW50aXR5UmVzb2x2ZXJyAggAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVudGl0eVJlc29sdmVyWAEAAAAtdHIDCAAAWBUAAAB1cmxsaWIuRmFuY3lVUkxvcGVuZXJyBAgAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLkZhbmN5VVJMb3BlbmVyWAEAAAAtdHIFCAAAWA4AAABsb2dnaW5nLkxvZ2dlcnIGCAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXJYAQAAAC10cgcIAABYIAAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNJbXBscggIAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc0ltcGxYAQAAAC10cgkIAABYGwAAAGNvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvcnIKCAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvclgBAAAALXRyCwgAAFgPAAAAYWV0eXBlcy5Vbmtub3ducgwIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLlVua25vd25YAQAAAC10cg0IAABYEgAAAHVybGxpYjIuRlRQSGFuZGxlcnIOCAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5GVFBIYW5kbGVyWAEAAAAtdHIPCAAAWCIAAABlbWFpbC5taW1lLm11bHRpcGFydC5NSU1FTXVsdGlwYXJ0chAIAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLm11bHRpcGFydC5NSU1FTXVsdGlwYXJ0WAEAAAAtdHIRCAAAWAsAAABjc3YuRGlhbGVjdHISCAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdFgBAAAALXRyEwgAAFgPAAAAemlwZmlsZS5aaXBJbmZvchQIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm9YAQAAAC10chUIAABYIQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZXIWCAAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWVYAQAAAC10chcIAABYHQAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5chgIAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5WAEAAAAtdHIZCAAAWBcAAABodHRwbGliLkhUVFBTQ29ubmVjdGlvbnIaCAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb25YAQAAAC10chsIAABYDQAAAHR1cnRsZS5SYXdQZW5yHAgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlJhd1BlblgBAAAALXRyHQgAAFglAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcnIeCAAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXJYAQAAAC10ch8IAABYFQAAAG11bHRpcHJvY2Vzc2luZy5STG9ja3IgCAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUkxvY2tYAQAAAC10ciEIAABYFAAAAGNvZGVjcy5TdHJlYW1SZWNvZGVyciIIAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWNvZGVyWAEAAAAtdHIjCAAAWA0AAABUaXguQ2hlY2tMaXN0ciQIAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5DaGVja0xpc3RYAQAAAC10ciUIAABYGAAAAGZvcm1hdHRlci5BYnN0cmFjdFdyaXRlcnImCAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuQWJzdHJhY3RXcml0ZXJYAQAAAC10cicIAABYDAAAAFRpeC5Db21ib0JveHIoCAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQ29tYm9Cb3hYAQAAAC10cikIAABYFwAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFycioIAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5GaWxlQ29va2llSmFyWAEAAAAtdHIrCAAAWBMAAABhc3QuTm9kZVRyYW5zZm9ybWVyciwIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5Ob2RlVHJhbnNmb3JtZXJYAQAAAC10ci0IAABYEQAAAGJ6Mi5CWjJDb21wcmVzc29yci4IAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJDb21wcmVzc29yWAEAAAAtdHIvCAAAWBYAAABTb2NrZXRTZXJ2ZXIuVURQU2VydmVycjAIAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5VRFBTZXJ2ZXJYAQAAAC10cjEIAABYDAAAAHNoZWx2ZS5TaGVsZnIyCAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuU2hlbGZYAQAAAC10cjMIAABYEAAAAHRlbG5ldGxpYi5UZWxuZXRyNAgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldFgBAAAALXRyNQgAAFgRAAAAY3R5cGVzLmNfbG9uZ2xvbmdyNggAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfbG9uZ2xvbmdYAQAAAC10cjcIAABYEAAAAGltcHV0aWwuSW1wb3J0ZXJyOAgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuSW1wb3J0ZXJYAQAAAC10cjkIAABYDgAAAGN0eXBlcy5jX2ludDE2cjoIAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDE2WAEAAAAtdHI7CAAAWBEAAABUaXguRmlsZVNlbGVjdEJveHI8CAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguRmlsZVNlbGVjdEJveFgBAAAALXRyPQgAAFgYAAAAZW1haWwubWltZS50ZXh0Lk1JTUVUZXh0cj4IAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLnRleHQuTUlNRVRleHRYAQAAAC10cj8IAABYHwAAAFNvY2tldFNlcnZlci5UaHJlYWRpbmdVRFBTZXJ2ZXJyQAgAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlRocmVhZGluZ1VEUFNlcnZlclgBAAAALXRyQQgAAFgPAAAAdGFyZmlsZS5UYXJGaWxlckIIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGVYAQAAAC10ckMIAABYFQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZXJECAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlWAEAAAAtdHJFCAAAWAoAAABtc2lsaWIuQ0FCckYIAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5DQUJYAQAAAC10ckcIAABYCQAAAG1tYXAubW1hcHJICAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwWAEAAAAtdHJJCAAAWA0AAABDb29raWUuTW9yc2VsckoIAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWxYAQAAAC10cksIAABYGgAAAHVybGxpYjIuSFRUUEVycm9yUHJvY2Vzc29yckwIAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBFcnJvclByb2Nlc3NvclgBAAAALXRyTQgAAFgpAAAAU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJyTggAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sI1NpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyWAEAAAAtdHJPCAAAWBAAAABqc29uLkpTT05FbmNvZGVyclAIAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05FbmNvZGVyWAEAAAAtdHJRCAAAWBAAAAB1cmxsaWIuVVJMb3BlbmVyclIIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5VUkxvcGVuZXJYAQAAAC10clMIAABYEAAAAHRocmVhZGluZy5UaHJlYWRyVAgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZFgBAAAALXRyVQgAAFgOAAAAcmUuTWF0Y2hPYmplY3RyVggAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdFgBAAAALXRyVwgAAFgdAAAAQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXJyWAgAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXJYAQAAAC10clkIAABYDAAAAG51bWJlcnMuUmVhbHJaCAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5SZWFsWAEAAAAtdHJbCAAAWBkAAABDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyclwIAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5Db25maWdQYXJzZXJYAQAAAC10cl0IAABYFwAAAGZvcm1hdHRlci5OdWxsRm9ybWF0dGVycl4IAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5OdWxsRm9ybWF0dGVyWAEAAAAtdHJfCAAAWA8AAABjdHlwZXMuX0Z1bmNQdHJyYAgAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9GdW5jUHRyWAEAAAAtdHJhCAAAWA0AAAB0dXJ0bGUuU2NyZWVucmIIAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5TY3JlZW5YAQAAAC10cmMIAABYFgAAAG1haWxib3guTWFpbGRpck1lc3NhZ2VyZAgAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2VYAQAAAC10cmUIAABYIwAAAENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVycmYIAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaWh0dHBzZXJ2ZXIuaHRtbCNDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlclgBAAAALXRyZwgAAFgTAAAAcGtndXRpbC5JbXBJbXBvcnRlcnJoCAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5JbXBJbXBvcnRlclgBAAAALXRyaQgAAFgZAAAAY29kZWNzLkluY3JlbWVudGFsRW5jb2RlcnJqCAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyWAEAAAAtdHJrCAAAWBQAAABwcHJpbnQuUHJldHR5UHJpbnRlcnJsCAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlclgBAAAALXRybQgAAFgNAAAAVGl4LklucHV0T25seXJuCAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguSW5wdXRPbmx5WAEAAAAtdHJvCAAAWBQAAAB1cmxwYXJzZS5TcGxpdFJlc3VsdHJwCAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLlNwbGl0UmVzdWx0WAEAAAAtdHJxCAAAWBMAAAByYW5kb20uU3lzdGVtUmFuZG9tcnIIAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5TeXN0ZW1SYW5kb21YAQAAAC10cnMIAABYDAAAAGN0eXBlcy5BcnJheXJ0CAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJyYXlYAQAAAC10cnUIAABYHQAAAFNvY2tldFNlcnZlci5Vbml4U3RyZWFtU2VydmVycnYIAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5Vbml4U3RyZWFtU2VydmVyWAEAAAAtdHJ3CAAAWBMAAABjb29raWVsaWIuQ29va2llSmFycngIAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXJYAQAAAC10cnkIAABYBQAAAGZsb2F0cnoIAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Zsb2F0WAEAAAAtdHJ7CAAAWBoAAABtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbnJ8CAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvblgBAAAALXRyfQgAAFgVAAAAdHVydGxlLlNjcm9sbGVkQ2FudmFzcn4IAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5TY3JvbGxlZENhbnZhc1gBAAAALXRyfwgAAFgIAAAAVGl4LkZvcm1ygAgAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkZvcm1YAQAAAC10coEIAABYEAAAAG51bWJlcnMuSW50ZWdyYWxygggAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuSW50ZWdyYWxYAQAAAC10coMIAABYMgAAAG11bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlcoQIAAAoanMFAABqdAUAAFhpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlWAEAAAAtdHKFCAAAWBsAAAB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnlyhggAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeVgBAAAALXRyhwgAAFgVAAAAemlwaW1wb3J0LnppcGltcG9ydGVycogIAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlclgBAAAALXRyiQgAAFgZAAAAbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlcnKKCAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyWAEAAAAtdHKLCAAAWBAAAABwaWNrbGUuVW5waWNrbGVycowIAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5VbnBpY2tsZXJYAQAAAC10co0IAABYFgAAAGNvbGxlY3Rpb25zLk11dGFibGVTZXRyjggAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlU2V0WAEAAAAtdHKPCAAAWAsAAABhcnJheS5hcnJheXKQCAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5WAEAAAAtdHKRCAAAWCcAAAB1cmxsaWIyLkhUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG1ykggAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbVgBAAAALXRykwgAAFgZAAAAbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbnKUCAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uWAEAAAAtdHKVCAAAWA4AAABUaXguTGFiZWxGcmFtZXKWCAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguTGFiZWxGcmFtZVgBAAAALXRylwgAAFgXAAAAeG1sLmRvbS5wdWxsZG9tLlNBWDJET01ymAgAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLlNBWDJET01YAQAAAC10cpkIAABYDwAAAHNjaGVkLnNjaGVkdWxlcnKaCAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlclgBAAAALXRymwgAAFgbAAAAdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVycpwIAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXJYAQAAAC10cp0IAABYHgAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlcnKeCAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXJYAQAAAC10cp8IAABYEwAAAGRvY3Rlc3QuRGVidWdSdW5uZXJyoAgAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRGVidWdSdW5uZXJYAQAAAC10cqEIAABYCwAAAGJ6Mi5CWjJGaWxlcqIIAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlWAEAAAAtdHKjCAAAWBUAAABkb2N0ZXN0Lk91dHB1dENoZWNrZXJypAgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuT3V0cHV0Q2hlY2tlclgBAAAALXRypQgAAFgQAAAAbXNpbGliLkRpcmVjdG9yeXKmCAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlyZWN0b3J5WAEAAAAtdHKnCAAAWAsAAABUaXguQ29udHJvbHKoCAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQ29udHJvbFgBAAAALXRyqQgAAFgXAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NyqggAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NYAQAAAC10cqsIAABYEgAAAGh0bWxsaWIuSFRNTFBhcnNlcnKsCAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyWAEAAAAtdHKtCAAAWBMAAABlbWFpbC5wYXJzZXIuUGFyc2Vycq4IAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5QYXJzZXJYAQAAAC10cq8IAABYDQAAAHhkcmxpYi5QYWNrZXJysAgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlclgBAAAALXRysQgAAFgTAAAAY3R5cGVzLl9TaW1wbGVDRGF0YXKyCAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1NpbXBsZUNEYXRhWAEAAAAtdHKzCAAAWBQAAABmb3JtYXR0ZXIuRHVtYldyaXRlcnK0CAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuRHVtYldyaXRlclgBAAAALXRytQgAAFgTAAAAeG1scnBjbGliLk11bHRpQ2FsbHK2CAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuTXVsdGlDYWxsWAEAAAAtdHK3CAAAWBsAAABtYWlsYm94LlBvcnRhYmxlVW5peE1haWxib3hyuAgAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guUG9ydGFibGVVbml4TWFpbGJveFgBAAAALXRyuQgAAFgdAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXJyuggAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlclgBAAAALXRyuwgAAFgNAAAAY3R5cGVzLmNfYm9vbHK8CAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19ib29sWAEAAAAtdHK9CAAAWBAAAABkaWZmbGliLkh0bWxEaWZmcr4IAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLkh0bWxEaWZmWAEAAAAtdHK/CAAAWBEAAABVc2VyRGljdC5Vc2VyRGljdHLACAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJEaWN0LlVzZXJEaWN0WAEAAAAtdHLBCAAAWB8AAABEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVycsIIAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI0RvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXJYAQAAAC10csMIAABYEwAAAGNvbGxlY3Rpb25zLk1hcHBpbmdyxAgAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NYXBwaW5nWAEAAAAtdHLFCAAAWAcAAABiZGIuQmRicsYIAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGJYAQAAAC10cscIAABYDwAAAGRlY2ltYWwuUm91bmRlZHLICAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Sb3VuZGVkWAEAAAAtdHLJCAAAWCQAAABhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXJyyggAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXJYAQAAAC10cssIAABYDAAAAG1haWxib3gubWJveHLMCAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94WAEAAAAtdHLNCAAAWBMAAABtYWlsYm94Lk1NREZNZXNzYWdlcs4IAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlWAEAAAAtdHLPCAAAWA4AAABjdHlwZXMuY19zaG9ydHLQCAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19zaG9ydFgBAAAALXRy0QgAAFgoAAAAd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlcnLSCAAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlclgBAAAALXRy0wgAAFgVAAAAdHJhY2UuQ292ZXJhZ2VSZXN1bHRzctQIAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuQ292ZXJhZ2VSZXN1bHRzWAEAAAAtdHLVCAAAWBMAAABtaW1ldHlwZXMuTWltZVR5cGVzctYIAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXNYAQAAAC10ctcIAABYEAAAAFRpeC5TdGRCdXR0b25Cb3hy2AgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LlN0ZEJ1dHRvbkJveFgBAAAALXRy2QgAAFgWAAAAc2hlbHZlLkRiZmlsZW5hbWVTaGVsZnLaCAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuRGJmaWxlbmFtZVNoZWxmWAEAAAAtdHLbCAAAWBcAAAB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcnLcCAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRleHRUZXN0UnVubmVyWAEAAAAtdHLdCAAAWA4AAABwaXBlcy5UZW1wbGF0ZXLeCAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlWAEAAAAtdHLfCAAAWA8AAABkZWNpbWFsLkRlY2ltYWxy4AgAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbFgBAAAALXRy4QgAAFgPAAAAYXJncGFyc2UuQWN0aW9ucuIIAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQWN0aW9uWAEAAAAtdHLjCAAAWBcAAAB4bWwuZG9tLnB1bGxkb20uUHVsbERPTXLkCAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uUHVsbERPTVgBAAAALXRy5QgAAFgdAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRy5ggAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRYAQAAAC10cucIAABYCQAAAFRpeC5NZXRlcnLoCAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguTWV0ZXJYAQAAAC10cukIAABYHQAAAHRlc3Quc3VwcG9ydC5XYXJuaW5nc1JlY29yZGVycuoIAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuV2FybmluZ3NSZWNvcmRlclgBAAAALXRy6wgAAFgTAAAAcmFuZG9tLldpY2htYW5uSGlsbHLsCAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uV2ljaG1hbm5IaWxsWAEAAAAtdHLtCAAAWB0AAAB4bWwuc2F4LnNheHV0aWxzLlhNTEdlbmVyYXRvcnLuCAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3JYAQAAAC10cu8IAABYFQAAAGltcHV0aWwuSW1wb3J0TWFuYWdlcnLwCAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5JbXBvcnRNYW5hZ2VyWAEAAAAtdHLxCAAAWA4AAABzeW10YWJsZS5DbGFzc3LyCAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkNsYXNzWAEAAAAtdHLzCAAAWBQAAABpbWFwbGliLklNQVA0X3N0cmVhbXL0CAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNF9zdHJlYW1YAQAAAC10cvUIAABYGQAAAFNvY2tldFNlcnZlci5Gb3JraW5nTWl4SW5y9ggAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkZvcmtpbmdNaXhJblgBAAAALXRy9wgAAFgRAAAAY29sbGVjdGlvbnMuZGVxdWVy+AgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZVgBAAAALXRy+QgAAFgUAAAAY29sbGVjdGlvbnMuSGFzaGFibGVy+ggAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5IYXNoYWJsZVgBAAAALXRy+wgAAFgLAAAAc3FsaXRlMy5Sb3dy/AgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUm93WAEAAAAtdHL9CAAAWBYAAABzdWJwcm9jZXNzLlNUQVJUVVBJTkZPcv4IAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPWAEAAAAtdHL/CAAAWBcAAABjb2RlLkludGVyYWN0aXZlQ29uc29sZXIACQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVYAQAAAC10cgEJAABYGwAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlcnICCQAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlclgBAAAALXRyAwkAAFgUAAAAY29sbGVjdGlvbnMuS2V5c1ZpZXdyBAkAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5LZXlzVmlld1gBAAAALXRyBQkAAFgXAAAAY29sbGVjdGlvbnMuTWFwcGluZ1ZpZXdyBgkAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NYXBwaW5nVmlld1gBAAAALXRyBwkAAFgSAAAAYWV0eXBlcy5TdHlsZWRUZXh0cggJAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLlN0eWxlZFRleHRYAQAAAC10cgkJAABYEAAAAGNvb2tpZWxpYi5Db29raWVyCgkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVgBAAAALXRyCwkAAFgdAAAAdXJsbGliMi5IVFRQRGlnZXN0QXV0aEhhbmRsZXJyDAkAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUERpZ2VzdEF1dGhIYW5kbGVyWAEAAAAtdHINCQAAWCAAAAB0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZHIOCQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmRYAQAAAC10cg8JAABYEQAAAGFldHlwZXMuTlByb3BlcnR5chAJAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLk5Qcm9wZXJ0eVgBAAAALXRyEQkAAFgTAAAAdXJsbGliMi5GaWxlSGFuZGxlcnISCQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5GaWxlSGFuZGxlclgBAAAALXRyEwkAAFgtAAAAU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVychQJAAAoanMFAABqdAUAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlclgBAAAALXRyFQkAAFgZAAAAY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlcnIWCQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyWAEAAAAtdHIXCQAAWA8AAABwcm9maWxlLlByb2ZpbGVyGAkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZVgBAAAALXRyGQkAAFgPAAAAaG90c2hvdC5Qcm9maWxlchoJAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNob3RzaG90LlByb2ZpbGVYAQAAAC10chsJAABYEAAAAHN0cmluZy5Gb3JtYXR0ZXJyHAkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlclgBAAAALXRyHQkAAFgZAAAAQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcnIeCQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXJYAQAAAC10ch8JAABYDwAAAG51bWJlcnMuQ29tcGxleHIgCQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5Db21wbGV4WAEAAAAtdHIhCQAAWBQAAABCYXN0aW9uLkJhc3Rpb25DbGFzc3IiCQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXN0aW9uLmh0bWwjQmFzdGlvbi5CYXN0aW9uQ2xhc3NYAQAAAC10ciMJAABYIwAAAGxvZ2dpbmcuaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyciQJAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlclgBAAAALXRyJQkAAFgMAAAAc210cGxpYi5MTVRQciYJAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLkxNVFBYAQAAAC10cicJAABYGwAAAHVybGxpYjIuSFRUUENvb2tpZVByb2Nlc3NvcnIoCQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQQ29va2llUHJvY2Vzc29yWAEAAAAtdHIpCQAAWB8AAABTb2NrZXRTZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVycioJAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXJYAQAAAC10cisJAABYHQAAAGFyZ3BhcnNlLlJhd1RleHRIZWxwRm9ybWF0dGVyciwJAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXJYAQAAAC10ci0JAABYEgAAAFVzZXJEaWN0LkRpY3RNaXhpbnIuCQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJEaWN0LkRpY3RNaXhpblgBAAAALXRyLwkAAFgLAAAAY3R5cGVzLkNETExyMAkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkNETExYAQAAAC10cjEJAABYIwAAAFNvY2tldFNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVycjIJAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyWAEAAAAtdHIzCQAAWCAAAABlbWFpbC5nZW5lcmF0b3IuRGVjb2RlZEdlbmVyYXRvcnI0CQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuRGVjb2RlZEdlbmVyYXRvclgBAAAALXRyNQkAAFgTAAAAVGl4LkV4RmlsZVNlbGVjdEJveHI2CQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguRXhGaWxlU2VsZWN0Qm94WAEAAAAtdHI3CQAAWB4AAAB4bWwuc2F4LnNheHV0aWxzLlhNTEZpbHRlckJhc2VyOAkAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuWE1MRmlsdGVyQmFzZVgBAAAALXRyOQkAAFgVAAAAY29sbGVjdGlvbnMuQ29udGFpbmVycjoJAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ29udGFpbmVyWAEAAAAtdHI7CQAAWA0AAABjdHlwZXMuY191aW50cjwJAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnRYAQAAAC10cj0JAABYHAAAAGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXJyPgkAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXJYAQAAAC10cj8JAABYFwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyckAJAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyWAEAAAAtdHJBCQAAWBwAAABsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyckIJAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyWAEAAAAtdHJDCQAAWCoAAABEb2NYTUxSUENTZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXJyRAkAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyWAEAAAAtdHJFCQAAWAkAAABUaXguSExpc3RyRgkAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkhMaXN0WAEAAAAtdHJHCQAAWCIAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0ckgJAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdFgBAAAALXRySQkAAFgQAAAAaW1wLk51bGxJbXBvcnRlcnJKCQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuTnVsbEltcG9ydGVyWAEAAAAtdHJLCQAAWA0AAABpbWFwbGliLklNQVA0ckwJAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0WAEAAAAtdHJNCQAAWBsAAABkaXN0dXRpbHMuY29yZS5EaXN0cmlidXRpb25yTgkAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29yZS5EaXN0cmlidXRpb25YAQAAAC10ck8JAABYEQAAAGxvZ2dpbmcuRm9ybWF0dGVyclAJAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlclgBAAAALXRyUQkAAFgHAAAAY29tcGxleHJSCQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjb21wbGV4WAEAAAAtdHJTCQAAWBEAAABtaW1ldG9vbHMuTWVzc2FnZXJUCQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZVgBAAAALXRyVQkAAFgOAAAAc3FsaXRlMy5DdXJzb3JyVgkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yWAEAAAAtdHJXCQAAWAkAAAB1dWlkLlVVSURyWAkAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRFgBAAAALXRyWQkAAFgTAAAAY29kZWNzLlN0cmVhbVdyaXRlcnJaCQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtV3JpdGVyWAEAAAAtdHJbCQAAWA0AAABhZXR5cGVzLlJhbmdlclwJAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLlJhbmdlWAEAAAAtdHJdCQAAWBEAAABzZXRzLkltbXV0YWJsZVNldHJeCQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0cy5JbW11dGFibGVTZXRYAQAAAC10cl8JAABYFAAAAE1pbmlBRUZyYW1lLkFFU2VydmVycmAJAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWwjTWluaUFFRnJhbWUuQUVTZXJ2ZXJYAQAAAC10cmEJAABYFwAAAGVtYWlsLnBhcnNlci5GZWVkUGFyc2VycmIJAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5GZWVkUGFyc2VyWAEAAAAtdHJjCQAAWBMAAABtYWlsYm94LlVuaXhNYWlsYm94cmQJAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LlVuaXhNYWlsYm94WAEAAAAtdHJlCQAAWCoAAABTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXJyZgkAAChqcwUAAGp0BQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyWAEAAAAtdHJnCQAAWBkAAAB4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9ycmgJAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvclgBAAAALXRyaQkAAFgQAAAAY3R5cGVzLlN0cnVjdHVyZXJqCQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJlWAEAAAAtdHJrCQAAWA0AAABpby5UZXh0SU9CYXNlcmwJAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZVgBAAAALXRybQkAAFgdAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2VybgkAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZVgBAAAALXRybwkAAFgfAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlcnJwCQAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyWAEAAAAtdHJxCQAAWAsAAABUaXguQmFsbG9vbnJyCQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQmFsbG9vblgBAAAALXRycwkAAFgNAAAAbXNpbGliLkJpbmFyeXJ0CQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQmluYXJ5WAEAAAAtdHJ1CQAAWBQAAABzeW10YWJsZS5TeW1ib2xUYWJsZXJ2CQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlWAEAAAAtdHJ3CQAAWAwAAABjdHlwZXMuVW5pb25yeAkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlVuaW9uWAEAAAAtdHJ5CQAAWBYAAABjb2xsZWN0aW9ucy5WYWx1ZXNWaWV3cnoJAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuVmFsdWVzVmlld1gBAAAALXRyewkAAFgWAAAAZGVjaW1hbC5EZWZhdWx0Q29udGV4dHJ8CQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWZhdWx0Q29udGV4dFgBAAAALXRyfQkAAFgYAAAAZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9ucn4JAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb25YAQAAAC10cn8JAABYBgAAAG9iamVjdHKACQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvYmplY3RYAQAAAC10coEJAABYEwAAAHRocmVhZGluZy5TZW1hcGhvcmVyggkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlNlbWFwaG9yZVgBAAAALXRygwkAAFgJAAAAVGl4LlRMaXN0coQJAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5UTGlzdFgBAAAALXRyhQkAAFgbAAAAY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVycoYJAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXJYAQAAAC10cocJAABYGAAAAGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbnKICQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uWAEAAAAtdHKJCQAAWAwAAABjdHlwZXMuUHlETExyigkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlB5RExMWAEAAAAtdHKLCQAAWBEAAABkZWNpbWFsLlN1Ym5vcm1hbHKMCQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5TdWJub3JtYWxYAQAAAC10co0JAABYHQAAAGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kco4JAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlcl93aXRoX3NlbmRYAQAAAC10co8JAABYGQAAAG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmVykAkAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZVgBAAAALXRykQkAAFgdAAAAU29ja2V0U2VydmVyLkZvcmtpbmdUQ1BTZXJ2ZXJykgkAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkZvcmtpbmdUQ1BTZXJ2ZXJYAQAAAC10cpMJAABYCwAAAHdlYWtyZWYucmVmcpQJAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLnJlZlgBAAAALXRylQkAAFgHAAAAY21kLkNtZHKWCQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kWAEAAAAtdHKXCQAAWA8AAAB4ZHJsaWIuVW5wYWNrZXJymAkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyWAEAAAAtdHKZCQAAWA8AAABkZWNpbWFsLkNsYW1wZWRymgkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ2xhbXBlZFgBAAAALXRymwkAAFgRAAAAbWFpbGJveC5NSE1haWxib3hynAkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUhNYWlsYm94WAEAAAAtdHKdCQAAWBkAAABjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVycp4JAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbERlY29kZXJYAQAAAC10cp8JAABYDwAAAHBvcGxpYi5QT1AzX1NTTHKgCQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QM19TU0xYAQAAAC10cqEJAABYDgAAAGxvZ2dpbmcuRmlsdGVycqIJAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZpbHRlclgBAAAALXRyowkAAFgEAAAAbG9uZ3KkCQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNsb25nWAEAAAAtdHKlCQAAWBcAAABhZXR5cGVzLkludGxXcml0aW5nQ29kZXKmCQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5JbnRsV3JpdGluZ0NvZGVYAQAAAC10cqcJAABYDwAAAHR0ay5Qcm9ncmVzc2JhcnKoCQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuUHJvZ3Jlc3NiYXJYAQAAAC10cqkJAABYEgAAAHNtdHBkLk1haWxtYW5Qcm94eXKqCQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLk1haWxtYW5Qcm94eVgBAAAALXRyqwkAAFgkAAAAbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVycqwJAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXJYAQAAAC10cq0JAABYEQAAAGFyZ3BhcnNlLkZpbGVUeXBlcq4JAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuRmlsZVR5cGVYAQAAAC10cq8JAABYJgAAAGFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVycrAJAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXJYAQAAAC10crEJAABYHgAAAHVybGxpYjIuUHJveHlEaWdlc3RBdXRoSGFuZGxlcnKyCQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyWAEAAAAtdHKzCQAAWBUAAABsb2dnaW5nLkxvZ2dlckFkYXB0ZXJytAkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyQWRhcHRlclgBAAAALXRytQkAAFgKAAAAbWVtb3J5dmlld3K2CQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXdYAQAAAC10crcJAABYGgAAAGVtYWlsLm1pbWUuaW1hZ2UuTUlNRUltYWdlcrgJAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLmltYWdlLk1JTUVJbWFnZVgBAAAALXRyuQkAAFgPAAAAY3R5cGVzLmNfdWludDMycroJAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnQzMlgBAAAALXRyuwkAAFgXAAAAeG1scnBjbGliLlByb3RvY29sRXJyb3JyvAkAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlByb3RvY29sRXJyb3JYAQAAAC10cr0JAABYDAAAAG5udHBsaWIuTk5UUHK+CQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQWAEAAAAtdHK/CQAAWA8AAAB4bWxycGNsaWIuRmF1bHRywAkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkZhdWx0WAEAAAAtdHLBCQAAWCAAAAB1cmxsaWIyLkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlcnLCCQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXJYAQAAAC10csMJAABYEwAAAHVuaXR0ZXN0LlRlc3RSZXN1bHRyxAkAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0WAEAAAAtdHLFCQAAWAsAAAB0cmFjZS5UcmFjZXLGCQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlWAEAAAAtdHLHCQAAWBMAAABDb29raWUuU2VyaWFsQ29va2llcsgJAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5TZXJpYWxDb29raWVYAQAAAC10cskJAABYGwAAAGNhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhcnLKCQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhclgBAAAALXRyywkAAFgPAAAAZGVjaW1hbC5Db250ZXh0cswJAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHRYAQAAAC10cs0JAABYHAAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXJyzgkAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlclgBAAAALXRyzwkAAFgQAAAAc3VicHJvY2Vzcy5Qb3BlbnLQCQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3BlblgBAAAALXRy0QkAAFgYAAAAYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyctIJAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyWAEAAAAtdHLTCQAAWA8AAAB6aXBmaWxlLlppcEZpbGVy1AkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZVgBAAAALXRy1QkAAFgXAAAAY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Ry1gkAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdFgBAAAALXRy1wkAAFgPAAAAY3R5cGVzLmNfY2hhcl9wctgJAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2NoYXJfcFgBAAAALXRy2QkAAFgVAAAAdGFyZmlsZS5UYXJGaWxlQ29tcGF0ctoJAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGVDb21wYXRYAQAAAC10ctsJAABYFQAAAG9wdHBhcnNlLk9wdGlvblBhcnNlcnLcCQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlclgBAAAALXRy3QkAAFgTAAAAbG9nZ2luZy5GaWxlSGFuZGxlcnLeCQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5GaWxlSGFuZGxlclgBAAAALXRy3wkAAFgOAAAAVGl4LkxhYmVsRW50cnly4AkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkxhYmVsRW50cnlYAQAAAC10cuEJAABYIAAAAGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVycuIJAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlclgBAAAALXRy4wkAAFgTAAAAY3R5cGVzLmNfbG9uZ2RvdWJsZXLkCQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19sb25nZG91YmxlWAEAAAAtdHLlCQAAdVgJAAAAcHk6bWV0aG9kfXLmCQAAKFgdAAAAY2FsZW5kYXIuVGV4dENhbGVuZGFyLnBybW9udGhy5wkAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXIucHJtb250aFgBAAAALXRy6AkAAFgcAAAAZGVjaW1hbC5Db250ZXh0LmlzX2Nhbm9uaWNhbHLpCQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX2Nhbm9uaWNhbFgBAAAALXRy6gkAAFgUAAAAemlwZmlsZS5aaXBGaWxlLnJlYWRy6wkAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5yZWFkWAEAAAAtdHLsCQAAWBMAAABpbWFwbGliLklNQVA0LmZldGNocu0JAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmZldGNoWAEAAAAtdHLuCQAAWB8AAABNaW1lV3JpdGVyLk1pbWVXcml0ZXIuYWRkaGVhZGVycu8JAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIuYWRkaGVhZGVyWAEAAAAtdHLwCQAAWBsAAABlbWFpbC5oZWFkZXIuSGVhZGVyLl9fc3RyX19y8QkAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5fX3N0cl9fWAEAAAAtdHLyCQAAWBAAAABiZGIuQmRiLnNldF9zdGVwcvMJAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3N0ZXBYAQAAAC10cvQJAABYDgAAAG9iamVjdC5fX2FkZF9fcvUJAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYWRkX19YAQAAAC10cvYJAABYIwAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuZmx1c2hfc29mdHNwYWNlcvcJAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuZmx1c2hfc29mdHNwYWNlWAEAAAAtdHL4CQAAWC0AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuc2h1dGRvd25y+QkAAChqcwUAAGp0BQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnNodXRkb3duWAEAAAAtdHL6CQAAWBUAAABzZWxlY3Qua3F1ZXVlLmNvbnRyb2xy+wkAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZS5jb250cm9sWAEAAAAtdHL8CQAAWBoAAAB1cmxsaWIyLlJlcXVlc3QuZ2V0X2hlYWRlcnL9CQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF9oZWFkZXJYAQAAAC10cv4JAABYEQAAAHBvcGxpYi5QT1AzLnBhc3Nfcv8JAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnBhc3NfWAEAAAAtdHIACgAAWC0AAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5hbGxvd2VkX2RvbWFpbnNyAQoAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuYWxsb3dlZF9kb21haW5zWAEAAAAtdHICCgAAWCMAAABjb29raWVsaWIuQ29va2llSmFyLmV4dHJhY3RfY29va2llc3IDCgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLmV4dHJhY3RfY29va2llc1gBAAAALXRyBAoAAFgdAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkbGluZXNyBQoAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkbGluZXNYAQAAAC10cgYKAABYFAAAAGltYXBsaWIuSU1BUDQudGhyZWFkcgcKAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnRocmVhZFgBAAAALXRyCAoAAFgeAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9kYXRhcgkKAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfZGF0YVgBAAAALXRyCgoAAFgQAAAAb2JqZWN0Ll9fZW50ZXJfX3ILCgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2VudGVyX19YAQAAAC10cgwKAABYFQAAAGZ0cGxpYi5GVFAuZ2V0d2VsY29tZXINCgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmdldHdlbGNvbWVYAQAAAC10cg4KAABYFQAAAGlvLlJhd0lPQmFzZS5yZWFkaW50b3IPCgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZS5yZWFkaW50b1gBAAAALXRyEAoAAFgQAAAAYWlmYy5haWZjLnNldHBvc3IRCgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldHBvc1gBAAAALXRyEgoAAFgWAAAAYWlmYy5haWZjLnNldGZyYW1lcmF0ZXITCgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldGZyYW1lcmF0ZVgBAAAALXRyFAoAAFguAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkF0dGxpc3REZWNsSGFuZGxlcnIVCgAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkF0dGxpc3REZWNsSGFuZGxlclgBAAAALXRyFgoAAFgZAAAAdHVydGxlLlNoYXBlLmFkZGNvbXBvbmVudHIXCgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2hhcGUuYWRkY29tcG9uZW50WAEAAAAtdHIYCgAAWBcAAABob3RzaG90LlByb2ZpbGUucnVuY2FsbHIZCgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnJ1bmNhbGxYAQAAAC10choKAABYEQAAAGZsLmZvcm0uYWRkX2lucHV0chsKAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfaW5wdXRYAQAAAC10chwKAABYIgAAAGRpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUuY2xvc2VyHQoAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLmNsb3NlWAEAAAAtdHIeCgAAWA8AAABiZGIuQmRiLnJ1bmV2YWxyHwoAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW5ldmFsWAEAAAAtdHIgCgAAWB8AAABtYWlsYm94Lk1NREZNZXNzYWdlLnJlbW92ZV9mbGFnciEKAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLnJlbW92ZV9mbGFnWAEAAAAtdHIiCgAAWBoAAABsb2dnaW5nLk51bGxIYW5kbGVyLmhhbmRsZXIjCgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5OdWxsSGFuZGxlci5oYW5kbGVYAQAAAC10ciQKAABYFQAAAG1haWxib3gubWJveC5nZXRfZmlsZXIlCgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94LmdldF9maWxlWAEAAAAtdHImCgAAWBMAAABvYmplY3QuX19ydHJ1ZWRpdl9fcicKAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcnRydWVkaXZfX1gBAAAALXRyKAoAAFgUAAAAaW1hcGxpYi5JTUFQNC5zdGF0dXNyKQoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc3RhdHVzWAEAAAAtdHIqCgAAWBIAAABjaHVuay5DaHVuay5pc2F0dHlyKwoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5pc2F0dHlYAQAAAC10ciwKAABYFwAAAGxvZ2dpbmcuTG9nZ2VyLnNldExldmVsci0KAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5zZXRMZXZlbFgBAAAALXRyLgoAAFgNAAAAZmlsZS5yZWFkbGluZXIvCgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUucmVhZGxpbmVYAQAAAC10cjAKAABYHQAAAGNvZGVjcy5TdHJlYW1SZWFkZXIucmVhZGxpbmVzcjEKAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXIucmVhZGxpbmVzWAEAAAAtdHIyCgAAWBsAAABmb3JtYXR0ZXIud3JpdGVyLm5ld19tYXJnaW5yMwoAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5uZXdfbWFyZ2luWAEAAAAtdHI0CgAAWBsAAABGcmFtZVdvcmsuQXBwbGljYXRpb24uX3F1aXRyNQoAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLl9xdWl0WAEAAAAtdHI2CgAAWBUAAAB0dGsuTm90ZWJvb2suaWRlbnRpZnlyNwoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLmlkZW50aWZ5WAEAAAAtdHI4CgAAWCcAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuZ2V0X3N0YXJ0dGFnX3RleHRyOQoAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5nZXRfc3RhcnR0YWdfdGV4dFgBAAAALXRyOgoAAFgJAAAAc3RyLmluZGV4cjsKAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmluZGV4WAEAAAAtdHI8CgAAWA4AAABzdHIuc3RhcnRzd2l0aHI9CgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zdGFydHN3aXRoWAEAAAAtdHI+CgAAWB8AAABjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5wb3BpdGVtcj8KAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuT3JkZXJlZERpY3QucG9waXRlbVgBAAAALXRyQAoAAFgjAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LmhlYWRlcl9lbmNvZGVyQQoAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5oZWFkZXJfZW5jb2RlWAEAAAAtdHJCCgAAWBoAAABlbWFpbC5oZWFkZXIuSGVhZGVyLmVuY29kZXJDCgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLmVuY29kZVgBAAAALXRyRAoAAFgTAAAAbXNpbGliLlZpZXcuRXhlY3V0ZXJFCgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5FeGVjdXRlWAEAAAAtdHJGCgAAWBsAAABzdW5hdS5BVV93cml0ZS5zZXRmcmFtZXJhdGVyRwoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRmcmFtZXJhdGVYAQAAAC10ckgKAABYGQAAAGJzZGRiLmJzZGRib2JqZWN0Lmhhc19rZXlySQoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5oYXNfa2V5WAEAAAAtdHJKCgAAWCEAAAB1bml0dGVzdC5UZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWxySwoAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWxYAQAAAC10ckwKAABYIQAAAHNnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfY29tbWVudHJNCgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9jb21tZW50WAEAAAAtdHJOCgAAWBkAAABsb2dnaW5nLkZpbGVIYW5kbGVyLmNsb3Nlck8KAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLkZpbGVIYW5kbGVyLmNsb3NlWAEAAAAtdHJQCgAAWCoAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXByUQoAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXBYAQAAAC10clIKAABYIQAAAHhtbC5kb20uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGVOU3JTCgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TWAEAAAAtdHJUCgAAWBQAAABkZWNpbWFsLkNvbnRleHQubG9nYnJVCgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmxvZ2JYAQAAAC10clYKAABYGQAAAHR0ay5UcmVldmlldy5nZXRfY2hpbGRyZW5yVwoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmdldF9jaGlsZHJlblgBAAAALXRyWAoAAFgRAAAAbm50cGxpYi5OTlRQLmxpc3RyWQoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5saXN0WAEAAAAtdHJaCgAAWCQAAABsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuY2xvc2VyWwoAAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5jbG9zZVgBAAAALXRyXAoAAFgyAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2VyXQoAAChqcwUAAGp0BQAAWGkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2VYAQAAAC10cl4KAABYEgAAAGN1cnNlcy53aW5kb3cuYmtnZHJfCgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJrZ2RYAQAAAC10cmAKAABYLwAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmFwcGx5cmEKAAAoanMFAABqdAUAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmFwcGx5WAEAAAAtdHJiCgAAWBkAAABmb3JtYXR0ZXIud3JpdGVyLm5ld19mb250cmMKAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIubmV3X2ZvbnRYAQAAAC10cmQKAABYMwAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X3N0ZGVycnJlCgAAKGpzBQAAanQFAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlci5nZXRfc3RkZXJyWAEAAAAtdHJmCgAAWBIAAABpbWFwbGliLklNQVA0LnJlYWRyZwoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVhZFgBAAAALXRyaAoAAFgJAAAAc3RyLmxqdXN0cmkKAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmxqdXN0WAEAAAAtdHJqCgAAWBQAAAByZS5NYXRjaE9iamVjdC5zdGFydHJrCgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LnN0YXJ0WAEAAAAtdHJsCgAAWBUAAABsb2dnaW5nLkxvZ2dlci5oYW5kbGVybQoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmhhbmRsZVgBAAAALXRybgoAAFgVAAAAY3Vyc2VzLndpbmRvdy5sZWF2ZW9rcm8KAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cubGVhdmVva1gBAAAALXRycAoAAFgWAAAAbWFpbGJveC5NSC5fX2RlbGl0ZW1fX3JxCgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5fX2RlbGl0ZW1fX1gBAAAALXRycgoAAFgPAAAAaW8uSU9CYXNlLmZsdXNocnMKAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmZsdXNoWAEAAAAtdHJ0CgAAWB4AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNydQoAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNYAQAAAC10cnYKAABYGwAAAGRlY2ltYWwuRGVjaW1hbC5pc19pbmZpbml0ZXJ3CgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX2luZmluaXRlWAEAAAAtdHJ4CgAAWB8AAABNaW1lV3JpdGVyLk1pbWVXcml0ZXIuc3RhcnRib2R5cnkKAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIuc3RhcnRib2R5WAEAAAAtdHJ6CgAAWBYAAABkYXRldGltZS5kYXRldGltZS5kYXRlcnsKAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuZGF0ZVgBAAAALXRyfAoAAFgpAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLmxpc3RyfQoAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLmxpc3RYAQAAAC10cn4KAABYGQAAAG1zaWxpYi5WaWV3LkdldENvbHVtbkluZm9yfwoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlZpZXcuR2V0Q29sdW1uSW5mb1gBAAAALXRygAoAAFgYAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWN2coEKAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWN2WAEAAAAtdHKCCgAAWDUAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5hcHBseV9hc3luY3KDCgAAKGpzBQAAanQFAABYbAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5hcHBseV9hc3luY1gBAAAALXRyhAoAAFgxAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2FsbG93ZWRfZG9tYWluc3KFCgAAKGpzBQAAanQFAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zZXRfYWxsb3dlZF9kb21haW5zWAEAAAAtdHKGCgAAWCEAAABtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5maWxlbm9yhwoAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24uZmlsZW5vWAEAAAAtdHKICgAAWBoAAABTdHJpbmdJTy5TdHJpbmdJTy5nZXR2YWx1ZXKJCgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sI1N0cmluZ0lPLlN0cmluZ0lPLmdldHZhbHVlWAEAAAAtdHKKCgAAWB0AAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZhcnJheXKLCgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZhcnJheVgBAAAALXRyjAoAAFgWAAAAc29ja2V0LnNvY2tldC5yZWN2ZnJvbXKNCgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3Zmcm9tWAEAAAAtdHKOCgAAWBQAAABob3RzaG90LlByb2ZpbGUuc3RvcHKPCgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnN0b3BYAQAAAC10cpAKAABYGwAAAHJmYzgyMi5BZGRyZXNzTGlzdC5fX2lzdWJfX3KRCgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuQWRkcmVzc0xpc3QuX19pc3ViX19YAQAAAC10cpIKAABYHgAAAGZvcm1hdHRlci53cml0ZXIuc2VuZF9ob3JfcnVsZXKTCgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLnNlbmRfaG9yX3J1bGVYAQAAAC10cpQKAABYEwAAAGxvZ2dpbmcuTG9nZ2VyLmluZm9ylQoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmluZm9YAQAAAC10cpYKAABYJgAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3N0ZGlucpcKAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmdldF9zdGRpblgBAAAALXRymAoAAFgnAAAAc3FsaXRlMy5Db25uZWN0aW9uLnNldF9wcm9ncmVzc19oYW5kbGVycpkKAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3Byb2dyZXNzX2hhbmRsZXJYAQAAAC10cpoKAABYDAAAAGRpY3QuaGFzX2tleXKbCgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaGFzX2tleVgBAAAALXRynAoAAFgUAAAAbWFpbGJveC5NYWlsZGlyLmxvY2tynQoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5sb2NrWAEAAAAtdHKeCgAAWA0AAABvYmplY3QuX19lcV9fcp8KAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZXFfX1gBAAAALXRyoAoAAFgSAAAAdGhyZWFkLmxvY2subG9ja2VkcqEKAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5sb2NrLmxvY2tlZFgBAAAALXRyogoAAFgQAAAAYnoyLkJaMkZpbGUuc2Vla3KjCgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRmlsZS5zZWVrWAEAAAAtdHKkCgAAWCMAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmZpbGVub3KlCgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuZmlsZW5vWAEAAAAtdHKmCgAAWBoAAAB0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeXKnCgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeVgBAAAALXRyqAoAAFgYAAAAc3VuYXUuQVVfcmVhZC5nZXRtYXJrZXJzcqkKAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRtYXJrZXJzWAEAAAAtdHKqCgAAWB0AAABzdHJpbmcuRm9ybWF0dGVyLmZvcm1hdF9maWVsZHKrCgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmZvcm1hdF9maWVsZFgBAAAALXRyrAoAAFgXAAAAY29sbGVjdGlvbnMuZGVxdWUuY291bnRyrQoAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5jb3VudFgBAAAALXRyrgoAAFgXAAAAZGVjaW1hbC5Db250ZXh0Lm1heF9tYWdyrwoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tYXhfbWFnWAEAAAAtdHKwCgAAWBMAAABvYmplY3QuX19yZXZlcnNlZF9fcrEKAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmV2ZXJzZWRfX1gBAAAALXRysgoAAFgcAAAAdGVsbmV0bGliLlRlbG5ldC5tdF9pbnRlcmFjdHKzCgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0Lm10X2ludGVyYWN0WAEAAAAtdHK0CgAAWBUAAABmbC5mb3JtLnVuZnJlZXplX2Zvcm1ytQoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLnVuZnJlZXplX2Zvcm1YAQAAAC10crYKAABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYm91bmRhcnlytwoAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYm91bmRhcnlYAQAAAC10crgKAABYFgAAAG1haWxib3guTWFpbGJveC52YWx1ZXNyuQoAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC52YWx1ZXNYAQAAAC10croKAABYEgAAAG1zaWxpYi5WaWV3Lk1vZGlmeXK7CgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5Nb2RpZnlYAQAAAC10crwKAABYEwAAAG1haWxib3guTWFpbGJveC5wb3ByvQoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5wb3BYAQAAAC10cr4KAABYHgAAAENvb2tpZS5CYXNlQ29va2llLnZhbHVlX2RlY29kZXK/CgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuQmFzZUNvb2tpZS52YWx1ZV9kZWNvZGVYAQAAAC10csAKAABYFQAAAGFpZmMuYWlmYy5nZXRjb21wdHlwZXLBCgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldGNvbXB0eXBlWAEAAAAtdHLCCgAAWCAAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuZ2V0dGV4dHLDCgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmdldHRleHRYAQAAAC10csQKAABYFgAAAG5udHBsaWIuTk5UUC5uZXdncm91cHNyxQoAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5uZXdncm91cHNYAQAAAC10csYKAABYEAAAAHR0ay5TdHlsZS5sb29rdXByxwoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLmxvb2t1cFgBAAAALXRyyAoAAFgmAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X3R5cGVyyQoAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF90eXBlWAEAAAAtdHLKCgAAWBYAAABpby5CdWZmZXJlZElPQmFzZS5yZWFkcssKAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2UucmVhZFgBAAAALXRyzAoAAFggAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5wdXRoZWFkZXJyzQoAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24ucHV0aGVhZGVyWAEAAAAtdHLOCgAAWBkAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0cs8KAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXRYAQAAAC10ctAKAABYKAAAAE1pbWVXcml0ZXIuTWltZVdyaXRlci5zdGFydG11bHRpcGFydGJvZHly0QoAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI01pbWVXcml0ZXIuTWltZVdyaXRlci5zdGFydG11bHRpcGFydGJvZHlYAQAAAC10ctIKAABYJwAAAGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIuZ2V0U3ViamVjdHLTCgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlci5nZXRTdWJqZWN0WAEAAAAtdHLUCgAAWBcAAABjdXJzZXMucGFuZWwuUGFuZWwuc2hvd3LVCgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuc2hvd1gBAAAALXRy1goAAFgPAAAAY21kLkNtZC5wb3N0Y21kctcKAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucG9zdGNtZFgBAAAALXRy2AoAAFgnAAAAZG9jdGVzdC5PdXRwdXRDaGVja2VyLm91dHB1dF9kaWZmZXJlbmNlctkKAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0Lk91dHB1dENoZWNrZXIub3V0cHV0X2RpZmZlcmVuY2VYAQAAAC10ctoKAABYFAAAAGFycmF5LmFycmF5LnRvc3RyaW5nctsKAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9zdHJpbmdYAQAAAC10ctwKAABYHgAAAGRlY2ltYWwuQ29udGV4dC5yZW1haW5kZXJfbmVhcnLdCgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlcl9uZWFyWAEAAAAtdHLeCgAAWCIAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9saW5lX2JyZWFrct8KAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xpbmVfYnJlYWtYAQAAAC10cuAKAABYJgAAAGRpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUucmVhZGxpbmVzcuEKAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZXNYAQAAAC10cuIKAABYHgAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFyLnJldmVydHLjCgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5yZXZlcnRYAQAAAC10cuQKAABYEQAAAGZsLmZvcm0uaGlkZV9mb3JtcuUKAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5oaWRlX2Zvcm1YAQAAAC10cuYKAABYGwAAAHN5bXRhYmxlLkZ1bmN0aW9uLmdldF9mcmVlc3LnCgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9mcmVlc1gBAAAALXRy6AoAAFgOAAAAaG1hYy5ITUFDLmNvcHly6QoAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG1hYy5odG1sI2htYWMuSE1BQy5jb3B5WAEAAAAtdHLqCgAAWCQAAABjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3IucHJlb3JkZXJy6woAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3IucHJlb3JkZXJYAQAAAC10cuwKAABYEwAAAHBpcGVzLlRlbXBsYXRlLm9wZW5y7QoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5vcGVuWAEAAAAtdHLuCgAAWCMAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5mb3JtYXRfaGVscHLvCgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmZvcm1hdF9oZWxwWAEAAAAtdHLwCgAAWBcAAABkZWNpbWFsLkNvbnRleHQubWluX21hZ3LxCgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0Lm1pbl9tYWdYAQAAAC10cvIKAABYEwAAAGN1cnNlcy53aW5kb3cudmxpbmVy8woAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy52bGluZVgBAAAALXRy9AoAAFgfAAAAeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZXL1CgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZVgBAAAALXRy9goAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfcmVxdWVzdHL3CgAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX3JlcXVlc3RYAQAAAC10cvgKAABYGQAAAGltcHV0aWwuSW1wb3J0ZXIuZ2V0X2NvZGVy+QoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuSW1wb3J0ZXIuZ2V0X2NvZGVYAQAAAC10cvoKAABYEQAAAHNlbGVjdC5lcG9sbC5wb2xscvsKAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5wb2xsWAEAAAAtdHL8CgAAWBYAAABtYWlsYm94Lk1haWxkaXIudXBkYXRlcv0KAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIudXBkYXRlWAEAAAAtdHL+CgAAWCAAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuYWRkX29wdGlvbnL/CgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5hZGRfb3B0aW9uWAEAAAAtdHIACwAAWBMAAABmdHBsaWIuRlRQX1RMUy5hdXRocgELAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTLmF1dGhYAQAAAC10cgILAABYGwAAAFRpeC50aXhDb21tYW5kLnRpeF9nZXRpbWFnZXIDCwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfZ2V0aW1hZ2VYAQAAAC10cgQLAABYHQAAAGRhdGV0aW1lLmRhdGV0aW1lLmlzb2NhbGVuZGFycgULAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuaXNvY2FsZW5kYXJYAQAAAC10cgYLAABYEAAAAGNodW5rLkNodW5rLnJlYWRyBwsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5yZWFkWAEAAAAtdHIICwAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnRlbGxyCQsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS50ZWxsWAEAAAAtdHIKCwAAWBsAAABzb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG9yCwsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2ZnJvbV9pbnRvWAEAAAAtdHIMCwAAWBsAAABwcHJpbnQuUHJldHR5UHJpbnRlci5mb3JtYXRyDQsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIuZm9ybWF0WAEAAAAtdHIOCwAAWBQAAABtbWFwLm1tYXAud3JpdGVfYnl0ZXIPCwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLndyaXRlX2J5dGVYAQAAAC10chALAABYGAAAAGRlY2ltYWwuQ29udGV4dC5xdWFudGl6ZXIRCwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnF1YW50aXplWAEAAAAtdHISCwAAWBwAAABjb2xsZWN0aW9ucy5Db3VudGVyLmZyb21rZXlzchMLAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci5mcm9ta2V5c1gBAAAALXRyFAsAAFgRAAAAZnRwbGliLkZUUC5yZW5hbWVyFQsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5yZW5hbWVYAQAAAC10chYLAABYHwAAAGNvbXBpbGVyLmFzdC5Ob2RlLmdldENoaWxkTm9kZXNyFwsAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5hc3QuTm9kZS5nZXRDaGlsZE5vZGVzWAEAAAAtdHIYCwAAWCQAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLm9wdGlvbnNyGQsAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5vcHRpb25zWAEAAAAtdHIaCwAAWBAAAABmbG9hdC5pc19pbnRlZ2VychsLAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmxvYXQuaXNfaW50ZWdlclgBAAAALXRyHAsAAFgPAAAAbW1hcC5tbWFwLmNsb3Nlch0LAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuY2xvc2VYAQAAAC10ch4LAABYEwAAAG1obGliLk1ILm9wZW5mb2xkZXJyHwsAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5vcGVuZm9sZGVyWAEAAAAtdHIgCwAAWBoAAAB6aXBmaWxlLlppcEZpbGUuZXh0cmFjdGFsbHIhCwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmV4dHJhY3RhbGxYAQAAAC10ciILAABYLgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZmlsZW5hbWVyIwsAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saWJyYXJ5X2ZpbGVuYW1lWAEAAAAtdHIkCwAAWBYAAABkZWNpbWFsLkRlY2ltYWwuc2NhbGViciULAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2NhbGViWAEAAAAtdHImCwAAWBEAAABubnRwbGliLk5OVFAueGhkcnInCwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnhoZHJYAQAAAC10cigLAABYHQAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5pbmZvcikLAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5mb1gBAAAALXRyKgsAAFgUAAAAZGVjaW1hbC5EZWNpbWFsLnNxcnRyKwsAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5zcXJ0WAEAAAAtdHIsCwAAWCIAAABmb3JtYXR0ZXIud3JpdGVyLnNlbmRfbGl0ZXJhbF9kYXRhci0LAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9saXRlcmFsX2RhdGFYAQAAAC10ci4LAABYEAAAAGZ0cGxpYi5GVFAubG9naW5yLwsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5sb2dpblgBAAAALXRyMAsAAFgaAAAAQ29va2llLk1vcnNlbC5PdXRwdXRTdHJpbmdyMQsAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLk1vcnNlbC5PdXRwdXRTdHJpbmdYAQAAAC10cjILAABYHwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfcGlyMwsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfcGlYAQAAAC10cjQLAABYFQAAAHR0ay5Qcm9ncmVzc2Jhci5zdGFydHI1CwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuUHJvZ3Jlc3NiYXIuc3RhcnRYAQAAAC10cjYLAABYGwAAAGRhdGV0aW1lLmRhdGV0aW1lLnRvb3JkaW5hbHI3CwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnRvb3JkaW5hbFgBAAAALXRyOAsAAFgmAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX2NvbnRyb2xoaXRyOQsAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX2NvbnRyb2xoaXRYAQAAAC10cjoLAABYFQAAAFF1ZXVlLlF1ZXVlLnRhc2tfZG9uZXI7CwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLnRhc2tfZG9uZVgBAAAALXRyPAsAAFgYAAAAdGhyZWFkaW5nLlRocmVhZC5zZXROYW1lcj0LAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuc2V0TmFtZVgBAAAALXRyPgsAAFgYAAAAbXNpbGliLkRpYWxvZy5yYWRpb2dyb3Vwcj8LAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cucmFkaW9ncm91cFgBAAAALXRyQAsAAFgYAAAAdW5pdHRlc3QuVGVzdFN1aXRlLmRlYnVnckELAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLmRlYnVnWAEAAAAtdHJCCwAAWCkAAABsb2dnaW5nLmhhbmRsZXJzLkhUVFBIYW5kbGVyLm1hcExvZ1JlY29yZHJDCwAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5tYXBMb2dSZWNvcmRYAQAAAC10ckQLAABYGAAAAGxvZ2dpbmcuRm9ybWF0dGVyLmZvcm1hdHJFCwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0WAEAAAAtdHJGCwAAWA0AAABvYmplY3QuX19sZV9fckcLAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbGVfX1gBAAAALXRySAsAAFgYAAAAeGRybGliLlBhY2tlci5wYWNrX2FycmF5ckkLAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19hcnJheVgBAAAALXRySgsAAFgSAAAAaW8uSU9CYXNlLnNlZWthYmxlcksLAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnNlZWthYmxlWAEAAAAtdHJMCwAAWBQAAABzbXRwbGliLlNNVFAuY29ubmVjdHJNCwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmNvbm5lY3RYAQAAAC10ck4LAABYEQAAAGJkYi5CZGIuc2V0X3RyYWNlck8LAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3RyYWNlWAEAAAAtdHJQCwAAWDUAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcnJRCwAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXJYAQAAAC10clILAABYHwAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3RSdW5yUwsAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnN0b3BUZXN0UnVuWAEAAAAtdHJUCwAAWC4AAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRWxlbWVudERlY2xIYW5kbGVyclULAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRWxlbWVudERlY2xIYW5kbGVyWAEAAAAtdHJWCwAAWBIAAABtYWlsYm94Lk1ILmRpc2NhcmRyVwsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZGlzY2FyZFgBAAAALXRyWAsAAFgPAAAAcGRiLlBkYi5ydW5ldmFsclkLAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5QZGIucnVuZXZhbFgBAAAALXRyWgsAAFgXAAAAbWhsaWIuRm9sZGVyLnNldGN1cnJlbnRyWwsAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuc2V0Y3VycmVudFgBAAAALXRyXAsAAFgQAAAAcG9wbGliLlBPUDMucXVpdHJdCwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5xdWl0WAEAAAAtdHJeCwAAWBwAAABhc3luY29yZS5kaXNwYXRjaGVyLndyaXRhYmxlcl8LAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci53cml0YWJsZVgBAAAALXRyYAsAAFgfAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2xpbmVub3JhCwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9saW5lbm9YAQAAAC10cmILAABYHgAAAE1pbWVXcml0ZXIuTWltZVdyaXRlci5sYXN0cGFydHJjCwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ld3JpdGVyLmh0bWwjTWltZVdyaXRlci5NaW1lV3JpdGVyLmxhc3RwYXJ0WAEAAAAtdHJkCwAAWBEAAABpby5SYXdJT0Jhc2UucmVhZHJlCwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZS5yZWFkWAEAAAAtdHJmCwAAWBUAAABjdXJzZXMud2luZG93LmVuY2xvc2VyZwsAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lbmNsb3NlWAEAAAAtdHJoCwAAWCAAAABjb29raWVsaWIuQ29va2llUG9saWN5LnJldHVybl9va3JpCwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llUG9saWN5LnJldHVybl9va1gBAAAALXRyagsAAFgXAAAAdGVsbmV0bGliLlRlbG5ldC5leHBlY3RyawsAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5leHBlY3RYAQAAAC10cmwLAABYGwAAAHdhdmUuV2F2ZV93cml0ZS5zZXRjb21wdHlwZXJtCwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldGNvbXB0eXBlWAEAAAAtdHJuCwAAWC4AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlua19vYmplY3Rzcm8LAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpbmtfb2JqZWN0c1gBAAAALXRycAsAAFgTAAAAYXN5bmNoYXQuZmlmby5maXJzdHJxCwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmZpZm8uZmlyc3RYAQAAAC10cnILAABYGAAAAHN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXJzCwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZVgBAAAALXRydAsAAFgrAAAAQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuZG9fUE9TVHJ1CwAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2lodHRwc2VydmVyLmh0bWwjQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuZG9fUE9TVFgBAAAALXRydgsAAFgnAAAAbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUudGFza19kb25lcncLAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlLnRhc2tfZG9uZVgBAAAALXRyeAsAAFgWAAAAYnNkZGIuYnNkZGJvYmplY3QubGFzdHJ5CwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJzZGRib2JqZWN0Lmxhc3RYAQAAAC10cnoLAABYJwAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3kuZG9tYWluX3JldHVybl9va3J7CwAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llUG9saWN5LmRvbWFpbl9yZXR1cm5fb2tYAQAAAC10cnwLAABYFwAAAGNsYXNzLl9fc3ViY2xhc3NjaGVja19fcn0LAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2xhc3MuX19zdWJjbGFzc2NoZWNrX19YAQAAAC10cn4LAABYGAAAAG1zaWxpYi5Db250cm9sLmNvbmRpdGlvbnJ/CwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbC5jb25kaXRpb25YAQAAAC10coALAABYJQAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZ2V0ZmxvYXRygQsAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRmbG9hdFgBAAAALXRyggsAAFggAAAAbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24uY2xvc2VygwsAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24uY2xvc2VYAQAAAC10coQLAABYHAAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hyhQsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hYAQAAAC10coYLAABYOQAAAFNpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5oYW5kbGVfcmVxdWVzdHKHCwAAKGpzBQAAanQFAABYcwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuaGFuZGxlX3JlcXVlc3RYAQAAAC10cogLAABYFwAAAGpzb24uSlNPTkRlY29kZXIuZGVjb2RlcokLAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05EZWNvZGVyLmRlY29kZVgBAAAALXRyigsAAFghAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmZpbmRfbW9kdWxlcosLAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5maW5kX21vZHVsZVgBAAAALXRyjAsAAFgbAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLnJlc2V0co0LAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIucmVzZXRYAQAAAC10co4LAABYHQAAAHVybGxpYjIuRmlsZUhhbmRsZXIuZmlsZV9vcGVuco8LAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkZpbGVIYW5kbGVyLmZpbGVfb3BlblgBAAAALXRykAsAAFgaAAAAc3VuYXUuQVVfcmVhZC5nZXRuY2hhbm5lbHNykQsAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldG5jaGFubmVsc1gBAAAALXRykgsAAFgiAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zcGVlZHKTCwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc3BlZWRYAQAAAC10cpQLAABYHwAAAG1haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2RhdGVylQsAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2RhdGVYAQAAAC10cpYLAABYGgAAAHN1bmF1LkFVX3JlYWQuZ2V0c2FtcHdpZHRocpcLAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRzYW1wd2lkdGhYAQAAAC10cpgLAABYEwAAAHNlbGVjdC5lcG9sbC5mcm9tZmRymQsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLmZyb21mZFgBAAAALXRymgsAAFgWAAAAbG9nZ2luZy5IYW5kbGVyLmZpbHRlcnKbCwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmZpbHRlclgBAAAALXRynAsAAFgpAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkX3dpbmRvd3NfcmVnaXN0cnlynQsAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkX3dpbmRvd3NfcmVnaXN0cnlYAQAAAC10cp4LAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5zdGFydHKfCwAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuc3RhcnRYAQAAAC10cqALAABYGgAAAHN0cmluZy5Gb3JtYXR0ZXIuZ2V0X2ZpZWxkcqELAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIuZ2V0X2ZpZWxkWAEAAAAtdHKiCwAAWBYAAAB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0cqMLAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuc3RhcnRYAQAAAC10cqQLAABYFAAAAGltYXBsaWIuSU1BUDQuZGVsZXRlcqULAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmRlbGV0ZVgBAAAALXRypgsAAFggAAAAc3FsaXRlMy5Db25uZWN0aW9uLmV4ZWN1dGVzY3JpcHRypwsAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlc2NyaXB0WAEAAAAtdHKoCwAAWB4AAABkZWNpbWFsLkNvbnRleHQuY3JlYXRlX2RlY2ltYWxyqQsAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jcmVhdGVfZGVjaW1hbFgBAAAALXRyqgsAAFgPAAAAZnRwbGliLkZUUC5xdWl0cqsLAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucXVpdFgBAAAALXRyrAsAAFgaAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLmlkbGVyrQsAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLmlkbGVYAQAAAC10cq4LAABYFQAAAHN1bmF1LkFVX3JlYWQuZ2V0bWFya3KvCwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bWFya1gBAAAALXRysAsAAFgjAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRpbnRysQsAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRpbnRYAQAAAC10crILAABYHAAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWVyswsAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlWAEAAAAtdHK0CwAAWBcAAABtYWlsYm94Lk1haWxib3guaGFzX2tleXK1CwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lmhhc19rZXlYAQAAAC10crYLAABYHwAAAHRlbG5ldGxpYi5UZWxuZXQuc2V0X2RlYnVnbGV2ZWxytwsAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5zZXRfZGVidWdsZXZlbFgBAAAALXRyuAsAAFggAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9zb3VyY2VyuQsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9zb3VyY2VYAQAAAC10croLAABYGgAAAHRhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJzcrsLAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuZ2V0bWVtYmVyc1gBAAAALXRyvAsAAFgSAAAAb2JqZWN0Ll9fbm9uemVyb19fcr0LAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbm9uemVyb19fWAEAAAAtdHK+CwAAWBkAAABkZWNpbWFsLkRlY2ltYWwuY2Fub25pY2Fscr8LAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY2Fub25pY2FsWAEAAAAtdHLACwAAWBoAAABtaW1ldG9vbHMuTWVzc2FnZS5nZXRwYXJhbXLBCwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZS5nZXRwYXJhbVgBAAAALXRywgsAAFgVAAAAbG9nZ2luZy5GaWx0ZXIuZmlsdGVycsMLAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZpbHRlci5maWx0ZXJYAQAAAC10csQLAABYHQAAAG1pbWV0b29scy5NZXNzYWdlLmdldGVuY29kaW5ncsULAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5NZXNzYWdlLmdldGVuY29kaW5nWAEAAAAtdHLGCwAAWCoAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuUkxvY2tyxwsAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlJMb2NrWAEAAAAtdHLICwAAWCEAAABtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy50ZXJtaW5hdGVyyQsAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MudGVybWluYXRlWAEAAAAtdHLKCwAAWDQAAABsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5kb1JvbGxvdmVycssLAAAoanMFAABqdAUAAFhsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5kb1JvbGxvdmVyWAEAAAAtdHLMCwAAWA0AAABkaWN0LnZpZXdrZXlzcs0LAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC52aWV3a2V5c1gBAAAALXRyzgsAAFgRAAAAYXJyYXkuYXJyYXkud3JpdGVyzwsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS53cml0ZVgBAAAALXRy0AsAAFhHAAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNy0QsAAChqcwUAAGp0BQAAWIEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNYAQAAAC10ctILAABYJAAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlc1JlZ2V4cHLTCwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlc1JlZ2V4cFgBAAAALXRy1AsAAFgUAAAAd2F2ZS5XYXZlX3JlYWQuY2xvc2Vy1QsAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmNsb3NlWAEAAAAtdHLWCwAAWB0AAABmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9zdHlsZXLXCwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9zdHlsZVgBAAAALXRy2AsAAFghAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfYWNjZXB0ctkLAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfYWNjZXB0WAEAAAAtdHLaCwAAWA4AAABpbnQuYml0X2xlbmd0aHLbCwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ludC5iaXRfbGVuZ3RoWAEAAAAtdHLcCwAAWC8AAABsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmdldEV2ZW50VHlwZXLdCwAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudFR5cGVYAQAAAC10ct4LAABYFwAAAGJ6Mi5CWjJDb21wcmVzc29yLmZsdXNoct8LAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJDb21wcmVzc29yLmZsdXNoWAEAAAAtdHLgCwAAWBYAAABkYmhhc2guZGJoYXNoLnByZXZpb3VzcuELAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sI2RiaGFzaC5kYmhhc2gucHJldmlvdXNYAQAAAC10cuILAABYFAAAAGFpZmMuYWlmYy5zZXRuZnJhbWVzcuMLAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0bmZyYW1lc1gBAAAALXRy5AsAAFgkAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZm9ybWF0X3VzYWdlcuULAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZm9ybWF0X3VzYWdlWAEAAAAtdHLmCwAAWBQAAABpbWFwbGliLklNQVA0LmdldGFjbHLnCwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5nZXRhY2xYAQAAAC10cugLAABYJwAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZ2V0Ym9vbGVhbnLpCwAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmdldGJvb2xlYW5YAQAAAC10cuoLAABYFgAAAHNvY2tldC5zb2NrZXQubWFrZWZpbGVy6wsAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5tYWtlZmlsZVgBAAAALXRy7AsAAFgTAAAAY3Vyc2VzLndpbmRvdy5kZWxjaHLtCwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlbGNoWAEAAAAtdHLuCwAAWCYAAAB1cmxsaWIyLkJhc2VIYW5kbGVyLmh0dHBfZXJyb3JfZGVmYXVsdHLvCwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX2RlZmF1bHRYAQAAAC10cvALAABYHgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdHlwZXLxCwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF90eXBlWAEAAAAtdHLyCwAAWCIAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19jb250YWluc19fcvMLAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19jb250YWluc19fWAEAAAAtdHL0CwAAWC4AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuTmFtZXNwYWNlcvULAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5OYW1lc3BhY2VYAQAAAC10cvYLAABYEwAAAHJlLk1hdGNoT2JqZWN0LnNwYW5y9wsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5zcGFuWAEAAAAtdHL4CwAAWBgAAABzZ21sbGliLlNHTUxQYXJzZXIucmVzZXRy+QsAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5yZXNldFgBAAAALXRy+gsAAFgZAAAAdXJsbGliMi5SZXF1ZXN0LnNldF9wcm94eXL7CwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LnNldF9wcm94eVgBAAAALXRy/AsAAFgNAAAAZnJvemVuc2V0LnBvcHL9CwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5wb3BYAQAAAC10cv4LAABYEwAAAG9iamVjdC5fX2l0cnVlZGl2X19y/wsAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pdHJ1ZWRpdl9fWAEAAAAtdHIADAAAWBkAAABkZWNpbWFsLkNvbnRleHQuaXNfbm9ybWFscgEMAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfbm9ybWFsWAEAAAAtdHICDAAAWBsAAABtYWlsYm94Lk1haWxib3guX19zZXRpdGVtX19yAwwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX3NldGl0ZW1fX1gBAAAALXRyBAwAAFgdAAAAZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfdG90YWxyBQwAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3RvdGFsWAEAAAAtdHIGDAAAWBwAAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2FycmF5cgcMAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfYXJyYXlYAQAAAC10cggMAABYHgAAAGN1cnNlcy5wYW5lbC5QYW5lbC5zZXRfdXNlcnB0cnIJDAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuc2V0X3VzZXJwdHJYAQAAAC10cgoMAABYKQAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5kaWN0cgsMAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5kaWN0WAEAAAAtdHIMDAAAWBMAAABzZWxlY3Qua3F1ZXVlLmNsb3Nlcg0MAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuY2xvc2VYAQAAAC10cg4MAABYJQAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXJyDwwAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVfZm9yZXZlclgBAAAALXRyEAwAAFgfAAAAY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5c3IRDAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXNYAQAAAC10chIMAABYGQAAAHRleHR3cmFwLlRleHRXcmFwcGVyLmZpbGxyEwwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5maWxsWAEAAAAtdHIUDAAAWAwAAABzdHIuZW5kc3dpdGhyFQwAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZW5kc3dpdGhYAQAAAC10chYMAABYLQAAAHhtbC5zYXguaGFuZGxlci5EVERIYW5kbGVyLnVucGFyc2VkRW50aXR5RGVjbHIXDAAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci51bnBhcnNlZEVudGl0eURlY2xYAQAAAC10chgMAABYGQAAAHRhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJyGQwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJYAQAAAC10choMAABYDgAAAG1kNS5tZDUuZGlnZXN0chsMAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21kNS5odG1sI21kNS5tZDUuZGlnZXN0WAEAAAAtdHIcDAAAWBMAAABmdHBsaWIuRlRQLnNldF9wYXN2ch0MAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc2V0X3Bhc3ZYAQAAAC10ch4MAABYGAAAAGxvZ2dpbmcuTG9nZ2VyLmFkZEZpbHRlcnIfDAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuYWRkRmlsdGVyWAEAAAAtdHIgDAAAWBQAAABtc2lsaWIuQ29udHJvbC5ldmVudHIhDAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbC5ldmVudFgBAAAALXRyIgwAAFgYAAAAbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0ciMMAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLkZpbGVIYW5kbGVyLmVtaXRYAQAAAC10ciQMAABYEQAAAGltYXBsaWIuSU1BUDQudWlkciUMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnVpZFgBAAAALXRyJgwAAFgpAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0aXRlcmF0b3JyJwwAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0aXRlcmF0b3JYAQAAAC10cigMAABYFQAAAGhvdHNob3QuUHJvZmlsZS5zdGFydHIpDAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnN0YXJ0WAEAAAAtdHIqDAAAWB8AAABUaXgudGl4Q29tbWFuZC50aXhfcmVzZXRvcHRpb25zcisMAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kLnRpeF9yZXNldG9wdGlvbnNYAQAAAC10ciwMAABYIgAAAGZpbGVjbXAuZGlyY21wLnJlcG9ydF9mdWxsX2Nsb3N1cmVyLQwAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnJlcG9ydF9mdWxsX2Nsb3N1cmVYAQAAAC10ci4MAABYKQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Vc2VGb3JlaWduRFREci8MAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVXNlRm9yZWlnbkRURFgBAAAALXRyMAwAAFgWAAAAb2JqZWN0Ll9fZ2V0aW5pdGFyZ3NfX3IxDAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNvYmplY3QuX19nZXRpbml0YXJnc19fWAEAAAAtdHIyDAAAWCUAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuYWRkX2ZhbGxiYWNrcjMMAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuYWRkX2ZhbGxiYWNrWAEAAAAtdHI0DAAAWCEAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUuam9pbl90aHJlYWRyNQwAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmpvaW5fdGhyZWFkWAEAAAAtdHI2DAAAWBsAAAB6aXBmaWxlLlppcEZpbGUuc2V0cGFzc3dvcmRyNwwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5zZXRwYXNzd29yZFgBAAAALXRyOAwAAFgbAAAAQ29va2llLk1vcnNlbC5pc1Jlc2VydmVkS2V5cjkMAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwuaXNSZXNlcnZlZEtleVgBAAAALXRyOgwAAFgbAAAAdXJsbGliMi5GVFBIYW5kbGVyLmZ0cF9vcGVucjsMAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkZUUEhhbmRsZXIuZnRwX29wZW5YAQAAAC10cjwMAABYGwAAAGRlY2ltYWwuQ29udGV4dC5jbGVhcl9mbGFnc3I9DAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNsZWFyX2ZsYWdzWAEAAAAtdHI+DAAAWA4AAABmdHBsaWIuRlRQLnB3ZHI/DAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnB3ZFgBAAAALXRyQAwAAFgWAAAAcHJvZmlsZS5Qcm9maWxlLnJ1bmN0eHJBDAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLnJ1bmN0eFgBAAAALXRyQgwAAFgTAAAAY3Vyc2VzLndpbmRvdy5jbGVhcnJDDAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNsZWFyWAEAAAAtdHJEDAAAWCcAAABGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2NhbGViYXJ2YWx1ZXNyRQwAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LnNjYWxlYmFydmFsdWVzWAEAAAAtdHJGDAAAWBEAAABmbC5mb3JtLnNob3dfZm9ybXJHDAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uc2hvd19mb3JtWAEAAAAtdHJIDAAAWBQAAAByZS5SZWdleE9iamVjdC5tYXRjaHJJDAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0Lm1hdGNoWAEAAAAtdHJKDAAAWBUAAABhaWZjLmFpZmMud3JpdGVmcmFtZXNySwwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy53cml0ZWZyYW1lc1gBAAAALXRyTAwAAFgqAAAAbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmhhbmRsZUVycm9yck0MAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuaGFuZGxlRXJyb3JYAQAAAC10ck4MAABYEwAAAGZsLmZvcm0ucmVkcmF3X2Zvcm1yTwwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLnJlZHJhd19mb3JtWAEAAAAtdHJQDAAAWBkAAABjb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNlclEMAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucmV2ZXJzZVgBAAAALXRyUgwAAFgSAAAAaW1hcGxpYi5JTUFQNC5saXN0clMMAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lmxpc3RYAQAAAC10clQMAABYJQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuY2xvc2VyVQwAAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5jbG9zZVgBAAAALXRyVgwAAFgXAAAAYmRiLkJyZWFrcG9pbnQuZGVsZXRlTWVyVwwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQuZGVsZXRlTWVYAQAAAC10clgMAABYKgAAAGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5zaG91bGRGbHVzaHJZDAAAKGpzBQAAanQFAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNob3VsZEZsdXNoWAEAAAAtdHJaDAAAWBgAAABwb3NpeGZpbGUucG9zaXhmaWxlLmR1cDJyWwwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXAyWAEAAAAtdHJcDAAAWBMAAAB0dGsuVHJlZXZpZXcuZXhpc3Rzcl0MAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5leGlzdHNYAQAAAC10cl4MAABYEwAAAGJkYi5CZGIuY2xlYXJfYnJlYWtyXwwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9icmVha1gBAAAALXRyYAwAAFgVAAAAbG9nZ2luZy5IYW5kbGVyLmNsb3NlcmEMAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuY2xvc2VYAQAAAC10cmIMAABYFgAAAGFycmF5LmFycmF5LmZyb21zdHJpbmdyYwwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5mcm9tc3RyaW5nWAEAAAAtdHJkDAAAWBMAAAB0YXJmaWxlLlRhckZpbGUuYWRkcmUMAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuYWRkWAEAAAAtdHJmDAAAWCMAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQudG9fc3BsaXR0YWJsZXJnDAAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LnRvX3NwbGl0dGFibGVYAQAAAC10cmgMAABYIwAAAG9zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZmlsZW5vcmkMAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5maWxlbm9YAQAAAC10cmoMAABYFAAAAGlvLlRleHRJT0Jhc2UuZGV0YWNocmsMAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5kZXRhY2hYAQAAAC10cmwMAABYFwAAAGltYXBsaWIuSU1BUDQuZGVsZXRlYWNscm0MAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmRlbGV0ZWFjbFgBAAAALXRybgwAAFgiAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9maWxlbmFtZXJvDAAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9maWxlbmFtZVgBAAAALXRycAwAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlZhbHVlcnEMAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5WYWx1ZVgBAAAALXRycgwAAFggAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X3N5bWJvbHNycwwAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfc3ltYm9sc1gBAAAALXRydAwAAFgRAAAAYXN5bmNoYXQuZmlmby5wb3BydQwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5maWZvLnBvcFgBAAAALXRydgwAAFgbAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX2VhZ2VycncMAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9lYWdlclgBAAAALXRyeAwAAFgYAAAAc2hsZXguc2hsZXguZXJyb3JfbGVhZGVycnkMAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZXJyb3JfbGVhZGVyWAEAAAAtdHJ6DAAAWBIAAABvYmplY3QuX19ycnNoaWZ0X19yewwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ycnNoaWZ0X19YAQAAAC10cnwMAABYGgAAAHhtbC5kb20ubWluaWRvbS5Ob2RlLnRveG1scn0MAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5Ob2RlLnRveG1sWAEAAAAtdHJ+DAAAWCcAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5wcm9jZXNzX3JlcXVlc3RyfwwAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0WAEAAAAtdHKADAAAWCUAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdC53YWl0coEMAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LndhaXRYAQAAAC10coIMAABYFwAAAHN5bXRhYmxlLlN5bWJvbC5pc19mcmVlcoMMAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2ZyZWVYAQAAAC10coQMAABYGQAAAGxvZ2dpbmcuTG9nZ2VyLm1ha2VSZWNvcmRyhQwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLm1ha2VSZWNvcmRYAQAAAC10coYMAABYHAAAAG1haWxib3guTWFpbGRpci5saXN0X2ZvbGRlcnNyhwwAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5saXN0X2ZvbGRlcnNYAQAAAC10cogMAABYFwAAAGRlY2ltYWwuRGVjaW1hbC5tYXhfbWFncokMAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubWF4X21hZ1gBAAAALXRyigwAAFgTAAAAbWFpbGJveC5tYm94LnVubG9ja3KLDAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94LnVubG9ja1gBAAAALXRyjAwAAFggAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmNoYXJzZXRyjQwAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5jaGFyc2V0WAEAAAAtdHKODAAAWB4AAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5maWxlbm9yjwwAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuZmlsZW5vWAEAAAAtdHKQDAAAWC0AAAB4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlMuZ2V0UU5hbWVCeU5hbWVykQwAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlMuZ2V0UU5hbWVCeU5hbWVYAQAAAC10cpIMAABYEQAAAGFycmF5LmFycmF5LmluZGV4cpMMAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuaW5kZXhYAQAAAC10cpQMAABYHwAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEdyZWF0ZXJylQwAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRHcmVhdGVyWAEAAAAtdHKWDAAAWCAAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZXKXDAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVYAQAAAC10cpgMAABYGQAAAGRlY2ltYWwuRGVjaW1hbC5jb3B5X3NpZ25ymQwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb3B5X3NpZ25YAQAAAC10cpoMAABYDQAAAGl0ZXJhdG9yLm5leHRymwwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNpdGVyYXRvci5uZXh0WAEAAAAtdHKcDAAAWBcAAABjdXJzZXMud2luZG93LnJlZHJhd3dpbnKdDAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnJlZHJhd3dpblgBAAAALXRyngwAAFgnAAAAeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvci5nZXRMaW5lTnVtYmVycp8MAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvci5nZXRMaW5lTnVtYmVyWAEAAAAtdHKgDAAAWBEAAABtZW1vcnl2aWV3LnRvbGlzdHKhDAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcudG9saXN0WAEAAAAtdHKiDAAAWCAAAABnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy51Z2V0dGV4dHKjDAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMudWdldHRleHRYAQAAAC10cqQMAABYJwAAAHhtbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIuZmF0YWxFcnJvcnKlDAAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRXJyb3JIYW5kbGVyLmZhdGFsRXJyb3JYAQAAAC10cqYMAABYGQAAAHJmYzgyMi5NZXNzYWdlLnJld2luZGJvZHlypwwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UucmV3aW5kYm9keVgBAAAALXRyqAwAAFgSAAAAaW8uSU9CYXNlLnJlYWRsaW5lcqkMAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRsaW5lWAEAAAAtdHKqDAAAWCMAAAB1bml0dGVzdC5UZXN0Q2FzZS5kZWZhdWx0VGVzdFJlc3VsdHKrDAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmRlZmF1bHRUZXN0UmVzdWx0WAEAAAAtdHKsDAAAWBQAAABjdXJzZXMud2luZG93LmRlcndpbnKtDAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlcndpblgBAAAALXRyrgwAAFgYAAAAeGRybGliLlBhY2tlci5wYWNrX2J5dGVzcq8MAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19ieXRlc1gBAAAALXRysAwAAFgKAAAAc3RyLmNlbnRlcnKxDAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5jZW50ZXJYAQAAAC10crIMAABYFgAAAHJleGVjLlJFeGVjLnNfZXhlY2ZpbGVyswwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2V4ZWNmaWxlWAEAAAAtdHK0DAAAWBcAAABtc2lsaWIuUmVjb3JkLkNsZWFyRGF0YXK1DAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLkNsZWFyRGF0YVgBAAAALXRytgwAAFgRAAAAbm50cGxpYi5OTlRQLmxhc3RytwwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5sYXN0WAEAAAAtdHK4DAAAWBgAAABkZWNpbWFsLkNvbnRleHQubXVsdGlwbHlyuQwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tdWx0aXBseVgBAAAALXRyugwAAFgZAAAAdHRrLlN0eWxlLmVsZW1lbnRfb3B0aW9uc3K7DAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUuZWxlbWVudF9vcHRpb25zWAEAAAAtdHK8DAAAWCAAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUucHV0X25vd2FpdHK9DAAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUucHV0X25vd2FpdFgBAAAALXRyvgwAAFgYAAAAZGF0ZXRpbWUuZGF0ZS5fX2Zvcm1hdF9fcr8MAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5fX2Zvcm1hdF9fWAEAAAAtdHLADAAAWBkAAABjb29raWVsaWIuQ29va2llSmFyLmNsZWFycsEMAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXIuY2xlYXJYAQAAAC10csIMAABYHAAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmpvaW5ywwwAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muam9pblgBAAAALXRyxAwAAFgXAAAAQ29va2llLk1vcnNlbC5qc19vdXRwdXRyxQwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLk1vcnNlbC5qc19vdXRwdXRYAQAAAC10csYMAABYGQAAAHhkcmxpYi5QYWNrZXIucGFja19kb3VibGVyxwwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2RvdWJsZVgBAAAALXRyyAwAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIucmVzZXRyyQwAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5yZXNldFgBAAAALXRyygwAAFgXAAAAb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX19yywwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRhdHRyaWJ1dGVfX1gBAAAALXRyzAwAAFgaAAAAaW1hcGxpYi5JTUFQNC5hdXRoZW50aWNhdGVyzQwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuYXV0aGVudGljYXRlWAEAAAAtdHLODAAAWBQAAAB6bGliLkRlY29tcHJlc3MuY29weXLPDAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5EZWNvbXByZXNzLmNvcHlYAQAAAC10ctAMAABYGQAAAGRhdGV0aW1lLmRhdGV0aW1lLl9fc3RyX19y0QwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5fX3N0cl9fWAEAAAAtdHLSDAAAWCAAAABhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9lcnJvcnLTDAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2Vycm9yWAEAAAAtdHLUDAAAWDQAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyctUMAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyWAEAAAAtdHLWDAAAWBYAAABzY2hlZC5zY2hlZHVsZXIuY2FuY2VsctcMAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLmNhbmNlbFgBAAAALXRy2AwAAFgSAAAAemxpYi5Db21wcmVzcy5jb3B5ctkMAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkNvbXByZXNzLmNvcHlYAQAAAC10ctoMAABYFAAAAHBpcGVzLlRlbXBsYXRlLmRlYnVnctsMAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUuZGVidWdYAQAAAC10ctwMAABYJAAAAGNhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF5czJjYWxlbmRhcnLdDAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF5czJjYWxlbmRhclgBAAAALXRy3gwAAFgfAAAAbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24uc2VuZHLfDAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5zZW5kWAEAAAAtdHLgDAAAWBgAAABkZWNpbWFsLkNvbnRleHQuY29weV9hYnNy4QwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb3B5X2Fic1gBAAAALXRy4gwAAFgjAAAAbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmVtaXRy4wwAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5lbWl0WAEAAAAtdHLkDAAAWBQAAABDb29raWUuTW9yc2VsLm91dHB1dHLlDAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLm91dHB1dFgBAAAALXRy5gwAAFgUAAAAdGFyZmlsZS5UYXJGaWxlLmxpc3Ry5wwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5saXN0WAEAAAAtdHLoDAAAWCoAAABtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5Q291bnRy6QwAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5HZXRQcm9wZXJ0eUNvdW50WAEAAAAtdHLqDAAAWBwAAABlbWFpbC5wYXJzZXIuRmVlZFBhcnNlci5mZWVkcusMAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5GZWVkUGFyc2VyLmZlZWRYAQAAAC10cuwMAABYDQAAAG9iamVjdC5fX25lX19y7QwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19uZV9fWAEAAAAtdHLuDAAAWBsAAABkZWNpbWFsLkNvbnRleHQuY29weV9uZWdhdGVy7wwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb3B5X25lZ2F0ZVgBAAAALXRy8AwAAFgYAAAAQ29va2llLkJhc2VDb29raWUub3V0cHV0cvEMAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLm91dHB1dFgBAAAALXRy8gwAAFghAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuaXNfb3B0aW1pemVkcvMMAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaXNfb3B0aW1pemVkWAEAAAAtdHL0DAAAWCMAAABGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2Nyb2xsYmFyc3L1DAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2Nyb2xsYmFyc1gBAAAALXRy9gwAAFgdAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5zZXRfb2ty9wwAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5zZXRfb2tYAQAAAC10cvgMAABYEwAAAG1haWxib3guTWFpbGJveC5hZGRy+QwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5hZGRYAQAAAC10cvoMAABYEgAAAGltYXBsaWIuSU1BUDQub3BlbnL7DAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5vcGVuWAEAAAAtdHL8DAAAWBsAAAB3YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXNy/QwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc1gBAAAALXRy/gwAAFgvAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXJy/wwAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyWAEAAAAtdHIADQAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldENvbHVtbk51bWJlcnIBDQAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyWAEAAAAtdHICDQAAWBwAAAB4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlcgMNAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlWAEAAAAtdHIEDQAAWBYAAABhc3luY2hhdC5maWZvLmlzX2VtcHR5cgUNAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmby5pc19lbXB0eVgBAAAALXRyBg0AAFgXAAAAY3N2LmNzdndyaXRlci53cml0ZXJvd3NyBw0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmNzdndyaXRlci53cml0ZXJvd3NYAQAAAC10cggNAABYIAAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hZGRfaGVhZGVycgkNAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYWRkX2hlYWRlclgBAAAALXRyCg0AAFggAAAAZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpbmVfYnJlYWtyCw0AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpbmVfYnJlYWtYAQAAAC10cgwNAABYGwAAAHdhdmUuV2F2ZV9yZWFkLmdldG5jaGFubmVsc3INDQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0bmNoYW5uZWxzWAEAAAAtdHIODQAAWCAAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbHIPDQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsWAEAAAAtdHIQDQAAWDMAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXJyEQ0AAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlclgBAAAALXRyEg0AAFgOAAAAc3RyLnJwYXJ0aXRpb25yEw0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIucnBhcnRpdGlvblgBAAAALXRyFA0AAFgaAAAAc3ltdGFibGUuQ2xhc3MuZ2V0X21ldGhvZHNyFQ0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5DbGFzcy5nZXRfbWV0aG9kc1gBAAAALXRyFg0AAFgbAAAAc3ltdGFibGUuU3ltYm9sLmlzX2Fzc2lnbmVkchcNAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2Fzc2lnbmVkWAEAAAAtdHIYDQAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzchkNAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBDbGFzc1gBAAAALXRyGg0AAFgWAAAAeG1sLmRvbS5Ob2RlLm5vcm1hbGl6ZXIbDQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5vcm1hbGl6ZVgBAAAALXRyHA0AAFgRAAAAYnoyLkJaMkZpbGUud3JpdGVyHQ0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUud3JpdGVYAQAAAC10ch4NAABYIgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtyHw0AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rWAEAAAAtdHIgDQAAWBEAAABmcm96ZW5zZXQuZGlzY2FyZHIhDQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5kaXNjYXJkWAEAAAAtdHIiDQAAWBgAAABjb2xsZWN0aW9ucy5kZXF1ZS5yb3RhdGVyIw0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5yb3RhdGVYAQAAAC10ciQNAABYFgAAAGltYXBsaWIuSU1BUDQucmVhZGxpbmVyJQ0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVhZGxpbmVYAQAAAC10ciYNAABYKwAAAEZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5nZXRzY3JvbGxiYXJ2YWx1ZXNyJw0AAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmdldHNjcm9sbGJhcnZhbHVlc1gBAAAALXRyKA0AAFgWAAAAY3Vyc2VzLndpbmRvdy5jbHJ0b2JvdHIpDQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNscnRvYm90WAEAAAAtdHIqDQAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMZXNzcisNAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc1gBAAAALXRyLA0AAFgcAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9mdWxsX3VybHItDQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF9mdWxsX3VybFgBAAAALXRyLg0AAFg0AAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlcnIvDQAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlclgBAAAALXRyMA0AAFgYAAAAY2dpLkZpZWxkU3RvcmFnZS5nZXRsaXN0cjENAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5GaWVsZFN0b3JhZ2UuZ2V0bGlzdFgBAAAALXRyMg0AAFgQAAAAdHRrLkNvbWJvYm94LnNldHIzDQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuQ29tYm9ib3guc2V0WAEAAAAtdHI0DQAAWB0AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19sZW5fX3I1DQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fbGVuX19YAQAAAC10cjYNAABYGgAAAHN1bmF1LkFVX3JlYWQuZ2V0ZnJhbWVyYXRlcjcNAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRmcmFtZXJhdGVYAQAAAC10cjgNAABYHQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5oYXNfa2V5cjkNAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaGFzX2tleVgBAAAALXRyOg0AAFgiAAAATWltZVdyaXRlci5NaW1lV3JpdGVyLmZsdXNoaGVhZGVyc3I7DQAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ld3JpdGVyLmh0bWwjTWltZVdyaXRlci5NaW1lV3JpdGVyLmZsdXNoaGVhZGVyc1gBAAAALXRyPA0AAFg2AAAAbXVsdGlwcm9jZXNzaW5nLm11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuU2ltcGxlUXVldWUucHV0cj0NAAAoanMFAABqdAUAAFhtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlLnB1dFgBAAAALXRyPg0AAFgPAAAAZmlsZS53cml0ZWxpbmVzcj8NAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS53cml0ZWxpbmVzWAEAAAAtdHJADQAAWBoAAAB4ZHJsaWIuUGFja2VyLnBhY2tfZnN0cmluZ3JBDQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfZnN0cmluZ1gBAAAALXRyQg0AAFgUAAAAaW1hcGxpYi5JTUFQNC5yZWNlbnRyQw0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVjZW50WAEAAAAtdHJEDQAAWBsAAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2xpc3RyRQ0AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19saXN0WAEAAAAtdHJGDQAAWBgAAABqc29uLkpTT05FbmNvZGVyLmRlZmF1bHRyRw0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkVuY29kZXIuZGVmYXVsdFgBAAAALXRySA0AAFgjAAAAc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2xySQ0AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2xYAQAAAC10ckoNAABYGQAAAHNzbC5TU0xTb2NrZXQuY29tcHJlc3Npb25ySw0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5jb21wcmVzc2lvblgBAAAALXRyTA0AAFgZAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIud3JhcHJNDQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLndyYXBYAQAAAC10ck4NAABYIwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZW5kdGFnck8NAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2VuZHRhZ1gBAAAALXRyUA0AAFgjAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fd3JpdGVyUQ0AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuX3dyaXRlWAEAAAAtdHJSDQAAWBIAAABubnRwbGliLk5OVFAuc2xhdmVyUw0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5zbGF2ZVgBAAAALXRyVA0AAFggAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5zZXRyVQ0AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5zZXRYAQAAAC10clYNAABYEgAAAHRyYWNlLlRyYWNlLnJ1bmN0eHJXDQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJ1bmN0eFgBAAAALXRyWA0AAFgRAAAAbm50cGxpYi5OTlRQLnF1aXRyWQ0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5xdWl0WAEAAAAtdHJaDQAAWA8AAAB0cmFjZS5UcmFjZS5ydW5yWw0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5UcmFjZS5ydW5YAQAAAC10clwNAABYEwAAAHNlbGVjdC5lcG9sbC5maWxlbm9yXQ0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLmZpbGVub1gBAAAALXRyXg0AAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzYmxrcl8NAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNibGtYAQAAAC10cmANAABYEQAAAHR0ay5UcmVldmlldy5wcmV2cmENAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5wcmV2WAEAAAAtdHJiDQAAWBYAAABhaWZjLmFpZmMuZ2V0ZnJhbWVyYXRlcmMNAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0ZnJhbWVyYXRlWAEAAAAtdHJkDQAAWAsAAABzdHIuaXNhbHBoYXJlDQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc2FscGhhWAEAAAAtdHJmDQAAWBQAAABpbWFwbGliLklNQVA0LnNvY2tldHJnDQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zb2NrZXRYAQAAAC10cmgNAABYGgAAAHpsaWIuRGVjb21wcmVzcy5kZWNvbXByZXNzcmkNAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MuZGVjb21wcmVzc1gBAAAALXRyag0AAFgZAAAAZGF0ZXRpbWUudHppbmZvLnV0Y29mZnNldHJrDQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnR6aW5mby51dGNvZmZzZXRYAQAAAC10cmwNAABYHQAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnN0YXJ0cm0NAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnN0YXJ0WAEAAAAtdHJuDQAAWBYAAAB1bml0dGVzdC5UZXN0Q2FzZS5mYWlscm8NAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuZmFpbFgBAAAALXRycA0AAFgjAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZ2V0X2RlZmF1bHRycQ0AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5nZXRfZGVmYXVsdFgBAAAALXRycg0AAFgcAAAAY29sbGVjdGlvbnMuQ291bnRlci5lbGVtZW50c3JzDQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNvdW50ZXIuZWxlbWVudHNYAQAAAC10cnQNAABYFQAAAGhvdHNob3QuUHJvZmlsZS5jbG9zZXJ1DQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLmNsb3NlWAEAAAAtdHJ2DQAAWBYAAABRdWV1ZS5RdWV1ZS5nZXRfbm93YWl0cncNAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUXVldWUuZ2V0X25vd2FpdFgBAAAALXRyeA0AAFgiAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLmdldGFib3V0dGV4dHJ5DQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb24uZ2V0YWJvdXR0ZXh0WAEAAAAtdHJ6DQAAWBIAAABhcnJheS5hcnJheS5pbnNlcnRyew0AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5pbnNlcnRYAQAAAC10cnwNAABYGQAAAGRlY2ltYWwuQ29udGV4dC5jYW5vbmljYWxyfQ0AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jYW5vbmljYWxYAQAAAC10cn4NAABYDQAAAGZyb3plbnNldC5hZGRyfw0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuYWRkWAEAAAAtdHKADQAAWBEAAABwZGIuUGRiLnNldF90cmFjZXKBDQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIuUGRiLnNldF90cmFjZVgBAAAALXRygg0AAFgSAAAAb2JqZWN0Ll9fY29tcGxleF9fcoMNAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fY29tcGxleF9fWAEAAAAtdHKEDQAAWCQAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5yZW1vdmVyhQ0AAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQucmVtb3ZlWAEAAAAtdHKGDQAAWBMAAABkZWNpbWFsLkNvbnRleHQubWlucocNAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWluWAEAAAAtdHKIDQAAWBsAAAByZmM4MjIuQWRkcmVzc0xpc3QuX19pYWRkX19yiQ0AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLkFkZHJlc3NMaXN0Ll9faWFkZF9fWAEAAAAtdHKKDQAAWBYAAABjc3YuU25pZmZlci5oYXNfaGVhZGVycosNAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5TbmlmZmVyLmhhc19oZWFkZXJYAQAAAC10cowNAABYFwAAAGN1cnNlcy5wYW5lbC5QYW5lbC5oaWRlco0NAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5oaWRlWAEAAAAtdHKODQAAWCsAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY3JlYXRlU29ja2V0co8NAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY3JlYXRlU29ja2V0WAEAAAAtdHKQDQAAWB8AAAB4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlcpENAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlWAEAAAAtdHKSDQAAWBwAAABzeW10YWJsZS5TeW1ib2wuaXNfcGFyYW1ldGVycpMNAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX3BhcmFtZXRlclgBAAAALXRylA0AAFgUAAAAbG9nZ2luZy5Mb2dnZXIuZXJyb3JylQ0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmVycm9yWAEAAAAtdHKWDQAAWBUAAABkZWNpbWFsLkRlY2ltYWwubG9nMTBylw0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2cxMFgBAAAALXRymA0AAFgiAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS53cml0ZXKZDQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uud3JpdGVYAQAAAC10cpoNAABYMAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtfc2hhcmVkX29iamVjdHKbDQAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtfc2hhcmVkX29iamVjdFgBAAAALXRynA0AAFgrAAAAdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMXKdDQAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMVgBAAAALXRyng0AAFgSAAAAcmV4ZWMuUkV4ZWMuc19leGVjcp8NAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMuc19leGVjWAEAAAAtdHKgDQAAWAsAAABmaWxlLmZpbGVub3KhDQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUuZmlsZW5vWAEAAAAtdHKiDQAAWBgAAABjb250ZXh0bWFuYWdlci5fX2VudGVyX19yow0AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjb250ZXh0bWFuYWdlci5fX2VudGVyX19YAQAAAC10cqQNAABYIAAAAHhtbC5kb20uRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlcqUNAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZVgBAAAALXRypg0AAFghAAAAbWFpbGJveC5NSE1lc3NhZ2UucmVtb3ZlX3NlcXVlbmNlcqcNAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5yZW1vdmVfc2VxdWVuY2VYAQAAAC10cqgNAABYFwAAAF93aW5yZWcuUHlIS0VZLl9fZXhpdF9fcqkNAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlB5SEtFWS5fX2V4aXRfX1gBAAAALXRyqg0AAFgjAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucHJpbnRfdXNhZ2Vyqw0AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wcmludF91c2FnZVgBAAAALXRyrA0AAFgQAAAAdHRrLk5vdGVib29rLmFkZHKtDQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suYWRkWAEAAAAtdHKuDQAAWBMAAABhZXRvb2xzLlRhbGtUby5zZW5kcq8NAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldG9vbHMuaHRtbCNhZXRvb2xzLlRhbGtUby5zZW5kWAEAAAAtdHKwDQAAWBkAAABtYWlsYm94Lk1haWxib3guaXRlcml0ZW1zcrENAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guaXRlcml0ZW1zWAEAAAAtdHKyDQAAWC4AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuU2VtYXBob3JlcrMNAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5TZW1hcGhvcmVYAQAAAC10crQNAABYGwAAAHNtdHBsaWIuU01UUC5zZXRfZGVidWdsZXZlbHK1DQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLnNldF9kZWJ1Z2xldmVsWAEAAAAtdHK2DQAAWBcAAABsb2dnaW5nLkhhbmRsZXIucmVsZWFzZXK3DQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLnJlbGVhc2VYAQAAAC10crgNAABYFQAAAGZsLmZvcm0uYWRkX3ZhbHNsaWRlcnK5DQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX3ZhbHNsaWRlclgBAAAALXRyug0AAFguAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2luY2x1ZGVfZGlyc3K7DQAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9pbmNsdWRlX2RpcnNYAQAAAC10crwNAABYGwAAAGxvZ2dpbmcuTG9nZ2VyLnJlbW92ZUZpbHRlcnK9DQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIucmVtb3ZlRmlsdGVyWAEAAAAtdHK+DQAAWCcAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnVucmVhZGxpbmVyvw0AAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnVucmVhZGxpbmVYAQAAAC10csANAABYFwAAAGNsYXNzLl9faW5zdGFuY2VjaGVja19fcsENAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2xhc3MuX19pbnN0YW5jZWNoZWNrX19YAQAAAC10csINAABYFgAAAHNlbGVjdC5wb2xsLnVucmVnaXN0ZXJyww0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwudW5yZWdpc3RlclgBAAAALXRyxA0AAFgSAAAAb2JqZWN0Ll9fc2V0YXR0cl9fcsUNAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2V0YXR0cl9fWAEAAAAtdHLGDQAAWCAAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X29wdGlvbnLHDQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfb3B0aW9uWAEAAAAtdHLIDQAAWBIAAABpbWFwbGliLklNQVA0LmNvcHlyyQ0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuY29weVgBAAAALXRyyg0AAFgKAAAAc3RyLnJzcGxpdHLLDQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yc3BsaXRYAQAAAC10cswNAABYEwAAAHRocmVhZGluZy5FdmVudC5zZXRyzQ0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50LnNldFgBAAAALXRyzg0AAFgdAAAAbXVsdGlwcm9jZXNzaW5nLlJMb2NrLnJlbGVhc2Vyzw0AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlJMb2NrLnJlbGVhc2VYAQAAAC10ctANAABYFgAAAHRhcmZpbGUuVGFySW5mby5pc2ZpbGVy0Q0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2ZpbGVYAQAAAC10ctINAABYEgAAAG1haWxib3guQmFieWwubG9ja3LTDQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bC5sb2NrWAEAAAAtdHLUDQAAWBkAAABsb2dnaW5nLkxvZ2dlci5maW5kQ2FsbGVyctUNAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5maW5kQ2FsbGVyWAEAAAAtdHLWDQAAWBgAAABkZWNpbWFsLkRlY2ltYWwuY29weV9hYnNy1w0AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb3B5X2Fic1gBAAAALXRy2A0AAFgaAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmtleXNy2Q0AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5rZXlzWAEAAAAtdHLaDQAAWB8AAAB4bWwuc2F4LlNBWEV4Y2VwdGlvbi5nZXRNZXNzYWdlctsNAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWEV4Y2VwdGlvbi5nZXRNZXNzYWdlWAEAAAAtdHLcDQAAWBAAAABtYWlsYm94Lk1ILmNsb3Nlct0NAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmNsb3NlWAEAAAAtdHLeDQAAWBIAAABwb3BlbjIuUG9wZW4zLnBvbGxy3w0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy5wb2xsWAEAAAAtdHLgDQAAWCgAAABsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlci5lbWl0cuENAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlci5lbWl0WAEAAAAtdHLiDQAAWBkAAABjb2RlY3MuU3RyZWFtV3JpdGVyLnJlc2V0cuMNAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1Xcml0ZXIucmVzZXRYAQAAAC10cuQNAABYGAAAAF93aW5yZWcuUHlIS0VZLl9fZW50ZXJfX3LlDQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5QeUhLRVkuX19lbnRlcl9fWAEAAAAtdHLmDQAAWBwAAABhYmMuQUJDTWV0YS5fX3N1YmNsYXNzaG9va19fcucNAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkNNZXRhLl9fc3ViY2xhc3Nob29rX19YAQAAAC10cugNAABYJQAAAGNvb2tpZWxpYi5Db29raWUuc2V0X25vbnN0YW5kYXJkX2F0dHJy6Q0AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5zZXRfbm9uc3RhbmRhcmRfYXR0clgBAAAALXRy6g0AAFgRAAAAYmRiLkJkYi51c2VyX2NhbGxy6w0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi51c2VyX2NhbGxYAQAAAC10cuwNAABYFAAAAGltYXBsaWIuSU1BUDQuY3JlYXRlcu0NAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNyZWF0ZVgBAAAALXRy7g0AAFgQAAAAdHRrLlRyZWV2aWV3LnNldHLvDQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2V0WAEAAAAtdHLwDQAAWBUAAABtc2lsaWIuRGlhbG9nLmNvbnRyb2xy8Q0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5jb250cm9sWAEAAAAtdHLyDQAAWBwAAAB3YXZlLldhdmVfd3JpdGUuc2V0c2FtcHdpZHRocvMNAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0c2FtcHdpZHRoWAEAAAAtdHL0DQAAWBsAAABodG1sbGliLkhUTUxQYXJzZXIuc2F2ZV9iZ25y9Q0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI2h0bWxsaWIuSFRNTFBhcnNlci5zYXZlX2JnblgBAAAALXRy9g0AAFhGAAAAU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9uc3L3DQAAKGpzBQAAanQFAABYgAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zWAEAAAAtdHL4DQAAWBoAAAByZmM4MjIuQWRkcmVzc0xpc3QuX19zdHJfX3L5DQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuQWRkcmVzc0xpc3QuX19zdHJfX1gBAAAALXRy+g0AAFg0AAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHL7DQAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBYAQAAAC10cvwNAABYGAAAAHNvY2tldC5zb2NrZXQuY29ubmVjdF9leHL9DQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmNvbm5lY3RfZXhYAQAAAC10cv4NAABYGQAAAGN1cnNlcy5wYW5lbC5QYW5lbC5ib3R0b21y/w0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLmJvdHRvbVgBAAAALXRyAA4AAFgvAAAAd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlci5oYW5kbGVyAQ4AAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuaGFuZGxlWAEAAAAtdHICDgAAWBkAAABkYXRldGltZS5kYXRldGltZS53ZWVrZGF5cgMOAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUud2Vla2RheVgBAAAALXRyBA4AAFgkAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuYXBwZW5kcgUOAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmFwcGVuZFgBAAAALXRyBg4AAFgZAAAAZGVjaW1hbC5EZWNpbWFsLmlzX25vcm1hbHIHDgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX25vcm1hbFgBAAAALXRyCA4AAFgSAAAAaW8uVGV4dElPQmFzZS5zZWVrcgkOAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5zZWVrWAEAAAAtdHIKDgAAWB4AAABsb2dnaW5nLk51bGxIYW5kbGVyLmNyZWF0ZUxvY2tyCw4AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuTnVsbEhhbmRsZXIuY3JlYXRlTG9ja1gBAAAALXRyDA4AAFgRAAAAb2JqZWN0Ll9fZGVsZXRlX19yDQ4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kZWxldGVfX1gBAAAALXRyDg4AAFgeAAAAY29kZWNzLlN0cmVhbVdyaXRlci53cml0ZWxpbmVzcg8OAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc1gBAAAALXRyEA4AAFgWAAAAbG9nZ2luZy5IYW5kbGVyLmhhbmRsZXIRDgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmhhbmRsZVgBAAAALXRyEg4AAFgPAAAAcG9wbGliLlBPUDMudG9wchMOAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnRvcFgBAAAALXRyFA4AAFgWAAAAaW1hcGxpYi5JTUFQNC5teXJpZ2h0c3IVDgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5teXJpZ2h0c1gBAAAALXRyFg4AAFgnAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc3RkZXJychcOAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmdldF9zdGRlcnJYAQAAAC10chgOAABYEQAAAFF1ZXVlLlF1ZXVlLmVtcHR5chkOAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUXVldWUuZW1wdHlYAQAAAC10choOAABYGAAAAHN1bmF1LkFVX3JlYWQuZ2V0bmZyYW1lc3IbDgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bmZyYW1lc1gBAAAALXRyHA4AAFgLAAAAc3RyLmlzYWxudW1yHQ4AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXNhbG51bVgBAAAALXRyHg4AAFgTAAAAcmUuUmVnZXhPYmplY3Quc3VibnIfDgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnN1Ym5YAQAAAC10ciAOAABYDQAAAGJkYi5CZGIucmVzZXRyIQ4AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5yZXNldFgBAAAALXRyIg4AAFgOAAAAb2JqZWN0Ll9fcG9zX19yIw4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19wb3NfX1gBAAAALXRyJA4AAFgXAAAAcHN0YXRzLlN0YXRzLnN0cmlwX2RpcnNyJQ4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5zdHJpcF9kaXJzWAEAAAAtdHImDgAAWCEAAABkZWNpbWFsLkRlY2ltYWwudG9faW50ZWdyYWxfdmFsdWVyJw4AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbF92YWx1ZVgBAAAALXRyKA4AAFgfAAAAbWFpbGJveC5tYm94TWVzc2FnZS5yZW1vdmVfZmxhZ3IpDgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5yZW1vdmVfZmxhZ1gBAAAALXRyKg4AAFgdAAAATWluaUFFRnJhbWUuQUVTZXJ2ZXIuY2FsbGJhY2tyKw4AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWluaWFlZnJhbWUuaHRtbCNNaW5pQUVGcmFtZS5BRVNlcnZlci5jYWxsYmFja1gBAAAALXRyLA4AAFgaAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmZ1bGxyLQ4AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmZ1bGxYAQAAAC10ci4OAABYEwAAAGltYXBsaWIuSU1BUDQubG9naW5yLw4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubG9naW5YAQAAAC10cjAOAABYFgAAAHNobGV4LnNobGV4LnJlYWRfdG9rZW5yMQ4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5yZWFkX3Rva2VuWAEAAAAtdHIyDgAAWBIAAABubnRwbGliLk5OVFAueHBhdGhyMw4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC54cGF0aFgBAAAALXRyNA4AAFgOAAAAb2JqZWN0Ll9fcG93X19yNQ4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19wb3dfX1gBAAAALXRyNg4AAFgYAAAAeGRybGliLlBhY2tlci5nZXRfYnVmZmVycjcOAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIuZ2V0X2J1ZmZlclgBAAAALXRyOA4AAFggAAAAY2FsZW5kYXIuSFRNTENhbGVuZGFyLmZvcm1hdHllYXJyOQ4AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhclgBAAAALXRyOg4AAFgJAAAAc3RyLnRpdGxlcjsOAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnRpdGxlWAEAAAAtdHI8DgAAWB4AAABiejIuQloyRGVjb21wcmVzc29yLmRlY29tcHJlc3NyPQ4AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzWAEAAAAtdHI+DgAAWBIAAABzdW5hdS5BVV9yZWFkLnRlbGxyPw4AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLnRlbGxYAQAAAC10ckAOAABYFwAAAGJkYi5CZGIuZ2V0X2ZpbGVfYnJlYWtzckEOAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZ2V0X2ZpbGVfYnJlYWtzWAEAAAAtdHJCDgAAWA8AAABvYmplY3QuX19ybXVsX19yQw4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ybXVsX19YAQAAAC10ckQOAABYGwAAAGh0bWxsaWIuSFRNTFBhcnNlci5zYXZlX2VuZHJFDgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLnNhdmVfZW5kWAEAAAAtdHJGDgAAWBUAAAB4bWwuZG9tLk5vZGVMaXN0Lml0ZW1yRw4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZUxpc3QuaXRlbVgBAAAALXRySA4AAFgKAAAAZmlsZS5mbHVzaHJJDgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUuZmx1c2hYAQAAAC10ckoOAABYGAAAAHppcGZpbGUuWmlwRmlsZS5uYW1lbGlzdHJLDgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLm5hbWVsaXN0WAEAAAAtdHJMDgAAWBUAAABzb2NrZXQuc29ja2V0LnNlbmRhbGxyTQ4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kYWxsWAEAAAAtdHJODgAAWBoAAABkZWNpbWFsLkNvbnRleHQuZGl2aWRlX2ludHJPDgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmRpdmlkZV9pbnRYAQAAAC10clAOAABYJAAAAGRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfc3VjY2Vzc3JRDgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9zdWNjZXNzWAEAAAAtdHJSDgAAWCQAAAB4bWwuZG9tLkRPTUltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmVyUw4AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRE9NSW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZVgBAAAALXRyVA4AAFgoAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmNhbmNlbF9qb2luX3RocmVhZHJVDgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuY2FuY2VsX2pvaW5fdGhyZWFkWAEAAAAtdHJWDgAAWB0AAAB1cmxsaWIuVVJMb3BlbmVyLm9wZW5fdW5rbm93bnJXDgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyLm9wZW5fdW5rbm93blgBAAAALXRyWA4AAFgbAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3VudGlsclkOAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF91bnRpbFgBAAAALXRyWg4AAFgQAAAAcG9wbGliLlBPUDMudWlkbHJbDgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy51aWRsWAEAAAAtdHJcDgAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19zZXRpdGVtX19yXQ4AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX3NldGl0ZW1fX1gBAAAALXRyXg4AAFgUAAAAbWFpbGJveC5CYWJ5bC51bmxvY2tyXw4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWwudW5sb2NrWAEAAAAtdHJgDgAAWBgAAABtc2lsaWIuRGlhbG9nLnB1c2hidXR0b25yYQ4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5wdXNoYnV0dG9uWAEAAAAtdHJiDgAAWBgAAABjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmRyYw4AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmRYAQAAAC10cmQOAABYHwAAAG1haWxib3guTWFpbGRpck1lc3NhZ2UuYWRkX2ZsYWdyZQ4AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UuYWRkX2ZsYWdYAQAAAC10cmYOAABYGQAAAHdhdmUuV2F2ZV9yZWFkLmdldG1hcmtlcnNyZw4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldG1hcmtlcnNYAQAAAC10cmgOAABYDwAAAG9iamVjdC5fX2l0ZXJfX3JpDgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2l0ZXJfX1gBAAAALXRyag4AAFgQAAAAbXV0ZXgubXV0ZXgubG9ja3JrDgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdXRleC5odG1sI211dGV4Lm11dGV4LmxvY2tYAQAAAC10cmwOAABYEwAAAHRpbWVpdC5UaW1lci50aW1laXRybQ4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyLnRpbWVpdFgBAAAALXRybg4AAFgzAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudENhdGVnb3J5cm8OAAAoanMFAABqdAUAAFhrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmdldEV2ZW50Q2F0ZWdvcnlYAQAAAC10cnAOAABYLAAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydERvY3VtZW50cnEOAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydERvY3VtZW50WAEAAAAtdHJyDgAAWBwAAABtaW1ldG9vbHMuTWVzc2FnZS5nZXRzdWJ0eXBlcnMOAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5NZXNzYWdlLmdldHN1YnR5cGVYAQAAAC10cnQOAABYIAAAAHBwcmludC5QcmV0dHlQcmludGVyLmlzcmVjdXJzaXZlcnUOAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5QcmV0dHlQcmludGVyLmlzcmVjdXJzaXZlWAEAAAAtdHJ2DgAAWBMAAABtYWlsYm94Lk1ILmdldF9maWxlcncOAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmdldF9maWxlWAEAAAAtdHJ4DgAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIucmVwb3J0X3VuYmFsYW5jZWRyeQ4AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5yZXBvcnRfdW5iYWxhbmNlZFgBAAAALXRyeg4AAFgfAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfaW5mb3J7DgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfaW5mb1gBAAAALXRyfA4AAFggAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuaXNfYWxpdmVyfQ4AAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuaXNfYWxpdmVYAQAAAC10cn4OAABYCQAAAHN0ci5zdHJpcHJ/DgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zdHJpcFgBAAAALXRygA4AAFgiAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jaGFyc2V0c3KBDgAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jaGFyc2V0c1gBAAAALXRygg4AAFgsAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLmNvbm5lY3Rygw4AAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLmNvbm5lY3RYAQAAAC10coQOAABYFwAAAGltYXBsaWIuSU1BUDQubmFtZXNwYWNlcoUOAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lm5hbWVzcGFjZVgBAAAALXRyhg4AAFgYAAAAbWhsaWIuRm9sZGVyLmdldGZ1bGxuYW1lcocOAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLmdldGZ1bGxuYW1lWAEAAAAtdHKIDgAAWBcAAABjb2xsZWN0aW9ucy5kZXF1ZS5jbGVhcnKJDgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLmNsZWFyWAEAAAAtdHKKDgAAWCAAAABjb2RlLkludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdHKLDgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUuaW50ZXJhY3RYAQAAAC10cowOAABYEAAAAGZsLmZvcm0uYWRkX2RpYWxyjQ4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9kaWFsWAEAAAAtdHKODgAAWBcAAABtaGxpYi5Gb2xkZXIuZ2V0Y3VycmVudHKPDgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5nZXRjdXJyZW50WAEAAAAtdHKQDgAAWB0AAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2RvdWJsZXKRDgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2RvdWJsZVgBAAAALXRykg4AAFgiAAAAeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVOU3KTDgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVOU1gBAAAALXRylA4AAFgXAAAAcHJvZmlsZS5Qcm9maWxlLmRpc2FibGVylQ4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5kaXNhYmxlWAEAAAAtdHKWDgAAWCQAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY2xvc2Vylw4AAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5jbG9zZVgBAAAALXRymA4AAFgtAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVycpkOAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXJYAQAAAC10cpoOAABYFwAAAGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWQxcpsOAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2UucmVhZDFYAQAAAC10cpwOAABYLgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLm9iamVjdF9maWxlbmFtZXNynQ4AAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5vYmplY3RfZmlsZW5hbWVzWAEAAAAtdHKeDgAAWBAAAABtbWFwLm1tYXAucmVzaXplcp8OAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmVzaXplWAEAAAAtdHKgDgAAWB8AAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIuc3VtbWFyaXplcqEOAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIuc3VtbWFyaXplWAEAAAAtdHKiDgAAWAsAAABzdHIuaXN1cHBlcnKjDgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc3VwcGVyWAEAAAAtdHKkDgAAWBIAAABubnRwbGliLk5OVFAuZ3JvdXBypQ4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5ncm91cFgBAAAALXRypg4AAFgjAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkZnBypw4AAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkZnBYAQAAAC10cqgOAABYFAAAAGFiYy5BQkNNZXRhLnJlZ2lzdGVycqkOAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkNNZXRhLnJlZ2lzdGVyWAEAAAAtdHKqDgAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnNlZWtyqw4AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5zZWVrWAEAAAAtdHKsDgAAWBoAAABzdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc3KtDgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLndyaXRlZnJhbWVzWAEAAAAtdHKuDgAAWBsAAABkZWNpbWFsLkRlY2ltYWwubG9naWNhbF94b3Jyrw4AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX3hvclgBAAAALXRysA4AAFghAAAAc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9jaGFycmVmcrEOAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWZYAQAAAC10crIOAABYJAAAAHRlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkLnNldHKzDgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQuc2V0WAEAAAAtdHK0DgAAWBQAAABzb2NrZXQuc29ja2V0Lmxpc3RlbnK1DgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0Lmxpc3RlblgBAAAALXRytg4AAFgZAAAAc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydHK3DgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0WAEAAAAtdHK4DgAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRTeXN0ZW1JZHK5DgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFN5c3RlbUlkWAEAAAAtdHK6DgAAWBwAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5leGl0crsOAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZXhpdFgBAAAALXRyvA4AAFgUAAAAaWMuSUMuc2V0dHlwZWNyZWF0b3JyvQ4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5JQy5zZXR0eXBlY3JlYXRvclgBAAAALXRyvg4AAFgfAAAAbWhsaWIuRm9sZGVyLmdldG1lc3NhZ2VmaWxlbmFtZXK/DgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5nZXRtZXNzYWdlZmlsZW5hbWVYAQAAAC10csAOAABYIgAAAHNnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdywQ4AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdYAQAAAC10csIOAABYIQAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb24ucHV0cmVxdWVzdHLDDgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5wdXRyZXF1ZXN0WAEAAAAtdHLEDgAAWA0AAABkaWN0Lml0ZXJrZXlzcsUOAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5pdGVya2V5c1gBAAAALXRyxg4AAFgbAAAAZG9jdGVzdC5Eb2NUZXN0UGFyc2VyLnBhcnNlcscOAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIucGFyc2VYAQAAAC10csgOAABYHAAAAHR0ay5UcmVldmlldy5pZGVudGlmeV9jb2x1bW5yyQ4AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmlkZW50aWZ5X2NvbHVtblgBAAAALXRyyg4AAFgeAAAAeG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5TcssOAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTlNYAQAAAC10cswOAABYGwAAAGN1cnNlcy53aW5kb3cuaXNfd2ludG91Y2hlZHLNDgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmlzX3dpbnRvdWNoZWRYAQAAAC10cs4OAABYFQAAAGZ0cGxpYi5GVFBfVExTLnByb3RfY3LPDgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5wcm90X2NYAQAAAC10ctAOAABYEQAAAENvb2tpZS5Nb3JzZWwuc2V0ctEOAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwuc2V0WAEAAAAtdHLSDgAAWBYAAABtc2lsaWIuQ29udHJvbC5tYXBwaW5nctMOAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5Db250cm9sLm1hcHBpbmdYAQAAAC10ctQOAABYEgAAAHJleGVjLlJFeGVjLnJfZXhlY3LVDgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfZXhlY1gBAAAALXRy1g4AAFgxAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZ3LXDgAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZ1gBAAAALXRy2A4AAFgWAAAAYWlmYy5haWZjLmdldG5jaGFubmVsc3LZDgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldG5jaGFubmVsc1gBAAAALXRy2g4AAFgTAAAAc3VuYXUuQVVfd3JpdGUudGVsbHLbDgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnRlbGxYAQAAAC10ctwOAABYEQAAAGZsLmZvcm0uZW5kX2dyb3Vwct0OAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5lbmRfZ3JvdXBYAQAAAC10ct4OAABYGQAAAHhtbC5kb20uTmFtZWROb2RlTWFwLml0ZW1y3w4AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTmFtZWROb2RlTWFwLml0ZW1YAQAAAC10cuAOAABYIQAAAGdldHRleHQuR05VVHJhbnNsYXRpb25zLmxuZ2V0dGV4dHLhDgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMubG5nZXR0ZXh0WAEAAAAtdHLiDgAAWB4AAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZvcGFxdWVy4w4AAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19mb3BhcXVlWAEAAAAtdHLkDgAAWCYAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcnLlDgAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlclgBAAAALXRy5g4AAFgKAAAAZmlsZS5jbG9zZXLnDgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUuY2xvc2VYAQAAAC10cugOAABYJQAAAHhtbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVy6Q4AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVYAQAAAC10cuoOAABYHwAAAGZvcm1hdHRlci53cml0ZXIuc2VuZF9wYXJhZ3JhcGhy6w4AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX3BhcmFncmFwaFgBAAAALXRy7A4AAFglAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbHLtDgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbFgBAAAALXRy7g4AAFgoAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFFOYW1lc3LvDgAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRRTmFtZXNYAQAAAC10cvAOAABYKwAAAGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLm1ha2VTb2NrZXRy8Q4AAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLm1ha2VTb2NrZXRYAQAAAC10cvIOAABYQgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9uc3LzDgAAKGpzBQAAanQFAABYfAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNYAQAAAC10cvQOAABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzcvUOAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNYAQAAAC10cvYOAABYIQAAAGN1cnNlcy50ZXh0cGFkLlRleHRib3guZG9fY29tbWFuZHL3DgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmRvX2NvbW1hbmRYAQAAAC10cvgOAABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElucvkOAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SW5YAQAAAC10cvoOAABYLAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfb3B0aW9ucvsOAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlicmFyeV9vcHRpb25YAQAAAC10cvwOAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS53cml0ZXL9DgAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUud3JpdGVYAQAAAC10cv4OAABYGgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5fX2FkZF9fcv8OAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX2FkZF9fWAEAAAAtdHIADwAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BheWxvYWRyAQ8AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGF5bG9hZFgBAAAALXRyAg8AAFgOAAAAbW1hcC5tbWFwLnNpemVyAw8AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5zaXplWAEAAAAtdHIEDwAAWCMAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVtc3IFDwAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVtc1gBAAAALXRyBg8AAFgUAAAAc29ja2V0LnNvY2tldC5hY2NlcHRyBw8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5hY2NlcHRYAQAAAC10cggPAABYEwAAAHN1bmF1LkFVX3JlYWQuY2xvc2VyCQ8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmNsb3NlWAEAAAAtdHIKDwAAWBEAAAB0dGsuVHJlZXZpZXcuYmJveHILDwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuYmJveFgBAAAALXRyDA8AAFgRAAAAYWlmYy5haWZjLnNldG1hcmtyDQ8AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRtYXJrWAEAAAAtdHIODwAAWBYAAABpbWFwbGliLklNQVA0LnJlc3BvbnNlcg8PAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlc3BvbnNlWAEAAAAtdHIQDwAAWBYAAAByZmM4MjIuTWVzc2FnZS5nZXRkYXRlchEPAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldGRhdGVYAQAAAC10chIPAABYFwAAAGJzZGRiLmJzZGRib2JqZWN0LmZpcnN0chMPAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnNkZGJvYmplY3QuZmlyc3RYAQAAAC10chQPAABYJQAAAHhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0U3lzdGVtSWRyFQ8AAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFN5c3RlbUlkWAEAAAAtdHIWDwAAWBMAAABmbC5mb3JtLmZyZWV6ZV9mb3JtchcPAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5mcmVlemVfZm9ybVgBAAAALXRyGA8AAFgOAAAAZnJvemVuc2V0LmNvcHlyGQ8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuY29weVgBAAAALXRyGg8AAFgYAAAAYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNochsPAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoWAEAAAAtdHIcDwAAWAsAAABzdHIuaXN0aXRsZXIdDwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc3RpdGxlWAEAAAAtdHIeDwAAWCsAAABjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIuc2hvd3N5bnRheGVycm9ych8PAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIuc2hvd3N5bnRheGVycm9yWAEAAAAtdHIgDwAAWBIAAABvYmplY3QuX19nZXRpdGVtX19yIQ8AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRpdGVtX19YAQAAAC10ciIPAABYIgAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVzZXRyIw8AAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnJlc2V0WAEAAAAtdHIkDwAAWBwAAABwcm9maWxlLlByb2ZpbGUuY3JlYXRlX3N0YXRzciUPAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUuY3JlYXRlX3N0YXRzWAEAAAAtdHImDwAAWCsAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtcicPAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0Qnl0ZVN0cmVhbVgBAAAALXRyKA8AAFgrAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X2dyb3VwZWRfb3Bjb2Rlc3IpDwAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X2dyb3VwZWRfb3Bjb2Rlc1gBAAAALXRyKg8AAFgRAAAAbm50cGxpYi5OTlRQLmRhdGVyKw8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5kYXRlWAEAAAAtdHIsDwAAWC8AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuZ2V0X3NlcnZlcnItDwAAKGpzBQAAanQFAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuZ2V0X3NlcnZlclgBAAAALXRyLg8AAFgWAAAAaW1hcGxpYi5JTUFQNC5zZXRxdW90YXIvDwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZXRxdW90YVgBAAAALXRyMA8AAFgQAAAAZnJvemVuc2V0LnJlbW92ZXIxDwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5yZW1vdmVYAQAAAC10cjIPAABYFQAAAGRlY2ltYWwuQ29udGV4dC5FdGlueXIzDwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LkV0aW55WAEAAAAtdHI0DwAAWBwAAABzcWxpdGUzLkNvbm5lY3Rpb24uaW50ZXJydXB0cjUPAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uaW50ZXJydXB0WAEAAAAtdHI2DwAAWBwAAABkZWNpbWFsLkRlY2ltYWwuaXNfY2Fub25pY2FscjcPAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfY2Fub25pY2FsWAEAAAAtdHI4DwAAWBIAAABvYmplY3QuX19nZXRhdHRyX19yOQ8AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRhdHRyX19YAQAAAC10cjoPAABYHQAAAHVybGxpYjIuSFRUUEhhbmRsZXIuaHR0cF9vcGVucjsPAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBIYW5kbGVyLmh0dHBfb3BlblgBAAAALXRyPA8AAFg8AAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2luc3RhbmNlcj0PAAAoanMFAABqdAUAAFh2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9pbnN0YW5jZVgBAAAALXRyPg8AAFgRAAAAbm50cGxpYi5OTlRQLm5leHRyPw8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5uZXh0WAEAAAAtdHJADwAAWDMAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmNyQQ8AAChqcwUAAGp0BQAAWGoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwX2FzeW5jWAEAAAAtdHJCDwAAWBsAAAB1bml0dGVzdC5UZXN0U3VpdGUuX19pdGVyX19yQw8AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGUuX19pdGVyX19YAQAAAC10ckQPAABYKQAAAGFzeW5jaGF0LmFzeW5jX2NoYXQuY29sbGVjdF9pbmNvbWluZ19kYXRhckUPAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5jb2xsZWN0X2luY29taW5nX2RhdGFYAQAAAC10ckYPAABYGwAAAHdhdmUuV2F2ZV9yZWFkLmdldHNhbXB3aWR0aHJHDwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0c2FtcHdpZHRoWAEAAAAtdHJIDwAAWB0AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vdHJJDwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90WAEAAAAtdHJKDwAAWCUAAABmaWxlY21wLmRpcmNtcC5yZXBvcnRfcGFydGlhbF9jbG9zdXJlcksPAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yZXBvcnRfcGFydGlhbF9jbG9zdXJlWAEAAAAtdHJMDwAAWBkAAABjb2xsZWN0aW9ucy5kZXF1ZS5wb3BsZWZ0ck0PAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucG9wbGVmdFgBAAAALXRyTg8AAFgWAAAAemxpYi5Db21wcmVzcy5jb21wcmVzc3JPDwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5Db21wcmVzcy5jb21wcmVzc1gBAAAALXRyUA8AAFgWAAAAdGVsbmV0bGliLlRlbG5ldC5jbG9zZXJRDwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LmNsb3NlWAEAAAAtdHJSDwAAWCIAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc0luc3RhbmNlclMPAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNJbnN0YW5jZVgBAAAALXRyVA8AAFgkAAAAc2dtbGxpYi5TR01MUGFyc2VyLmNvbnZlcnRfY29kZXBvaW50clUPAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuY29udmVydF9jb2RlcG9pbnRYAQAAAC10clYPAABYFwAAAGRlY2ltYWwuRGVjaW1hbC5pc19xbmFuclcPAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfcW5hblgBAAAALXRyWA8AAFgkAAAAbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5ydW5fc2NyaXB0clkPAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIucnVuX3NjcmlwdFgBAAAALXRyWg8AAFgXAAAAYXJyYXkuYXJyYXkuYnVmZmVyX2luZm9yWw8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5idWZmZXJfaW5mb1gBAAAALXRyXA8AAFgaAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLnJlcGxhY2VyXQ8AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnJlcGxhY2VYAQAAAC10cl4PAABYEgAAAGlvLlRleHRJT0Jhc2UucmVhZHJfDwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UucmVhZFgBAAAALXRyYA8AAFgbAAAAdXJscGFyc2UuUGFyc2VSZXN1bHQuZ2V0dXJscmEPAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UuUGFyc2VSZXN1bHQuZ2V0dXJsWAEAAAAtdHJiDwAAWCMAAABzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2FnZ3JlZ2F0ZXJjDwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmNyZWF0ZV9hZ2dyZWdhdGVYAQAAAC10cmQPAABYEgAAAG9iamVjdC5fX3RydWVkaXZfX3JlDwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3RydWVkaXZfX1gBAAAALXRyZg8AAFgSAAAAb2JqZWN0Ll9fcmxzaGlmdF9fcmcPAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmxzaGlmdF9fWAEAAAAtdHJoDwAAWBkAAAB3YXZlLldhdmVfcmVhZC5nZXRuZnJhbWVzcmkPAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRuZnJhbWVzWAEAAAAtdHJqDwAAWCIAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3VuaXhmcm9tcmsPAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3VuaXhmcm9tWAEAAAAtdHJsDwAAWBkAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucnVucm0PAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucnVuWAEAAAAtdHJuDwAAWBoAAAB0aHJlYWRpbmcuVGhyZWFkLnNldERhZW1vbnJvDwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLnNldERhZW1vblgBAAAALXRycA8AAFgWAAAAbXNpbGliLkRpYWxvZy5jaGVja2JveHJxDwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLmNoZWNrYm94WAEAAAAtdHJyDwAAWBEAAABtc2lsaWIuQ0FCLmFwcGVuZHJzDwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ0FCLmFwcGVuZFgBAAAALXRydA8AAFgfAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfZXhwdHJ1DwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2V4cHRYAQAAAC10cnYPAABYEAAAAG9iamVjdC5fX2luZGV4X19ydw8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbmRleF9fWAEAAAAtdHJ4DwAAWBYAAAB0ZWxuZXRsaWIuVGVsbmV0LndyaXRlcnkPAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQud3JpdGVYAQAAAC10cnoPAABYHAAAAG1haWxib3guTU1ERk1lc3NhZ2UuYWRkX2ZsYWdyew8AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERk1lc3NhZ2UuYWRkX2ZsYWdYAQAAAC10cnwPAABYEAAAAGFycmF5LmFycmF5LnJlYWRyfQ8AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5yZWFkWAEAAAAtdHJ+DwAAWCMAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5nZXRfcmVxdWVzdHJ/DwAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5nZXRfcmVxdWVzdFgBAAAALXRygA8AAFgTAAAAY3Vyc2VzLndpbmRvdy5hZGRjaHKBDwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmFkZGNoWAEAAAAtdHKCDwAAWBoAAAB4bWwuZG9tLk5vZGUuaGFzQ2hpbGROb2Rlc3KDDwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmhhc0NoaWxkTm9kZXNYAQAAAC10coQPAABYKgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5fc2V0cm9vdHKFDwAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuX3NldHJvb3RYAQAAAC10coYPAABYDgAAAGlvLklPQmFzZS50ZWxscocPAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnRlbGxYAQAAAC10cogPAABYHAAAAGxvZ2dpbmcuTG9nZ2VyLnJlbW92ZUhhbmRsZXJyiQ8AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLnJlbW92ZUhhbmRsZXJYAQAAAC10cooPAABYKwAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnRyiw8AAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnN0YXJ0RWxlbWVudFgBAAAALXRyjA8AAFgaAAAAbG9nZ2luZy5TdHJlYW1IYW5kbGVyLmVtaXRyjQ8AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuU3RyZWFtSGFuZGxlci5lbWl0WAEAAAAtdHKODwAAWA8AAABmdHBsaWIuRlRQLm5sc3Ryjw8AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5ubHN0WAEAAAAtdHKQDwAAWBoAAABpby5CdWZmZXJlZElPQmFzZS5yZWFkaW50b3KRDwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRpbnRvWAEAAAAtdHKSDwAAWCQAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRHcmVhdGVyRXF1YWxykw8AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRHcmVhdGVyRXF1YWxYAQAAAC10cpQPAABYFQAAAHJlLk1hdGNoT2JqZWN0Lmdyb3Vwc3KVDwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0Lmdyb3Vwc1gBAAAALXRylg8AAFgUAAAAdHRrLlByb2dyZXNzYmFyLnN0b3Bylw8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlByb2dyZXNzYmFyLnN0b3BYAQAAAC10cpgPAABYCwAAAGRpY3QudmFsdWVzcpkPAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC52YWx1ZXNYAQAAAC10cpoPAABYGQAAAHppcGZpbGUuUHlaaXBGaWxlLndyaXRlcHlymw8AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuUHlaaXBGaWxlLndyaXRlcHlYAQAAAC10cpwPAABYKAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnByZXByb2Nlc3NynQ8AAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5wcmVwcm9jZXNzWAEAAAAtdHKeDwAAWBgAAABtYWlsYm94Lk1ILnJlbW92ZV9mb2xkZXJynw8AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucmVtb3ZlX2ZvbGRlclgBAAAALXRyoA8AAFgUAAAAY3Vyc2VzLndpbmRvdy5zeW5jdXByoQ8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zeW5jdXBYAQAAAC10cqIPAABYHwAAAHRlbG5ldGxpYi5UZWxuZXQucmVhZF92ZXJ5X2xhenlyow8AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX3ZlcnlfbGF6eVgBAAAALXRypA8AAFg8AAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2Z1bmN0aW9ucqUPAAAoanMFAABqdAUAAFh2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9mdW5jdGlvblgBAAAALXRypg8AAFgUAAAAcmUuUmVnZXhPYmplY3Quc3BsaXRypw8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdC5zcGxpdFgBAAAALXRyqA8AAFgWAAAAbG9nZ2luZy5IYW5kbGVyLmZvcm1hdHKpDwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmZvcm1hdFgBAAAALXRyqg8AAFgsAAAAeG1scnBjbGliLlNlcnZlclByb3h5LnN5c3RlbS5tZXRob2RTaWduYXR1cmVyqw8AAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlNlcnZlclByb3h5LnN5c3RlbS5tZXRob2RTaWduYXR1cmVYAQAAAC10cqwPAABYHwAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX3JlYWRyrQ8AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9yZWFkWAEAAAAtdHKuDwAAWCkAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdldG9wdHKvDwAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5mYW5jeV9nZXRvcHQuRmFuY3lHZXRvcHQuZ2V0b3B0WAEAAAAtdHKwDwAAWCUAAABjb29raWVsaWIuQ29va2llUG9saWN5LnBhdGhfcmV0dXJuX29rcrEPAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVQb2xpY3kucGF0aF9yZXR1cm5fb2tYAQAAAC10crIPAABYFgAAAGJzZGRiLmJzZGRib2JqZWN0LmtleXNysw8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5rZXlzWAEAAAAtdHK0DwAAWA8AAABvYmplY3QuX19pbW9kX19ytQ8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbW9kX19YAQAAAC10crYPAABYFgAAAGN1cnNlcy53aW5kb3cubXZkZXJ3aW5ytw8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdmRlcndpblgBAAAALXRyuA8AAFgxAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnNldERvY3VtZW50TG9jYXRvcnK5DwAAKGpzBQAAanQFAABYaAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yWAEAAAAtdHK6DwAAWBcAAABtYWlsYm94Lk1haWxib3gucG9waXRlbXK7DwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnBvcGl0ZW1YAQAAAC10crwPAABYIQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVhZHK9DwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVhZFgBAAAALXRyvg8AAFgbAAAAdGhyZWFkaW5nLkNvbmRpdGlvbi5yZWxlYXNlcr8PAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ucmVsZWFzZVgBAAAALXRywA8AAFgkAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX2Vycm9ycsEPAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9lcnJvclgBAAAALXRywg8AAFgXAAAAc3RyaW5nLkZvcm1hdHRlci5mb3JtYXRyww8AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5mb3JtYXRYAQAAAC10csQPAABYGAAAAG1haWxib3guTUguc2V0X3NlcXVlbmNlc3LFDwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5zZXRfc2VxdWVuY2VzWAEAAAAtdHLGDwAAWAkAAABzdHIuemZpbGxyxw8AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuemZpbGxYAQAAAC10csgPAABYLwAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmNsb3NlcskPAAAoanMFAABqdAUAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmNsb3NlWAEAAAAtdHLKDwAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRQdWJsaWNJZHLLDwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFB1YmxpY0lkWAEAAAAtdHLMDwAAWBYAAABkYXRldGltZS50emluZm8udHpuYW1lcs0PAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLnR6bmFtZVgBAAAALXRyzg8AAFgiAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc3LPDwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NYAQAAAC10ctAPAABYFQAAAGJkYi5CZGIuZGlzcGF0Y2hfbGluZXLRDwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmRpc3BhdGNoX2xpbmVYAQAAAC10ctIPAABYJwAAAGxvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5mbHVzaHLTDwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmZsdXNoWAEAAAAtdHLUDwAAWCEAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIucHJpbnRfdXNhZ2Vy1Q8AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIucHJpbnRfdXNhZ2VYAQAAAC10ctYPAABYJAAAAGNvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvci5kaXNwYXRjaHLXDwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvci5kaXNwYXRjaFgBAAAALXRy2A8AAFgiAAAAc3ltdGFibGUuU3ltYm9sLmlzX2RlY2xhcmVkX2dsb2JhbHLZDwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19kZWNsYXJlZF9nbG9iYWxYAQAAAC10ctoPAABYFAAAAHNzbC5TU0xTb2NrZXQuY2lwaGVyctsPAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuY2lwaGVyWAEAAAAtdHLcDwAAWBwAAAB4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlct0PAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlWAEAAAAtdHLeDwAAWCAAAABjYWxlbmRhci5DYWxlbmRhci5pdGVybW9udGhkYXRlc3LfDwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRhdGVzWAEAAAAtdHLgDwAAWCkAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5jbG9zZXLhDwAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5jbG9zZVgBAAAALXRy4g8AAFgiAAAAbG9nZ2luZy5sb2dnaW5nLkZvcm1hdHRlci5fX2luaXRfX3LjDwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sI2xvZ2dpbmcubG9nZ2luZy5Gb3JtYXR0ZXIuX19pbml0X19YAQAAAC10cuQPAABYGAAAAHVybGxpYjIuUmVxdWVzdC5nZXRfdHlwZXLlDwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF90eXBlWAEAAAAtdHLmDwAAWB4AAABzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZW1hbnly5w8AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlbWFueVgBAAAALXRy6A8AAFgcAAAAY29va2llbGliLkZpbGVDb29raWVKYXIuc2F2ZXLpDwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5zYXZlWAEAAAAtdHLqDwAAWBkAAABzeW10YWJsZS5TeW1ib2wuaXNfZ2xvYmFscusPAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2dsb2JhbFgBAAAALXRy7A8AAFgWAAAAZGVjaW1hbC5Db250ZXh0LmRpdm1vZHLtDwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmRpdm1vZFgBAAAALXRy7g8AAFgQAAAAcG9wbGliLlBPUDMuYXBvcHLvDwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5hcG9wWAEAAAAtdHLwDwAAWBMAAABzbXRwbGliLlNNVFAudmVyaWZ5cvEPAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAudmVyaWZ5WAEAAAAtdHLyDwAAWCcAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0UHJvcGVydHly8w8AAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0UHJvcGVydHlYAQAAAC10cvQPAABYFAAAAGZyb3plbnNldC5kaWZmZXJlbmNlcvUPAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmRpZmZlcmVuY2VYAQAAAC10cvYPAABYEQAAAHNtdHBsaWIuU01UUC5oZWxvcvcPAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuaGVsb1gBAAAALXRy+A8AAFgfAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ3L5DwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ1gBAAAALXRy+g8AAFghAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFscvsPAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFsWAEAAAAtdHL8DwAAWBgAAABpby5CdWZmZXJlZElPQmFzZS5kZXRhY2hy/Q8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5kZXRhY2hYAQAAAC10cv4PAABYHQAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnJhdGlvcv8PAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5yYXRpb1gBAAAALXRyABAAAFgTAAAAbWFpbGJveC5NYWlsZGlyLmFkZHIBEAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmFkZFgBAAAALXRyAhAAAFglAAAAZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZXIDEAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUucmVhZGxpbmVYAQAAAC10cgQQAABYJQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uub2J1ZmZyZWVyBRAAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZmcmVlWAEAAAAtdHIGEAAAWBMAAABkZWNpbWFsLkRlY2ltYWwuZm1hcgcQAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuZm1hWAEAAAAtdHIIEAAAWBUAAABkZWNpbWFsLkNvbnRleHQubG9nMTByCRAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2cxMFgBAAAALXRyChAAAFguAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkNvbmRpdGlvbnILEAAAKGpzBQAAanQFAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuQ29uZGl0aW9uWAEAAAAtdHIMEAAAWB8AAABtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5wb2xscg0QAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLnBvbGxYAQAAAC10cg4QAABYGgAAAHByb2ZpbGUuUHJvZmlsZS5kdW1wX3N0YXRzcg8QAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUuZHVtcF9zdGF0c1gBAAAALXRyEBAAAFgXAAAAbG9nZ2luZy5IYW5kbGVyLmFjcXVpcmVyERAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5hY3F1aXJlWAEAAAAtdHISEAAAWBcAAABtaGxpYi5NSC5saXN0c3ViZm9sZGVyc3ITEAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1ILmxpc3RzdWJmb2xkZXJzWAEAAAAtdHIUEAAAWCAAAABtYWlsYm94LkJhYnlsTWVzc2FnZS5nZXRfdmlzaWJsZXIVEAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UuZ2V0X3Zpc2libGVYAQAAAC10chYQAABYIQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY2hhcnNldHIXEAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jaGFyc2V0WAEAAAAtdHIYEAAAWBYAAABhaWZjLmFpZmMuc2V0bmNoYW5uZWxzchkQAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0bmNoYW5uZWxzWAEAAAAtdHIaEAAAWCMAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIucmVtb3ZlX29wdGlvbnIbEAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5yZW1vdmVfb3B0aW9uWAEAAAAtdHIcEAAAWBkAAABwaWNrbGUuUGlja2xlci5jbGVhcl9tZW1vch0QAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLmNsZWFyX21lbW9YAQAAAC10ch4QAABYFwAAAGJzZGRiLmJzZGRib2JqZWN0LmNsb3Nlch8QAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnNkZGJvYmplY3QuY2xvc2VYAQAAAC10ciAQAABYHgAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3NpZ25hbHIhEAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfc2lnbmFsWAEAAAAtdHIiEAAAWBUAAAB0aHJlYWRpbmcuVGhyZWFkLmpvaW5yIxAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5qb2luWAEAAAAtdHIkEAAAWDAAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdlbmVyYXRlX2hlbHByJRAAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdlbmVyYXRlX2hlbHBYAQAAAC10ciYQAABYGwAAAGZvcm1hdHRlci53cml0ZXIubmV3X3N0eWxlc3InEAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLm5ld19zdHlsZXNYAQAAAC10cigQAABYEQAAAG9iamVjdC5fX2xzaGlmdF9fcikQAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbHNoaWZ0X19YAQAAAC10cioQAABYEwAAAHpsaWIuQ29tcHJlc3MuZmx1c2hyKxAAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuZmx1c2hYAQAAAC10ciwQAABYDQAAAG9iamVjdC5fX2dlX19yLRAAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZV9fWAEAAAAtdHIuEAAAWCIAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3Nlci8QAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5jbG9zZVgBAAAALXRyMBAAAFgRAAAAYmRiLkJkYi5zZXRfYnJlYWtyMRAAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfYnJlYWtYAQAAAC10cjIQAABYLAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnVuZGVmaW5lX21hY3JvcjMQAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIudW5kZWZpbmVfbWFjcm9YAQAAAC10cjQQAABYJgAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRGZWF0dXJlcjUQAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldEZlYXR1cmVYAQAAAC10cjYQAABYEgAAAHJleGVjLlJFeGVjLnJfb3BlbnI3EAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfb3BlblgBAAAALXRyOBAAAFgjAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5zZWN0aW9uX2RpdmlkZXJyORAAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5zZWN0aW9uX2RpdmlkZXJYAQAAAC10cjoQAABYHwAAAENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIuaXRlbXNyOxAAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlci5pdGVtc1gBAAAALXRyPBAAAFgVAAAAeGRybGliLlVucGFja2VyLnJlc2V0cj0QAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5yZXNldFgBAAAALXRyPhAAAFgpAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X2NoYXJzZXRyPxAAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9jaGFyc2V0WAEAAAAtdHJAEAAAWBgAAABsb2dnaW5nLk51bGxIYW5kbGVyLmVtaXRyQRAAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuTnVsbEhhbmRsZXIuZW1pdFgBAAAALXRyQhAAAFgOAAAAY21kLkNtZC5vbmVjbWRyQxAAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5vbmVjbWRYAQAAAC10ckQQAABYFAAAAG5ldHJjLm5ldHJjLl9fcmVwcl9fckUQAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMuX19yZXByX19YAQAAAC10ckYQAABYFgAAAGN1cnNlcy53aW5kb3cuZ2V0cGFyeXhyRxAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRwYXJ5eFgBAAAALXRySBAAAFgKAAAAZGwuZGwuY2FsbHJJEAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmRsLmNhbGxYAQAAAC10ckoQAABYEAAAAHR0ay5Ob3RlYm9vay50YWJySxAAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLnRhYlgBAAAALXRyTBAAAFgOAAAAb2JqZWN0Ll9fc2V0X19yTRAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19zZXRfX1gBAAAALXRyThAAAFgTAAAAbWhsaWIuTUguc2V0Y29udGV4dHJPEAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1ILnNldGNvbnRleHRYAQAAAC10clAQAABYHgAAAGJzZGRiLmJzZGRib2JqZWN0LnNldF9sb2NhdGlvbnJREAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJzZGRib2JqZWN0LnNldF9sb2NhdGlvblgBAAAALXRyUhAAAFgSAAAAb2JqZWN0Ll9fc2V0aXRlbV9fclMQAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2V0aXRlbV9fWAEAAAAtdHJUEAAAWCIAAABhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9jb25uZWN0clUQAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY29ubmVjdFgBAAAALXRyVhAAAFgbAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZW5kclcQAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLnNlbmRYAQAAAC10clgQAABYMAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcnJZEAAAKGpzBQAAanQFAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvclgBAAAALXRyWhAAAFgdAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X25hbWVyWxAAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfbmFtZVgBAAAALXRyXBAAAFgZAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLndpbmRvd3JdEAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwud2luZG93WAEAAAAtdHJeEAAAWBsAAABkZWNpbWFsLkNvbnRleHQuaXNfaW5maW5pdGVyXxAAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc19pbmZpbml0ZVgBAAAALXRyYBAAAFgWAAAAUXVldWUuUXVldWUucHV0X25vd2FpdHJhEAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLnB1dF9ub3dhaXRYAQAAAC10cmIQAABYLwAAAGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlci5kb1JvbGxvdmVycmMQAAAoanMFAABqdAUAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIuZG9Sb2xsb3ZlclgBAAAALXRyZBAAAFghAAAAc3FsaXRlMy5Db25uZWN0aW9uLnNldF9hdXRob3JpemVycmUQAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X2F1dGhvcml6ZXJYAQAAAC10cmYQAABYKgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5BcnJheXJnEAAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuQXJyYXlYAQAAAC10cmgQAABYGAAAAG1haWxib3guTWFpbGJveC5pdGVya2V5c3JpEAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lml0ZXJrZXlzWAEAAAAtdHJqEAAAWA4AAABzaGEuc2hhLmRpZ2VzdHJrEAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuc2hhLmRpZ2VzdFgBAAAALXRybBAAAFgVAAAAdHRrLlRyZWV2aWV3LmlkZW50aWZ5cm0QAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5pZGVudGlmeVgBAAAALXRybhAAAFgQAAAAUXVldWUuUXVldWUuZnVsbHJvEAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmZ1bGxYAQAAAC10cnAQAABYHQAAAHNzbC5TU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlcnEQAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlWAEAAAAtdHJyEAAAWBsAAAB0YXJmaWxlLlRhckluZm8uZnJvbXRhcmZpbGVycxAAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5mcm9tdGFyZmlsZVgBAAAALXRydBAAAFgVAAAAc2VsZWN0LmVwb2xsLnJlZ2lzdGVycnUQAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5yZWdpc3RlclgBAAAALXRydhAAAFgfAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMuZ2V0dGV4dHJ3EAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMuZ2V0dGV4dFgBAAAALXRyeBAAAFgUAAAAYXJyYXkuYXJyYXkuZnJvbWZpbGVyeRAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5mcm9tZmlsZVgBAAAALXRyehAAAFgYAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkcnsQAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMucmVhZFgBAAAALXRyfBAAAFghAAAAc3NsLlNTTENvbnRleHQuc2V0X2FscG5fcHJvdG9jb2xzcn0QAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnNldF9hbHBuX3Byb3RvY29sc1gBAAAALXRyfhAAAFgYAAAAbXNpbGliLkRhdGFiYXNlLk9wZW5WaWV3cn8QAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EYXRhYmFzZS5PcGVuVmlld1gBAAAALXRygBAAAFgkAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50coEQAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50WAEAAAAtdHKCEAAAWBsAAABwcm9maWxlLlByb2ZpbGUucHJpbnRfc3RhdHNygxAAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5wcmludF9zdGF0c1gBAAAALXRyhBAAAFgUAAAAc2VsZWN0LmtxdWV1ZS5maWxlbm9yhRAAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZS5maWxlbm9YAQAAAC10coYQAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5wYXJzZXKHEAAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUucGFyc2VYAQAAAC10cogQAABYGAAAAGRlY2ltYWwuRGVjaW1hbC5hc190dXBsZXKJEAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmFzX3R1cGxlWAEAAAAtdHKKEAAAWBkAAABubnRwbGliLk5OVFAuZGVzY3JpcHRpb25zcosQAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZGVzY3JpcHRpb25zWAEAAAAtdHKMEAAAWBcAAABsb2dnaW5nLkxvZ2dlci5jcml0aWNhbHKNEAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuY3JpdGljYWxYAQAAAC10co4QAABYGQAAAHNvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWVyjxAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5nZXRwZWVybmFtZVgBAAAALXRykBAAAFgUAAAAbm50cGxpYi5OTlRQLnhndGl0bGVykRAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC54Z3RpdGxlWAEAAAAtdHKSEAAAWCYAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVyZmluZHKTEAAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVyZmluZFgBAAAALXRylBAAAFgZAAAAbG9nZ2luZy5Mb2dnZXIuYWRkSGFuZGxlcnKVEAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuYWRkSGFuZGxlclgBAAAALXRylhAAAFgVAAAAdHRrLlN0eWxlLnRoZW1lX25hbWVzcpcQAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS50aGVtZV9uYW1lc1gBAAAALXRymBAAAFgcAAAAaW1wLk51bGxJbXBvcnRlci5maW5kX21vZHVsZXKZEAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuTnVsbEltcG9ydGVyLmZpbmRfbW9kdWxlWAEAAAAtdHKaEAAAWBMAAABvYmplY3QuX19zZXRzbGljZV9fcpsQAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2V0c2xpY2VfX1gBAAAALXRynBAAAFgVAAAAbWFpbGJveC5NYWlsYm94LmNsb3Nlcp0QAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guY2xvc2VYAQAAAC10cp4QAABYEwAAAHRocmVhZC5sb2NrLmFjcXVpcmVynxAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmxvY2suYWNxdWlyZVgBAAAALXRyoBAAAFgcAAAAZGVjaW1hbC5Db250ZXh0LnNhbWVfcXVhbnR1bXKhEAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnNhbWVfcXVhbnR1bVgBAAAALXRyohAAAFgXAAAAY3Vyc2VzLndpbmRvdy5ub3RpbWVvdXRyoxAAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ub3RpbWVvdXRYAQAAAC10cqQQAABYEQAAAG1haWxib3gubWJveC5sb2NrcqUQAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3gubG9ja1gBAAAALXRyphAAAFgUAAAAc3VuYXUuQVVfcmVhZC5yZXdpbmRypxAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLnJld2luZFgBAAAALXRyqBAAAFgnAAAAdXJsbGliMi5SZXF1ZXN0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVycqkQAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXJYAQAAAC10cqoQAABYFwAAAHRlbG5ldGxpYi5UZWxuZXQuZmlsZW5vcqsQAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuZmlsZW5vWAEAAAAtdHKsEAAAWCMAAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2VudGl0eXJlZnKtEAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9lbnRpdHlyZWZYAQAAAC10cq4QAABYHgAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkU3VjY2Vzc3KvEAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkU3VjY2Vzc1gBAAAALXRysBAAAFgZAAAAaW1hcGxpYi5JTUFQNC51bnN1YnNjcmliZXKxEAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC51bnN1YnNjcmliZVgBAAAALXRyshAAAFgUAAAAdHRrLkNvbWJvYm94LmN1cnJlbnRysxAAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLkNvbWJvYm94LmN1cnJlbnRYAQAAAC10crQQAABYFwAAAG11bHRpZmlsZS5NdWx0aUZpbGUucG9wcrUQAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGUucG9wWAEAAAAtdHK2EAAAWBIAAAByZS5NYXRjaE9iamVjdC5lbmRytxAAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5lbmRYAQAAAC10crgQAABYEwAAAG1obGliLk1ILm1ha2Vmb2xkZXJyuRAAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5tYWtlZm9sZGVyWAEAAAAtdHK6EAAAWBMAAABkZWNpbWFsLkRlY2ltYWwubWlucrsQAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubWluWAEAAAAtdHK8EAAAWCAAAAB1bml0dGVzdC5UZXN0Q2FzZS5jb3VudFRlc3RDYXNlc3K9EAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmNvdW50VGVzdENhc2VzWAEAAAAtdHK+EAAAWBcAAABjdXJzZXMud2luZG93LnRvdWNobGluZXK/EAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnRvdWNobGluZVgBAAAALXRywBAAAFgkAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaW5zZXJ0csEQAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lmluc2VydFgBAAAALXRywhAAAFg0AAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbnLDEAAAKGpzBQAAanQFAABYawAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uWAEAAAAtdHLEEAAAWCUAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm5vbmJsb2NrcsUQAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5ub25ibG9ja1gBAAAALXRyxhAAAFgvAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3NyxxAAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJnc1gBAAAALXRyyBAAAFgOAAAAZGljdC52aWV3aXRlbXNyyRAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnZpZXdpdGVtc1gBAAAALXRyyhAAAFgbAAAAc3ltdGFibGUuU3ltYm9sVGFibGUubG9va3VwcssQAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUubG9va3VwWAEAAAAtdHLMEAAAWBAAAABwb3BsaWIuUE9QMy5saXN0cs0QAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLmxpc3RYAQAAAC10cs4QAABYJQAAAHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkuaXRlcmtleXJlZnNyzxAAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkuaXRlcmtleXJlZnNYAQAAAC10ctAQAABYFQAAAGFzdC5Ob2RlVmlzaXRvci52aXNpdHLREAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVZpc2l0b3IudmlzaXRYAQAAAC10ctIQAABYIwAAAGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5lbWl0ctMQAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW1pdFgBAAAALXRy1BAAAFgdAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxy1RAAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbFgBAAAALXRy1hAAAFgZAAAAc3FsaXRlMy5Db25uZWN0aW9uLmNvbW1pdHLXEAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmNvbW1pdFgBAAAALXRy2BAAAFgcAAAAeGRybGliLlVucGFja2VyLnNldF9wb3NpdGlvbnLZEAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIuc2V0X3Bvc2l0aW9uWAEAAAAtdHLaEAAAWBQAAABpbWFwbGliLklNQVA0LnNlbGVjdHLbEAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZWxlY3RYAQAAAC10ctwQAABYEAAAAGNodW5rLkNodW5rLnRlbGxy3RAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay50ZWxsWAEAAAAtdHLeEAAAWBEAAABtc2lsaWIuQ0FCLmNvbW1pdHLfEAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ0FCLmNvbW1pdFgBAAAALXRy4BAAAFgOAAAAb2JqZWN0Ll9fb2N0X19y4RAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19vY3RfX1gBAAAALXRy4hAAAFgOAAAAb2JqZWN0Ll9fY21wX19y4xAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jbXBfX1gBAAAALXRy5BAAAFgWAAAAcHJvZmlsZS5Qcm9maWxlLmVuYWJsZXLlEAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLmVuYWJsZVgBAAAALXRy5hAAAFgWAAAAaG90c2hvdC5Qcm9maWxlLnJ1bmN0eHLnEAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnJ1bmN0eFgBAAAALXRy6BAAAFgXAAAAcmUuUmVnZXhPYmplY3QuZmluZGl0ZXJy6RAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdC5maW5kaXRlclgBAAAALXRy6hAAAFgXAAAAZnRwbGliLkZUUC5udHJhbnNmZXJjbWRy6xAAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5udHJhbnNmZXJjbWRYAQAAAC10cuwQAABYIQAAAEZyYW1lV29yay5BcHBsaWNhdGlvbi5hc3luY2V2ZW50c3LtEAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb24uYXN5bmNldmVudHNYAQAAAC10cu4QAABYHAAAAHNzbC5TU0xDb250ZXh0LnNlc3Npb25fc3RhdHNy7xAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2Vzc2lvbl9zdGF0c1gBAAAALXRy8BAAAFgWAAAAZGVjaW1hbC5Db250ZXh0LmlzX25hbnLxEAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX25hblgBAAAALXRy8hAAAFgWAAAAbWFpbGJveC5NYWlsYm94LnVubG9ja3LzEAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnVubG9ja1gBAAAALXRy9BAAAFgiAAAAdW5pdHRlc3QuVGVzdENhc2Uuc2hvcnREZXNjcmlwdGlvbnL1EAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb25YAQAAAC10cvYQAABYHwAAAG1haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2RhdGVy9xAAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2RhdGVYAQAAAC10cvgQAABYGQAAAGN1cnNlcy5wYW5lbC5QYW5lbC5oaWRkZW5y+RAAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGRlblgBAAAALXRy+hAAAFgsAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fZ2V0dmFsdWVy+xAAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fZ2V0dmFsdWVYAQAAAC10cvwQAABYHQAAAGFzdC5Ob2RlVmlzaXRvci5nZW5lcmljX3Zpc2l0cv0QAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5Ob2RlVmlzaXRvci5nZW5lcmljX3Zpc2l0WAEAAAAtdHL+EAAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIuY29udmVydF9lbnRpdHlyZWZy/xAAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5jb252ZXJ0X2VudGl0eXJlZlgBAAAALXRyABEAAFgaAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5hY2NlcHRyAREAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmFjY2VwdFgBAAAALXRyAhEAAFgTAAAAbWhsaWIuTUguZ2V0Y29udGV4dHIDEQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1ILmdldGNvbnRleHRYAQAAAC10cgQRAABYDgAAAG9iamVjdC5fX3N0cl9fcgURAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc3RyX19YAQAAAC10cgYRAABYFgAAAHRocmVhZGluZy5Mb2NrLmFjcXVpcmVyBxEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2suYWNxdWlyZVgBAAAALXRyCBEAAFgbAAAAZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfYW5kcgkRAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9naWNhbF9hbmRYAQAAAC10cgoRAABYFQAAAHNobGV4LnNobGV4LmdldF90b2tlbnILEQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LmdldF90b2tlblgBAAAALXRyDBEAAFgzAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlN0YXJ0RG9jdHlwZURlY2xIYW5kbGVycg0RAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnREb2N0eXBlRGVjbEhhbmRsZXJYAQAAAC10cg4RAABYCAAAAHN0ci5qb2lucg8RAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmpvaW5YAQAAAC10chARAABYEwAAAHR0ay5TdHlsZS50aGVtZV91c2VyEREAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLnRoZW1lX3VzZVgBAAAALXRyEhEAAFgVAAAAbWFpbGJveC5NYWlsZGlyLmZsdXNochMRAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuZmx1c2hYAQAAAC10chQRAABYIwAAAG1haWxib3guQmFieWxNZXNzYWdlLnVwZGF0ZV92aXNpYmxlchURAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS51cGRhdGVfdmlzaWJsZVgBAAAALXRyFhEAAFgOAAAAc3RyLmNhcGl0YWxpemVyFxEAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuY2FwaXRhbGl6ZVgBAAAALXRyGBEAAFgcAAAAcHByaW50LlByZXR0eVByaW50ZXIucGZvcm1hdHIZEQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlci5wZm9ybWF0WAEAAAAtdHIaEQAAWCEAAABGcmFtZVdvcmsuRGlhbG9nV2luZG93LmRvX2l0ZW1oaXRyGxEAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkRpYWxvZ1dpbmRvdy5kb19pdGVtaGl0WAEAAAAtdHIcEQAAWBoAAABiZGIuQmRiLmRpc3BhdGNoX2V4Y2VwdGlvbnIdEQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmRpc3BhdGNoX2V4Y2VwdGlvblgBAAAALXRyHhEAAFgSAAAAbW1hcC5tbWFwLnJlYWRsaW5lch8RAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmVhZGxpbmVYAQAAAC10ciARAABYJgAAAHRlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkLnVuc2V0ciERAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZC51bnNldFgBAAAALXRyIhEAAFgaAAAAY3R5cGVzLl9DRGF0YS5mcm9tX2FkZHJlc3NyIxEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5mcm9tX2FkZHJlc3NYAQAAAC10ciQRAABYFgAAAHNobGV4LnNobGV4LnBvcF9zb3VyY2VyJREAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5wb3Bfc291cmNlWAEAAAAtdHImEQAAWBUAAABzdWJwcm9jZXNzLlBvcGVuLndhaXRyJxEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4ud2FpdFgBAAAALXRyKBEAAFgaAAAAc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVyKREAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlWAEAAAAtdHIqEQAAWB0AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJbnIrEQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEluWAEAAAAtdHIsEQAAWBAAAABwb3BsaWIuUE9QMy5yc2V0ci0RAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnJzZXRYAQAAAC10ci4RAABYGgAAAG1haWxib3guTWFpbGJveC5nZXRfc3RyaW5nci8RAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZ2V0X3N0cmluZ1gBAAAALXRyMBEAAFglAAAAU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5zZXR1cHIxEQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyLnNldHVwWAEAAAAtdHIyEQAAWBsAAABjb29raWVsaWIuQ29va2llLmlzX2V4cGlyZWRyMxEAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5pc19leHBpcmVkWAEAAAAtdHI0EQAAWDYAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGVyNREAAChqcwUAAGp0BQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZVgBAAAALXRyNhEAAFgWAAAAaGFzaGxpYi5oYXNoLmhleGRpZ2VzdHI3EQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmhleGRpZ2VzdFgBAAAALXRyOBEAAFgRAAAAYmRiLkJkYi5zZXRfdW50aWxyOREAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfdW50aWxYAQAAAC10cjoRAABYGQAAAGRlY2ltYWwuRGVjaW1hbC5pc19zaWduZWRyOxEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19zaWduZWRYAQAAAC10cjwRAABYIwAAAGFzeW5jaGF0LmFzeW5jX2NoYXQuY2xvc2Vfd2hlbl9kb25lcj0RAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5jbG9zZV93aGVuX2RvbmVYAQAAAC10cj4RAABYLAAAAHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5yZWRpcmVjdF9yZXF1ZXN0cj8RAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIucmVkaXJlY3RfcmVxdWVzdFgBAAAALXRyQBEAAFgVAAAAdGhyZWFkaW5nLkV2ZW50LmlzU2V0ckERAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC5pc1NldFgBAAAALXRyQhEAAFgPAAAAbWFpbGJveC5NSC5sb2NrckMRAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmxvY2tYAQAAAC10ckQRAABYGwAAAHRocmVhZGluZy5TZW1hcGhvcmUucmVsZWFzZXJFEQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JlLnJlbGVhc2VYAQAAAC10ckYRAABYFAAAAGltYXBsaWIuSU1BUDQuc2VhcmNockcRAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNlYXJjaFgBAAAALXRySBEAAFgPAAAAb2JqZWN0Ll9fY2FsbF9fckkRAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fY2FsbF9fWAEAAAAtdHJKEQAAWDgAAABEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbnJLEQAAKGpzBQAAanQFAABYbwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvblgBAAAALXRyTBEAAFgYAAAAdGhyZWFkaW5nLlRocmVhZC5nZXROYW1lck0RAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuZ2V0TmFtZVgBAAAALXRyThEAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWNjZXB0ck8RAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmFjY2VwdFgBAAAALXRyUBEAAFgXAAAAZmwuZm9ybS5kZWFjdGl2YXRlX2Zvcm1yUREAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmRlYWN0aXZhdGVfZm9ybVgBAAAALXRyUhEAAFgVAAAAc210cGxpYi5TTVRQLnNlbmRtYWlsclMRAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuc2VuZG1haWxYAQAAAC10clQRAABYHgAAAENvb2tpZS5CYXNlQ29va2llLnZhbHVlX2VuY29kZXJVEQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuQmFzZUNvb2tpZS52YWx1ZV9lbmNvZGVYAQAAAC10clYRAABYLQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9pbmNsdWRlX2RpcnJXEQAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9pbmNsdWRlX2RpclgBAAAALXRyWBEAAFgnAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5kb2N0eXBlclkRAAAoanMFAABqdAUAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuZG9jdHlwZVgBAAAALXRyWhEAAFgjAAAAdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIuX21ha2VSZXN1bHRyWxEAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5fbWFrZVJlc3VsdFgBAAAALXRyXBEAAFgiAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLnVua25vd25fZGVjbHJdEQAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLnVua25vd25fZGVjbFgBAAAALXRyXhEAAFgjAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19leHRlbnNpb25yXxEAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19leHRlbnNpb25YAQAAAC10cmARAABYEwAAAGN1cnNlcy53aW5kb3cuZ2V0Y2hyYREAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRjaFgBAAAALXRyYhEAAFgUAAAAbWFpbGJveC5NYWlsYm94LmtleXNyYxEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5rZXlzWAEAAAAtdHJkEQAAWBIAAABmbC5mb3JtLmFkZF9idXR0b25yZREAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9idXR0b25YAQAAAC10cmYRAABYDgAAAG1tYXAubW1hcC5yZWFkcmcRAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmVhZFgBAAAALXRyaBEAAFgnAAAAb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5nZXRfcmVjc3JjcmkRAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5nZXRfcmVjc3JjWAEAAAAtdHJqEQAAWCkAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX291dHB1dHJrEQAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9vdXRwdXRYAQAAAC10cmwRAABYGQAAAGxvZ2dpbmcuSGFuZGxlci5hZGRGaWx0ZXJybREAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5hZGRGaWx0ZXJYAQAAAC10cm4RAABYJgAAAGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaF93aXRoX3Byb2R1Y2Vycm8RAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoX3dpdGhfcHJvZHVjZXJYAQAAAC10cnARAABYGAAAAGRlY2ltYWwuRGVjaW1hbC5hZGp1c3RlZHJxEQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmFkanVzdGVkWAEAAAAtdHJyEQAAWCQAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdC5nZXRycxEAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuZ2V0WAEAAAAtdHJ0EQAAWBUAAABsb2dnaW5nLkxvZ2dlci5maWx0ZXJydREAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmZpbHRlclgBAAAALXRydhEAAFgeAAAAeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVFbGVtZW50cncRAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnRYAQAAAC10cngRAABYIgAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy51bmdldHRleHRyeREAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy51bmdldHRleHRYAQAAAC10cnoRAABYGgAAAGltYXBsaWIuSU1BUDQuZ2V0cXVvdGFyb290cnsRAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmdldHF1b3Rhcm9vdFgBAAAALXRyfBEAAFghAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2NoaWxkcmVucn0RAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2NoaWxkcmVuWAEAAAAtdHJ+EQAAWA4AAABvYmplY3QuX19hYnNfX3J/EQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Fic19fWAEAAAAtdHKAEQAAWCYAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZGF0YXKBEQAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZGF0YVgBAAAALXRyghEAAFgQAAAAdHRrLldpZGdldC5zdGF0ZXKDEQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuV2lkZ2V0LnN0YXRlWAEAAAAtdHKEEQAAWBsAAAB3YXZlLldhdmVfcmVhZC5nZXRmcmFtZXJhdGVyhREAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldGZyYW1lcmF0ZVgBAAAALXRyhhEAAFgXAAAAYmRiLkJkYi5kaXNwYXRjaF9yZXR1cm5yhxEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5kaXNwYXRjaF9yZXR1cm5YAQAAAC10cogRAABYGwAAAGN1cnNlcy50ZXh0cGFkLlRleHRib3guZWRpdHKJEQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmVkaXRYAQAAAC10cooRAABYJAAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lc3KLEQAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lc1gBAAAALXRyjBEAAFgxAAAAU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRHKNEQAAKGpzBQAAanQFAABYaQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWwjU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRFgBAAAALXRyjhEAAFgbAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXR1cGxlco8RAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXR1cGxlWAEAAAAtdHKQEQAAWBYAAABkZWNpbWFsLkNvbnRleHQucm90YXRlcpERAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQucm90YXRlWAEAAAAtdHKSEQAAWCEAAABzcWxpdGUzLkNvbm5lY3Rpb24ubG9hZF9leHRlbnNpb25ykxEAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvblgBAAAALXRylBEAAFggAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfd3JpdGVylREAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV93cml0ZVgBAAAALXRylhEAAFgbAAAAeG1sLmRvbS5taW5pZG9tLk5vZGUudW5saW5rcpcRAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5Ob2RlLnVubGlua1gBAAAALXRymBEAAFgTAAAAZGF0ZXRpbWUuZGF0ZS5jdGltZXKZEQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuY3RpbWVYAQAAAC10cpoRAABYKgAAAHVybGxpYjIuSFRUUFBhc3N3b3JkTWdyLmZpbmRfdXNlcl9wYXNzd29yZHKbEQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3IuZmluZF91c2VyX3Bhc3N3b3JkWAEAAAAtdHKcEQAAWDEAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9ucp0RAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9uWAEAAAAtdHKeEQAAWCIAAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X2ZpbGVuYW1lcp8RAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfZmlsZW5hbWVYAQAAAC10cqARAABYDgAAAHN0ci5leHBhbmR0YWJzcqERAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmV4cGFuZHRhYnNYAQAAAC10cqIRAABYHwAAAG1haWxib3guTUhNZXNzYWdlLnNldF9zZXF1ZW5jZXNyoxEAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUhNZXNzYWdlLnNldF9zZXF1ZW5jZXNYAQAAAC10cqQRAABYEgAAAHNlbGVjdC5lcG9sbC5jbG9zZXKlEQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXBvbGwuY2xvc2VYAQAAAC10cqYRAABYCwAAAHN0ci5yZXBsYWNlcqcRAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJlcGxhY2VYAQAAAC10cqgRAABYKgAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmZpbmRfbG9uZ2VzdF9tYXRjaHKpEQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZmluZF9sb25nZXN0X21hdGNoWAEAAAAtdHKqEQAAWBAAAABwYXJzZXIuU1QudG9saXN0cqsRAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5TVC50b2xpc3RYAQAAAC10cqwRAABYKgAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5EZWZhdWx0SGFuZGxlcnKtEQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkRlZmF1bHRIYW5kbGVyWAEAAAAtdHKuEQAAWBUAAABpbWFwbGliLklNQVA0LnBhcnRpYWxyrxEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucGFydGlhbFgBAAAALXRysBEAAFgaAAAAeGRybGliLlBhY2tlci5wYWNrX2ZvcGFxdWVysREAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2ZvcGFxdWVYAQAAAC10crIRAABYHQAAAHN5bXRhYmxlLkZ1bmN0aW9uLmdldF9nbG9iYWxzcrMRAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2dsb2JhbHNYAQAAAC10crQRAABYJAAAAHVybGxpYjIuSFRUUFBhc3N3b3JkTWdyLmFkZF9wYXNzd29yZHK1EQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3IuYWRkX3Bhc3N3b3JkWAEAAAAtdHK2EQAAdShYEgAAAGNzdi5jc3ZyZWFkZXIubmV4dHK3EQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLm5leHRYAQAAAC10crgRAABYFwAAAGRhdGV0aW1lLmRhdGV0aW1lLmN0aW1lcrkRAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuY3RpbWVYAQAAAC10croRAABYFgAAAGN1cnNlcy53aW5kb3cuY2xydG9lb2xyuxEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5jbHJ0b2VvbFgBAAAALXRyvBEAAFgkAAAAY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXRlc2NhbGVuZGFycr0RAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXRlc2NhbGVuZGFyWAEAAAAtdHK+EQAAWBgAAABtaGxpYi5Gb2xkZXIubW92ZW1lc3NhZ2VyvxEAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIubW92ZW1lc3NhZ2VYAQAAAC10csARAABYHAAAAHVybGxpYjIuT3BlbmVyRGlyZWN0b3IuZXJyb3JywREAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuT3BlbmVyRGlyZWN0b3IuZXJyb3JYAQAAAC10csIRAABYCQAAAHN0ci5sb3dlcnLDEQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5sb3dlclgBAAAALXRyxBEAAFg4AAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXJyxREAAChqcwUAAGp0BQAAWGcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyWAEAAAAtdHLGEQAAWCEAAABodHRwbGliLkhUVFBDb25uZWN0aW9uLmVuZGhlYWRlcnNyxxEAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uZW5kaGVhZGVyc1gBAAAALXRyyBEAAFgVAAAAc3VicHJvY2Vzcy5Qb3Blbi5raWxscskRAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLmtpbGxYAQAAAC10csoRAABYDgAAAG9iamVjdC5fX211bF9fcssRAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbXVsX19YAQAAAC10cswRAABYHAAAAHdhdmUuV2F2ZV93cml0ZS5zZXRmcmFtZXJhdGVyzREAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS5zZXRmcmFtZXJhdGVYAQAAAC10cs4RAABYGAAAAG1zaWxpYi5SZWNvcmQuU2V0SW50ZWdlcnLPEQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLlNldEludGVnZXJYAQAAAC10ctARAABYHAAAAHhkcmxpYi5VbnBhY2tlci5nZXRfcG9zaXRpb25y0REAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLmdldF9wb3NpdGlvblgBAAAALXRy0hEAAFgRAAAAZmwuZm9ybS5hZGRfY2xvY2ty0xEAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9jbG9ja1gBAAAALXRy1BEAAFgYAAAAc3VuYXUuQVVfd3JpdGUuc2V0cGFyYW1zctURAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0cGFyYW1zWAEAAAAtdHLWEQAAWBUAAAByZS5NYXRjaE9iamVjdC5leHBhbmRy1xEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5leHBhbmRYAQAAAC10ctgRAABYHAAAAGRhdGV0aW1lLmRhdGV0aW1lLmFzdGltZXpvbmVy2REAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5hc3RpbWV6b25lWAEAAAAtdHLaEQAAWBQAAAByZXhlYy5SRXhlYy5zX3VubG9hZHLbEQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnNfdW5sb2FkWAEAAAAtdHLcEQAAWCYAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOU3LdEQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlNYAQAAAC10ct4RAABYIQAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uc2V0X3R1bm5lbHLfEQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVsWAEAAAAtdHLgEQAAWBoAAABtaW1ldG9vbHMuTWVzc2FnZS5nZXRwbGlzdHLhEQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZS5nZXRwbGlzdFgBAAAALXRy4hEAAFgYAAAAc3FsaXRlMy5Db25uZWN0aW9uLmNsb3NlcuMRAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY2xvc2VYAQAAAC10cuQRAABYFAAAAGFycmF5LmFycmF5LmZyb21saXN0cuURAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbWxpc3RYAQAAAC10cuYRAABYHQAAAGltcHV0aWwuSW1wb3J0TWFuYWdlci5pbnN0YWxscucRAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydE1hbmFnZXIuaW5zdGFsbFgBAAAALXRy6BEAAFgaAAAAZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfb3Jy6REAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2dpY2FsX29yWAEAAAAtdHLqEQAAWA8AAABpYy5JQy5sYXVuY2h1cmxy6xEAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5JQy5sYXVuY2h1cmxYAQAAAC10cuwRAABYJgAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRGZWF0dXJlcu0RAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldEZlYXR1cmVYAQAAAC10cu4RAABYJQAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5mcm9tX3NwbGl0dGFibGVy7xEAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5mcm9tX3NwbGl0dGFibGVYAQAAAC10cvARAABYGQAAAGRlY2ltYWwuQ29udGV4dC5jb3B5X3NpZ25y8REAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb3B5X3NpZ25YAQAAAC10cvIRAABYFAAAAHhkcmxpYi5VbnBhY2tlci5kb25lcvMRAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5kb25lWAEAAAAtdHL0EQAAWBUAAABvYmplY3QuX19nZXRuZXdhcmdzX19y9REAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0bmV3YXJnc19fWAEAAAAtdHL2EQAAWBoAAABtYWlsYm94Lk1haWxib3guaXRlcnZhbHVlc3L3EQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lml0ZXJ2YWx1ZXNYAQAAAC10cvgRAABYGwAAAG11bHRpZmlsZS5NdWx0aUZpbGUuaXNfZGF0YXL5EQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlLmlzX2RhdGFYAQAAAC10cvoRAABYHwAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdXNhZ2Vy+xEAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X3VzYWdlWAEAAAAtdHL8EQAAWBUAAABtYWlsYm94Lk1haWxib3guY2xlYXJy/REAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5jbGVhclgBAAAALXRy/hEAAFgSAAAAYmRiLkJkYi5zZXRfcmV0dXJucv8RAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3JldHVyblgBAAAALXRyABIAAFgXAAAAeG1sLmRvbS5Ob2RlLmlzU2FtZU5vZGVyARIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5pc1NhbWVOb2RlWAEAAAAtdHICEgAAWBMAAABpbWFwbGliLklNQVA0LnN0b3JlcgMSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnN0b3JlWAEAAAAtdHIEEgAAWB4AAABybGNvbXBsZXRlci5Db21wbGV0ZXIuY29tcGxldGVyBRIAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmxjb21wbGV0ZXIuaHRtbCNybGNvbXBsZXRlci5Db21wbGV0ZXIuY29tcGxldGVYAQAAAC10cgYSAABYEQAAAHR0ay5UcmVldmlldy5tb3ZlcgcSAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5tb3ZlWAEAAAAtdHIIEgAAWBYAAABhaWZjLmFpZmMuZ2V0c2FtcHdpZHRocgkSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0c2FtcHdpZHRoWAEAAAAtdHIKEgAAWCQAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5zZXRfZGVmYXVsdHNyCxIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5zZXRfZGVmYXVsdHNYAQAAAC10cgwSAABYKAAAAG1pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfYWxsX2V4dGVuc2lvbnNyDRIAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19hbGxfZXh0ZW5zaW9uc1gBAAAALXRyDhIAAFgkAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5nZXRmbXRzcg8SAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5nZXRmbXRzWAEAAAAtdHIQEgAAWA0AAABkaWN0LmZyb21rZXlzchESAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5mcm9ta2V5c1gBAAAALXRyEhIAAFgSAAAAbWVtb3J5dmlldy50b2J5dGVzchMSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy50b2J5dGVzWAEAAAAtdHIUEgAAWBYAAAB3YXZlLldhdmVfcmVhZC5nZXRtYXJrchUSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRtYXJrWAEAAAAtdHIWEgAAWA4AAABpYy5JQy5wYXJzZXVybHIXEgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLklDLnBhcnNldXJsWAEAAAAtdHIYEgAAWBcAAABkYXRldGltZS50aW1lLmlzb2Zvcm1hdHIZEgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuaXNvZm9ybWF0WAEAAAAtdHIaEgAAWA4AAABzaGEuc2hhLnVwZGF0ZXIbEgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuc2hhLnVwZGF0ZVgBAAAALXRyHBIAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudmVyaWZ5X3JlcXVlc3RyHRIAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudmVyaWZ5X3JlcXVlc3RYAQAAAC10ch4SAABYEwAAAG9iamVjdC5fX3NldHN0YXRlX19yHxIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fc2V0c3RhdGVfX1gBAAAALXRyIBIAAFghAAAAZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfdG90YWxfbWFnciESAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29tcGFyZV90b3RhbF9tYWdYAQAAAC10ciISAABYGwAAAGltcHV0aWwuSW1wb3J0ZXIuaW1wb3J0X3RvcHIjEgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5JbXBvcnRlci5pbXBvcnRfdG9wWAEAAAAtdHIkEgAAWCAAAAB1cmxsaWIyLkJhc2VIYW5kbGVyLmRlZmF1bHRfb3BlbnIlEgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci5kZWZhdWx0X29wZW5YAQAAAC10ciYSAABYFgAAAGRlY2ltYWwuQ29udGV4dC5zY2FsZWJyJxIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zY2FsZWJYAQAAAC10cigSAABYDwAAAG9iamVjdC5fX3JkaXZfX3IpEgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JkaXZfX1gBAAAALXRyKhIAAFgWAAAAc2hsZXguc2hsZXgucHVzaF90b2tlbnIrEgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnB1c2hfdG9rZW5YAQAAAC10ciwSAABYMQAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydFByZWZpeE1hcHBpbmdyLRIAAChqcwUAAGp0BQAAWGgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZ1gBAAAALXRyLhIAAFgZAAAAbWhsaWIuRm9sZGVyLnB1dHNlcXVlbmNlc3IvEgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5wdXRzZXF1ZW5jZXNYAQAAAC10cjASAABYEQAAAG1haWxib3guTUgucmVtb3ZlcjESAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILnJlbW92ZVgBAAAALXRyMhIAAFgOAAAAZnRwbGliLkZUUC5ybWRyMxIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5ybWRYAQAAAC10cjQSAABYIAAAAGltcHV0aWwuQnVpbHRpbkltcG9ydGVyLmdldF9jb2RlcjUSAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZVgBAAAALXRyNhIAAFgPAAAAb2JqZWN0Ll9fcmVwcl9fcjcSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmVwcl9fWAEAAAAtdHI4EgAAWA8AAABmbC5mb3JtLmFkZF9ib3hyORIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9ib3hYAQAAAC10cjoSAABYHQAAAGNvbXBpbGVyLmFzdC5Ob2RlLmdldENoaWxkcmVucjsSAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXIuYXN0Lk5vZGUuZ2V0Q2hpbGRyZW5YAQAAAC10cjwSAABYGwAAAHN1bmF1LkFVX3dyaXRlLnNldG5jaGFubmVsc3I9EgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldG5jaGFubmVsc1gBAAAALXRyPhIAAFgPAAAAYmRiLkJkYi5ydW5jYWxscj8SAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIucnVuY2FsbFgBAAAALXRyQBIAAFgnAAAAeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmdldEV2ZW50ckESAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbS5nZXRFdmVudFgBAAAALXRyQhIAAFgMAAAAZGljdC5wb3BpdGVtckMSAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5wb3BpdGVtWAEAAAAtdHJEEgAAWB0AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRGYWxzZXJFEgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEZhbHNlWAEAAAAtdHJGEgAAWBYAAAByZXhlYy5SRXhlYy5yX2V4ZWNmaWxlckcSAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMucl9leGVjZmlsZVgBAAAALXRySBIAAFgYAAAAcG9zaXhmaWxlLnBvc2l4ZmlsZS5sb2NrckkSAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5wb3NpeGZpbGUubG9ja1gBAAAALXRyShIAAFgtAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldE5hbWVCeVFOYW1lcksSAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldE5hbWVCeVFOYW1lWAEAAAAtdHJMEgAAWBYAAABtYWlsYm94LkJhYnlsLmdldF9maWxlck0SAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmdldF9maWxlWAEAAAAtdHJOEgAAWCQAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWZyTxIAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfY2hhcnJlZlgBAAAALXRyUBIAAFgRAAAAY3Vyc2VzLndpbmRvdy5ib3hyURIAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ib3hYAQAAAC10clISAABYFgAAAHBvcGxpYi5QT1AzLmdldHdlbGNvbWVyUxIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMuZ2V0d2VsY29tZVgBAAAALXRyVBIAAFgUAAAAaW8uU3RyaW5nSU8uZ2V0dmFsdWVyVRIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5TdHJpbmdJTy5nZXR2YWx1ZVgBAAAALXRyVhIAAFgXAAAAcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXByVxIAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXBYAQAAAC10clgSAABYMAAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldENoYXJhY3RlclN0cmVhbXJZEgAAKGpzBQAAanQFAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldENoYXJhY3RlclN0cmVhbVgBAAAALXRyWhIAAFgrAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldEVycm9ySGFuZGxlcnJbEgAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRFcnJvckhhbmRsZXJYAQAAAC10clwSAABYFgAAAGN1cnNlcy53aW5kb3cuc3luY2Rvd25yXRIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zeW5jZG93blgBAAAALXRyXhIAAFgVAAAAaW1hcGxpYi5JTUFQNF9TU0wuc3Nscl8SAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0X1NTTC5zc2xYAQAAAC10cmASAABYFQAAAGZ0cGxpYi5GVFAuc3RvcmJpbmFyeXJhEgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnN0b3JiaW5hcnlYAQAAAC10cmISAABYCwAAAGRpY3QudXBkYXRlcmMSAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC51cGRhdGVYAQAAAC10cmQSAABYHwAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuc2V0X3NwYWNpbmdyZRIAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5zZXRfc3BhY2luZ1gBAAAALXRyZhIAAFgSAAAAYXJyYXkuYXJyYXkudG9maWxlcmcSAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9maWxlWAEAAAAtdHJoEgAAWCEAAABjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIud3JpdGVyaRIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci53cml0ZVgBAAAALXRyahIAAFgYAAAAeG1scnBjbGliLkJvb2xlYW4uZW5jb2RlcmsSAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5Cb29sZWFuLmVuY29kZVgBAAAALXRybBIAAFgTAAAAZGVjaW1hbC5Db250ZXh0LmV4cHJtEgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmV4cFgBAAAALXRybhIAAFgVAAAAcmUuUmVnZXhPYmplY3Quc2VhcmNocm8SAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3Quc2VhcmNoWAEAAAAtdHJwEgAAWBcAAAB1bml0dGVzdC5UZXN0Q2FzZS5kZWJ1Z3JxEgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmRlYnVnWAEAAAAtdHJyEgAAWCcAAAB4bWwuZG9tLkRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlNycxIAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOU1gBAAAALXRydBIAAFgRAAAAdHRrLlRyZWV2aWV3Lm5leHRydRIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lm5leHRYAQAAAC10cnYSAABYEAAAAHBvcGxpYi5QT1AzLmRlbGVydxIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMuZGVsZVgBAAAALXRyeBIAAFgLAAAAc3RyLmlzbG93ZXJyeRIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXNsb3dlclgBAAAALXRyehIAAFgPAAAAZGljdC52aWV3dmFsdWVzcnsSAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC52aWV3dmFsdWVzWAEAAAAtdHJ8EgAAWBYAAABkZWNpbWFsLkRlY2ltYWwucm90YXRlcn0SAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwucm90YXRlWAEAAAAtdHJ+EgAAWBcAAABkZWNpbWFsLkNvbnRleHQuY29tcGFyZXJ/EgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVYAQAAAC10coASAABYIgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLndhcm5ygRIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci53YXJuWAEAAAAtdHKCEgAAWC4AAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5qb2lucoMSAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmpvaW5YAQAAAC10coQSAABYKQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmRlYnVnX3ByaW50coUSAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZGVidWdfcHJpbnRYAQAAAC10coYSAABYIQAAAHNzbC5TU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c3KHEgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNYAQAAAC10cogSAABYHwAAAG1haWxib3guQmFieWxNZXNzYWdlLmdldF9sYWJlbHNyiRIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxNZXNzYWdlLmdldF9sYWJlbHNYAQAAAC10cooSAABYFQAAAHBpcGVzLlRlbXBsYXRlLmFwcGVuZHKLEgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLmFwcGVuZFgBAAAALXRyjBIAAFgcAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmdldHBvc3KNEgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmdldHBvc1gBAAAALXRyjhIAAFgVAAAAd2F2ZS5XYXZlX3JlYWQuc2V0cG9zco8SAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5zZXRwb3NYAQAAAC10cpASAABYFQAAAHRhcmZpbGUuVGFySW5mby50b2J1ZnKREgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnRvYnVmWAEAAAAtdHKSEgAAWCgAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZ2V0X291dHB1dF9jaGFyc2V0cpMSAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZ2V0X291dHB1dF9jaGFyc2V0WAEAAAAtdHKUEgAAWB8AAABjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLnJlc2V0cpUSAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIucmVzZXRYAQAAAC10cpYSAABYHAAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX25lX19ylxIAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX25lX19YAQAAAC10cpgSAABYFQAAAHpsaWIuRGVjb21wcmVzcy5mbHVzaHKZEgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5EZWNvbXByZXNzLmZsdXNoWAEAAAAtdHKaEgAAWAkAAABmaWxlLm5leHRymxIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLm5leHRYAQAAAC10cpwSAABYNAAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X2Vudmlyb25ynRIAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X2Vudmlyb25YAQAAAC10cp4SAABYGwAAAHNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c3KfEgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5nZXRfY2FfY2VydHNYAQAAAC10cqASAABYGgAAAHdhdmUuV2F2ZV93cml0ZS5zZXRuZnJhbWVzcqESAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0bmZyYW1lc1gBAAAALXRyohIAAFgXAAAAbG9nZ2luZy5Mb2dnZXIuZ2V0Q2hpbGRyoxIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmdldENoaWxkWAEAAAAtdHKkEgAAWBIAAABvYmplY3QuX19taXNzaW5nX19ypRIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19taXNzaW5nX19YAQAAAC10cqYSAABYHwAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGFyYW1ypxIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGFyYW1YAQAAAC10cqgSAABYGAAAAHN1bmF1LkFVX3JlYWQucmVhZGZyYW1lc3KpEgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQucmVhZGZyYW1lc1gBAAAALXRyqhIAAFgYAAAAbWFpbGJveC5CYWJ5bC5nZXRfbGFiZWxzcqsSAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmdldF9sYWJlbHNYAQAAAC10cqwSAABYCgAAAHN0ci5lbmNvZGVyrRIAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZW5jb2RlWAEAAAAtdHKuEgAAWB4AAAB4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTlNyrxIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5nZXRBdHRyaWJ1dGVOU1gBAAAALXRysBIAAFgTAAAAZGJoYXNoLmRiaGFzaC5maXJzdHKxEgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLmZpcnN0WAEAAAAtdHKyEgAAWCQAAABjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcnBhZ2VysxIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcnBhZ2VYAQAAAC10crQSAABYGAAAAGxvZ2dpbmcuTG9nZ2VyLmV4Y2VwdGlvbnK1EgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZXhjZXB0aW9uWAEAAAAtdHK2EgAAWAwAAABtZDUubWQ1LmNvcHlytxIAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNS5jb3B5WAEAAAAtdHK4EgAAWBYAAABiejIuQloyRmlsZS53cml0ZWxpbmVzcrkSAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLndyaXRlbGluZXNYAQAAAC10croSAABYEwAAAHByb2ZpbGUuUHJvZmlsZS5ydW5yuxIAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5ydW5YAQAAAC10crwSAABYGQAAAHN1bmF1LkFVX3JlYWQuZ2V0Y29tcG5hbWVyvRIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldGNvbXBuYW1lWAEAAAAtdHK+EgAAWDEAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5leGVjdXRhYmxlX2ZpbGVuYW1lcr8SAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZXhlY3V0YWJsZV9maWxlbmFtZVgBAAAALXRywBIAAFgVAAAAZGF0ZXRpbWUuZGF0ZS5yZXBsYWNlcsESAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5yZXBsYWNlWAEAAAAtdHLCEgAAWBAAAABobWFjLkhNQUMuZGlnZXN0csMSAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMuZGlnZXN0WAEAAAAtdHLEEgAAWBYAAABtYWlsYm94Lk1haWxkaXIudW5sb2NrcsUSAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIudW5sb2NrWAEAAAAtdHLGEgAAWBQAAABzb2NrZXQuc29ja2V0LmZpbGVub3LHEgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmZpbGVub1gBAAAALXRyyBIAAFgeAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRGYWlsdXJlcskSAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRGYWlsdXJlWAEAAAAtdHLKEgAAWBcAAABpby5CdWZmZXJlZElPQmFzZS53cml0ZXLLEgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLndyaXRlWAEAAAAtdHLMEgAAWBUAAABtaGxpYi5NSC5kZWxldGVmb2xkZXJyzRIAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5kZWxldGVmb2xkZXJYAQAAAC10cs4SAABYFwAAAG1zaWxpYi5SZWNvcmQuU2V0U3RyZWFtcs8SAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SZWNvcmQuU2V0U3RyZWFtWAEAAAAtdHLQEgAAWBoAAAB3YXZlLldhdmVfcmVhZC5nZXRjb21wbmFtZXLREgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcG5hbWVYAQAAAC10ctISAABYIQAAAHVuaXR0ZXN0LlRlc3RTdWl0ZS5jb3VudFRlc3RDYXNlc3LTEgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5jb3VudFRlc3RDYXNlc1gBAAAALXRy1BIAAFguAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuaW1hcHLVEgAAKGpzBQAAanQFAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5pbWFwWAEAAAAtdHLWEgAAWCMAAABjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5fX21pc3NpbmdfX3LXEgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlZmF1bHRkaWN0Ll9fbWlzc2luZ19fWAEAAAAtdHLYEgAAWB8AAAB1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzctkSAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzc1gBAAAALXRy2hIAAFgiAAAAc3RyaW5nLkZvcm1hdHRlci5jaGVja191bnVzZWRfYXJnc3LbEgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmNoZWNrX3VudXNlZF9hcmdzWAEAAAAtdHLcEgAAWBkAAAB4bWwuZG9tLk5vZGUucmVwbGFjZUNoaWxkct0SAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucmVwbGFjZUNoaWxkWAEAAAAtdHLeEgAAWBgAAABtYWlsYm94Lk1haWxib3guZ2V0X2ZpbGVy3xIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5nZXRfZmlsZVgBAAAALXRy4BIAAFgPAAAAYmRiLkJkYi5jYW5vbmljcuESAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuY2Fub25pY1gBAAAALXRy4hIAAFgoAAAAeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudHLjEgAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFgBAAAALXRy5BIAAFghAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfc3ViZGlycuUSAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9zdWJkaXJYAQAAAC10cuYSAABYHwAAAGh0dHBsaWIuSFRUUFJlc3BvbnNlLmdldGhlYWRlcnNy5xIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLmdldGhlYWRlcnNYAQAAAC10cugSAABYHQAAAGZvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9mb250cukSAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9mb250WAEAAAAtdHLqEgAAWBUAAABhaWZjLmFpZmMuZ2V0Y29tcG5hbWVy6xIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRjb21wbmFtZVgBAAAALXRy7BIAAFgnAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5lbWl0cu0SAAAoanMFAABqdAUAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmVtaXRYAQAAAC10cu4SAABYIwAAAGNvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvci5kZWZhdWx0cu8SAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXIudmlzaXRvci5BU1RWaXNpdG9yLmRlZmF1bHRYAQAAAC10cvASAABYHAAAAHR0ay5UcmVldmlldy5pZGVudGlmeV9yZWdpb25y8RIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmlkZW50aWZ5X3JlZ2lvblgBAAAALXRy8hIAAFggAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfaG9yX3J1bGVy8xIAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfaG9yX3J1bGVYAQAAAC10cvQSAABYGgAAAHVybGxpYjIuUmVxdWVzdC5oYXNfaGVhZGVycvUSAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuaGFzX2hlYWRlclgBAAAALXRy9hIAAFgUAAAAbG9nZ2luZy5Mb2dnZXIuZGVidWdy9xIAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmRlYnVnWAEAAAAtdHL4EgAAWBYAAABpby5CdWZmZXJlZFJlYWRlci5wZWVrcvkSAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXIucGVla1gBAAAALXRy+hIAAFgZAAAAeGRybGliLlBhY2tlci5wYWNrX2ZhcnJheXL7EgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfZmFycmF5WAEAAAAtdHL8EgAAWBoAAAB1bml0dGVzdC5UZXN0U3VpdGUuYWRkVGVzdHL9EgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5hZGRUZXN0WAEAAAAtdHL+EgAAWCIAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3VuaXhmcm9tcv8SAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3VuaXhmcm9tWAEAAAAtdHIAEwAAWBYAAABzb2NrZXQuc29ja2V0LnNodXRkb3ducgETAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuc2h1dGRvd25YAQAAAC10cgITAABYHAAAAHN1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWxyAxMAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWxYAQAAAC10cgQTAABYIwAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5zZXRfdXJscgUTAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JvYm90cGFyc2VyLmh0bWwjcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLnNldF91cmxYAQAAAC10cgYTAABYIwAAAHNnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX3N0YXJ0dGFncgcTAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIudW5rbm93bl9zdGFydHRhZ1gBAAAALXRyCBMAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5zZXR1cF9lbnZpcm9ucgkTAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNldHVwX2Vudmlyb25YAQAAAC10cgoTAABYIQAAAHNzbC5TU0xTb2NrZXQuZ2V0X2NoYW5uZWxfYmluZGluZ3ILEwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmdldF9jaGFubmVsX2JpbmRpbmdYAQAAAC10cgwTAABYEgAAAHNvY2tldC5zb2NrZXQuc2VuZHINEwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNlbmRYAQAAAC10cg4TAABYHgAAAG1haWxib3guQmFieWxNZXNzYWdlLmFkZF9sYWJlbHIPEwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UuYWRkX2xhYmVsWAEAAAAtdHIQEwAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnB1c2hyERMAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5wdXNoWAEAAAAtdHISEwAAWCMAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLl9mbHVzaHITEwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fZmx1c2hYAQAAAC10chQTAABYGQAAAG1obGliLkZvbGRlci5saXN0bWVzc2FnZXNyFRMAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIubGlzdG1lc3NhZ2VzWAEAAAAtdHIWEwAAWCYAAABsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXIuZW1pdHIXEwAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmVtaXRYAQAAAC10chgTAABYFQAAAG1haWxib3guTU1ERi5nZXRfZmlsZXIZEwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGLmdldF9maWxlWAEAAAAtdHIaEwAAWBgAAABiZGIuQmRiLmNsZWFyX2JwYnludW1iZXJyGxMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9icGJ5bnVtYmVyWAEAAAAtdHIcEwAAWCEAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0RXF1YWxyHRMAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0RXF1YWxYAQAAAC10ch4TAABYGwAAAGpzb24uSlNPTkVuY29kZXIuaXRlcmVuY29kZXIfEwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORW5jb2Rlci5pdGVyZW5jb2RlWAEAAAAtdHIgEwAAWCUAAAB4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldE5hbWVzciETAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXROYW1lc1gBAAAALXRyIhMAAFgRAAAAc2hlbHZlLlNoZWxmLnN5bmNyIxMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLlNoZWxmLnN5bmNYAQAAAC10ciQTAABYJAAAAHNnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX2VudGl0eXJlZnIlEwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLnVua25vd25fZW50aXR5cmVmWAEAAAAtdHImEwAAWBcAAABkZWNpbWFsLkRlY2ltYWwubWluX21hZ3InEwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm1pbl9tYWdYAQAAAC10cigTAABYGQAAAGRlY2ltYWwuQ29udGV4dC5uZXh0X3BsdXNyKRMAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X3BsdXNYAQAAAC10cioTAABYDwAAAG9iamVjdC5fX2ltdWxfX3IrEwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ltdWxfX1gBAAAALXRyLBMAAFgbAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLml0ZW1zci0TAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXRlbXNYAQAAAC10ci4TAABYDgAAAHN0ci5zcGxpdGxpbmVzci8TAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnNwbGl0bGluZXNYAQAAAC10cjATAABYHAAAAGFzeW5jb3JlLmRpc3BhdGNoZXIucmVhZGFibGVyMRMAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLnJlYWRhYmxlWAEAAAAtdHIyEwAAWBkAAABhc3luY29yZS5kaXNwYXRjaGVyLmNsb3NlcjMTAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jbG9zZVgBAAAALXRyNBMAAFgiAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXRlbXNFcXVhbHI1EwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEl0ZW1zRXF1YWxYAQAAAC10cjYTAABYGwAAAGxvZ2dpbmcuSGFuZGxlci5oYW5kbGVFcnJvcnI3EwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmhhbmRsZUVycm9yWAEAAAAtdHI4EwAAWCsAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuR2V0SW5wdXRDb250ZXh0cjkTAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuR2V0SW5wdXRDb250ZXh0WAEAAAAtdHI6EwAAWBUAAAB0YXJmaWxlLlRhckluZm8uaXNjaHJyOxMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2NoclgBAAAALXRyPBMAAFghAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfc3ViZGlycj0TAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnNldF9zdWJkaXJYAQAAAC10cj4TAABYIAAAAHppcGltcG9ydC56aXBpbXBvcnRlci5pc19wYWNrYWdlcj8TAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5pc19wYWNrYWdlWAEAAAAtdHJAEwAAWBsAAABFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5zZXRyQRMAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5zZXRYAQAAAC10ckITAABYGwAAAGxvZ2dpbmcuTG9nZ2VyLmlzRW5hYmxlZEZvcnJDEwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuaXNFbmFibGVkRm9yWAEAAAAtdHJEEwAAWA4AAABmdHBsaWIuRlRQLmRpcnJFEwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmRpclgBAAAALXRyRhMAAFgeAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc190eXBlckcTAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfdHlwZVgBAAAALXRySBMAAFghAAAAc2dtbGxpYi5TR01MUGFyc2VyLnVua25vd25fZW5kdGFnckkTAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIudW5rbm93bl9lbmR0YWdYAQAAAC10ckoTAABYKAAAAGxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuY2xvc2VySxMAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuY2xvc2VYAQAAAC10ckwTAABYJgAAAFNvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlck0TAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlWAEAAAAtdHJOEwAAWBQAAABpbWFwbGliLklNQVA0LnNldGFjbHJPEwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZXRhY2xYAQAAAC10clATAABYGgAAAGJzZGRiLmJzZGRib2JqZWN0LnByZXZpb3VzclETAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnNkZGJvYmplY3QucHJldmlvdXNYAQAAAC10clITAABYHAAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIuZGlzY292ZXJyUxMAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmRpc2NvdmVyWAEAAAAtdHJUEwAAWBAAAABwb3BsaWIuUE9QMy5ycG9wclUTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnJwb3BYAQAAAC10clYTAABYEAAAAHBvcGxpYi5QT1AzLm5vb3ByVxMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMubm9vcFgBAAAALXRyWBMAAFgSAAAAcmV4ZWMuUkV4ZWMucl9ldmFsclkTAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMucl9ldmFsWAEAAAAtdHJaEwAAWBIAAABhcnJheS5hcnJheS50b2xpc3RyWxMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS50b2xpc3RYAQAAAC10clwTAABYJwAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5nZXRfYm9keV9lbmNvZGluZ3JdEwAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nWAEAAAAtdHJeEwAAWBEAAABpdGVyYXRvci5fX2l0ZXJfX3JfEwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2l0ZXJhdG9yLl9faXRlcl9fWAEAAAAtdHJgEwAAWBEAAABwYXJzZXIuU1QuaXNzdWl0ZXJhEwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QuaXNzdWl0ZVgBAAAALXRyYhMAAFgpAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQubWFrZWVsZW1lbnRyYxMAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQubWFrZWVsZW1lbnRYAQAAAC10cmQTAABYGQAAAHdhdmUuV2F2ZV9yZWFkLnJlYWRmcmFtZXNyZRMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLnJlYWRmcmFtZXNYAQAAAC10cmYTAABYNQAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlcmcTAAAoanMFAABqdAUAAFhsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlWAEAAAAtdHJoEwAAWBoAAABiZGIuQmRiLmZvcm1hdF9zdGFja19lbnRyeXJpEwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmZvcm1hdF9zdGFja19lbnRyeVgBAAAALXRyahMAAFgUAAAAZnJvemVuc2V0Lmlzc3VwZXJzZXRyaxMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuaXNzdXBlcnNldFgBAAAALXRybBMAAFgcAAAAbWFpbGJveC5NTURGTWVzc2FnZS5nZXRfZnJvbXJtEwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5nZXRfZnJvbVgBAAAALXRybhMAAFgiAAAAdXJsbGliMi5DYWNoZUZUUEhhbmRsZXIuc2V0VGltZW91dHJvEwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5DYWNoZUZUUEhhbmRsZXIuc2V0VGltZW91dFgBAAAALXRycBMAAFgPAAAAb2JqZWN0Ll9fcmFuZF9fcnETAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmFuZF9fWAEAAAAtdHJyEwAAWBkAAAB0aHJlYWRpbmcuVGhyZWFkLmlzRGFlbW9ucnMTAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaXNEYWVtb25YAQAAAC10cnQTAABYIAAAAG9zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZ2V0cnUTAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5nZXRYAQAAAC10cnYTAABYFwAAAG1zaWxpYi5SZWNvcmQuU2V0U3RyaW5ncncTAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SZWNvcmQuU2V0U3RyaW5nWAEAAAAtdHJ4EwAAWBUAAABtYWlsYm94Lk1ILmdldF9mb2xkZXJyeRMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZ2V0X2ZvbGRlclgBAAAALXRyehMAAFgSAAAAbXV0ZXgubXV0ZXgudW5sb2NrcnsTAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211dGV4Lmh0bWwjbXV0ZXgubXV0ZXgudW5sb2NrWAEAAAAtdHJ8EwAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BheWxvYWRyfRMAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfcGF5bG9hZFgBAAAALXRyfhMAAFggAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmhhc19vcHRpb25yfxMAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuaGFzX29wdGlvblgBAAAALXRygBMAAFgKAAAAc3RyLnJzdHJpcHKBEwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yc3RyaXBYAQAAAC10coITAABYHQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYWxscoMTAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2FsbFgBAAAALXRyhBMAAFgPAAAAbG9uZy5iaXRfbGVuZ3RocoUTAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbG9uZy5iaXRfbGVuZ3RoWAEAAAAtdHKGEwAAWCEAAABkZWNpbWFsLkNvbnRleHQudG9faW50ZWdyYWxfZXhhY3RyhxMAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdFgBAAAALXRyiBMAAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZHKJEwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kWAEAAAAtdHKKEwAAWA8AAABvYmplY3QuX19peG9yX19yixMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19peG9yX19YAQAAAC10cowTAABYGgAAAGVtYWlsLmhlYWRlci5IZWFkZXIuX19uZV9fco0TAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5IZWFkZXIuX19uZV9fWAEAAAAtdHKOEwAAWBgAAABkZWNpbWFsLkNvbnRleHQuc3VidHJhY3RyjxMAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zdWJ0cmFjdFgBAAAALXRykBMAAFghAAAAY2FsZW5kYXIuSFRNTENhbGVuZGFyLmZvcm1hdG1vbnRocpETAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmZvcm1hdG1vbnRoWAEAAAAtdHKSEwAAWBQAAAB3YXZlLldhdmVfd3JpdGUudGVsbHKTEwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnRlbGxYAQAAAC10cpQTAABYFAAAAGRlY2ltYWwuQ29udGV4dC5wbHVzcpUTAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQucGx1c1gBAAAALXRylhMAAFgQAAAAcG9wbGliLlBPUDMuc3RhdHKXEwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5zdGF0WAEAAAAtdHKYEwAAWBUAAABkYXRldGltZS50aW1lLl9fc3RyX19ymRMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLl9fc3RyX19YAQAAAC10cpoTAABYKQAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldFN5c3RlbUlkcpsTAAAoanMFAABqdAUAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWRYAQAAAC10cpwTAABYDwAAAHJlcHIuUmVwci5yZXByMXKdEwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLnJlcHIxWAEAAAAtdHKeEwAAWAkAAABmbG9hdC5oZXhynxMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmbG9hdC5oZXhYAQAAAC10cqATAABYFgAAAGZ0cGxpYi5GVFAudHJhbnNmZXJjbWRyoRMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC50cmFuc2ZlcmNtZFgBAAAALXRyohMAAFgaAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9tZXRob2RyoxMAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5nZXRfbWV0aG9kWAEAAAAtdHKkEwAAWA8AAABtbWFwLm1tYXAuZmx1c2hypRMAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5mbHVzaFgBAAAALXRyphMAAFg0AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5hZGRyZXNzX3N0cmluZ3KnEwAAKGpzBQAAanQFAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuYWRkcmVzc19zdHJpbmdYAQAAAC10cqgTAABYGAAAAGN0eXBlcy5fQ0RhdGEuZnJvbV9wYXJhbXKpEwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLmZyb21fcGFyYW1YAQAAAC10cqoTAABYDgAAAGNtZC5DbWQucHJlY21kcqsTAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucHJlY21kWAEAAAAtdHKsEwAAWCQAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyLmZlZWRyrRMAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5mZWVkWAEAAAAtdHKuEwAAWBAAAABtdXRleC5tdXRleC50ZXN0cq8TAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211dGV4Lmh0bWwjbXV0ZXgubXV0ZXgudGVzdFgBAAAALXRysBMAAFgbAAAAZnJvemVuc2V0LmRpZmZlcmVuY2VfdXBkYXRlcrETAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmRpZmZlcmVuY2VfdXBkYXRlWAEAAAAtdHKyEwAAWBMAAAB0dGsuVHJlZXZpZXcuY29sdW1ucrMTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5jb2x1bW5YAQAAAC10crQTAABYGAAAAHNxbGl0ZTMuQ3Vyc29yLmZldGNobWFueXK1EwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZmV0Y2htYW55WAEAAAAtdHK2EwAAWCkAAABGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cudXBkYXRlc2Nyb2xsYmFyc3K3EwAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cudXBkYXRlc2Nyb2xsYmFyc1gBAAAALXRyuBMAAFgPAAAAY21kLkNtZC5jbWRsb29wcrkTAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuY21kbG9vcFgBAAAALXRyuhMAAFgVAAAAYmRiLkJkYi5kaXNwYXRjaF9jYWxscrsTAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfY2FsbFgBAAAALXRyvBMAAFgTAAAAd2F2ZS5XYXZlX3JlYWQudGVsbHK9EwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQudGVsbFgBAAAALXRyvhMAAFgUAAAAZGVjaW1hbC5EZWNpbWFsLmxvZ2JyvxMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2diWAEAAAAtdHLAEwAAWCEAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuUGFyc2VywRMAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5QYXJzZVgBAAAALXRywhMAAFgoAAAAeG1scnBjbGliLlNlcnZlclByb3h5LnN5c3RlbS5saXN0TWV0aG9kc3LDEwAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLmxpc3RNZXRob2RzWAEAAAAtdHLEEwAAWBIAAABpby5SYXdJT0Jhc2Uud3JpdGVyxRMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5SYXdJT0Jhc2Uud3JpdGVYAQAAAC10csYTAABYJgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfZGVmYXVsdF90eXBlcscTAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2RlZmF1bHRfdHlwZVgBAAAALXRyyBMAAFggAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2h1dGRvd25yyRMAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2h1dGRvd25YAQAAAC10csoTAABYEwAAAG1haWxib3guTU1ERi51bmxvY2tyyxMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERi51bmxvY2tYAQAAAC10cswTAABYGAAAAHBvc2l4ZmlsZS5wb3NpeGZpbGUuZmlsZXLNEwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbCNwb3NpeGZpbGUucG9zaXhmaWxlLmZpbGVYAQAAAC10cs4TAABYEgAAAGZsLmZvcm0uYWRkX2Nob2ljZXLPEwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2Nob2ljZVgBAAAALXRy0BMAAFgaAAAAbmV0cmMubmV0cmMuYXV0aGVudGljYXRvcnNy0RMAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy5uZXRyYy5hdXRoZW50aWNhdG9yc1gBAAAALXRy0hMAAFgWAAAAbWFpbGJveC5NYWlsYm94LnVwZGF0ZXLTEwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnVwZGF0ZVgBAAAALXRy1BMAAFgfAAAAdXJsbGliMi5SZXF1ZXN0LmlzX3VudmVyaWZpYWJsZXLVEwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmlzX3VudmVyaWZpYWJsZVgBAAAALXRy1hMAAFgiAAAAY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRheXNjYWxlbmRhcnLXEwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXlzY2FsZW5kYXJYAQAAAC10ctgTAABYGwAAAG1haWxib3guTWFpbGJveC5fX2dldGl0ZW1fX3LZEwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fZ2V0aXRlbV9fWAEAAAAtdHLaEwAAWCAAAAB4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZXLbEwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5vZGVYAQAAAC10ctwTAABYHAAAAGxvZ2dpbmcuSGFuZGxlci5yZW1vdmVGaWx0ZXJy3RMAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5yZW1vdmVGaWx0ZXJYAQAAAC10ct4TAABYGgAAAG1haWxib3guTWFpbGRpci5nZXRfZm9sZGVyct8TAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuZ2V0X2ZvbGRlclgBAAAALXRy4BMAAFgcAAAAY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucHVzaHLhEwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucHVzaFgBAAAALXRy4hMAAFgiAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9ib3VuZGFyeXLjEwAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9ib3VuZGFyeVgBAAAALXRy5BMAAFgXAAAAc29ja2V0LnNvY2tldC5yZWN2X2ludG9y5RMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2X2ludG9YAQAAAC10cuYTAABYJQAAAGNvb2tpZWxpYi5Db29raWUuaGFzX25vbnN0YW5kYXJkX2F0dHJy5xMAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0clgBAAAALXRy6BMAAFghAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm5nZXR0ZXh0cukTAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMubmdldHRleHRYAQAAAC10cuoTAABYGQAAAGNvZGVjcy5TdHJlYW1SZWFkZXIucmVzZXRy6xMAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlci5yZXNldFgBAAAALXRy7BMAAFgcAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfZm9udHLtEwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9mb250WAEAAAAtdHLuEwAAWCAAAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU3LvEwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVFbGVtZW50TlNYAQAAAC10cvATAABYGgAAAG1obGliLkZvbGRlci5wYXJzZXNlcXVlbmNlcvETAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLnBhcnNlc2VxdWVuY2VYAQAAAC10cvITAABYJAAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2Zsb3dpbmdfZGF0YXLzEwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9mbG93aW5nX2RhdGFYAQAAAC10cvQTAABYGgAAAHNzbC5TU0xTb2NrZXQuZG9faGFuZHNoYWtlcvUTAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuZG9faGFuZHNoYWtlWAEAAAAtdHL2EwAAWA8AAABtYWlsYm94Lk1ILnBhY2ty9xMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucGFja1gBAAAALXRy+BMAAFgaAAAAdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9hZGRy+RMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9hZGRYAQAAAC10cvoTAABYKwAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9tYXRjaGluZ19ibG9ja3Ny+xMAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9tYXRjaGluZ19ibG9ja3NYAQAAAC10cvwTAABYFAAAAHR0ay5UcmVldmlldy5oZWFkaW5ncv0TAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5oZWFkaW5nWAEAAAAtdHL+EwAAWCYAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hbm5vdW5jZXL/EwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFubm91bmNlWAEAAAAtdHIAFAAAWCgAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX3N0YXJ0ZW5kdGFncgEUAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX3N0YXJ0ZW5kdGFnWAEAAAAtdHICFAAAWA0AAAB0dGsuU3R5bGUubWFwcgMUAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS5tYXBYAQAAAC10cgQUAABYIgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJyBRQAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlclgBAAAALXRyBhQAAFgeAAAAY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlcl9jb3B5cgcUAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuZnJvbV9idWZmZXJfY29weVgBAAAALXRyCBQAAFgaAAAAZW1haWwuaGVhZGVyLkhlYWRlci5hcHBlbmRyCRQAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5hcHBlbmRYAQAAAC10cgoUAABYGAAAAHRhcmZpbGUuVGFyRmlsZS5nZXRuYW1lc3ILFAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmdldG5hbWVzWAEAAAAtdHIMFAAAWDsAAABEb2NYTUxSUENTZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuc2V0X3NlcnZlcl90aXRsZXINFAAAKGpzBQAAanQFAABYcgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuc2V0X3NlcnZlcl90aXRsZVgBAAAALXRyDhQAAFgWAAAAdGhyZWFkaW5nLlRpbWVyLmNhbmNlbHIPFAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGltZXIuY2FuY2VsWAEAAAAtdHIQFAAAWDgAAABtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5lbXB0eXIRFAAAKGpzBQAAanQFAABYbwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5lbXB0eVgBAAAALXRyEhQAAFgWAAAAeG1sLmRvbS5Ob2RlLmNsb25lTm9kZXITFAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmNsb25lTm9kZVgBAAAALXRyFBQAAFghAAAAbWhsaWIuRm9sZGVyLmdldHNlcXVlbmNlc2ZpbGVuYW1lchUUAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLmdldHNlcXVlbmNlc2ZpbGVuYW1lWAEAAAAtdHIWFAAAWBEAAABtYWlsYm94Lk1NREYubG9ja3IXFAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGLmxvY2tYAQAAAC10chgUAABYFAAAAGRlY2ltYWwuQ29udGV4dC5FdG9wchkUAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuRXRvcFgBAAAALXRyGhQAAFgUAAAAbG9nZ2luZy5IYW5kbGVyLmVtaXRyGxQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5lbWl0WAEAAAAtdHIcFAAAWBoAAABzdHJpbmcuRm9ybWF0dGVyLmdldF92YWx1ZXIdFAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmdldF92YWx1ZVgBAAAALXRyHhQAAFgSAAAAZGVjaW1hbC5EZWNpbWFsLmxuch8UAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG5YAQAAAC10ciAUAABYFwAAAHNlbGVjdC5lcG9sbC51bnJlZ2lzdGVyciEUAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC51bnJlZ2lzdGVyWAEAAAAtdHIiFAAAWB4AAABjb29raWVsaWIuQ29va2llSmFyLnNldF9wb2xpY3lyIxQAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZUphci5zZXRfcG9saWN5WAEAAAAtdHIkFAAAWBQAAABzdW5hdS5BVV9yZWFkLnNldHBvc3IlFAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuc2V0cG9zWAEAAAAtdHImFAAAWCAAAABjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLmRlY29kZXInFAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLmRlY29kZVgBAAAALXRyKBQAAFggAAAAdXJsbGliMi5CYXNlSGFuZGxlci51bmtub3duX29wZW5yKRQAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIudW5rbm93bl9vcGVuWAEAAAAtdHIqFAAAWB4AAABodHRwbGliLkhUVFBDb25uZWN0aW9uLnJlcXVlc3RyKxQAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24ucmVxdWVzdFgBAAAALXRyLBQAAFgXAAAAanNvbi5KU09ORW5jb2Rlci5lbmNvZGVyLRQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkVuY29kZXIuZW5jb2RlWAEAAAAtdHIuFAAAWDAAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saWJyYXJ5X2Rpcl9vcHRpb25yLxQAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saWJyYXJ5X2Rpcl9vcHRpb25YAQAAAC10cjAUAABYFAAAAHRlbG5ldGxpYi5UZWxuZXQubXNncjEUAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQubXNnWAEAAAAtdHIyFAAAWBoAAAByZmM4MjIuTWVzc2FnZS5nZXRhZGRybGlzdHIzFAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5nZXRhZGRybGlzdFgBAAAALXRyNBQAAFgpAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmRvY3R5cGVyNRQAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmRvY3R5cGVYAQAAAC10cjYUAABYCgAAAHN0ci5mb3JtYXRyNxQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZm9ybWF0WAEAAAAtdHI4FAAAWBsAAABFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5pbmNyORQAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5pbmNYAQAAAC10cjoUAABYKQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kYWxscjsUAAAoanMFAABqdAUAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kYWxsWAEAAAAtdHI8FAAAWCQAAAB4bWwuc2F4LmhhbmRsZXIuRXJyb3JIYW5kbGVyLndhcm5pbmdyPRQAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci53YXJuaW5nWAEAAAAtdHI+FAAAWBMAAABjdXJzZXMud2luZG93LmhsaW5lcj8UAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaGxpbmVYAQAAAC10ckAUAABYFAAAAF93aW5yZWcuUHlIS0VZLkNsb3NlckEUAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlB5SEtFWS5DbG9zZVgBAAAALXRyQhQAAFgUAAAAY3Vyc2VzLndpbmRvdy5pbnNzdHJyQxQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNzdHJYAQAAAC10ckQUAABYQwAAAERvY1hNTFJQQ1NlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5zZXRfc2VydmVyX2RvY3VtZW50YXRpb25yRRQAAChqcwUAAGp0BQAAWHoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvblgBAAAALXRyRhQAAFgKAAAAZGljdC5pdGVtc3JHFAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaXRlbXNYAQAAAC10ckgUAABYIgAAAHdlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuX25ld190YWJySRQAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuX25ld190YWJYAQAAAC10ckoUAABYFQAAAHppcGZpbGUuWmlwRmlsZS53cml0ZXJLFAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLndyaXRlWAEAAAAtdHJMFAAAWBYAAABjdXJzZXMud2luZG93Lmluc2VydGxuck0UAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zZXJ0bG5YAQAAAC10ck4UAABYGQAAAHR0ay5UcmVldmlldy5zZXRfY2hpbGRyZW5yTxQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNldF9jaGlsZHJlblgBAAAALXRyUBQAAFgiAAAAc2dtbGxpYi5TR01MUGFyc2VyLmNvbnZlcnRfY2hhcnJlZnJRFAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLmNvbnZlcnRfY2hhcnJlZlgBAAAALXRyUhQAAFgjAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2JpbmRyUxQAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2JpbmRYAQAAAC10clQUAABYFAAAAHJleGVjLlJFeGVjLnNfcmVsb2FkclUUAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMuc19yZWxvYWRYAQAAAC10clYUAABYDwAAAG9iamVjdC5fX2lhbmRfX3JXFAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lhbmRfX1gBAAAALXRyWBQAAFgcAAAAdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLnVwZGF0ZXJZFAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLkNvdmVyYWdlUmVzdWx0cy51cGRhdGVYAQAAAC10cloUAABYFQAAAGFycmF5LmFycmF5LnRvdW5pY29kZXJbFAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnRvdW5pY29kZVgBAAAALXRyXBQAAFgaAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmZlZWRyXRQAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5mZWVkWAEAAAAtdHJeFAAAWBoAAABzc2wuU1NMQ29udGV4dC5zZXRfY2lwaGVyc3JfFAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfY2lwaGVyc1gBAAAALXRyYBQAAFgwAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkRlZmF1bHRIYW5kbGVyRXhwYW5kcmEUAAAoanMFAABqdAUAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRGVmYXVsdEhhbmRsZXJFeHBhbmRYAQAAAC10cmIUAABYFgAAAHN0cmluZy5Gb3JtYXR0ZXIucGFyc2VyYxQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5wYXJzZVgBAAAALXRyZBQAAFgoAAAAbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNldFRhcmdldHJlFAAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNldFRhcmdldFgBAAAALXRyZhQAAFgmAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXRMZW5ndGhyZxQAAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldExlbmd0aFgBAAAALXRyaBQAAFgbAAAAbm50cGxpYi5OTlRQLnNldF9kZWJ1Z2xldmVscmkUAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc2V0X2RlYnVnbGV2ZWxYAQAAAC10cmoUAABYGAAAAGRhdGV0aW1lLnRpbWUuX19mb3JtYXRfX3JrFAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuX19mb3JtYXRfX1gBAAAALXRybBQAAFgfAAAAVGl4LnRpeENvbW1hbmQudGl4X2FkZGJpdG1hcGRpcnJtFAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfYWRkYml0bWFwZGlyWAEAAAAtdHJuFAAAWCkAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfbGlicmFyeXJvFAAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5WAEAAAAtdHJwFAAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19nZXRpdGVtX19ycRQAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2dldGl0ZW1fX1gBAAAALXRychQAAFgjAAAAVGtpbnRlci5XaWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXJycxQAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuV2lkZ2V0LnRrLmRlbGV0ZWZpbGVoYW5kbGVyWAEAAAAtdHJ0FAAAWDYAAABtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5nZXRydRQAAChqcwUAAGp0BQAAWG0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuU2ltcGxlUXVldWUuZ2V0WAEAAAAtdHJ2FAAAWA8AAABvYmplY3QuX19pcG93X19ydxQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pcG93X19YAQAAAC10cngUAABYIAAAAEZyYW1lV29yay5XaW5kb3cuZG9fY29udGVudGNsaWNrcnkUAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5XaW5kb3cuZG9fY29udGVudGNsaWNrWAEAAAAtdHJ6FAAAWCUAAAB1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcnsUAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZVgBAAAALXRyfBQAAFguAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFZhbHVlQnlRTmFtZXJ9FAAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRWYWx1ZUJ5UU5hbWVYAQAAAC10cn4UAABYEwAAAGN1cnNlcy53aW5kb3cubXZ3aW5yfxQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdndpblgBAAAALXRygBQAAFgYAAAAbm50cGxpYi5OTlRQLmRlc2NyaXB0aW9ucoEUAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZGVzY3JpcHRpb25YAQAAAC10coIUAABYHQAAAHNnbWxsaWIuU0dNTFBhcnNlci5zZXRsaXRlcmFscoMUAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuc2V0bGl0ZXJhbFgBAAAALXRyhBQAAFgiAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHVwbGVFcXVhbHKFFAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFR1cGxlRXF1YWxYAQAAAC10coYUAABYFQAAAEZyYW1lV29yay5XaW5kb3cub3BlbnKHFAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93Lm9wZW5YAQAAAC10cogUAABYFwAAAGRlY2ltYWwuRGVjaW1hbC5pc19zbmFucokUAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfc25hblgBAAAALXRyihQAAFgjAAAAbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLnNlbmRyixQAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5zZW5kWAEAAAAtdHKMFAAAWCEAAABsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyLmVtaXRyjRQAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIuZW1pdFgBAAAALXRyjhQAAFgQAAAAcG9wbGliLlBPUDMucmV0cnKPFAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5yZXRyWAEAAAAtdHKQFAAAWBIAAABiZGIuQmRiLmdldF9icmVha3NykRQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfYnJlYWtzWAEAAAAtdHKSFAAAWBEAAABhcnJheS5hcnJheS5jb3VudHKTFAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmNvdW50WAEAAAAtdHKUFAAAWBMAAABtaGxpYi5NSC5nZXRwcm9maWxlcpUUAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUguZ2V0cHJvZmlsZVgBAAAALXRylhQAAFgiAAAAc2dtbGxpYi5TR01MUGFyc2VyLnVua25vd25fY2hhcnJlZnKXFAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLnVua25vd25fY2hhcnJlZlgBAAAALXRymBQAAFgUAAAAb2JqZWN0Ll9fcmZsb29yZGl2X19ymRQAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZmxvb3JkaXZfX1gBAAAALXRymhQAAFgTAAAAY3Vyc2VzLndpbmRvdy5nZXR5eHKbFAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldHl4WAEAAAAtdHKcFAAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RFRESGFuZGxlcnKdFAAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXREVERIYW5kbGVyWAEAAAAtdHKeFAAAWB4AAAB3YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXNyYXdynxQAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd1gBAAAALXRyoBQAAFglAAAAbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuZW1pdHKhFAAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuZW1pdFgBAAAALXRyohQAAFgRAAAAY21kLkNtZC5lbXB0eWxpbmVyoxQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5lbXB0eWxpbmVYAQAAAC10cqQUAABYIQAAAGRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbF9leGFjdHKlFAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsX2V4YWN0WAEAAAAtdHKmFAAAWBUAAABiejIuQloyRmlsZS5yZWFkbGluZXNypxQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUucmVhZGxpbmVzWAEAAAAtdHKoFAAAWBYAAABjdXJzZXMud2luZG93LmRlbGV0ZWxucqkUAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZGVsZXRlbG5YAQAAAC10cqoUAABYFAAAAGlvLlJhd0lPQmFzZS5yZWFkYWxscqsUAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uUmF3SU9CYXNlLnJlYWRhbGxYAQAAAC10cqwUAABYMAAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc3KtFAAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc1gBAAAALXRyrhQAAFgiAAAAc3FsaXRlMy5Db25uZWN0aW9uLmNyZWF0ZV9mdW5jdGlvbnKvFAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmNyZWF0ZV9mdW5jdGlvblgBAAAALXRysBQAAFgfAAAAbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24ucmVjdnKxFAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5yZWN2WAEAAAAtdHKyFAAAWCAAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnJ1bnKzFAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5ydW5YAQAAAC10crQUAABYKAAAAGRpc3R1dGlscy5jbWQuQ29tbWFuZC5pbml0aWFsaXplX29wdGlvbnNytRQAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmQuaW5pdGlhbGl6ZV9vcHRpb25zWAEAAAAtdHK2FAAAWCwAAAB4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc2tpcHBlZEVudGl0eXK3FAAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc2tpcHBlZEVudGl0eVgBAAAALXRyuBQAAFgNAAAAc3RyLnRyYW5zbGF0ZXK5FAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci50cmFuc2xhdGVYAQAAAC10croUAABYEAAAAG1obGliLk1ILmdldHBhdGhyuxQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5nZXRwYXRoWAEAAAAtdHK8FAAAWB4AAABodHRwbGliLkhUVFBDb25uZWN0aW9uLmNvbm5lY3RyvRQAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uY29ubmVjdFgBAAAALXRyvhQAAFgPAAAAbW1hcC5tbWFwLndyaXRlcr8UAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAud3JpdGVYAQAAAC10csAUAABYFgAAAHR0ay5TdHlsZS50aGVtZV9jcmVhdGVywRQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLnRoZW1lX2NyZWF0ZVgBAAAALXRywhQAAFgdAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2V4ZWNywxQAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5oYXNfZXhlY1gBAAAALXRyxBQAAFggAAAAc210cGQuU01UUFNlcnZlci5wcm9jZXNzX21lc3NhZ2VyxRQAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZVgBAAAALXRyxhQAAFgXAAAAaW8uQnVmZmVyZWRXcml0ZXIuZmx1c2hyxxQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFdyaXRlci5mbHVzaFgBAAAALXRyyBQAAFgiAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5pdGVtc3LJFAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLml0ZW1zWAEAAAAtdHLKFAAAWBsAAABsb2dnaW5nLlN0cmVhbUhhbmRsZXIuZmx1c2hyyxQAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuU3RyZWFtSGFuZGxlci5mbHVzaFgBAAAALXRyzBQAAFgSAAAAb2JqZWN0Ll9faWxzaGlmdF9fcs0UAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faWxzaGlmdF9fWAEAAAAtdHLOFAAAWB0AAABtdWx0aXByb2Nlc3NpbmcuUkxvY2suYWNxdWlyZXLPFAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUkxvY2suYWNxdWlyZVgBAAAALXRy0BQAAFgUAAAAZnRwbGliLkZUUC5zdG9ybGluZXNy0RQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zdG9ybGluZXNYAQAAAC10ctIUAABYKwAAAEZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5zY3JvbGxiYXJfY2FsbGJhY2ty0xQAAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LnNjcm9sbGJhcl9jYWxsYmFja1gBAAAALXRy1BQAAFgbAAAAaW1hcGxpYi5JTUFQNC5nZXRhbm5vdGF0aW9uctUUAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmdldGFubm90YXRpb25YAQAAAC10ctYUAABYFgAAAGN1cnNlcy53aW5kb3cudG91Y2h3aW5y1xQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy50b3VjaHdpblgBAAAALXRy2BQAAFgUAAAAbm50cGxpYi5OTlRQLmFydGljbGVy2RQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5hcnRpY2xlWAEAAAAtdHLaFAAAWC0AAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RW50aXR5UmVzb2x2ZXJy2xQAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RW50aXR5UmVzb2x2ZXJYAQAAAC10ctwUAABYGAAAAGRhdGV0aW1lLmRhdGV0aW1lLnR6bmFtZXLdFAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnR6bmFtZVgBAAAALXRy3hQAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzZGlyct8UAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNkaXJYAQAAAC10cuAUAABYEQAAAG1haWxib3guTUgudW5sb2NrcuEUAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILnVubG9ja1gBAAAALXRy4hQAAFg2AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5kYXRlX3RpbWVfc3RyaW5ncuMUAAAoanMFAABqdAUAAFhsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5kYXRlX3RpbWVfc3RyaW5nWAEAAAAtdHLkFAAAWBYAAABiZGIuQmRiLmdldF9hbGxfYnJlYWtzcuUUAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZ2V0X2FsbF9icmVha3NYAQAAAC10cuYUAABYGwAAAG1haWxib3guTWFpbGJveC5fX2RlbGl0ZW1fX3LnFAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fZGVsaXRlbV9fWAEAAAAtdHLoFAAAWA8AAABvYmplY3QuX19ybW9kX19y6RQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ybW9kX19YAQAAAC10cuoUAABYFQAAAGZ0cGxpYi5GVFBfVExTLnByb3RfcHLrFAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5wcm90X3BYAQAAAC10cuwUAABYJAAAAHNzbC5TU0xTb2NrZXQuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbHLtFAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnNlbGVjdGVkX2FscG5fcHJvdG9jb2xYAQAAAC10cu4UAABYLQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saW5rX29iamVjdHLvFAAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saW5rX29iamVjdFgBAAAALXRy8BQAAFggAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRy8RQAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRYAQAAAC10cvIUAABYHgAAAHhtbC5kb20ubWluaWRvbS5Ob2RlLmNsb25lTm9kZXLzFAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS5jbG9uZU5vZGVYAQAAAC10cvQUAABYGAAAAGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfX3L1FAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fWAEAAAAtdHL2FAAAWB0AAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuY29udmVydHL3FAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmNvbnZlcnRYAQAAAC10cvgUAABYFgAAAGxvZ2dpbmcuTG9nZ2VyLndhcm5pbmdy+RQAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLndhcm5pbmdYAQAAAC10cvoUAABYGAAAAGNvZGVjcy5TdHJlYW1SZWFkZXIucmVhZHL7FAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVhZGVyLnJlYWRYAQAAAC10cvwUAABYHwAAAGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuY2xvbmVy/RQAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci5jbG9uZVgBAAAALXRy/hQAAFgeAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9jb2Rlcv8UAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfY29kZVgBAAAALXRyABUAAFgjAAAAdXJsbGliMi5DYWNoZUZUUEhhbmRsZXIuc2V0TWF4Q29ubnNyARUAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQ2FjaGVGVFBIYW5kbGVyLnNldE1heENvbm5zWAEAAAAtdHICFQAAWB0AAABtYWlsYm94Lk1NREZNZXNzYWdlLnNldF9mbGFnc3IDFQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZmxhZ3NYAQAAAC10cgQVAABYJAAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VHlwZXIFFQAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VHlwZVgBAAAALXRyBhUAAFggAAAAcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLnJlYWRyBxUAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNyb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucmVhZFgBAAAALXRyCBUAAFgcAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuX19mb3JtYXRfX3IJFQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLl9fZm9ybWF0X19YAQAAAC10cgoVAABYIgAAAGRvY3Rlc3QuT3V0cHV0Q2hlY2tlci5jaGVja19vdXRwdXRyCxUAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuT3V0cHV0Q2hlY2tlci5jaGVja19vdXRwdXRYAQAAAC10cgwVAABYEgAAAG5udHBsaWIuTk5UUC5paGF2ZXINFQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmloYXZlWAEAAAAtdHIOFQAAWCUAAAB1bml0dGVzdC5UZXN0Q2FzZS5hZGRUeXBlRXF1YWxpdHlGdW5jcg8VAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYWRkVHlwZUVxdWFsaXR5RnVuY1gBAAAALXRyEBUAAFgfAAAAdXJsbGliMi5IVFRQU0hhbmRsZXIuaHR0cHNfb3BlbnIRFQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQU0hhbmRsZXIuaHR0cHNfb3BlblgBAAAALXRyEhUAAFgdAAAAdHRrLlRyZWV2aWV3LmlkZW50aWZ5X2VsZW1lbnRyExUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmlkZW50aWZ5X2VsZW1lbnRYAQAAAC10chQVAABYFgAAAGZsb2F0LmFzX2ludGVnZXJfcmF0aW9yFRUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmbG9hdC5hc19pbnRlZ2VyX3JhdGlvWAEAAAAtdHIWFQAAWBUAAABjdXJzZXMud2luZG93LmNsZWFyb2tyFxUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5jbGVhcm9rWAEAAAAtdHIYFQAAWBQAAABzdW5hdS5BVV93cml0ZS5jbG9zZXIZFQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLmNsb3NlWAEAAAAtdHIaFQAAWA8AAABvYmplY3QuX19pbml0X19yGxUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbml0X19YAQAAAC10chwVAABYFAAAAG1obGliLkZvbGRlci5zZXRsYXN0ch0VAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLnNldGxhc3RYAQAAAC10ch4VAABYEwAAAGltYXBsaWIuSU1BUDQuY2xvc2VyHxUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuY2xvc2VYAQAAAC10ciAVAABYFQAAAGRhdGV0aW1lLnRpbWUucmVwbGFjZXIhFQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUucmVwbGFjZVgBAAAALXRyIhUAAFgmAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9kZWZhdWx0X3R5cGVyIxUAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfZGVmYXVsdF90eXBlWAEAAAAtdHIkFQAAWB0AAABzc2wuU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtc3IlFQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtc1gBAAAALXRyJhUAAFgaAAAAbWFpbGJveC5NYWlsZGlyLmFkZF9mb2xkZXJyJxUAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5hZGRfZm9sZGVyWAEAAAAtdHIoFQAAWBkAAABzdW5hdS5BVV93cml0ZS5zZXRuZnJhbWVzcikVAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0bmZyYW1lc1gBAAAALXRyKhUAAFgSAAAAcG9wZW4yLlBvcGVuMy53YWl0cisVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5Qb3BlbjMud2FpdFgBAAAALXRyLBUAAFgYAAAAc29ja2V0LnNvY2tldC5zZXRzb2Nrb3B0ci0VAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuc2V0c29ja29wdFgBAAAALXRyLhUAAFgoAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2Vzc3IvFQAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3NYAQAAAC10cjAVAABYJQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5lbmRyMRUAAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmVuZFgBAAAALXRyMhUAAFgqAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZGVmaW5lX21hY3JvcjMVAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZGVmaW5lX21hY3JvWAEAAAAtdHI0FQAAWBQAAABjdXJzZXMud2luZG93LnB1dHdpbnI1FQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnB1dHdpblgBAAAALXRyNhUAAFgvAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuY3JlYXRlX3N0YXRpY19saWJyNxUAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5jcmVhdGVfc3RhdGljX2xpYlgBAAAALXRyOBUAAFggAAAAc3NsLlNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNyORUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNYAQAAAC10cjoVAABYEwAAAHNlbGVjdC5lcG9sbC5tb2RpZnlyOxUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLm1vZGlmeVgBAAAALXRyPBUAAFgmAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX3Bvc3RyZXNpemVyPRUAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX3Bvc3RyZXNpemVYAQAAAC10cj4VAABYLQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcnI/FQAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFbnRpdHlSZXNvbHZlclgBAAAALXRyQBUAAFgeAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UuZ2V0aGVhZGVyckEVAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5nZXRoZWFkZXJYAQAAAC10ckIVAABYDgAAAGFpZmMuYWlmYy50ZWxsckMVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMudGVsbFgBAAAALXRyRBUAAFgZAAAAc3RydWN0LlN0cnVjdC51bnBhY2tfZnJvbXJFFQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnVucGFja19mcm9tWAEAAAAtdHJGFQAAWBMAAABwaXBlcy5UZW1wbGF0ZS5jb3B5ckcVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUuY29weVgBAAAALXRySBUAAFgYAAAAdHRrLlN0eWxlLnRoZW1lX3NldHRpbmdzckkVAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS50aGVtZV9zZXR0aW5nc1gBAAAALXRyShUAAFgrAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldEVycm9ySGFuZGxlcnJLFQAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFcnJvckhhbmRsZXJYAQAAAC10ckwVAABYEQAAAG5udHBsaWIuTk5UUC5oZWxwck0VAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuaGVscFgBAAAALXRyThUAAFgfAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9wYXJhbXJPFQAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9wYXJhbVgBAAAALXRyUBUAAFgbAAAAaW1hcGxpYi5JTUFQNC5zZXRhbm5vdGF0aW9uclEVAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNldGFubm90YXRpb25YAQAAAC10clIVAABYGAAAAHNvY2tldC5zb2NrZXQuc2V0dGltZW91dHJTFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNldHRpbWVvdXRYAQAAAC10clQVAABYGgAAAGRvY3Rlc3QuRG9jVGVzdEZpbmRlci5maW5kclUVAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIuZmluZFgBAAAALXRyVhUAAFgTAAAAb2JqZWN0Ll9fZGVsc2xpY2VfX3JXFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2RlbHNsaWNlX19YAQAAAC10clgVAABYFAAAAGFpZmMuYWlmYy5nZXRuZnJhbWVzclkVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0bmZyYW1lc1gBAAAALXRyWhUAAFgXAAAAdGhyZWFkaW5nLlJMb2NrLmFjcXVpcmVyWxUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlJMb2NrLmFjcXVpcmVYAQAAAC10clwVAABYJgAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFscl0VAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90QWxtb3N0RXF1YWxYAQAAAC10cl4VAABYEwAAAG9iamVjdC5fX2dldHN0YXRlX19yXxUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0c3RhdGVfX1gBAAAALXRyYBUAAFgQAAAAY21kLkNtZC5wb3N0bG9vcHJhFQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLnBvc3Rsb29wWAEAAAAtdHJiFQAAWC0AAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXByYxUAAChqcwUAAGp0BQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwWAEAAAAtdHJkFQAAWBEAAABhaWZjLmFpZmMuZ2V0bWFya3JlFQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldG1hcmtYAQAAAC10cmYVAABYGAAAAGN1cnNlcy53aW5kb3cudW50b3VjaHdpbnJnFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnVudG91Y2h3aW5YAQAAAC10cmgVAABYHQAAAFRpeC50aXhDb21tYW5kLnRpeF9vcHRpb25fZ2V0cmkVAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kLnRpeF9vcHRpb25fZ2V0WAEAAAAtdHJqFQAAWBgAAAB0dGsuU3R5bGUuZWxlbWVudF9jcmVhdGVyaxUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLmVsZW1lbnRfY3JlYXRlWAEAAAAtdHJsFQAAWCYAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZjb3VudHJtFQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uub2J1ZmNvdW50WAEAAAAtdHJuFQAAWB0AAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX3N0cmluZ3JvFQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX3N0cmluZ1gBAAAALXRycBUAAFgdAAAAc3VuYXUuQVVfd3JpdGUud3JpdGVmcmFtZXNyYXdycRUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc3Jhd1gBAAAALXRychUAAFgUAAAAdGhyZWFkaW5nLlRocmVhZC5ydW5ycxUAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5ydW5YAQAAAC10cnQVAABYDgAAAHJlcHIuUmVwci5yZXBycnUVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIucmVwclgBAAAALXRydhUAAFgSAAAAaW8uSU9CYXNlLndyaXRhYmxlcncVAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLndyaXRhYmxlWAEAAAAtdHJ4FQAAWBIAAAByZmM4MjIuTWVzc2FnZS5nZXRyeRUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0WAEAAAAtdHJ6FQAAWC4AAABsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5lbWl0cnsVAAAoanMFAABqdAUAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5lbWl0WAEAAAAtdHJ8FQAAWDAAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuTm90U3RhbmRhbG9uZUhhbmRsZXJyfRUAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RTdGFuZGFsb25lSGFuZGxlclgBAAAALXRyfhUAAFgoAAAAc3FsaXRlMy5Db25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbnJ/FQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvblgBAAAALXRygBUAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0UHVibGljSWRygRUAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRQdWJsaWNJZFgBAAAALXRyghUAAFgeAAAAZGVjaW1hbC5EZWNpbWFsLmxvZ2ljYWxfaW52ZXJ0coMVAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9naWNhbF9pbnZlcnRYAQAAAC10coQVAABYGAAAAHJmYzgyMi5NZXNzYWdlLmlzY29tbWVudHKFFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5pc2NvbW1lbnRYAQAAAC10coYVAABYHgAAAG1haWxib3guTUhNZXNzYWdlLmFkZF9zZXF1ZW5jZXKHFQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSE1lc3NhZ2UuYWRkX3NlcXVlbmNlWAEAAAAtdHKIFQAAWBAAAABmbC5mb3JtLmFkZF9tZW51cokVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfbWVudVgBAAAALXRyihUAAFgWAAAAdW5pdHRlc3QuVGVzdFN1aXRlLnJ1bnKLFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5ydW5YAQAAAC10cowVAABYGAAAAG1obGliLkZvbGRlci5jb3B5bWVzc2FnZXKNFQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5jb3B5bWVzc2FnZVgBAAAALXRyjhUAAFgtAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmdldGl0ZXJhdG9yco8VAAAoanMFAABqdAUAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5nZXRpdGVyYXRvclgBAAAALXRykBUAAFgXAAAAbWFpbGJveC5NYWlsYm94LmRpc2NhcmRykRUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5kaXNjYXJkWAEAAAAtdHKSFQAAWBgAAAB6aXBmaWxlLlppcEZpbGUucHJpbnRkaXJykxUAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5wcmludGRpclgBAAAALXRylBUAAFgRAAAAZGF0ZXRpbWUudGltZS5kc3RylRUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLmRzdFgBAAAALXRylhUAAFgfAAAAY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlci5yZXNldHKXFQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0WAEAAAAtdHKYFQAAWBIAAABtc2lsaWIuRGlhbG9nLmxpbmVymRUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5saW5lWAEAAAAtdHKaFQAAWBUAAABjdXJzZXMud2luZG93LmltbWVkb2tymxUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbW1lZG9rWAEAAAAtdHKcFQAAWCAAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BhcmFtc3KdFQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9wYXJhbXNYAQAAAC10cp4VAABYHQAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX3N0cl9fcp8VAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19zdHJfX1gBAAAALXRyoBUAAFgVAAAAZmwuZm9ybS5hY3RpdmF0ZV9mb3JtcqEVAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hY3RpdmF0ZV9mb3JtWAEAAAAtdHKiFQAAWBsAAABkZWNpbWFsLkRlY2ltYWwubG9naWNhbF9hbmRyoxUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX2FuZFgBAAAALXRypBUAAFgQAAAAUXVldWUuUXVldWUuam9pbnKlFQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmpvaW5YAQAAAC10cqYVAABYHgAAAEZyYW1lV29yay5XaW5kb3cuZG9fcG9zdHJlc2l6ZXKnFQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93LmRvX3Bvc3RyZXNpemVYAQAAAC10cqgVAABYKQAAAGRlY2ltYWwuQ29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0cqkVAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdFgBAAAALXRyqhUAAFgVAAAAZmlsZWNtcC5kaXJjbXAucmVwb3J0cqsVAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yZXBvcnRYAQAAAC10cqwVAABYFQAAAGN1cnNlcy53aW5kb3cudGltZW91dHKtFQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnRpbWVvdXRYAQAAAC10cq4VAABYGQAAAG1pbWV0b29scy5NZXNzYWdlLmdldHR5cGVyrxUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLk1lc3NhZ2UuZ2V0dHlwZVgBAAAALXRysBUAAFgVAAAAYmRiLkJyZWFrcG9pbnQuZW5hYmxlcrEVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CcmVha3BvaW50LmVuYWJsZVgBAAAALXRyshUAAFgUAAAAY3Vyc2VzLndpbmRvdy5zdWJ3aW5ysxUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zdWJ3aW5YAQAAAC10crQVAABYFQAAAHdhdmUuV2F2ZV93cml0ZS5jbG9zZXK1FQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLmNsb3NlWAEAAAAtdHK2FQAAWBIAAABmdHBsaWIuRlRQLnNlbmRjbWRytxUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zZW5kY21kWAEAAAAtdHK4FQAAWBcAAABzcWxpdGUzLkN1cnNvci5mZXRjaGFsbHK5FQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZmV0Y2hhbGxYAQAAAC10croVAABYKQAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRFbGVtZW50crsVAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRFbGVtZW50WAEAAAAtdHK8FQAAWDcAAABTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLnJlZ2lzdGVyX2Z1bmN0aW9ucr0VAAAoanMFAABqdAUAAFhxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb25YAQAAAC10cr4VAABYGQAAAHhtbHJwY2xpYi5EYXRlVGltZS5lbmNvZGVyvxUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkRhdGVUaW1lLmVuY29kZVgBAAAALXRywBUAAFgZAAAAZW1haWwucGFyc2VyLlBhcnNlci5wYXJzZXLBFQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuUGFyc2VyLnBhcnNlWAEAAAAtdHLCFQAAWBcAAABkZWNpbWFsLkNvbnRleHQuaXNfc25hbnLDFQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3NuYW5YAQAAAC10csQVAABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3ducsUVAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25YAQAAAC10csYVAABYGQAAAGRhdGV0aW1lLmRhdGV0aW1lLnJlcGxhY2VyxxUAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5yZXBsYWNlWAEAAAAtdHLIFQAAWBUAAABkYXRldGltZS5kYXRlLndlZWtkYXlyyRUAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLndlZWtkYXlYAQAAAC10csoVAABYIAAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5pbnN0YWxscssVAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5zdGFsbFgBAAAALXRyzBUAAFghAAAAbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0RXhjZXB0aW9ucs0VAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXRFeGNlcHRpb25YAQAAAC10cs4VAABYFAAAAHNlbGVjdC5rcXVldWUuZnJvbWZkcs8VAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuZnJvbWZkWAEAAAAtdHLQFQAAWA4AAABvYmplY3QuX19yb3JfX3LRFQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jvcl9fWAEAAAAtdHLSFQAAWBYAAABpby5CdWZmZXJlZFJlYWRlci5yZWFkctMVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXIucmVhZFgBAAAALXRy1BUAAFgRAAAAbWQ1Lm1kNS5oZXhkaWdlc3Ry1RUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNS5oZXhkaWdlc3RYAQAAAC10ctYVAABYFwAAAHNobGV4LnNobGV4LnB1c2hfc291cmNlctcVAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXgucHVzaF9zb3VyY2VYAQAAAC10ctgVAABYHgAAAHVybGxpYjIuQmFzZUhhbmRsZXIuYWRkX3BhcmVudHLZFQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci5hZGRfcGFyZW50WAEAAAAtdHLaFQAAWBsAAABzcWxpdGUzLkNvbm5lY3Rpb24ucm9sbGJhY2ty2xUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5yb2xsYmFja1gBAAAALXRy3BUAAFgbAAAAdGVsbmV0bGliLlRlbG5ldC5nZXRfc29ja2V0ct0VAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuZ2V0X3NvY2tldFgBAAAALXRy3hUAAFgeAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfbWFyZ2luct8VAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucG9wX21hcmdpblgBAAAALXRy4BUAAFgqAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZERvY3VtZW50cuEVAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmREb2N1bWVudFgBAAAALXRy4hUAAFgJAAAAY2xhc3MubXJvcuMVAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY2xhc3MubXJvWAEAAAAtdHLkFQAAWBsAAABzeW10YWJsZS5TeW1ib2wuaXNfaW1wb3J0ZWRy5RUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfaW1wb3J0ZWRYAQAAAC10cuYVAABYEwAAAGNodW5rLkNodW5rLmdldG5hbWVy5xUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5nZXRuYW1lWAEAAAAtdHLoFQAAWCgAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleHBNYXRjaGVzcukVAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlc1gBAAAALXRy6hUAAFgjAAAAdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLndyaXRlX3Jlc3VsdHNy6xUAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5Db3ZlcmFnZVJlc3VsdHMud3JpdGVfcmVzdWx0c1gBAAAALXRy7BUAAFgeAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLm1haW5sb29wcu0VAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5BcHBsaWNhdGlvbi5tYWlubG9vcFgBAAAALXRy7hUAAFgWAAAAY3Vyc2VzLndpbmRvdy5lY2hvY2hhcnLvFQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmVjaG9jaGFyWAEAAAAtdHLwFQAAWBUAAABzbXRwbGliLlNNVFAuc3RhcnR0bHNy8RUAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5zdGFydHRsc1gBAAAALXRy8hUAAFgTAAAAdHRrLlN0eWxlLmNvbmZpZ3VyZXLzFQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUuY29uZmlndXJlWAEAAAAtdHL0FQAAWCMAAABjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF5czJjYWxlbmRhcnL1FQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXlzMmNhbGVuZGFyWAEAAAAtdHL2FQAAWBEAAABoYXNobGliLmhhc2guY29weXL3FQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmNvcHlYAQAAAC10cvgVAABYGgAAAGxvZ2dpbmcuSGFuZGxlci5jcmVhdGVMb2NrcvkVAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuY3JlYXRlTG9ja1gBAAAALXRy+hUAAFgcAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wVGVzdHL7FQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3RYAQAAAC10cvwVAABYDwAAAG9iamVjdC5fX2hhc2hfX3L9FQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2hhc2hfX1gBAAAALXRy/hUAAFgYAAAAY29sbGVjdGlvbnMuZGVxdWUucmVtb3Zlcv8VAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucmVtb3ZlWAEAAAAtdHIAFgAAWBkAAABmdHBsaWIuRlRQLnNldF9kZWJ1Z2xldmVscgEWAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc2V0X2RlYnVnbGV2ZWxYAQAAAC10cgIWAABYIgAAAHhtbC5kb20uRWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlTlNyAxYAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlTlNYAQAAAC10cgQWAABYJgAAAGRpc3R1dGlscy5jbWQuQ29tbWFuZC5maW5hbGl6ZV9vcHRpb25zcgUWAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNtZC5Db21tYW5kLmZpbmFsaXplX29wdGlvbnNYAQAAAC10cgYWAABYGwAAAENvb2tpZS5CYXNlQ29va2llLmpzX291dHB1dHIHFgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuQmFzZUNvb2tpZS5qc19vdXRwdXRYAQAAAC10cggWAABYFwAAAHRhcmZpbGUuVGFySW5mby5mcm9tYnVmcgkWAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uZnJvbWJ1ZlgBAAAALXRyChYAAFgWAAAAaG90c2hvdC5Qcm9maWxlLmZpbGVub3ILFgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLmZpbGVub1gBAAAALXRyDBYAAFgRAAAAbm50cGxpYi5OTlRQLmhlYWRyDRYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5oZWFkWAEAAAAtdHIOFgAAWBgAAABsb2dnaW5nLkhhbmRsZXIuc2V0TGV2ZWxyDxYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5zZXRMZXZlbFgBAAAALXRyEBYAAFgXAAAAU3RyaW5nSU8uU3RyaW5nSU8uY2xvc2VyERYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5naW8uaHRtbCNTdHJpbmdJTy5TdHJpbmdJTy5jbG9zZVgBAAAALXRyEhYAAFghAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmxvYWRfbW9kdWxlchMWAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5sb2FkX21vZHVsZVgBAAAALXRyFBYAAFghAAAAZG9jdGVzdC5Eb2NUZXN0UGFyc2VyLmdldF9kb2N0ZXN0chUWAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIuZ2V0X2RvY3Rlc3RYAQAAAC10chYWAABYDgAAAG9iamVjdC5fX21vZF9fchcWAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbW9kX19YAQAAAC10chgWAABYHAAAAGNhbGVuZGFyLlRleHRDYWxlbmRhci5wcnllYXJyGRYAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXIucHJ5ZWFyWAEAAAAtdHIaFgAAWB4AAABzeW10YWJsZS5TeW1ib2xUYWJsZS5pc19uZXN0ZWRyGxYAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5pc19uZXN0ZWRYAQAAAC10chwWAABYDgAAAG9iamVjdC5fX2Rpdl9fch0WAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGl2X19YAQAAAC10ch4WAABYLgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9saWJyYXJ5X2RpcnNyHxYAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlicmFyeV9kaXJzWAEAAAAtdHIgFgAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZXRlY3RfbGFuZ3VhZ2VyIRYAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZXRlY3RfbGFuZ3VhZ2VYAQAAAC10ciIWAABYFwAAAHNnbWxsaWIuU0dNTFBhcnNlci5mZWVkciMWAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuZmVlZFgBAAAALXRyJBYAAFg4AAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIucnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb25yJRYAAChqcwUAAGp0BQAAWGgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvblgBAAAALXRyJhYAAFgYAAAAbWFpbGJveC5NYWlsYm94Ll9faXRlcl9fcicWAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guX19pdGVyX19YAQAAAC10cigWAABYIAAAAGNhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXMycikWAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5czJYAQAAAC10cioWAABYFwAAAHppcGZpbGUuWmlwRmlsZS50ZXN0emlwcisWAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUudGVzdHppcFgBAAAALXRyLBYAAFgeAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX3N0eWxlci0WAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9zdHlsZVgBAAAALXRyLhYAAFgeAAAAc3RyaW5nLkZvcm1hdHRlci5jb252ZXJ0X2ZpZWxkci8WAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIuY29udmVydF9maWVsZFgBAAAALXRyMBYAAFgXAAAAZGF0ZXRpbWUudGltZS51dGNvZmZzZXRyMRYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnV0Y29mZnNldFgBAAAALXRyMhYAAFgnAAAAc3NsLlNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzcjMWAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc1gBAAAALXRyNBYAAFgcAAAAVGl4LnRpeENvbW1hbmQudGl4X2NvbmZpZ3VyZXI1FgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfY29uZmlndXJlWAEAAAAtdHI2FgAAWBMAAABkZWNpbWFsLkNvbnRleHQubWF4cjcWAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWF4WAEAAAAtdHI4FgAAWCEAAAB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LmtleXJlZnNyORYAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkua2V5cmVmc1gBAAAALXRyOhYAAFglAAAATWluaUFFRnJhbWUuQUVTZXJ2ZXIuaW5zdGFsbGFlaGFuZGxlcnI7FgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW5pYWVmcmFtZS5odG1sI01pbmlBRUZyYW1lLkFFU2VydmVyLmluc3RhbGxhZWhhbmRsZXJYAQAAAC10cjwWAABYIQAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5wYXJzZXI9FgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sI3JvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5wYXJzZVgBAAAALXRyPhYAAFgqAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuaGFzX2Z1bmN0aW9ucj8WAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuaGFzX2Z1bmN0aW9uWAEAAAAtdHJAFgAAWCQAAAB4bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW0ucmVzZXRyQRYAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLnJlc2V0WAEAAAAtdHJCFgAAWA8AAABvYmplY3QuX19ycG93X19yQxYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ycG93X19YAQAAAC10ckQWAABYGAAAAHppcGZpbGUuWmlwRmlsZS53cml0ZXN0cnJFFgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLndyaXRlc3RyWAEAAAAtdHJGFgAAWAsAAABzdHIuaXNkaWdpdHJHFgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc2RpZ2l0WAEAAAAtdHJIFgAAWBkAAABkZWNpbWFsLkRlY2ltYWwuaXNfZmluaXRlckkWAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfZmluaXRlWAEAAAAtdHJKFgAAWCcAAAB4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci5ub3RhdGlvbkRlY2xySxYAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkRUREhhbmRsZXIubm90YXRpb25EZWNsWAEAAAAtdHJMFgAAWBkAAABkYXRldGltZS5kYXRlLmlzb2NhbGVuZGFyck0WAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5pc29jYWxlbmRhclgBAAAALXRyThYAAFguAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fY2FsbG1ldGhvZHJPFgAAKGpzBQAAanQFAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9jYWxsbWV0aG9kWAEAAAAtdHJQFgAAWB4AAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2RlY2xyURYAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfZGVjbFgBAAAALXRyUhYAAFgVAAAAZnRwbGliLkZUUC5yZXRyYmluYXJ5clMWAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucmV0cmJpbmFyeVgBAAAALXRyVBYAAFgQAAAAcGFyc2VyLlNULmlzZXhwcnJVFgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QuaXNleHByWAEAAAAtdHJWFgAAWBQAAABjdHlwZXMuX0NEYXRhLmluX2RsbHJXFgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLmluX2RsbFgBAAAALXRyWBYAAFggAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMubmdldHRleHRyWRYAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuR05VVHJhbnNsYXRpb25zLm5nZXR0ZXh0WAEAAAAtdHJaFgAAWBYAAABpbWFwbGliLklNQVA0LnNodXRkb3duclsWAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNodXRkb3duWAEAAAAtdHJcFgAAWBMAAABpbWFwbGliLklNQVA0LmNoZWNrcl0WAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNoZWNrWAEAAAAtdHJeFgAAWB4AAABjYWxlbmRhci5DYWxlbmRhci5pdGVyd2Vla2RheXNyXxYAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci5pdGVyd2Vla2RheXNYAQAAAC10cmAWAABYEgAAAG9iamVjdC5fX2RlbGF0dHJfX3JhFgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2RlbGF0dHJfX1gBAAAALXRyYhYAAFgbAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5jb25uZWN0cmMWAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jb25uZWN0WAEAAAAtdHJkFgAAWCIAAABtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZS5qb2lucmUWAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlLmpvaW5YAQAAAC10cmYWAABYEQAAAHNtdHBsaWIuU01UUC5laGxvcmcWAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuZWhsb1gBAAAALXRyaBYAAFgdAAAAZGVjaW1hbC5Db250ZXh0LnRvX2VuZ19zdHJpbmdyaRYAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC50b19lbmdfc3RyaW5nWAEAAAAtdHJqFgAAWBgAAABtc2lsaWIuUmVjb3JkLkdldEludGVnZXJyaxYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5HZXRJbnRlZ2VyWAEAAAAtdHJsFgAAWBcAAABubnRwbGliLk5OVFAuZ2V0d2VsY29tZXJtFgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmdldHdlbGNvbWVYAQAAAC10cm4WAABYEQAAAGNodW5rLkNodW5rLmNsb3Nlcm8WAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuY2xvc2VYAQAAAC10cnAWAABYFAAAAGFycmF5LmFycmF5LmJ5dGVzd2FwcnEWAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuYnl0ZXN3YXBYAQAAAC10cnIWAABYEAAAAGZsLmZvcm0uYWRkX3RleHRycxYAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF90ZXh0WAEAAAAtdHJ0FgAAWC0AAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXJydRYAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXJYAQAAAC10cnYWAABYHAAAAGRlY2ltYWwuQ29udGV4dC5pc19zdWJub3JtYWxydxYAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc19zdWJub3JtYWxYAQAAAC10cngWAABYKgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9tYWludHlwZXJ5FgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X21haW50eXBlWAEAAAAtdHJ6FgAAWB0AAABmcm96ZW5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZXJ7FgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlWAEAAAAtdHJ8FgAAWBEAAABzbXRwbGliLlNNVFAucXVpdHJ9FgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLnF1aXRYAQAAAC10cn4WAABYEwAAAHNvY2tldC5zb2NrZXQuaW9jdGxyfxYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5pb2N0bFgBAAAALXRygBYAAFgkAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX2FjdGl2YXRlcoEWAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5kb19hY3RpdmF0ZVgBAAAALXRyghYAAFgdAAAAaHRtbGxpYi5IVE1MUGFyc2VyLmFuY2hvcl9lbmRygxYAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI2h0bWxsaWIuSFRNTFBhcnNlci5hbmNob3JfZW5kWAEAAAAtdHKEFgAAWCAAAABjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLmVuY29kZXKFFgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLmVuY29kZVgBAAAALXRyhhYAAFgkAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZXh0ZW5kcocWAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmV4dGVuZFgBAAAALXRyiBYAAFgVAAAAY3Vyc2VzLndpbmRvdy5hZGRuc3RycokWAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYWRkbnN0clgBAAAALXRyihYAAFgOAAAAb2JqZWN0Ll9faW50X19yixYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbnRfX1gBAAAALXRyjBYAAFgwAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyco0WAAAoanMFAABqdAUAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXJYAQAAAC10co4WAABYIwAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfY29sbGF0aW9uco8WAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2NvbGxhdGlvblgBAAAALXRykBYAAFgVAAAAc2NoZWQuc2NoZWR1bGVyLmVudGVycpEWAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLmVudGVyWAEAAAAtdHKSFgAAWBsAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFNraXBykxYAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFNraXBYAQAAAC10cpQWAABYDwAAAGZpbGUueHJlYWRsaW5lc3KVFgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUueHJlYWRsaW5lc1gBAAAALXRylhYAAFgnAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubW92ZV9maWxlcpcWAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubW92ZV9maWxlWAEAAAAtdHKYFgAAWBgAAABjdXJzZXMucGFuZWwuUGFuZWwuYWJvdmVymRYAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLmFib3ZlWAEAAAAtdHKaFgAAWBMAAAB4ZHJsaWIuUGFja2VyLnJlc2V0cpsWAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucmVzZXRYAQAAAC10cpwWAABYEwAAAGJkYi5CZGIudXNlcl9yZXR1cm5ynRYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi51c2VyX3JldHVyblgBAAAALXRynhYAAFgiAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX2FsaWdubWVudHKfFgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfYWxpZ25tZW50WAEAAAAtdHKgFgAAWBcAAABmbC5mb3JtLmFkZF9yb3VuZGJ1dHRvbnKhFgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX3JvdW5kYnV0dG9uWAEAAAAtdHKiFgAAWBIAAABpbWFwbGliLklNQVA0LnNvcnRyoxYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc29ydFgBAAAALXRypBYAAFgmAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmdldF9vcHRpb25fZ3JvdXBypRYAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X29wdGlvbl9ncm91cFgBAAAALXRyphYAAFgjAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucXVpY2tfcmF0aW9ypxYAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnF1aWNrX3JhdGlvWAEAAAAtdHKoFgAAWBkAAABzdW5hdS5BVV9yZWFkLmdldGNvbXB0eXBlcqkWAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRjb21wdHlwZVgBAAAALXRyqhYAAFghAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnVnZXR0ZXh0cqsWAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMudWdldHRleHRYAQAAAC10cqwWAABYIAAAAGNhbGVuZGFyLlRleHRDYWxlbmRhci5mb3JtYXR5ZWFycq0WAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuVGV4dENhbGVuZGFyLmZvcm1hdHllYXJYAQAAAC10cq4WAABYEgAAAHR0ay5Ob3RlYm9vay5pbmRleHKvFgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suaW5kZXhYAQAAAC10crAWAABYKAAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmlzX2Jsb2NrZWRysRYAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuaXNfYmxvY2tlZFgBAAAALXRyshYAAFgYAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wcrMWAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wWAEAAAAtdHK0FgAAWCQAAABhc3luY2hhdC5hc3luY19jaGF0LmZvdW5kX3Rlcm1pbmF0b3JytRYAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmZvdW5kX3Rlcm1pbmF0b3JYAQAAAC10crYWAABYFQAAAGN1cnNlcy53aW5kb3cuYmtnZHNldHK3FgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJrZ2RzZXRYAQAAAC10crgWAABYDgAAAG9iamVjdC5fX2dldF9fcrkWAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0X19YAQAAAC10croWAABYFgAAAGJzZGRiLmJzZGRib2JqZWN0LnN5bmNyuxYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5zeW5jWAEAAAAtdHK8FgAAWB8AAABtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfbGFiZWxzcr0WAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfbGFiZWxzWAEAAAAtdHK+FgAAWBYAAAB0aHJlYWRpbmcuTG9jay5yZWxlYXNlcr8WAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Mb2NrLnJlbGVhc2VYAQAAAC10csAWAABYIAAAAGN0eXBlcy5MaWJyYXJ5TG9hZGVyLkxvYWRMaWJyYXJ5csEWAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5MaWJyYXJ5TG9hZGVyLkxvYWRMaWJyYXJ5WAEAAAAtdHLCFgAAWCQAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5ta3BhdGhywxYAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5ta3BhdGhYAQAAAC10csQWAABYIQAAAGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXIuZW1pdHLFFgAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5lbWl0WAEAAAAtdHLGFgAAWBEAAABmbC5mb3JtLmFkZF90aW1lcnLHFgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX3RpbWVyWAEAAAAtdHLIFgAAWBIAAABhc3luY2hhdC5maWZvLnB1c2hyyRYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5maWZvLnB1c2hYAQAAAC10csoWAABYKQAAAGltcHV0aWwuRHluTG9hZFN1ZmZpeEltcG9ydGVyLmltcG9ydF9maWxlcssWAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkR5bkxvYWRTdWZmaXhJbXBvcnRlci5pbXBvcnRfZmlsZVgBAAAALXRyzBYAAFgbAAAAc3VuYXUuQVVfd3JpdGUuc2V0c2FtcHdpZHRocs0WAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0c2FtcHdpZHRoWAEAAAAtdHLOFgAAWCoAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnNldHBhcmFtZXRlcnNyzxYAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnNldHBhcmFtZXRlcnNYAQAAAC10ctAWAABYEgAAAGJkYi5CZGIuYnJlYWtfaGVyZXLRFgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmJyZWFrX2hlcmVYAQAAAC10ctIWAABYFgAAAGN1cnNlcy53aW5kb3cuc3RhbmRvdXRy0xYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zdGFuZG91dFgBAAAALXRy1BYAAFglAAAAY29va2llbGliLkNvb2tpZUphci5hZGRfY29va2llX2hlYWRlcnLVFgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLmFkZF9jb29raWVfaGVhZGVyWAEAAAAtdHLWFgAAWBUAAABtYWlsYm94Lk1ILmFkZF9mb2xkZXJy1xYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguYWRkX2ZvbGRlclgBAAAALXRy2BYAAFgRAAAAZnRwbGliLkZUUC5kZWxldGVy2RYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5kZWxldGVYAQAAAC10ctoWAABYKgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5FdmVudHLbFgAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuRXZlbnRYAQAAAC10ctwWAABYIQAAAHN5bXRhYmxlLlN5bWJvbFRhYmxlLmhhc19jaGlsZHJlbnLdFgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmhhc19jaGlsZHJlblgBAAAALXRy3hYAAFgUAAAAY3Vyc2VzLndpbmRvdy5zdWJwYWRy3xYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zdWJwYWRYAQAAAC10cuAWAABYEwAAAGhhc2hsaWIuaGFzaC51cGRhdGVy4RYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC51cGRhdGVYAQAAAC10cuIWAABYKgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kdGV4dHLjFgAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZHRleHRYAQAAAC10cuQWAABYJwAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRQcm9wZXJ0eXLlFgAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRQcm9wZXJ0eVgBAAAALXRy5hYAAFgZAAAAZmwuZm9ybS5zZXRfZm9ybV9wb3NpdGlvbnLnFgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uc2V0X2Zvcm1fcG9zaXRpb25YAQAAAC10cugWAABYFAAAAG9iamVjdC5fX3JlZHVjZV9leF9fcukWAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI29iamVjdC5fX3JlZHVjZV9leF9fWAEAAAAtdHLqFgAAWBQAAABtYWlsYm94Lk1haWxib3gubG9ja3LrFgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmxvY2tYAQAAAC10cuwWAABYGwAAAG1obGliLkZvbGRlci5yZW1vdmVtZXNzYWdlc3LtFgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5yZW1vdmVtZXNzYWdlc1gBAAAALXRy7hYAAFgOAAAAb2JqZWN0Ll9fZGVsX19y7xYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kZWxfX1gBAAAALXRy8BYAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fX3N0cl9fcvEWAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19zdHJfX1gBAAAALXRy8hYAAFgWAAAAZGF0ZXRpbWUudGltZS5zdHJmdGltZXLzFgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuc3RyZnRpbWVYAQAAAC10cvQWAABYFAAAAGltYXBsaWIuSU1BUDQucmVuYW1lcvUWAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlbmFtZVgBAAAALXRy9hYAAFgVAAAAc3VicHJvY2Vzcy5Qb3Blbi5wb2xscvcWAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnBvbGxYAQAAAC10cvgWAABYHAAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS52YWx1ZXNy+RYAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS52YWx1ZXNYAQAAAC10cvoWAABYDgAAAG1tYXAubW1hcC5tb3ZlcvsWAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAubW92ZVgBAAAALXRy/BYAAFgXAAAAeG1scnBjbGliLkJpbmFyeS5lbmNvZGVy/RYAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkJpbmFyeS5lbmNvZGVYAQAAAC10cv4WAABYGgAAAG1pbWV0eXBlcy5NaW1lVHlwZXMucmVhZGZwcv8WAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMucmVhZGZwWAEAAAAtdHIAFwAAWCkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZ2V0cm9vdHIBFwAAKGpzBQAAanQFAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZ2V0cm9vdFgBAAAALXRyAhcAAFgTAAAAdHRrLlRyZWV2aWV3LmRldGFjaHIDFwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuZGV0YWNoWAEAAAAtdHIEFwAAWCgAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5nZXRfYXBwcgUXAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5nZXRfYXBwWAEAAAAtdHIGFwAAWB0AAABFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci50aXRsZXIHFwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLlByb2dyZXNzQmFyLnRpdGxlWAEAAAAtdHIIFwAAWBIAAABvYmplY3QuX191bmljb2RlX19yCRcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX191bmljb2RlX19YAQAAAC10cgoXAABYFQAAAGRlY2ltYWwuQ29udGV4dC5wb3dlcnILFwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnBvd2VyWAEAAAAtdHIMFwAAWBQAAAB1bml0dGVzdC5UZXN0Q2FzZS5pZHINFwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmlkWAEAAAAtdHIOFwAAWBMAAABmbC5mb3JtLmFkZF9jb3VudGVycg8XAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfY291bnRlclgBAAAALXRyEBcAAFgaAAAAc3NsLlNTTENvbnRleHQud3JhcF9zb2NrZXRyERcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQud3JhcF9zb2NrZXRYAQAAAC10chIXAABYGAAAAHRocmVhZGluZy5Db25kaXRpb24ud2FpdHITFwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLndhaXRYAQAAAC10chQXAABYEQAAAG1zaWxpYi5WaWV3LkZldGNochUXAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5WaWV3LkZldGNoWAEAAAAtdHIWFwAAWCEAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnN5bmNyFxcAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnN5bmNYAQAAAC10chgXAABYGwAAAG1haWxib3guTWFpbGRpci5fX3NldGl0ZW1fX3IZFwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLl9fc2V0aXRlbV9fWAEAAAAtdHIaFwAAWBMAAABob3RzaG90LlByb2ZpbGUucnVuchsXAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNob3RzaG90LlByb2ZpbGUucnVuWAEAAAAtdHIcFwAAWBkAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUucHV0ch0XAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5wdXRYAQAAAC10ch4XAABYFgAAAGN1cnNlcy53aW5kb3cucmVkcmF3bG5yHxcAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZWRyYXdsblgBAAAALXRyIBcAAFgUAAAAY3Vyc2VzLndpbmRvdy5hdHRyb25yIRcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hdHRyb25YAQAAAC10ciIXAABYFQAAAG1haWxib3guTWFpbGRpci5jbG9zZXIjFwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmNsb3NlWAEAAAAtdHIkFwAAWCsAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlicmFyaWVzciUXAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpYnJhcmllc1gBAAAALXRyJhcAAFgYAAAAc3RyaW5nLkZvcm1hdHRlci52Zm9ybWF0cicXAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIudmZvcm1hdFgBAAAALXRyKBcAAFgQAAAAc3FsaXRlMy5Sb3cua2V5c3IpFwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Sb3cua2V5c1gBAAAALXRyKhcAAFgaAAAAeGRybGliLlVucGFja2VyLmdldF9idWZmZXJyKxcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLmdldF9idWZmZXJYAQAAAC10ciwXAABYLQAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnROU3ItFwAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50TlNYAQAAAC10ci4XAABYHAAAAGVtYWlsLnBhcnNlci5QYXJzZXIucGFyc2VzdHJyLxcAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLlBhcnNlci5wYXJzZXN0clgBAAAALXRyMBcAAFgeAAAAc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9kYXRhcjEXAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2RhdGFYAQAAAC10cjIXAABYIgAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2VyMxcAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2VYAQAAAC10cjQXAABYMAAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbXI1FwAAKGpzBQAAanQFAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbVgBAAAALXRyNhcAAFglAAAAbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5HZXRQcm9wZXJ0eXI3FwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5WAEAAAAtdHI4FwAAWA8AAABmdHBsaWIuRlRQLnNpemVyORcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zaXplWAEAAAAtdHI6FwAAWBkAAABkZWNpbWFsLkNvbnRleHQuaXNfc2lnbmVkcjsXAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfc2lnbmVkWAEAAAAtdHI8FwAAWAgAAABzdHIuZmluZHI9FwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5maW5kWAEAAAAtdHI+FwAAWBMAAABkZWNpbWFsLkNvbnRleHQuZm1hcj8XAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuZm1hWAEAAAAtdHJAFwAAWC0AAABsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXIuc2hvdWxkRmx1c2hyQRcAAChqcwUAAGp0BQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5zaG91bGRGbHVzaFgBAAAALXRyQhcAAFgtAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2xpYnJhcnlfZGlyckMXAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2xpYnJhcnlfZGlyWAEAAAAtdHJEFwAAWB4AAABkZWNpbWFsLkRlY2ltYWwucmVtYWluZGVyX25lYXJyRRcAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5yZW1haW5kZXJfbmVhclgBAAAALXRyRhcAAFgOAAAAbWhsaWIuTUguZXJyb3JyRxcAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5lcnJvclgBAAAALXRySBcAAFgOAAAAbW1hcC5tbWFwLmZpbmRySRcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5maW5kWAEAAAAtdHJKFwAAWA4AAABtZDUubWQ1LnVwZGF0ZXJLFwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tZDUuaHRtbCNtZDUubWQ1LnVwZGF0ZVgBAAAALXRyTBcAAFgYAAAAZGF0ZXRpbWUuZGF0ZS5pc293ZWVrZGF5ck0XAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5pc293ZWVrZGF5WAEAAAAtdHJOFwAAWA8AAABtbWFwLm1tYXAucmZpbmRyTxcAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZmluZFgBAAAALXRyUBcAAFgkAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2ltcG9ydF9zdGFyclEXAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2ltcG9ydF9zdGFyWAEAAAAtdHJSFwAAWBAAAABiejIuQloyRmlsZS50ZWxsclMXAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLnRlbGxYAQAAAC10clQXAABYGgAAAEZyYW1lV29yay5XaW5kb3cuZG9fdXBkYXRlclUXAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5XaW5kb3cuZG9fdXBkYXRlWAEAAAAtdHJWFwAAWBQAAABhaWZjLmFpZmMuZ2V0bWFya2Vyc3JXFwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldG1hcmtlcnNYAQAAAC10clgXAABYFgAAAGFpZmMuYWlmYy5zZXRzYW1wd2lkdGhyWRcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRzYW1wd2lkdGhYAQAAAC10cloXAABYHAAAAGRlY2ltYWwuRGVjaW1hbC5zYW1lX3F1YW50dW1yWxcAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5zYW1lX3F1YW50dW1YAQAAAC10clwXAABYEgAAAGFycmF5LmFycmF5LmV4dGVuZHJdFwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmV4dGVuZFgBAAAALXRyXhcAAFgRAAAAYmRiLkJkYi5nZXRfYnJlYWtyXxcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfYnJlYWtYAQAAAC10cmAXAABYJwAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3NjaGVtZXJhFwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc2NoZW1lWAEAAAAtdHJiFwAAWB8AAABodG1sbGliLkhUTUxQYXJzZXIuaGFuZGxlX2ltYWdlcmMXAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZXIuaGFuZGxlX2ltYWdlWAEAAAAtdHJkFwAAWB0AAABodG1sbGliLkhUTUxQYXJzZXIuYW5jaG9yX2JnbnJlFwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLmFuY2hvcl9iZ25YAQAAAC10cmYXAABYGQAAAG1obGliLkZvbGRlci5nZXRzZXF1ZW5jZXNyZxcAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0c2VxdWVuY2VzWAEAAAAtdHJoFwAAWBoAAABtc2lsaWIuRmVhdHVyZS5zZXRfY3VycmVudHJpFwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRmVhdHVyZS5zZXRfY3VycmVudFgBAAAALXRyahcAAFgZAAAAc29ja2V0LnNvY2tldC5nZXRzb2NrbmFtZXJrFwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lWAEAAAAtdHJsFwAAWCMAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnNldGZtdHJtFwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0Zm10WAEAAAAtdHJuFwAAWCAAAABmb3JtYXR0ZXIud3JpdGVyLnNlbmRfbGFiZWxfZGF0YXJvFwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLnNlbmRfbGFiZWxfZGF0YVgBAAAALXRycBcAAFgSAAAAc210cGxpYi5TTVRQLmxvZ2lucnEXAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAubG9naW5YAQAAAC10cnIXAABYIAAAAHNnbWxsaWIuU0dNTFBhcnNlci5zZXRub21vcmV0YWdzcnMXAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuc2V0bm9tb3JldGFnc1gBAAAALXRydBcAAFgiAAAAdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX25ubnJ1FwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX25ublgBAAAALXRydhcAAFgTAAAAbW1hcC5tbWFwLnJlYWRfYnl0ZXJ3FwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLnJlYWRfYnl0ZVgBAAAALXRyeBcAAFgPAAAAb2JqZWN0Ll9fZXhpdF9fcnkXAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZXhpdF9fWAEAAAAtdHJ6FwAAWBcAAAB0aHJlYWRpbmcuUkxvY2sucmVsZWFzZXJ7FwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuUkxvY2sucmVsZWFzZVgBAAAALXRyfBcAAFgzAAAAZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRfb3B0aW9uX29yZGVycn0XAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRfb3B0aW9uX29yZGVyWAEAAAAtdHJ+FwAAWBQAAABpby5JT0Jhc2Uud3JpdGVsaW5lc3J/FwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS53cml0ZWxpbmVzWAEAAAAtdHKAFwAAWBsAAABkYXRldGltZS5kYXRldGltZS51dGNvZmZzZXRygRcAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS51dGNvZmZzZXRYAQAAAC10coIXAABYIgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmtleXNygxcAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQua2V5c1gBAAAALXRyhBcAAFgdAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NiX2RhdGFyhRcAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NiX2RhdGFYAQAAAC10coYXAABYMwAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZXKHFwAAKGpzBQAAanQFAABYaQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZVgBAAAALXRyiBcAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0RW5jb2RpbmdyiRcAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRFbmNvZGluZ1gBAAAALXRyihcAAFgZAAAAc3FsaXRlMy5Db25uZWN0aW9uLmN1cnNvcnKLFwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmN1cnNvclgBAAAALXRyjBcAAFgdAAAAdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmVyjRcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmVYAQAAAC10co4XAABYLAAAAHhtbC5kb20uRG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uco8XAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvblgBAAAALXRykBcAAFggAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3ZlcnlfZWFnZXJykRcAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX3ZlcnlfZWFnZXJYAQAAAC10cpIXAABYHQAAAGxvZ2dpbmcuTG9nZ2VyQWRhcHRlci5wcm9jZXNzcpMXAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlckFkYXB0ZXIucHJvY2Vzc1gBAAAALXRylBcAAFgTAAAAZGVjaW1hbC5EZWNpbWFsLmV4cHKVFwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmV4cFgBAAAALXRylhcAAFgOAAAAb2JqZWN0Ll9fbGVuX19ylxcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19sZW5fX1gBAAAALXRymBcAAFgcAAAAbWFpbGJveC5NYWlsYm94Ll9fY29udGFpbnNfX3KZFwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fY29udGFpbnNfX1gBAAAALXRymhcAAFgkAAAAeG1sLmRvbS5FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lcpsXAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVYAQAAAC10cpwXAABYIQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90Tm9uZXKdFwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90Tm9uZVgBAAAALXRynhcAAFgeAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudXRjdGltZXR1cGxlcp8XAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjdGltZXR1cGxlWAEAAAAtdHKgFwAAWCEAAABtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLlBlcnNpc3RyoRcAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5QZXJzaXN0WAEAAAAtdHKiFwAAWBYAAABmbC5mb3JtLmFkZF9wb3NpdGlvbmVycqMXAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfcG9zaXRpb25lclgBAAAALXRypBcAAFgoAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LmVuY29kZWRfaGVhZGVyX2xlbnKlFwAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmVuY29kZWRfaGVhZGVyX2xlblgBAAAALXRyphcAAFgZAAAAcmZjODIyLk1lc3NhZ2UuZ2V0ZGF0ZV90enKnFwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5nZXRkYXRlX3R6WAEAAAAtdHKoFwAAWB0AAABmcmFjdGlvbnMuRnJhY3Rpb24uZnJvbV9mbG9hdHKpFwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24uZnJvbV9mbG9hdFgBAAAALXRyqhcAAFgYAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5zZW5kcqsXAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5zZW5kWAEAAAAtdHKsFwAAWCgAAAB1cmxsaWIyLkhUVFBFcnJvclByb2Nlc3Nvci5odHRwX3Jlc3BvbnNlcq0XAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBFcnJvclByb2Nlc3Nvci5odHRwX3Jlc3BvbnNlWAEAAAAtdHKuFwAAWB8AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVsX3BhcmFtcq8XAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVsX3BhcmFtWAEAAAAtdHKwFwAAWCsAAAB4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuZW5kRWxlbWVudE5TcrEXAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRFbGVtZW50TlNYAQAAAC10crIXAABYLAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlcrMXAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVYAQAAAC10crQXAABYEQAAAG9iamVjdC5fX2NvZXJjZV9fcrUXAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fY29lcmNlX19YAQAAAC10crYXAABYJQAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5jYW5fZmV0Y2hytxcAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNyb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIuY2FuX2ZldGNoWAEAAAAtdHK4FwAAWBgAAAB4bWwuZG9tLk5vZGUucmVtb3ZlQ2hpbGRyuRcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5yZW1vdmVDaGlsZFgBAAAALXRyuhcAAFggAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldF9ub3dhaXRyuxcAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldF9ub3dhaXRYAQAAAC10crwXAABYFgAAAHRpbWVpdC5UaW1lci5wcmludF9leGNyvRcAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyLnByaW50X2V4Y1gBAAAALXRyvhcAAFgXAAAAZGF0ZXRpbWUuZGF0ZS50aW1ldHVwbGVyvxcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRpbWV0dXBsZVgBAAAALXRywBcAAFgiAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucHJpbnRfaGVscHLBFwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnByaW50X2hlbHBYAQAAAC10csIXAABYFQAAAHVybGxpYi5VUkxvcGVuZXIub3BlbnLDFwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyLm9wZW5YAQAAAC10csQXAABYHQAAAGRlY2ltYWwuQ29udGV4dC50b19zY2lfc3RyaW5ncsUXAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQudG9fc2NpX3N0cmluZ1gBAAAALXRyxhcAAFgLAAAAcGRiLlBkYi5ydW5yxxcAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYi5ydW5YAQAAAC10csgXAABYEAAAAHBzdGF0cy5TdGF0cy5hZGRyyRcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5hZGRYAQAAAC10csoXAABYFgAAAGJkYi5CZGIuYnJlYWtfYW55d2hlcmVyyxcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5icmVha19hbnl3aGVyZVgBAAAALXRyzBcAAFgdAAAAdGhyZWFkaW5nLkNvbmRpdGlvbi5ub3RpZnlBbGxyzRcAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkNvbmRpdGlvbi5ub3RpZnlBbGxYAQAAAC10cs4XAABYJgAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9zdWJwYXJzZXJzcs8XAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX3N1YnBhcnNlcnNYAQAAAC10ctAXAABYGQAAAGRlY2ltYWwuQ29udGV4dC5yZW1haW5kZXJy0RcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5yZW1haW5kZXJYAQAAAC10ctIXAABYGAAAAHBzdGF0cy5TdGF0cy5wcmludF9zdGF0c3LTFwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnByaW50X3N0YXRzWAEAAAAtdHLUFwAAWA8AAABjbWQuQ21kLmRlZmF1bHRy1RcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5kZWZhdWx0WAEAAAAtdHLWFwAAWBcAAAByZmM4MjIuTWVzc2FnZS5pc2hlYWRlcnLXFwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5pc2hlYWRlclgBAAAALXRy2BcAAFg1AAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXJy2RcAAChqcwUAAGp0BQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyWAEAAAAtdHLaFwAAWBIAAABzb2NrZXQuc29ja2V0LnJlY3Zy2xcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2WAEAAAAtdHLcFwAAWBsAAABtYWlsYm94Lk1haWxib3guZ2V0X21lc3NhZ2Vy3RcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5nZXRfbWVzc2FnZVgBAAAALXRy3hcAAFgcAAAAeGRybGliLlVucGFja2VyLnVucGFja19mbG9hdHLfFwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2Zsb2F0WAEAAAAtdHLgFwAAWA4AAABvYmplY3QuX19zdWJfX3LhFwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3N1Yl9fWAEAAAAtdHLiFwAAWCoAAAB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDdy4xcAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwN1gBAAAALXRy5BcAAFgOAAAAZGljdC5pdGVyaXRlbXNy5RcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0Lml0ZXJpdGVtc1gBAAAALXRy5hcAAFgbAAAAdW5pdHRlc3QuVGVzdFN1aXRlLmFkZFRlc3RzcucXAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLmFkZFRlc3RzWAEAAAAtdHLoFwAAWBYAAABpbWFwbGliLklNQVA0LmdldHF1b3RhcukXAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmdldHF1b3RhWAEAAAAtdHLqFwAAWBIAAABvYmplY3QuX19yZGl2bW9kX19y6xcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZGl2bW9kX19YAQAAAC10cuwXAABYGwAAAHRocmVhZGluZy5TZW1hcGhvcmUuYWNxdWlyZXLtFwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JlLmFjcXVpcmVYAQAAAC10cu4XAABYDQAAAG9iamVjdC5fX2d0X19y7xcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ndF9fWAEAAAAtdHLwFwAAWBYAAABiejIuQloyRmlsZS54cmVhZGxpbmVzcvEXAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLnhyZWFkbGluZXNYAQAAAC10cvIXAABYGQAAAGRlY2ltYWwuRGVjaW1hbC5uZXh0X3BsdXNy8xcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5uZXh0X3BsdXNYAQAAAC10cvQXAABYEQAAAG5udHBsaWIuTk5UUC5zdGF0cvUXAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc3RhdFgBAAAALXRy9hcAAFgYAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5uZXh0cvcXAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGUubmV4dFgBAAAALXRy+BcAAFgNAAAAc2xpY2UuaW5kaWNlc3L5FwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NsaWNlLmluZGljZXNYAQAAAC10cvoXAABYHQAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmVycm9ycvsXAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZXJyb3JYAQAAAC10cvwXAABYHQAAAGRlY2ltYWwuRGVjaW1hbC50b19lbmdfc3RyaW5ncv0XAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwudG9fZW5nX3N0cmluZ1gBAAAALXRy/hcAAFg0AAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2hhcmVkX29iamVjdF9maWxlbmFtZXL/FwAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNoYXJlZF9vYmplY3RfZmlsZW5hbWVYAQAAAC10cgAYAABYHQAAAG1haWxib3guTU1ERk1lc3NhZ2UuZ2V0X2ZsYWdzcgEYAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLmdldF9mbGFnc1gBAAAALXRyAhgAAFgWAAAAYmRiLkJkYi50cmFjZV9kaXNwYXRjaHIDGAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnRyYWNlX2Rpc3BhdGNoWAEAAAAtdHIEGAAAWBYAAABtc2lsaWIuRGF0YWJhc2UuQ29tbWl0cgUYAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EYXRhYmFzZS5Db21taXRYAQAAAC10cgYYAABYFQAAAHNjaGVkLnNjaGVkdWxlci5lbXB0eXIHGAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbXB0eVgBAAAALXRyCBgAAFgpAAAAdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IuaHR0cHNfcmVzcG9uc2VyCRgAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUEVycm9yUHJvY2Vzc29yLmh0dHBzX3Jlc3BvbnNlWAEAAAAtdHIKGAAAWB0AAABGcmFtZVdvcmsuQXBwbGljYXRpb24uZG9fY2hhcnILGAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb24uZG9fY2hhclgBAAAALXRyDBgAAFgxAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZERvY3R5cGVEZWNsSGFuZGxlcnINGAAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZERvY3R5cGVEZWNsSGFuZGxlclgBAAAALXRyDhgAAFgqAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNvbW1lbnRIYW5kbGVycg8YAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ29tbWVudEhhbmRsZXJYAQAAAC10chAYAABYIgAAAGRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfc3RhcnRyERgAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfc3RhcnRYAQAAAC10chIYAABYDgAAAG9iamVjdC5fX3hvcl9fchMYAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9feG9yX19YAQAAAC10chQYAABYDAAAAHNoYS5zaGEuY29weXIVGAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuc2hhLmNvcHlYAQAAAC10chYYAABYIQAAAGNhbGVuZGFyLlRleHRDYWxlbmRhci5mb3JtYXRtb250aHIXGAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLlRleHRDYWxlbmRhci5mb3JtYXRtb250aFgBAAAALXRyGBgAAFgaAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX2xhenlyGRgAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX2xhenlYAQAAAC10choYAABYJwAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuaGFzX29wdGlvbnIbGAAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmhhc19vcHRpb25YAQAAAC10chwYAABYHAAAAGNvZGVjcy5TdHJlYW1SZWFkZXIucmVhZGxpbmVyHRgAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkbGluZVgBAAAALXRyHhgAAFgLAAAAZmlsZS5pc2F0dHlyHxgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmlzYXR0eVgBAAAALXRyIBgAAFgrAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuc3VjY2Vzc2Z1bHIhGAAAKGpzBQAAanQFAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdC5zdWNjZXNzZnVsWAEAAAAtdHIiGAAAWAkAAABmaWxlLnJlYWRyIxgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnJlYWRYAQAAAC10ciQYAABYHAAAAGRlY2ltYWwuQ29udGV4dC5udW1iZXJfY2xhc3NyJRgAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5udW1iZXJfY2xhc3NYAQAAAC10ciYYAABYFwAAAGN1cnNlcy5wYW5lbC5QYW5lbC5tb3ZlcicYAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5tb3ZlWAEAAAAtdHIoGAAAWDIAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcnIpGAAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZENkYXRhU2VjdGlvbkhhbmRsZXJYAQAAAC10cioYAABYLQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRDb250ZW50SGFuZGxlcnIrGAAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRDb250ZW50SGFuZGxlclgBAAAALXRyLBgAAFgdAAAAbWFpbGJveC5tYm94TWVzc2FnZS5nZXRfZmxhZ3NyLRgAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2UuZ2V0X2ZsYWdzWAEAAAAtdHIuGAAAWBIAAABkYmhhc2guZGJoYXNoLm5leHRyLxgAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjZGJoYXNoLmRiaGFzaC5uZXh0WAEAAAAtdHIwGAAAWCMAAABUa2ludGVyLldpZGdldC50ay5jcmVhdGVmaWxlaGFuZGxlcnIxGAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjVGtpbnRlci5XaWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXJYAQAAAC10cjIYAABYHwAAAGZyYWN0aW9ucy5GcmFjdGlvbi5mcm9tX2RlY2ltYWxyMxgAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLmZyb21fZGVjaW1hbFgBAAAALXRyNBgAAFgVAAAAd2F2ZS5XYXZlX3JlYWQucmV3aW5kcjUYAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5yZXdpbmRYAQAAAC10cjYYAABYJwAAAHhtbHJwY2xpYi5TZXJ2ZXJQcm94eS5zeXN0ZW0ubWV0aG9kSGVscHI3GAAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZEhlbHBYAQAAAC10cjgYAABYFAAAAHR0ay5UcmVldmlldy50YWdfaGFzcjkYAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy50YWdfaGFzWAEAAAAtdHI6GAAAWBoAAAB0YXJmaWxlLlRhckZpbGUuZXh0cmFjdGFsbHI7GAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RhbGxYAQAAAC10cjwYAABYFgAAAGRhdGV0aW1lLmRhdGV0aW1lLnRpbWVyPRgAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50aW1lWAEAAAAtdHI+GAAAWBwAAABtYWlsYm94Lm1ib3hNZXNzYWdlLmFkZF9mbGFncj8YAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLmFkZF9mbGFnWAEAAAAtdHJAGAAAWBMAAABpby5JT0Jhc2UucmVhZGxpbmVzckEYAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRsaW5lc1gBAAAALXRyQhgAAFgdAAAAbWltZXRvb2xzLk1lc3NhZ2UuZ2V0bWFpbnR5cGVyQxgAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLk1lc3NhZ2UuZ2V0bWFpbnR5cGVYAQAAAC10ckQYAABYEgAAAGlvLklPQmFzZS50cnVuY2F0ZXJFGAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS50cnVuY2F0ZVgBAAAALXRyRhgAAFgTAAAAY29kZWNzLkNvZGVjLmRlY29kZXJHGAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWMuZGVjb2RlWAEAAAAtdHJIGAAAWBkAAAB0ZWxuZXRsaWIuVGVsbmV0LmludGVyYWN0ckkYAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuaW50ZXJhY3RYAQAAAC10ckoYAABYKQAAAGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrcksYAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIuc2hvd3RyYWNlYmFja1gBAAAALXRyTBgAAFgZAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UucmVhZHJNGAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQUmVzcG9uc2UucmVhZFgBAAAALXRyThgAAFgaAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuc3RyZnRpbWVyTxgAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5zdHJmdGltZVgBAAAALXRyUBgAAFghAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5wb3N0clEYAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5wb3N0WAEAAAAtdHJSGAAAWBgAAAB1cmxsaWIyLlJlcXVlc3QuYWRkX2RhdGFyUxgAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5hZGRfZGF0YVgBAAAALXRyVBgAAFggAAAAbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5yZXBvcnRyVRgAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5yZXBvcnRYAQAAAC10clYYAABYIAAAAHN5bXRhYmxlLkZ1bmN0aW9uLmdldF9wYXJhbWV0ZXJzclcYAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb24uZ2V0X3BhcmFtZXRlcnNYAQAAAC10clgYAABYNwAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW5zdGFuY2VyWRgAAChqcwUAAGp0BQAAWHEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5yZWdpc3Rlcl9pbnN0YW5jZVgBAAAALXRyWhgAAFgaAAAAZGVjaW1hbC5EZWNpbWFsLmZyb21fZmxvYXRyWxgAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5mcm9tX2Zsb2F0WAEAAAAtdHJcGAAAWCAAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5zZXRfc2Vxc3JdGAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuc2V0X3NlcXNYAQAAAC10cl4YAABYEQAAAGZsLmZvcm0uZmluZF9sYXN0cl8YAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5maW5kX2xhc3RYAQAAAC10cmAYAABYDgAAAGZ0cGxpYi5GVFAuY3dkcmEYAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuY3dkWAEAAAAtdHJiGAAAWB4AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vbmVyYxgAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vbmVYAQAAAC10cmQYAABYEgAAAGlvLklPQmFzZS5yZWFkYWJsZXJlGAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5yZWFkYWJsZVgBAAAALXRyZhgAAFgUAAAAY3Vyc2VzLndpbmRvdy5nZXRzdHJyZxgAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRzdHJYAQAAAC10cmgYAABYJQAAAGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLnNlbmRyaRgAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLnNlbmRYAQAAAC10cmoYAABYIwAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5wcmludF92ZXJzaW9ucmsYAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnByaW50X3ZlcnNpb25YAQAAAC10cmwYAABYDQAAAGZpbGUudHJ1bmNhdGVybRgAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnRydW5jYXRlWAEAAAAtdHJuGAAAWB4AAABtdWx0aWZpbGUuTXVsdGlGaWxlLmVuZF9tYXJrZXJybxgAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5lbmRfbWFya2VyWAEAAAAtdHJwGAAAWAkAAABzdHIucmp1c3RycRgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIucmp1c3RYAQAAAC10cnIYAABYDgAAAGlvLklPQmFzZS5zZWVrcnMYAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnNlZWtYAQAAAC10cnQYAABYFwAAAGRhdGV0aW1lLnR6aW5mby5mcm9tdXRjcnUYAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLmZyb211dGNYAQAAAC10cnYYAABYDgAAAGZpbGUucmVhZGxpbmVzcncYAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5yZWFkbGluZXNYAQAAAC10cngYAABYKwAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5zZXRfb3V0cHV0X2NoYXJzZXRyeRgAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5zZXRfb3V0cHV0X2NoYXJzZXRYAQAAAC10cnoYAABYJgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJ0ZXh0cnsYAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJ0ZXh0WAEAAAAtdHJ8GAAAWB4AAABmb3JtYXR0ZXIud3JpdGVyLm5ld19hbGlnbm1lbnRyfRgAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5uZXdfYWxpZ25tZW50WAEAAAAtdHJ+GAAAWBwAAABtdWx0aXByb2Nlc3NpbmcuTG9jay5yZWxlYXNlcn8YAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Mb2NrLnJlbGVhc2VYAQAAAC10coAYAABYJAAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xpdGVyYWxfZGF0YXKBGAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9saXRlcmFsX2RhdGFYAQAAAC10coIYAABYHAAAAHVuaXR0ZXN0LlRlc3RDYXNlLmRvQ2xlYW51cHNygxgAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5kb0NsZWFudXBzWAEAAAAtdHKEGAAAWCAAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5zZXRfc2VxMXKFGAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuc2V0X3NlcTFYAQAAAC10coYYAABYIAAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXEycocYAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5zZXRfc2VxMlgBAAAALXRyiBgAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuY2xvc2VyiRgAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5jbG9zZVgBAAAALXRyihgAAFgXAAAAZGF0ZXRpbWUuZGF0ZS50b29yZGluYWxyixgAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRvb3JkaW5hbFgBAAAALXRyjBgAAFgkAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLnJlcGxhY2VfaGVhZGVyco0YAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UucmVwbGFjZV9oZWFkZXJYAQAAAC10co4YAABYFwAAAHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsco8YAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUucnVuY2FsbFgBAAAALXRykBgAAFgkAAAAc2dtbGxpYi5TR01MUGFyc2VyLmdldF9zdGFydHRhZ190ZXh0cpEYAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuZ2V0X3N0YXJ0dGFnX3RleHRYAQAAAC10cpIYAABYIQAAAHhtbC5zYXguU0FYRXhjZXB0aW9uLmdldEV4Y2VwdGlvbnKTGAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhFeGNlcHRpb24uZ2V0RXhjZXB0aW9uWAEAAAAtdHKUGAAAWBkAAAB4ZHJsaWIuUGFja2VyLnBhY2tfb3BhcXVlcpUYAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19vcGFxdWVYAQAAAC10cpYYAABYFQAAAGNvbGxlY3Rpb25zLmRlcXVlLnBvcHKXGAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLnBvcFgBAAAALXRymBgAAFgPAAAAY21kLkNtZC5wcmVsb29wcpkYAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucHJlbG9vcFgBAAAALXRymhgAAFgRAAAAb2JqZWN0Ll9fcnNoaWZ0X19ymxgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yc2hpZnRfX1gBAAAALXRynBgAAFgPAAAAZGljdC5zZXRkZWZhdWx0cp0YAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5zZXRkZWZhdWx0WAEAAAAtdHKeGAAAWBYAAABDb29raWUuQmFzZUNvb2tpZS5sb2Fkcp8YAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLmxvYWRYAQAAAC10cqAYAABYGgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5fX2xlbl9fcqEYAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX2xlbl9fWAEAAAAtdHKiGAAAWBEAAABiZGIuQmRiLnN0b3BfaGVyZXKjGAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnN0b3BfaGVyZVgBAAAALXRypBgAAFgPAAAAYXJyYXkuYXJyYXkucG9wcqUYAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucG9wWAEAAAAtdHKmGAAAWDQAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnZlcnNpb25fc3RyaW5ncqcYAAAoanMFAABqdAUAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci52ZXJzaW9uX3N0cmluZ1gBAAAALXRyqBgAAFgXAAAAZmwuZm9ybS5hZGRfbGlnaHRidXR0b25yqRgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9saWdodGJ1dHRvblgBAAAALXRyqhgAAFgcAAAAc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZXKrGAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZVgBAAAALXRyrBgAAFgiAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnNldF9kZWZhdWx0c3KtGAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5zZXRfZGVmYXVsdHNYAQAAAC10cq4YAABYIQAAAENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyLnNldHKvGAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlci5zZXRYAQAAAC10crAYAABYEAAAAGJkYi5CZGIuc2V0X25leHRysRgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfbmV4dFgBAAAALXRyshgAAFgJAAAAc3RyLnJmaW5kcrMYAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJmaW5kWAEAAAAtdHK0GAAAWBMAAAB0dGsuV2lkZ2V0LmlkZW50aWZ5crUYAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5XaWRnZXQuaWRlbnRpZnlYAQAAAC10crYYAABYFAAAAHNzbC5TU0xTb2NrZXQudW53cmFwcrcYAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQudW53cmFwWAEAAAAtdHK4GAAAWA8AAABRdWV1ZS5RdWV1ZS5wdXRyuRgAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNRdWV1ZS5RdWV1ZS5wdXRYAQAAAC10croYAABYFgAAAHRhcmZpbGUuVGFySW5mby5pc2ZpZm9yuxgAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2ZpZm9YAQAAAC10crwYAABYFQAAAGN1cnNlcy53aW5kb3cuaW5zbnN0cnK9GAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lmluc25zdHJYAQAAAC10cr4YAABYFgAAAHJmYzgyMi5NZXNzYWdlLmdldGFkZHJyvxgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0YWRkclgBAAAALXRywBgAAFgQAAAAYmRiLkJkYi5zZXRfcXVpdHLBGAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9xdWl0WAEAAAAtdHLCGAAAWBsAAABkYXRldGltZS5kYXRldGltZS5pc29mb3JtYXRywxgAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5pc29mb3JtYXRYAQAAAC10csQYAABYGQAAAHNvY2tldC5zb2NrZXQuc2V0YmxvY2tpbmdyxRgAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZXRibG9ja2luZ1gBAAAALXRyxhgAAFgnAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm91dHB1dF9jaGFyc2V0cscYAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMub3V0cHV0X2NoYXJzZXRYAQAAAC10csgYAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5jbG9zZXLJGAAAKGpzBQAAanQFAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuY2xvc2VYAQAAAC10csoYAABYNwAAAHVybGxpYjIuQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yX2F1dGhfcmVxZWRyyxgAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yX2F1dGhfcmVxZWRYAQAAAC10cswYAABYFwAAAGhvdHNob3QuUHJvZmlsZS5hZGRpbmZvcs0YAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNob3RzaG90LlByb2ZpbGUuYWRkaW5mb1gBAAAALXRyzhgAAFgUAAAAc29ja2V0LnNvY2tldC5zZW5kdG9yzxgAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kdG9YAQAAAC10ctAYAABYHQAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3RvdGFsctEYAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29tcGFyZV90b3RhbFgBAAAALXRy0hgAAFgVAAAAdGhyZWFkaW5nLkV2ZW50LmNsZWFyctMYAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC5jbGVhclgBAAAALXRy1BgAAFgQAAAAb2JqZWN0Ll9fZmxvYXRfX3LVGAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Zsb2F0X19YAQAAAC10ctYYAABYEQAAAFF1ZXVlLlF1ZXVlLnFzaXplctcYAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUXVldWUucXNpemVYAQAAAC10ctgYAABYFQAAAGN1cnNlcy53aW5kb3cucmVmcmVzaHLZGAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnJlZnJlc2hYAQAAAC10ctoYAABYHQAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0ctsYAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RYAQAAAC10ctwYAABYGAAAAG1haWxib3guTWFpbGRpci5nZXRfZmlsZXLdGAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmdldF9maWxlWAEAAAAtdHLeGAAAWCMAAABjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuY29kZXLfGAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyLnJ1bmNvZGVYAQAAAC10cuAYAABYFAAAAGZyb3plbnNldC5pc2Rpc2pvaW50cuEYAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmlzZGlzam9pbnRYAQAAAC10cuIYAABYIgAAAHhtbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIuZXJyb3Jy4xgAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci5lcnJvclgBAAAALXRy5BgAAFgpAAAAdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2Vy5RgAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZVgBAAAALXRy5hgAAFgJAAAAZGwuZGwuc3ltcucYAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjZGwuZGwuc3ltWAEAAAAtdHLoGAAAWBYAAABiZGIuQmRiLnVzZXJfZXhjZXB0aW9ucukYAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIudXNlcl9leGNlcHRpb25YAQAAAC10cuoYAABYLQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbnRpdHlEZWNsSGFuZGxlcnLrGAAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVudGl0eURlY2xIYW5kbGVyWAEAAAAtdHLsGAAAWAkAAABzdHIuc3BsaXRy7RgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuc3BsaXRYAQAAAC10cu4YAABYFwAAAG1zaWxpYi5SZWNvcmQuR2V0U3RyaW5ncu8YAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SZWNvcmQuR2V0U3RyaW5nWAEAAAAtdHLwGAAAWCIAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9sYWJlbF9kYXRhcvEYAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xhYmVsX2RhdGFYAQAAAC10cvIYAABYGQAAAHVybGxpYjIuQmFzZUhhbmRsZXIuY2xvc2Vy8xgAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIuY2xvc2VYAQAAAC10cvQYAABYHQAAAHN5bXRhYmxlLlN5bWJvbC5pc19yZWZlcmVuY2VkcvUYAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX3JlZmVyZW5jZWRYAQAAAC10cvYYAABYIQAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5sZ2V0dGV4dHL3GAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxnZXR0ZXh0WAEAAAAtdHL4GAAAWBEAAABiZGIuQmRiLnVzZXJfbGluZXL5GAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnVzZXJfbGluZVgBAAAALXRy+hgAAFgaAAAAcHN0YXRzLlN0YXRzLnJldmVyc2Vfb3JkZXJy+xgAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5yZXZlcnNlX29yZGVyWAEAAAAtdHL8GAAAWCQAAABzc2wuU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNy/RgAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zWAEAAAAtdHL+GAAAWBwAAABsb2dnaW5nLkxvZ1JlY29yZC5nZXRNZXNzYWdlcv8YAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ1JlY29yZC5nZXRNZXNzYWdlWAEAAAAtdHIAGQAAWAoAAABzdHIucmluZGV4cgEZAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJpbmRleFgBAAAALXRyAhkAAFgVAAAAY3Vyc2VzLndpbmRvdy5vdmVybGF5cgMZAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cub3ZlcmxheVgBAAAALXRyBBkAAFgZAAAAdGhyZWFkaW5nLlRocmVhZC5pc19hbGl2ZXIFGQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLmlzX2FsaXZlWAEAAAAtdHIGGQAAWBMAAAB0dGsuTm90ZWJvb2suc2VsZWN0cgcZAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Ob3RlYm9vay5zZWxlY3RYAQAAAC10cggZAABYIQAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3RvdGFsX21hZ3IJGQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfdG90YWxfbWFnWAEAAAAtdHIKGQAAWCEAAABlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yLmZsYXR0ZW5yCxkAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci5mbGF0dGVuWAEAAAAtdHIMGQAAWCoAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLnJlbW92ZV9vcHRpb25yDRkAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZW1vdmVfb3B0aW9uWAEAAAAtdHIOGQAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NoYXJzZXRyDxkAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfY2hhcnNldFgBAAAALXRyEBkAAFghAAAAZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5vcGVuchEZAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5vcGVuWAEAAAAtdHISGQAAWCIAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXNfbXVsdGlwYXJ0chMZAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXNfbXVsdGlwYXJ0WAEAAAAtdHIUGQAAWB4AAAB0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeV9hbGxyFRkAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkNvbmRpdGlvbi5ub3RpZnlfYWxsWAEAAAAtdHIWGQAAWBIAAABzaGVsdmUuU2hlbGYuY2xvc2VyFxkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLlNoZWxmLmNsb3NlWAEAAAAtdHIYGQAAWBkAAABjZ2kuRmllbGRTdG9yYWdlLmdldGZpcnN0chkZAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5GaWVsZFN0b3JhZ2UuZ2V0Zmlyc3RYAQAAAC10choZAABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV90aW1lb3V0chsZAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV90aW1lb3V0WAEAAAAtdHIcGQAAWCAAAABtc2lsaWIuRGlyZWN0b3J5LnN0YXJ0X2NvbXBvbmVudHIdGQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlyZWN0b3J5LnN0YXJ0X2NvbXBvbmVudFgBAAAALXRyHhkAAFghAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fZGVsaXRlbV9fch8ZAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19kZWxpdGVtX19YAQAAAC10ciAZAABYJAAAAGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5jbG9zZXIhGQAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmNsb3NlWAEAAAAtdHIiGQAAWCMAAAB4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZXIjGQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5vZGVYAQAAAC10ciQZAABYJQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuY2hhbm5lbHNyJRkAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNoYW5uZWxzWAEAAAAtdHImGQAAWBsAAAByZmM4MjIuTWVzc2FnZS5nZXRyYXdoZWFkZXJyJxkAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0cmF3aGVhZGVyWAEAAAAtdHIoGQAAWCYAAABGcmFtZVdvcmsuQ29udHJvbHNXaW5kb3cuZG9fY29udHJvbGhpdHIpGQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQ29udHJvbHNXaW5kb3cuZG9fY29udHJvbGhpdFgBAAAALXRyKhkAAFgbAAAAZGVjaW1hbC5EZWNpbWFsLmNvcHlfbmVnYXRlcisZAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29weV9uZWdhdGVYAQAAAC10ciwZAABYHQAAAGJkYi5CZGIuY2xlYXJfYWxsX2ZpbGVfYnJlYWtzci0ZAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuY2xlYXJfYWxsX2ZpbGVfYnJlYWtzWAEAAAAtdHIuGQAAWBgAAAByZmM4MjIuTWVzc2FnZS5nZXRoZWFkZXJyLxkAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0aGVhZGVyWAEAAAAtdHIwGQAAWB0AAABtYWlsYm94Lk1haWxkaXIucmVtb3ZlX2ZvbGRlcnIxGQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLnJlbW92ZV9mb2xkZXJYAQAAAC10cjIZAABYEwAAAGhhc2hsaWIuaGFzaC5kaWdlc3RyMxkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC5kaWdlc3RYAQAAAC10cjQZAABYHwAAAG1haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2luZm9yNRkAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2luZm9YAQAAAC10cjYZAABYLgAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5lbmFibGVfaW50ZXJzcGVyc2VkX2FyZ3NyNxkAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZW5hYmxlX2ludGVyc3BlcnNlZF9hcmdzWAEAAAAtdHI4GQAAWCUAAABjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuc291cmNlcjkZAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuc291cmNlWAEAAAAtdHI6GQAAWBgAAABkZWNpbWFsLkRlY2ltYWwucXVhbnRpemVyOxkAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5xdWFudGl6ZVgBAAAALXRyPBkAAFgaAAAAc3VuYXUuQVVfd3JpdGUuc2V0Y29tcHR5cGVyPRkAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRjb21wdHlwZVgBAAAALXRyPhkAAFgPAAAAb2JqZWN0Ll9faWFkZF9fcj8ZAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faWFkZF9fWAEAAAAtdHJAGQAAWBgAAAB0aHJlYWRpbmcuVGhyZWFkLmlzQWxpdmVyQRkAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5pc0FsaXZlWAEAAAAtdHJCGQAAWA4AAABnZW5lcmF0b3IubmV4dHJDGQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLm5leHRYAQAAAC10ckQZAABYHgAAAHN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlc3JFGQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlc1gBAAAALXRyRhkAAFgTAAAAY3Vyc2VzLndpbmRvdy5pbnN0cnJHGQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lmluc3RyWAEAAAAtdHJIGQAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRFbmNvZGluZ3JJGQAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldEVuY29kaW5nWAEAAAAtdHJKGQAAWBYAAABjdXJzZXMud2luZG93LnN0YW5kZW5kcksZAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuc3RhbmRlbmRYAQAAAC10ckwZAABYFwAAAG1haWxib3gub2xkbWFpbGJveC5uZXh0ck0ZAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm9sZG1haWxib3gubmV4dFgBAAAALXRyThkAAFgxAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2Jsb2NrZWRfZG9tYWluc3JPGQAAKGpzBQAAanQFAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zZXRfYmxvY2tlZF9kb21haW5zWAEAAAAtdHJQGQAAWBsAAABGcmFtZVdvcmsuRGlhbG9nV2luZG93Lm9wZW5yURkAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkRpYWxvZ1dpbmRvdy5vcGVuWAEAAAAtdHJSGQAAWBIAAABvYmplY3QuX19kZWxpdGVtX19yUxkAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kZWxpdGVtX19YAQAAAC10clQZAABYFgAAAGlvLlRleHRJT0Jhc2UucmVhZGxpbmVyVRkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLnJlYWRsaW5lWAEAAAAtdHJWGQAAWBMAAABpby5CeXRlc0lPLmdldHZhbHVlclcZAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJTy5nZXR2YWx1ZVgBAAAALXRyWBkAAFgPAAAAaW8uSU9CYXNlLmNsb3NlclkZAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmNsb3NlWAEAAAAtdHJaGQAAWBoAAABiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzc3JbGQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzc1gBAAAALXRyXBkAAFgkAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5idWZzaXplcl0ZAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5idWZzaXplWAEAAAAtdHJeGQAAWB8AAABzc2wuU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzcl8ZAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNYAQAAAC10cmAZAABYHgAAAHdlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuX25ld3JhGQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5fbmV3WAEAAAAtdHJiGQAAWBQAAABubnRwbGliLk5OVFAubmV3bmV3c3JjGQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLm5ld25ld3NYAQAAAC10cmQZAABYGwAAAGRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbHJlGQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsWAEAAAAtdHJmGQAAWDYAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfcnVudGltZV9saWJyYXJ5X2RpcnNyZxkAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfcnVudGltZV9saWJyYXJ5X2RpcnNYAQAAAC10cmgZAABYFwAAAG1haWxib3guTUgubGlzdF9mb2xkZXJzcmkZAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmxpc3RfZm9sZGVyc1gBAAAALXRyahkAAFgKAAAAc3RyLmxzdHJpcHJrGQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5sc3RyaXBYAQAAAC10cmwZAABYIQAAAG1haWxib3guQmFieWxNZXNzYWdlLnJlbW92ZV9sYWJlbHJtGQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UucmVtb3ZlX2xhYmVsWAEAAAAtdHJuGQAAWCAAAAB4bWwuZG9tLm1pbmlkb20uTm9kZS50b3ByZXR0eXhtbHJvGQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS50b3ByZXR0eXhtbFgBAAAALXRycBkAAFgUAAAAY3Vyc2VzLndpbmRvdy5hZGRzdHJycRkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hZGRzdHJYAQAAAC10cnIZAABYFgAAAGJkYi5CcmVha3BvaW50LmRpc2FibGVycxkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQuZGlzYWJsZVgBAAAALXRydBkAAFgSAAAAZGVjaW1hbC5Db250ZXh0LmxucnUZAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG5YAQAAAC10cnYZAABYGwAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5lbXB0eXJ3GQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuZW1wdHlYAQAAAC10cngZAABYIgAAAHVybGxpYjIuT3BlbmVyRGlyZWN0b3IuYWRkX2hhbmRsZXJyeRkAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuT3BlbmVyRGlyZWN0b3IuYWRkX2hhbmRsZXJYAQAAAC10cnoZAABYMAAAAFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVHJ7GQAAKGpzBQAAanQFAABYaAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWwjU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUWAEAAAAtdHJ8GQAAWBgAAABkYXRldGltZS5kYXRldGltZS50aW1ldHpyfRkAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50aW1ldHpYAQAAAC10cn4ZAABYJQAAAHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS52YWx1ZXJlZnNyfxkAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS52YWx1ZXJlZnNYAQAAAC10coAZAABYJAAAAGRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfZmFpbHVyZXKBGQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9mYWlsdXJlWAEAAAAtdHKCGQAAWCUAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmRlZmF1bHRzcoMZAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZGVmYXVsdHNYAQAAAC10coQZAABYHAAAAHhkcmxpYi5VbnBhY2tlci51bnBhY2tfYnl0ZXNyhRkAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19ieXRlc1gBAAAALXRyhhkAAHUoWCUAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5jb21waWxlcocZAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuY29tcGlsZVgBAAAALXRyiBkAAFgTAAAAYXJyYXkuYXJyYXkucmV2ZXJzZXKJGQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnJldmVyc2VYAQAAAC10cooZAABYHAAAAGNvbGxlY3Rpb25zLmRlcXVlLmFwcGVuZGxlZnRyixkAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5hcHBlbmRsZWZ0WAEAAAAtdHKMGQAAWBQAAABpbWFwbGliLklNQVA0LmFwcGVuZHKNGQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5hcHBlbmRYAQAAAC10co4ZAABYDgAAAG9iamVjdC5fX2lvcl9fco8ZAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW9yX19YAQAAAC10cpAZAABYOgAAAERvY1hNTFJQQ1NlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5zZXRfc2VydmVyX25hbWVykRkAAChqcwUAAGp0BQAAWHEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfbmFtZVgBAAAALXRykhkAAFgTAAAAZGVjaW1hbC5EZWNpbWFsLm1heHKTGQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm1heFgBAAAALXRylBkAAFgQAAAAc2VsZWN0LnBvbGwucG9sbHKVGQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbC5wb2xsWAEAAAAtdHKWGQAAWCQAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfY2xvc2VylxkAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2Nsb3NlWAEAAAAtdHKYGQAAWA0AAABvYmplY3QuX19vcl9fcpkZAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fb3JfX1gBAAAALXRymhkAAFgdAAAAdHRrLk5vdGVib29rLmVuYWJsZV90cmF2ZXJzYWxymxkAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLmVuYWJsZV90cmF2ZXJzYWxYAQAAAC10cpwZAABYHwAAAG1haWxib3guTUhNZXNzYWdlLmdldF9zZXF1ZW5jZXNynRkAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUhNZXNzYWdlLmdldF9zZXF1ZW5jZXNYAQAAAC10cp4ZAABYGQAAAHhtbC5kb20uTm9kZS5pbnNlcnRCZWZvcmVynxkAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5pbnNlcnRCZWZvcmVYAQAAAC10cqAZAABYFgAAAGN1cnNlcy53aW5kb3cuc2Nyb2xsb2tyoRkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zY3JvbGxva1gBAAAALXRyohkAAFgUAAAAcmV4ZWMuUkV4ZWMucl91bmxvYWRyoxkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5yX3VubG9hZFgBAAAALXRypBkAAFgVAAAAZGVjaW1hbC5EZWNpbWFsLnJhZGl4cqUZAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwucmFkaXhYAQAAAC10cqYZAABYGgAAAGRlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX29ycqcZAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9naWNhbF9vclgBAAAALXRyqBkAAFgYAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLmJlbG93cqkZAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5iZWxvd1gBAAAALXRyqhkAAFgVAAAAdW5pdHRlc3QuVGVzdENhc2UucnVucqsZAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UucnVuWAEAAAAtdHKsGQAAWBIAAABjdXJzZXMud2luZG93LmluY2hyrRkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbmNoWAEAAAAtdHKuGQAAWCcAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYWN0aXZhdGVyrxkAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2FjdGl2YXRlWAEAAAAtdHKwGQAAWA4AAABvYmplY3QuX19uZWdfX3KxGQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX25lZ19fWAEAAAAtdHKyGQAAWA8AAABhaWZjLmFpZmMuY2xvc2VysxkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5jbG9zZVgBAAAALXRytBkAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfbWVzc2FnZXK1GQAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX21lc3NhZ2VYAQAAAC10crYZAABYIwAAAGNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9yZXBsYWNlcrcZAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX3JlcGxhY2VYAQAAAC10crgZAABYEwAAAHBpY2tsZS5QaWNrbGVyLmR1bXByuRkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlBpY2tsZXIuZHVtcFgBAAAALXRyuhkAAFgQAAAAZnRwbGliLkZUUC5jbG9zZXK7GQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmNsb3NlWAEAAAAtdHK8GQAAWBwAAABkZWNpbWFsLkNvbnRleHQuY29weV9kZWNpbWFscr0ZAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29weV9kZWNpbWFsWAEAAAAtdHK+GQAAWBUAAABsb2dnaW5nLkhhbmRsZXIuZmx1c2hyvxkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5mbHVzaFgBAAAALXRywBkAAFgTAAAAYWlmYy5haWZjLnNldHBhcmFtc3LBGQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldHBhcmFtc1gBAAAALXRywhkAAFgSAAAAZnJvemVuc2V0Lmlzc3Vic2V0csMZAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0Lmlzc3Vic2V0WAEAAAAtdHLEGQAAWCoAAAB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDJyxRkAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwMlgBAAAALXRyxhkAAFgqAAAAdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAzcscZAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDNYAQAAAC10csgZAABYKgAAAHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwMXLJGQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAxWAEAAAAtdHLKGQAAWCgAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmFkZF9zZWN0aW9ucssZAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuYWRkX3NlY3Rpb25YAQAAAC10cswZAABYFwAAAHN0cnVjdC5TdHJ1Y3QucGFja19pbnRvcs0ZAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QucGFja19pbnRvWAEAAAAtdHLOGQAAWBIAAABpby5UZXh0SU9CYXNlLnRlbGxyzxkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLnRlbGxYAQAAAC10ctAZAABYEQAAAG9iamVjdC5fX2ludmVydF9fctEZAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW52ZXJ0X19YAQAAAC10ctIZAABYEAAAAG1haWxib3guTUguZmx1c2hy0xkAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZmx1c2hYAQAAAC10ctQZAABYCQAAAGRpY3Qua2V5c3LVGQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3Qua2V5c1gBAAAALXRy1hkAAFgbAAAAbWhsaWIuRm9sZGVyLnJlZmlsZW1lc3NhZ2VzctcZAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLnJlZmlsZW1lc3NhZ2VzWAEAAAAtdHLYGQAAWA4AAABvYmplY3QuX19oZXhfX3LZGQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2hleF9fWAEAAAAtdHLaGQAAWBoAAAB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfc29tZXLbGQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfc29tZVgBAAAALXRy3BkAAFgeAAAATWltZVdyaXRlci5NaW1lV3JpdGVyLm5leHRwYXJ0ct0ZAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIubmV4dHBhcnRYAQAAAC10ct4ZAABYMwAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLnRlcm1pbmF0ZXLfGQAAKGpzBQAAanQFAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC50ZXJtaW5hdGVYAQAAAC10cuAZAABYFQAAAHNtdHBsaWIuU01UUC5oYXNfZXh0bnLhGQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmhhc19leHRuWAEAAAAtdHLiGQAAWBEAAABwYXJzZXIuU1QudG90dXBsZXLjGQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QudG90dXBsZVgBAAAALXRy5BkAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzbG5rcuUZAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNsbmtYAQAAAC10cuYZAABYGgAAAGNzdi5EaWN0V3JpdGVyLndyaXRlaGVhZGVycucZAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWN0V3JpdGVyLndyaXRlaGVhZGVyWAEAAAAtdHLoGQAAWBQAAAByZXhlYy5SRXhlYy5yX3JlbG9hZHLpGQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfcmVsb2FkWAEAAAAtdHLqGQAAWBAAAAB0dGsuQ29tYm9ib3guZ2V0cusZAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Db21ib2JveC5nZXRYAQAAAC10cuwZAABYFwAAAHNxbGl0ZTMuQ3Vyc29yLmZldGNob25lcu0ZAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5mZXRjaG9uZVgBAAAALXRy7hkAAFgmAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9lbnRpdHlyZWZy7xkAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZW50aXR5cmVmWAEAAAAtdHLwGQAAWCkAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfc3VidHlwZXLxGQAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X3N1YnR5cGVYAQAAAC10cvIZAABYGwAAAG1zaWxpYi5SZWNvcmQuR2V0RmllbGRDb3VudHLzGQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLkdldEZpZWxkQ291bnRYAQAAAC10cvQZAABYHgAAAHhtbC5kb20uRWxlbWVudC5oYXNBdHRyaWJ1dGVOU3L1GQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50Lmhhc0F0dHJpYnV0ZU5TWAEAAAAtdHL2GQAAWBwAAABtYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mcm9tcvcZAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mcm9tWAEAAAAtdHL4GQAAWBkAAAB1cmxsaWIuVVJMb3BlbmVyLnJldHJpZXZlcvkZAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5VUkxvcGVuZXIucmV0cmlldmVYAQAAAC10cvoZAABYKAAAAHhtbC5zYXgueG1scmVhZGVyLkluY3JlbWVudGFsUGFyc2VyLmZlZWRy+xkAAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5mZWVkWAEAAAAtdHL8GQAAWBMAAABvYmplY3QuX19nZXRzbGljZV9fcv0ZAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0c2xpY2VfX1gBAAAALXRy/hkAAFgjAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3Ry/xkAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0WAEAAAAtdHIAGgAAWA0AAABzdHIucGFydGl0aW9ucgEaAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnBhcnRpdGlvblgBAAAALXRyAhoAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZW5kX2hlYWRlcnIDGgAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9oZWFkZXJYAQAAAC10cgQaAABYFgAAAGZvcm1hdHRlci53cml0ZXIuZmx1c2hyBRoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5mbHVzaFgBAAAALXRyBhoAAFgXAAAAeG1scnBjbGliLkJpbmFyeS5kZWNvZGVyBxoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkJpbmFyeS5kZWNvZGVYAQAAAC10cggaAABYDgAAAG1tYXAubW1hcC5zZWVrcgkaAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuc2Vla1gBAAAALXRyChoAAFgqAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0cgsaAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0WAEAAAAtdHIMGgAAWCEAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9hbGlnbm1lbnRyDRoAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfYWxpZ25tZW50WAEAAAAtdHIOGgAAWCIAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLndyaXRlcg8aAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIud3JpdGVYAQAAAC10chAaAABYIQAAAGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlLnJhd19pbnB1dHIRGgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucmF3X2lucHV0WAEAAAAtdHISGgAAWBQAAABjdXJzZXMud2luZG93LnNjcm9sbHITGgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnNjcm9sbFgBAAAALXRyFBoAAFgZAAAAeG1scnBjbGliLkRhdGVUaW1lLmRlY29kZXIVGgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuRGF0ZVRpbWUuZGVjb2RlWAEAAAAtdHIWGgAAWB0AAAB4bWwuZG9tLm1pbmlkb20uTm9kZS53cml0ZXhtbHIXGgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS53cml0ZXhtbFgBAAAALXRyGBoAAFgXAAAAdHRrLlN0eWxlLmVsZW1lbnRfbmFtZXNyGRoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLmVsZW1lbnRfbmFtZXNYAQAAAC10choaAABYGwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5jbG9zZXIbGgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmNsb3NlWAEAAAAtdHIcGgAAWCkAAABsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIuZW1pdHIdGgAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmVtaXRYAQAAAC10ch4aAABYEgAAAHNvY2tldC5zb2NrZXQuYmluZHIfGgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmJpbmRYAQAAAC10ciAaAABYDwAAAHBkYi5QZGIucnVuY2FsbHIhGgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIuUGRiLnJ1bmNhbGxYAQAAAC10ciIaAABYEwAAAHR0ay5Ob3RlYm9vay5pbnNlcnRyIxoAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLmluc2VydFgBAAAALXRyJBoAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5maW5pc2hyJRoAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5maW5pc2hYAQAAAC10ciYaAABYCwAAAGJkYi5CZGIucnVucicaAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIucnVuWAEAAAAtdHIoGgAAWBUAAABkZWNpbWFsLkNvbnRleHQubWludXNyKRoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5taW51c1gBAAAALXRyKhoAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5lbmRfaGVhZGVyc3IrGgAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZW5kX2hlYWRlcnNYAQAAAC10ciwaAABYFAAAAGFpZmMuYWlmYy5yZWFkZnJhbWVzci0aAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMucmVhZGZyYW1lc1gBAAAALXRyLhoAAFgZAAAAZGVjaW1hbC5Db250ZXh0LmlzX2Zpbml0ZXIvGgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX2Zpbml0ZVgBAAAALXRyMBoAAFgUAAAAY3Vyc2VzLndpbmRvdy5yZXNpemVyMRoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZXNpemVYAQAAAC10cjIaAABYGwAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5jbG9zZXIzGgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuY2xvc2VYAQAAAC10cjQaAABYFQAAAGRhdGV0aW1lLmRhdGV0aW1lLmRzdHI1GgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmRzdFgBAAAALXRyNhoAAFgkAAAAbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmZsdXNocjcaAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIuZmx1c2hYAQAAAC10cjgaAABYGQAAAHhkcmxpYi5QYWNrZXIucGFja19zdHJpbmdyORoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX3N0cmluZ1gBAAAALXRyOhoAAFgcAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFcnJvcnI7GgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkRXJyb3JYAQAAAC10cjwaAABYEQAAAHBhcnNlci5TVC5jb21waWxlcj0aAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5TVC5jb21waWxlWAEAAAAtdHI+GgAAWBQAAAByZXhlYy5SRXhlYy5zX2ltcG9ydHI/GgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnNfaW1wb3J0WAEAAAAtdHJAGgAAWBwAAABjdXJzZXMud2luZG93LmlzX2xpbmV0b3VjaGVkckEaAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaXNfbGluZXRvdWNoZWRYAQAAAC10ckIaAABYEgAAAGZ0cGxpYi5GVFAudm9pZGNtZHJDGgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnZvaWRjbWRYAQAAAC10ckQaAABYDwAAAG9iamVjdC5fX2lkaXZfX3JFGgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lkaXZfX1gBAAAALXRyRhoAAFgXAAAAcGlja2xlLlVucGlja2xlci5ub2xvYWRyRxoAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xlci5ub2xvYWRYAQAAAC10ckgaAABYEwAAAHRocmVhZC5sb2NrLnJlbGVhc2VySRoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmxvY2sucmVsZWFzZVgBAAAALXRyShoAAFgYAAAAcmUuTWF0Y2hPYmplY3QuZ3JvdXBkaWN0cksaAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3QuZ3JvdXBkaWN0WAEAAAAtdHJMGgAAWCIAAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5Tck0aAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TWAEAAAAtdHJOGgAAWBcAAABpbWFwbGliLklNQVA0LnN1YnNjcmliZXJPGgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zdWJzY3JpYmVYAQAAAC10clAaAABYEwAAAG1haWxib3guTWFpbGJveC5nZXRyURoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5nZXRYAQAAAC10clIaAABYEwAAAGZsLmZvcm0uYWRkX2Jyb3dzZXJyUxoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9icm93c2VyWAEAAAAtdHJUGgAAWBgAAABhc3luY29yZS5kaXNwYXRjaGVyLmJpbmRyVRoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmJpbmRYAQAAAC10clYaAABYEwAAAGN1cnNlcy53aW5kb3cuaWRsb2tyVxoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pZGxva1gBAAAALXRyWBoAAFgXAAAAZGVjaW1hbC5EZWNpbWFsLmlzX3plcm9yWRoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc196ZXJvWAEAAAAtdHJaGgAAWBwAAAB1cmxsaWIyLlJlcXVlc3QuaGVhZGVyX2l0ZW1zclsaAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuaGVhZGVyX2l0ZW1zWAEAAAAtdHJcGgAAWCEAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X3ZlcnNpb25yXRoAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X3ZlcnNpb25YAQAAAC10cl4aAABYGwAAAGRlY2ltYWwuQ29udGV4dC5sb2dpY2FsX3hvcnJfGgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfeG9yWAEAAAAtdHJgGgAAWBEAAAB0dGsuVHJlZXZpZXcuaXRlbXJhGgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaXRlbVgBAAAALXRyYhoAAFglAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5zZWN0aW9uc3JjGgAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLnNlY3Rpb25zWAEAAAAtdHJkGgAAWCUAAABtc2lsaWIuRGF0YWJhc2UuR2V0U3VtbWFyeUluZm9ybWF0aW9ucmUaAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EYXRhYmFzZS5HZXRTdW1tYXJ5SW5mb3JtYXRpb25YAQAAAC10cmYaAABYFQAAAGRlY2ltYWwuQ29udGV4dC5yYWRpeHJnGgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJhZGl4WAEAAAAtdHJoGgAAWBYAAABwaXBlcy5UZW1wbGF0ZS5wcmVwZW5kcmkaAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUucHJlcGVuZFgBAAAALXRyahoAAFgfAAAAcHByaW50LlByZXR0eVByaW50ZXIuaXNyZWFkYWJsZXJrGgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlci5pc3JlYWRhYmxlWAEAAAAtdHJsGgAAWBkAAABtc2lsaWIuRGlyZWN0b3J5LmFkZF9maWxlcm0aAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaXJlY3RvcnkuYWRkX2ZpbGVYAQAAAC10cm4aAABYDwAAAFF1ZXVlLlF1ZXVlLmdldHJvGgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmdldFgBAAAALXRycBoAAFgVAAAAYWlmYy5haWZjLnNldGNvbXB0eXBlcnEaAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0Y29tcHR5cGVYAQAAAC10cnIaAABYEAAAAHBvcGxpYi5QT1AzLnVzZXJycxoAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMudXNlclgBAAAALXRydBoAAFgcAAAAc3ltdGFibGUuU3ltYm9sLmlzX25hbWVzcGFjZXJ1GgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19uYW1lc3BhY2VYAQAAAC10cnYaAABYDwAAAG9iamVjdC5fX3JzdWJfX3J3GgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JzdWJfX1gBAAAALXRyeBoAAFgaAAAAdXJsbGliMi5SZXF1ZXN0LmFkZF9oZWFkZXJyeRoAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5hZGRfaGVhZGVyWAEAAAAtdHJ6GgAAWBcAAABhcnJheS5hcnJheS5mcm9tdW5pY29kZXJ7GgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmZyb211bmljb2RlWAEAAAAtdHJ8GgAAWBIAAABmdHBsaWIuRlRQLmNvbm5lY3RyfRoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5jb25uZWN0WAEAAAAtdHJ+GgAAWBMAAAB0cmFjZS5UcmFjZS5yZXN1bHRzcn8aAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuVHJhY2UucmVzdWx0c1gBAAAALXRygBoAAFgmAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFeHBlY3RlZEZhaWx1cmVygRoAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZVgBAAAALXRyghoAAFgVAAAAaW1hcGxpYi5JTUFQNC5leHB1bmdlcoMaAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmV4cHVuZ2VYAQAAAC10coQaAABYEwAAAHR0ay5Ob3RlYm9vay5mb3JnZXRyhRoAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLmZvcmdldFgBAAAALXRyhhoAAFgSAAAAdHRrLldpZGdldC5pbnN0YXRlcocaAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5XaWRnZXQuaW5zdGF0ZVgBAAAALXRyiBoAAFgaAAAAdW5pdHRlc3QuVGVzdENhc2Uuc2tpcFRlc3RyiRoAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5za2lwVGVzdFgBAAAALXRyihoAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzcmVncosaAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNyZWdYAQAAAC10cowaAABYFwAAAG1obGliLk1ILmxpc3RhbGxmb2xkZXJzco0aAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUgubGlzdGFsbGZvbGRlcnNYAQAAAC10co4aAABYGgAAAGNvbGxlY3Rpb25zLkNvdW50ZXIudXBkYXRlco8aAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci51cGRhdGVYAQAAAC10cpAaAABYIwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmNsZWFycpEaAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmNsZWFyWAEAAAAtdHKSGgAAWB0AAABUaXgudGl4Q29tbWFuZC50aXhfZmlsZWRpYWxvZ3KTGgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfZmlsZWRpYWxvZ1gBAAAALXRylBoAAFgVAAAAc29ja2V0LnNvY2tldC5jb25uZWN0cpUaAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuY29ubmVjdFgBAAAALXRylhoAAFgqAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlhtbERlY2xIYW5kbGVycpcaAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuWG1sRGVjbEhhbmRsZXJYAQAAAC10cpgaAABYGQAAAGNvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVymRoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVdyaXRlci53cml0ZVgBAAAALXRymhoAAFgYAAAAeGRybGliLlBhY2tlci5wYWNrX2Zsb2F0cpsaAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19mbG9hdFgBAAAALXRynBoAAFgWAAAAZGF0ZXRpbWUuZGF0ZS5zdHJmdGltZXKdGgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuc3RyZnRpbWVYAQAAAC10cp4aAABYFQAAAHRhcmZpbGUuVGFySW5mby5pc3N5bXKfGgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzc3ltWAEAAAAtdHKgGgAAWBcAAAB0YXJmaWxlLlRhckZpbGUuYWRkZmlsZXKhGgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmFkZGZpbGVYAQAAAC10cqIaAABYCAAAAGRpY3QuZ2V0cqMaAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5nZXRYAQAAAC10cqQaAABYJQAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdypRoAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdYAQAAAC10cqYaAABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0cqcaAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0WAEAAAAtdHKoGgAAWBIAAAByZXhlYy5SRXhlYy5zX2V2YWxyqRoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2V2YWxYAQAAAC10cqoaAABYDgAAAG9iamVjdC5fX25ld19fcqsaAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbmV3X19YAQAAAC10cqwaAABYCgAAAGZpbGUud3JpdGVyrRoAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLndyaXRlWAEAAAAtdHKuGgAAWCYAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRNdWx0aUxpbmVFcXVhbHKvGgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsWAEAAAAtdHKwGgAAWBUAAABtYWlsYm94Lk1haWxkaXIuY2xlYW5ysRoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5jbGVhblgBAAAALXRyshoAAFglAAAAb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5jb250cm9sc3KzGgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuY29udHJvbHNYAQAAAC10crQaAABYJAAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tb2RpZmllZHK1GgAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sI3JvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tb2RpZmllZFgBAAAALXRythoAAFgcAAAAVGl4LnRpeENvbW1hbmQudGl4X2dldGJpdG1hcHK3GgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfZ2V0Yml0bWFwWAEAAAAtdHK4GgAAWCEAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuYm9keV9lbmNvZGVyuRoAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5ib2R5X2VuY29kZVgBAAAALXRyuhoAAFgcAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9zZWxlY3RvcnK7GgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF9zZWxlY3RvclgBAAAALXRyvBoAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnN0YXJ0cr0aAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5zdGFydFgBAAAALXRyvhoAAFgdAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fc3RyX19yvxoAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX3N0cl9fWAEAAAAtdHLAGgAAWDoAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmxvZ19kYXRlX3RpbWVfc3RyaW5ncsEaAAAoanMFAABqdAUAAFhwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfZGF0ZV90aW1lX3N0cmluZ1gBAAAALXRywhoAAFgpAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0Y2hpbGRyZW5ywxoAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0Y2hpbGRyZW5YAQAAAC10csQaAABYKwAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIucmVtb3ZlX3NlY3Rpb25yxRoAAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZW1vdmVfc2VjdGlvblgBAAAALXRyxhoAAFgXAAAAc3VuYXUuQVVfcmVhZC5nZXRwYXJhbXNyxxoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldHBhcmFtc1gBAAAALXRyyBoAAFgRAAAAc2hhLnNoYS5oZXhkaWdlc3RyyRoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWwjc2hhLnNoYS5oZXhkaWdlc3RYAQAAAC10csoaAABYEQAAAG1zaWxpYi5WaWV3LkNsb3NlcssaAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5WaWV3LkNsb3NlWAEAAAAtdHLMGgAAWBUAAABtc2lsaWIuRGlyZWN0b3J5Lmdsb2JyzRoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5nbG9iWAEAAAAtdHLOGgAAWBYAAABjdXJzZXMud2luZG93LmdldGJlZ3l4cs8aAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0YmVneXhYAQAAAC10ctAaAABYHgAAAGNvb2tpZWxpYi5Db29raWVKYXIuc2V0X2Nvb2tpZXLRGgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLnNldF9jb29raWVYAQAAAC10ctIaAABYJQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNlcXVlbmNlRXF1YWxy0xoAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXF1ZW5jZUVxdWFsWAEAAAAtdHLUGgAAWBUAAAB6aXBmaWxlLlppcEZpbGUuY2xvc2Vy1RoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5jbG9zZVgBAAAALXRy1hoAAFgSAAAAZGJoYXNoLmRiaGFzaC5sYXN0ctcaAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sI2RiaGFzaC5kYmhhc2gubGFzdFgBAAAALXRy2BoAAFgRAAAAdHRrLk5vdGVib29rLmhpZGVy2RoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLmhpZGVYAQAAAC10ctoaAABYEwAAAGN1cnNlcy53aW5kb3cuZXJhc2Vy2xoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lcmFzZVgBAAAALXRy3BoAAFgUAAAAcGlwZXMuVGVtcGxhdGUuY2xvbmVy3RoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5jbG9uZVgBAAAALXRy3hoAAFgvAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRNZXNzYWdlSURy3xoAAChqcwUAAGp0BQAAWGcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuZ2V0TWVzc2FnZUlEWAEAAAAtdHLgGgAAWBoAAAB0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldHLhGgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldFgBAAAALXRy4hoAAFghAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5jcmVhdGVfc29ja2V0cuMaAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jcmVhdGVfc29ja2V0WAEAAAAtdHLkGgAAWBgAAAB1cmxsaWIyLlJlcXVlc3QuaGFzX2RhdGFy5RoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5oYXNfZGF0YVgBAAAALXRy5hoAAFgoAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5oYXNfc2VjdGlvbnLnGgAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmhhc19zZWN0aW9uWAEAAAAtdHLoGgAAWBMAAABkYXRldGltZS50emluZm8uZHN0cukaAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLmRzdFgBAAAALXRy6hoAAFgQAAAAYnoyLkJaMkZpbGUucmVhZHLrGgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRmlsZS5yZWFkWAEAAAAtdHLsGgAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwcu0aAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cFgBAAAALXRy7hoAAFgbAAAAZGVjaW1hbC5Db250ZXh0Lm5leHRfdG93YXJkcu8aAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubmV4dF90b3dhcmRYAQAAAC10cvAaAABYEwAAAHRpbWVpdC5UaW1lci5yZXBlYXRy8RoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyLnJlcGVhdFgBAAAALXRy8hoAAFgmAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmZpbmRy8xoAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmZpbmRYAQAAAC10cvQaAABYIQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnNldHL1GgAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5zZXRYAQAAAC10cvYaAABYJgAAAG11bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnJlYWR5cvcaAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnJlYWR5WAEAAAAtdHL4GgAAWBgAAABhaWZjLmFpZmMud3JpdGVmcmFtZXNyYXdy+RoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy53cml0ZWZyYW1lc3Jhd1gBAAAALXRy+hoAAFgWAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLnRvcHL7GgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwudG9wWAEAAAAtdHL8GgAAWBAAAABobWFjLkhNQUMudXBkYXRlcv0aAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMudXBkYXRlWAEAAAAtdHL+GgAAWBEAAABubnRwbGliLk5OVFAuYm9keXL/GgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmJvZHlYAQAAAC10cgAbAABYHQAAAHN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlcgEbAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmdldF9uYW1lc3BhY2VYAQAAAC10cgIbAABYKAAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnJlYWxfcXVpY2tfcmF0aW9yAxsAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnJlYWxfcXVpY2tfcmF0aW9YAQAAAC10cgQbAABYHwAAAGVtYWlsLmhlYWRlci5IZWFkZXIuX191bmljb2RlX19yBRsAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5fX3VuaWNvZGVfX1gBAAAALXRyBhsAAFgUAAAAdHRrLlByb2dyZXNzYmFyLnN0ZXByBxsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlByb2dyZXNzYmFyLnN0ZXBYAQAAAC10cggbAABYHAAAAGNvbGxlY3Rpb25zLkNvdW50ZXIuc3VidHJhY3RyCRsAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyLnN1YnRyYWN0WAEAAAAtdHIKGwAAWCsAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnN0ZXJlb2NvbnRyb2xzcgsbAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zdGVyZW9jb250cm9sc1gBAAAALXRyDBsAAFgaAAAAZGVjaW1hbC5Db250ZXh0Lm5leHRfbWludXNyDRsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X21pbnVzWAEAAAAtdHIOGwAAWAoAAABkaWN0LmNsZWFycg8bAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5jbGVhclgBAAAALXRyEBsAAFgZAAAAY3Vyc2VzLndpbmRvdy5ub3V0cmVmcmVzaHIRGwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm5vdXRyZWZyZXNoWAEAAAAtdHISGwAAWBYAAAB0aHJlYWRpbmcuRXZlbnQuaXNfc2V0chMbAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC5pc19zZXRYAQAAAC10chQbAABYIQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmdldHIVGwAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXRYAQAAAC10chYbAABYHgAAAGRlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3NpZ25hbHIXGwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfc2lnbmFsWAEAAAAtdHIYGwAAWBcAAABkZWNpbWFsLkNvbnRleHQuaXNfemVyb3IZGwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3plcm9YAQAAAC10chobAABYGAAAAHNjaGVkLnNjaGVkdWxlci5lbnRlcmFic3IbGwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbnRlcmFic1gBAAAALXRyHBsAAFgXAAAAY3Vyc2VzLndpbmRvdy5vdmVyd3JpdGVyHRsAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5vdmVyd3JpdGVYAQAAAC10ch4bAABYIAAAAGxvZ2dpbmcuTG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsch8bAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbFgBAAAALXRyIBsAAFgYAAAAc2dtbGxpYi5TR01MUGFyc2VyLmNsb3NlciEbAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuY2xvc2VYAQAAAC10ciIbAABYEgAAAG1zaWxpYi5EaWFsb2cudGV4dHIjGwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLnRleHRYAQAAAC10ciQbAABYFwAAAGRlY2ltYWwuQ29udGV4dC5pc19xbmFuciUbAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfcW5hblgBAAAALXRyJhsAAFgSAAAAc210cGxpYi5TTVRQLmRvY21kcicbAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuZG9jbWRYAQAAAC10cigbAABYFAAAAGN1cnNlcy53aW5kb3cuYm9yZGVycikbAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYm9yZGVyWAEAAAAtdHIqGwAAWCUAAABtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5zZW5kX2J5dGVzcisbAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLnNlbmRfYnl0ZXNYAQAAAC10ciwbAABYHAAAAHNxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVzY3JpcHRyLRsAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVzY3JpcHRYAQAAAC10ci4bAABYFQAAAHJmYzgyMi5NZXNzYWdlLmlzbGFzdHIvGwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5pc2xhc3RYAQAAAC10cjAbAABYGwAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnJ1bnIxGwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5ydW5YAQAAAC10cjIbAABYGQAAAG51bWJlcnMuQ29tcGxleC5jb25qdWdhdGVyMxsAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuQ29tcGxleC5jb25qdWdhdGVYAQAAAC10cjQbAABYGgAAAGVtYWlsLmhlYWRlci5IZWFkZXIuX19lcV9fcjUbAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5IZWFkZXIuX19lcV9fWAEAAAAtdHI2GwAAWBMAAABkZWNpbWFsLkNvbnRleHQuYWJzcjcbAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuYWJzWAEAAAAtdHI4GwAAWCAAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldHI5GwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2Uuc2V0WAEAAAAtdHI6GwAAWBcAAAB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcHI7GwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnNldFVwWAEAAAAtdHI8GwAAWCAAAABhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9jbG9zZXI9GwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2Nsb3NlWAEAAAAtdHI+GwAAWCkAAAB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkuaXRlcnZhbHVlcmVmc3I/GwAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5Lml0ZXJ2YWx1ZXJlZnNYAQAAAC10ckAbAABYJQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRMb2NhbGVyQRsAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0TG9jYWxlWAEAAAAtdHJCGwAAWBQAAABjdXJzZXMud2luZG93LnN5bmNva3JDGwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN5bmNva1gBAAAALXRyRBsAAFg2AAAAdXJsbGliMi5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl9hdXRoX3JlcWVkckUbAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yX2F1dGhfcmVxZWRYAQAAAC10ckYbAABYMAAAAERvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl90aXRsZXJHGwAAKGpzBQAAanQFAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfdGl0bGVYAQAAAC10ckgbAABYLAAAAHhtbC5zYXguaGFuZGxlci5FbnRpdHlSZXNvbHZlci5yZXNvbHZlRW50aXR5ckkbAAAoanMFAABqdAUAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FbnRpdHlSZXNvbHZlci5yZXNvbHZlRW50aXR5WAEAAAAtdHJKGwAAWBsAAABtc2lsaWIuRGlyZWN0b3J5LnJlbW92ZV9weWNySxsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5yZW1vdmVfcHljWAEAAAAtdHJMGwAAWBsAAAB0aHJlYWRpbmcuQ29uZGl0aW9uLmFjcXVpcmVyTRsAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkNvbmRpdGlvbi5hY3F1aXJlWAEAAAAtdHJOGwAAWBQAAABtc2lsaWIuRGlhbG9nLmJpdG1hcHJPGwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLmJpdG1hcFgBAAAALXRyUBsAAFgiAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxuZ2V0dGV4dHJRGwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxuZ2V0dGV4dFgBAAAALXRyUhsAAFggAAAAZGF0ZXRpbWUudGltZWRlbHRhLnRvdGFsX3NlY29uZHNyUxsAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEudG90YWxfc2Vjb25kc1gBAAAALXRyVBsAAFgbAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2lkclUbAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2lkWAEAAAAtdHJWGwAAWBIAAABmbC5mb3JtLmFkZF9zbGlkZXJyVxsAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9zbGlkZXJYAQAAAC10clgbAABYJwAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZXJZGwAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZVgBAAAALXRyWhsAAFgtAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnJlZ2lzdGVyclsbAAAoanMFAABqdAUAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5yZWdpc3RlclgBAAAALXRyXBsAAFghAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhcl0bAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2RhdGFYAQAAAC10cl4bAABYIgAAAGRvY3Rlc3QuRG9jVGVzdFBhcnNlci5nZXRfZXhhbXBsZXNyXxsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlci5nZXRfZXhhbXBsZXNYAQAAAC10cmAbAABYEgAAAHR0ay5UcmVldmlldy5mb2N1c3JhGwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuZm9jdXNYAQAAAC10cmIbAABYGAAAAHNvY2tldC5zb2NrZXQuZ2V0dGltZW91dHJjGwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHRpbWVvdXRYAQAAAC10cmQbAABYJAAAAEZyYW1lV29yay5BcHBsaWNhdGlvbi5kb19kaWFsb2dldmVudHJlGwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb24uZG9fZGlhbG9nZXZlbnRYAQAAAC10cmYbAABYFgAAAGN1cnNlcy53aW5kb3cuaW5zZGVsbG5yZxsAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNkZWxsblgBAAAALXRyaBsAAFgLAAAAc3RyLmlzc3BhY2VyaRsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXNzcGFjZVgBAAAALXRyahsAAFgZAAAAZGVjaW1hbC5EZWNpbWFsLm5vcm1hbGl6ZXJrGwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm5vcm1hbGl6ZVgBAAAALXRybBsAAFgQAAAAYmRiLkJkYi5kb19jbGVhcnJtGwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmRvX2NsZWFyWAEAAAAtdHJuGwAAWA4AAABmdHBsaWIuRlRQLm1rZHJvGwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLm1rZFgBAAAALXRycBsAAFgUAAAAY3Vyc2VzLndpbmRvdy5nZXRrZXlycRsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRrZXlYAQAAAC10cnIbAABYKwAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19yZXByX19ycxsAAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fX3JlcHJfX1gBAAAALXRydBsAAFgSAAAAb2JqZWN0Ll9faXJzaGlmdF9fcnUbAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXJzaGlmdF9fWAEAAAAtdHJ2GwAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RFRESGFuZGxlcnJ3GwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXREVERIYW5kbGVyWAEAAAAtdHJ4GwAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX2V4ZWN1dGFibGVyeRsAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX2V4ZWN1dGFibGVYAQAAAC10cnobAABYEQAAAGNzdi5TbmlmZmVyLnNuaWZmcnsbAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5TbmlmZmVyLnNuaWZmWAEAAAAtdHJ8GwAAWCwAAAB1cmxsaWIyLlByb3h5QmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwN3J9GwAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5Qcm94eUJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDdYAQAAAC10cn4bAABYFgAAAG11dGV4Lm11dGV4LnRlc3RhbmRzZXRyfxsAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC5tdXRleC50ZXN0YW5kc2V0WAEAAAAtdHKAGwAAWAkAAABzdHIuY291bnRygRsAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuY291bnRYAQAAAC10coIbAABYGgAAAGRlY2ltYWwuRGVjaW1hbC5uZXh0X21pbnVzcoMbAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubmV4dF9taW51c1gBAAAALXRyhBsAAFgWAAAARnJhbWVXb3JrLldpbmRvdy5jbG9zZXKFGwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93LmNsb3NlWAEAAAAtdHKGGwAAWBkAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0cocbAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0WAEAAAAtdHKIGwAAWBAAAABmcm96ZW5zZXQudXBkYXRlcokbAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LnVwZGF0ZVgBAAAALXRyihsAAFgtAAAAbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLmVuY29kZVByaW9yaXR5cosbAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW5jb2RlUHJpb3JpdHlYAQAAAC10cowbAABYGgAAAHNxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVtYW55co0bAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5leGVjdXRlbWFueVgBAAAALXRyjhsAAFgmAAAAc3NsLlNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tyjxsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tYAQAAAC10cpAbAABYJQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdElzSW5zdGFuY2VykRsAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNlWAEAAAAtdHKSGwAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnJlYWRykxsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkWAEAAAAtdHKUGwAAWBwAAABkZWNpbWFsLkRlY2ltYWwubnVtYmVyX2NsYXNzcpUbAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubnVtYmVyX2NsYXNzWAEAAAAtdHKWGwAAWB8AAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuc2V0X3VzYWdlcpcbAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnNldF91c2FnZVgBAAAALXRymBsAAFgeAAAAZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlcpkbAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlWAEAAAAtdHKaGwAAWCMAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5nZXRfb3Bjb2Rlc3KbGwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X29wY29kZXNYAQAAAC10cpwbAABYDgAAAG1tYXAubW1hcC50ZWxscp0bAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAudGVsbFgBAAAALXRynhsAAFgnAAAAb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zZXRfcmVjc3Jjcp8bAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zZXRfcmVjc3JjWAEAAAAtdHKgGwAAWBMAAABzY2hlZC5zY2hlZHVsZXIucnVucqEbAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLnJ1blgBAAAALXRyohsAAFglAAAAbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5TZXRQcm9wZXJ0eXKjGwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLlNldFByb3BlcnR5WAEAAAAtdHKkGwAAWBIAAABubnRwbGliLk5OVFAueG92ZXJypRsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC54b3ZlclgBAAAALXRyphsAAFgVAAAAbWFpbGJveC5NYWlsYm94LmZsdXNocqcbAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZmx1c2hYAQAAAC10cqgbAABYFQAAAGRlY2ltYWwuQ29udGV4dC5zaGlmdHKpGwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnNoaWZ0WAEAAAAtdHKqGwAAWBwAAABmb3JtYXR0ZXIud3JpdGVyLm5ld19zcGFjaW5ncqsbAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIubmV3X3NwYWNpbmdYAQAAAC10cqwbAABYOAAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmltYXBfdW5vcmRlcmVkcq0bAAAoanMFAABqdAUAAFhvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmltYXBfdW5vcmRlcmVkWAEAAAAtdHKuGwAAWBQAAABjbGFzcy5fX3N1YmNsYXNzZXNfX3KvGwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NsYXNzLl9fc3ViY2xhc3Nlc19fWAEAAAAtdHKwGwAAWBQAAAB0YXJmaWxlLlRhckZpbGUubmV4dHKxGwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLm5leHRYAQAAAC10crIbAABYEwAAAHR0ay5UcmVldmlldy5pbnNlcnRysxsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lmluc2VydFgBAAAALXRytBsAAFgTAAAAY29kZWNzLkNvZGVjLmVuY29kZXK1GwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWMuZW5jb2RlWAEAAAAtdHK2GwAAWBIAAAB1bmljb2RlLnNwbGl0bGluZXNytxsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN1bmljb2RlLnNwbGl0bGluZXNYAQAAAC10crgbAABYIwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TZXRCYXNlcrkbAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU2V0QmFzZVgBAAAALXRyuhsAAFgmAAAAdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXNyuxsAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lc1gBAAAALXRyvBsAAFgSAAAAYXJyYXkuYXJyYXkuYXBwZW5kcr0bAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuYXBwZW5kWAEAAAAtdHK+GwAAWBQAAABiejIuQloyRmlsZS5yZWFkbGluZXK/GwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRmlsZS5yZWFkbGluZVgBAAAALXRywBsAAFgbAAAAdXJsbGliMi5PcGVuZXJEaXJlY3Rvci5vcGVucsEbAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLk9wZW5lckRpcmVjdG9yLm9wZW5YAQAAAC10csIbAABYEwAAAGltYXBsaWIuSU1BUDQueGF0b21ywxsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQueGF0b21YAQAAAC10csQbAABYEwAAAGlvLlRleHRJT0Jhc2Uud3JpdGVyxRsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLndyaXRlWAEAAAAtdHLGGwAAWBQAAABiZGIuQmRiLnNldF9jb250aW51ZXLHGwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9jb250aW51ZVgBAAAALXRyyBsAAFgYAAAAYmRiLkJkYi5jbGVhcl9hbGxfYnJlYWtzcskbAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuY2xlYXJfYWxsX2JyZWFrc1gBAAAALXRyyhsAAFgKAAAAc3RyLmRlY29kZXLLGwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5kZWNvZGVYAQAAAC10cswbAABYFQAAAGN1cnNlcy53aW5kb3cuYXR0cm9mZnLNGwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmF0dHJvZmZYAQAAAC10cs4bAABYFQAAAGN1cnNlcy53aW5kb3cuZ2V0YmtnZHLPGwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldGJrZ2RYAQAAAC10ctAbAABYIQAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tdGltZXLRGwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sI3JvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tdGltZVgBAAAALXRy0hsAAFgYAAAAeG1sLmRvbS5Ob2RlLmFwcGVuZENoaWxkctMbAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuYXBwZW5kQ2hpbGRYAQAAAC10ctQbAABYGQAAAGN0eXBlcy5fQ0RhdGEuZnJvbV9idWZmZXJy1RsAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlclgBAAAALXRy1hsAAFglAAAAZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZXLXGwAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGVYAQAAAC10ctgbAABYEgAAAGxvZ2dpbmcuTG9nZ2VyLmxvZ3LZGwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIubG9nWAEAAAAtdHLaGwAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9saWJy2xsAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9saWJYAQAAAC10ctwbAABYFgAAAGRlY2ltYWwuRGVjaW1hbC5pc19uYW5y3RsAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19uYW5YAQAAAC10ct4bAABYHwAAAGltcHV0aWwuSW1wb3J0TWFuYWdlci51bmluc3RhbGxy3xsAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuSW1wb3J0TWFuYWdlci51bmluc3RhbGxYAQAAAC10cuAbAABYDwAAAGdlbmVyYXRvci5jbG9zZXLhGwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLmNsb3NlWAEAAAAtdHLiGwAAWBIAAABtaGxpYi5Gb2xkZXIuZXJyb3Jy4xsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZXJyb3JYAQAAAC10cuQbAABYHAAAAEZyYW1lV29yay5XaW5kb3cuZG9fYWN0aXZhdGVy5RsAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLldpbmRvdy5kb19hY3RpdmF0ZVgBAAAALXRy5hsAAFgZAAAAd2F2ZS5XYXZlX3dyaXRlLnNldHBhcmFtc3LnGwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldHBhcmFtc1gBAAAALXRy6BsAAFgYAAAAY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kcukbAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kWAEAAAAtdHLqGwAAWBMAAABjaHVuay5DaHVuay5nZXRzaXplcusbAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuZ2V0c2l6ZVgBAAAALXRy7BsAAFgdAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIubGFiZWxy7RsAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5sYWJlbFgBAAAALXRy7hsAAFggAAAAY29va2llbGliLkNvb2tpZUphci5tYWtlX2Nvb2tpZXNy7xsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZUphci5tYWtlX2Nvb2tpZXNYAQAAAC10cvAbAABYEgAAAGltYXBsaWIuSU1BUDQubm9vcHLxGwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5ub29wWAEAAAAtdHLyGwAAWBIAAABmbC5mb3JtLmZpbmRfZmlyc3Ry8xsAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmZpbmRfZmlyc3RYAQAAAC10cvQbAABYFAAAAGRlY2ltYWwuQ29udGV4dC5jb3B5cvUbAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29weVgBAAAALXRy9hsAAFgPAAAAZnJvemVuc2V0LnVuaW9ucvcbAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LnVuaW9uWAEAAAAtdHL4GwAAWBYAAABzcWxpdGUzLkN1cnNvci5leGVjdXRlcvkbAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5leGVjdXRlWAEAAAAtdHL6GwAAWBoAAAB0YXJmaWxlLlRhckZpbGUuZ2V0dGFyaW5mb3L7GwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmdldHRhcmluZm9YAQAAAC10cvwbAABYEQAAAHVuaWNvZGUuaXNudW1lcmljcv0bAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdW5pY29kZS5pc251bWVyaWNYAQAAAC10cv4bAABYFwAAAFRpeC50aXhDb21tYW5kLnRpeF9jZ2V0cv8bAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kLnRpeF9jZ2V0WAEAAAAtdHIAHAAAWBoAAABwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVyc3IBHAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnByaW50X2NhbGxlcnNYAQAAAC10cgIcAABYFwAAAGRhdGV0aW1lLmRhdGUuaXNvZm9ybWF0cgMcAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5pc29mb3JtYXRYAQAAAC10cgQcAABYFwAAAHppcGZpbGUuWmlwRmlsZS5nZXRpbmZvcgUcAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuZ2V0aW5mb1gBAAAALXRyBhwAAFgpAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnNyBxwAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnNYAQAAAC10cggcAABYFgAAAHJlLlJlZ2V4T2JqZWN0LmZpbmRhbGxyCRwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdC5maW5kYWxsWAEAAAAtdHIKHAAAWB0AAAB0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3RvZ2dsZXILHAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3RvZ2dsZVgBAAAALXRyDBwAAFgaAAAAdHRrLlRyZWV2aWV3LnRhZ19jb25maWd1cmVyDRwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnRhZ19jb25maWd1cmVYAQAAAC10cg4cAABYIgAAAHdzZ2lyZWYuaGVhZGVycy5IZWFkZXJzLmFkZF9oZWFkZXJyDxwAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzLmFkZF9oZWFkZXJYAQAAAC10chAcAABYMAAAAHRlbG5ldGxpYi5UZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFja3IRHAAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2tYAQAAAC10chIcAABYGgAAAHBvcGxpYi5QT1AzLnNldF9kZWJ1Z2xldmVschMcAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnNldF9kZWJ1Z2xldmVsWAEAAAAtdHIUHAAAWBAAAABpby5JT0Jhc2UuaXNhdHR5chUcAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmlzYXR0eVgBAAAALXRyFhwAAFgZAAAAZGVjaW1hbC5EZWNpbWFsLmNvbmp1Z2F0ZXIXHAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvbmp1Z2F0ZVgBAAAALXRyGBwAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5sb2dfZXhjZXB0aW9uchkcAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmxvZ19leGNlcHRpb25YAQAAAC10chocAABYGgAAAHN0cmluZy5UZW1wbGF0ZS5zdWJzdGl0dXRlchscAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5UZW1wbGF0ZS5zdWJzdGl0dXRlWAEAAAAtdHIcHAAAWBwAAABtYWlsYm94Lm1ib3hNZXNzYWdlLnNldF9mcm9tch0cAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLnNldF9mcm9tWAEAAAAtdHIeHAAAWBEAAABvYmplY3QuX19kaXZtb2RfX3IfHAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Rpdm1vZF9fWAEAAAAtdHIgHAAAWBIAAABpbWFwbGliLklNQVA0LnNlbmRyIRwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc2VuZFgBAAAALXRyIhwAAFgXAAAAaW8uQnVmZmVyZWRSZWFkZXIucmVhZDFyIxwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFJlYWRlci5yZWFkMVgBAAAALXRyJBwAAFgfAAAAc3RyaW5nLlRlbXBsYXRlLnNhZmVfc3Vic3RpdHV0ZXIlHAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuVGVtcGxhdGUuc2FmZV9zdWJzdGl0dXRlWAEAAAAtdHImHAAAWBcAAAB4ZHJsaWIuUGFja2VyLnBhY2tfbGlzdHInHAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfbGlzdFgBAAAALXRyKBwAAFgQAAAAYWlmYy5haWZjLnJld2luZHIpHAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnJld2luZFgBAAAALXRyKhwAAFgPAAAAZGljdC5pdGVydmFsdWVzciscAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5pdGVydmFsdWVzWAEAAAAtdHIsHAAAWCQAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2NvbW1lbnRyLRwAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudFgBAAAALXRyLhwAAFgOAAAAYWlmYy5haWZjLmFpZmNyLxwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5haWZjWAEAAAAtdHIwHAAAWBEAAABubnRwbGliLk5OVFAucG9zdHIxHAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnBvc3RYAQAAAC10cjIcAABYDgAAAGFpZmMuYWlmYy5haWZmcjMcAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuYWlmZlgBAAAALXRyNBwAAFgUAAAAbWhsaWIuRm9sZGVyLmdldGxhc3RyNRwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0bGFzdFgBAAAALXRyNhwAAFggAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RSdW5yNxwAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnN0YXJ0VGVzdFJ1blgBAAAALXRyOBwAAFgjAAAAY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRhdGVzY2FsZW5kYXJyORwAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF0ZXNjYWxlbmRhclgBAAAALXRyOhwAAFgIAAAAZGljdC5wb3ByOxwAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnBvcFgBAAAALXRyPBwAAFglAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXRWYWx1ZXI9HAAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VmFsdWVYAQAAAC10cj4cAABYHAAAAG11bHRpZmlsZS5NdWx0aUZpbGUucmVhZGxpbmVyPxwAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkbGluZVgBAAAALXRyQBwAAFgaAAAAd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5yQRwAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuWAEAAAAtdHJCHAAAWBEAAABvYmplY3QuX19yZWR1Y2VfX3JDHAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNvYmplY3QuX19yZWR1Y2VfX1gBAAAALXRyRBwAAFhLAAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zckUcAAAoanMFAABqdAUAAFiFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9uc1gBAAAALXRyRhwAAFgUAAAAcmUuTWF0Y2hPYmplY3QuZ3JvdXByRxwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5ncm91cFgBAAAALXRySBwAAFgaAAAAcmZjODIyLkFkZHJlc3NMaXN0Ll9fc3ViX19ySRwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLkFkZHJlc3NMaXN0Ll9fc3ViX19YAQAAAC10ckocAABYDwAAAG9iamVjdC5fX3JjbXBfX3JLHAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JjbXBfX1gBAAAALXRyTBwAAFgiAAAAZm9ybWF0dGVyLndyaXRlci5zZW5kX2Zsb3dpbmdfZGF0YXJNHAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLnNlbmRfZmxvd2luZ19kYXRhWAEAAAAtdHJOHAAAWBcAAABjb250ZXh0bWFuYWdlci5fX2V4aXRfX3JPHAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRleHRtYW5hZ2VyLl9fZXhpdF9fWAEAAAAtdHJQHAAAWB4AAABkZWNpbWFsLkNvbnRleHQubG9naWNhbF9pbnZlcnRyURwAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2dpY2FsX2ludmVydFgBAAAALXRyUhwAAFgPAAAAb2JqZWN0Ll9fbG9uZ19fclMcAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbG9uZ19fWAEAAAAtdHJUHAAAWBkAAAB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfYWxsclUcAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9hbGxYAQAAAC10clYcAABYIwAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNwYXduclccAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc3Bhd25YAQAAAC10clgcAABYEQAAAGJ6Mi5CWjJGaWxlLmNsb3NlclkcAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLmNsb3NlWAEAAAAtdHJaHAAAWA4AAABvYmplY3QuX19hbmRfX3JbHAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2FuZF9fWAEAAAAtdHJcHAAAWBUAAABfd2lucmVnLlB5SEtFWS5EZXRhY2hyXRwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUHlIS0VZLkRldGFjaFgBAAAALXRyXhwAAFgfAAAAd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuZ2V0X2FsbHJfHAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuZ2V0X2FsbFgBAAAALXRyYBwAAFgtAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuYmxvY2tlZF9kb21haW5zcmEcAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmJsb2NrZWRfZG9tYWluc1gBAAAALXRyYhwAAFgWAAAAZGVjaW1hbC5Db250ZXh0LmRpdmlkZXJjHAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmRpdmlkZVgBAAAALXRyZBwAAFgVAAAAdGVsbmV0bGliLlRlbG5ldC5vcGVucmUcAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQub3BlblgBAAAALXRyZhwAAFgqAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLml0ZXJmaW5kcmccAAAoanMFAABqdAUAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5pdGVyZmluZFgBAAAALXRyaBwAAFgaAAAAc3FsaXRlMy5Db25uZWN0aW9uLmV4ZWN1dGVyaRwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlWAEAAAAtdHJqHAAAWCkAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmFkZF9jZ2lfdmFyc3JrHAAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5hZGRfY2dpX3ZhcnNYAQAAAC10cmwcAABYEAAAAGlvLklPQmFzZS5maWxlbm9ybRwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuZmlsZW5vWAEAAAAtdHJuHAAAWB8AAABlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yLndyaXRlcm8cAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI2VtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3Iud3JpdGVYAQAAAC10cnAcAABYIwAAAGNhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF5c2NhbGVuZGFycnEcAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXlzY2FsZW5kYXJYAQAAAC10cnIcAABYKQAAAGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5tYWtlUGlja2xlcnMcAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIubWFrZVBpY2tsZVgBAAAALXRydBwAAFgaAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLnVzZXJwdHJydRwAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnVzZXJwdHJYAQAAAC10cnYcAABYGwAAAG1zaWxpYi5SYWRpb0J1dHRvbkdyb3VwLmFkZHJ3HAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmFkaW9CdXR0b25Hcm91cC5hZGRYAQAAAC10cngcAABYJQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmZpbmRhbGxyeRwAAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZGFsbFgBAAAALXRyehwAAFgWAAAAY3Vyc2VzLndpbmRvdy5nZXRtYXh5eHJ7HAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldG1heHl4WAEAAAAtdHJ8HAAAWCMAAABzbXRwbGliLlNNVFAuZWhsb19vcl9oZWxvX2lmX25lZWRlZHJ9HAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmVobG9fb3JfaGVsb19pZl9uZWVkZWRYAQAAAC10cn4cAABYFAAAAGZ0cGxpYi5GVFAucmV0cmxpbmVzcn8cAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucmV0cmxpbmVzWAEAAAAtdHKAHAAAWBQAAABkYXRldGltZS50aW1lLnR6bmFtZXKBHAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUudHpuYW1lWAEAAAAtdHKCHAAAWBsAAABqc29uLkpTT05EZWNvZGVyLnJhd19kZWNvZGVygxwAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkRlY29kZXIucmF3X2RlY29kZVgBAAAALXRyhBwAAFgfAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX21hcmdpbnKFHAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfbWFyZ2luWAEAAAAtdHKGHAAAWB0AAABDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyLmdldHKHHAAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyLmdldFgBAAAALXRyiBwAAFgWAAAAbWFpbGJveC5NYWlsYm94LnJlbW92ZXKJHAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnJlbW92ZVgBAAAALXRyihwAAFgdAAAAY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5nYXRoZXJyixwAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5nYXRoZXJYAQAAAC10cowcAABYIQAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZGVjbHKNHAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9kZWNsWAEAAAAtdHKOHAAAWCsAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRCeXRlU3RyZWFtco8cAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Qnl0ZVN0cmVhbVgBAAAALXRykBwAAFgQAAAAdHRrLlRyZWV2aWV3LnNlZXKRHAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2VlWAEAAAAtdHKSHAAAWBMAAABjdXJzZXMud2luZG93Lmluc2NocpMcAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zY2hYAQAAAC10cpQcAABYGQAAAGRlY2ltYWwuQ29udGV4dC5ub3JtYWxpemVylRwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5ub3JtYWxpemVYAQAAAC10cpYcAABYEgAAAGltYXBsaWIuSU1BUDQubHN1YnKXHAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5sc3ViWAEAAAAtdHKYHAAAWCMAAABGcmFtZVdvcmsuQXBwbGljYXRpb24ubWFrZXVzZXJtZW51c3KZHAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb24ubWFrZXVzZXJtZW51c1gBAAAALXRymhwAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24ucmVjdl9ieXRlc19pbnRvcpscAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLnJlY3ZfYnl0ZXNfaW50b1gBAAAALXRynBwAAFgiAAAAYXN5bmNoYXQuYXN5bmNfY2hhdC5nZXRfdGVybWluYXRvcnKdHAAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuZ2V0X3Rlcm1pbmF0b3JYAQAAAC10cp4cAABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmZpbmlzaF9yZXF1ZXN0cp8cAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmZpbmlzaF9yZXF1ZXN0WAEAAAAtdHKgHAAAWA4AAABnZW5lcmF0b3Iuc2VuZHKhHAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLnNlbmRYAQAAAC10cqIcAABYFQAAAHRhcmZpbGUuVGFyRmlsZS5jbG9zZXKjHAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmNsb3NlWAEAAAAtdHKkHAAAWCUAAABtdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbi5yZWN2X2J5dGVzcqUcAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLnJlY3ZfYnl0ZXNYAQAAAC10cqYcAABYGQAAAG1obGliLk1lc3NhZ2Uub3Blbm1lc3NhZ2VypxwAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NZXNzYWdlLm9wZW5tZXNzYWdlWAEAAAAtdHKoHAAAWBIAAABjdXJzZXMud2luZG93Lm1vdmVyqRwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tb3ZlWAEAAAAtdHKqHAAAWBYAAAB0dGsuVHJlZXZpZXcuc2VsZWN0aW9ucqscAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5zZWxlY3Rpb25YAQAAAC10cqwcAABYEgAAAHJlLlJlZ2V4T2JqZWN0LnN1YnKtHAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnN1YlgBAAAALXRyrhwAAFgYAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9ob3N0cq8cAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X2hvc3RYAQAAAC10crAcAABYNQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9ydW50aW1lX2xpYnJhcnlfZGlycrEcAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX3J1bnRpbWVfbGlicmFyeV9kaXJYAQAAAC10crIcAABYKQAAAGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5tYWtlU29ja2V0crMcAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIubWFrZVNvY2tldFgBAAAALXRytBwAAFghAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5lbmRfcGFyYWdyYXBocrUcAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuZW5kX3BhcmFncmFwaFgBAAAALXRythwAAFgXAAAAcHN0YXRzLlN0YXRzLnNvcnRfc3RhdHNytxwAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5zb3J0X3N0YXRzWAEAAAAtdHK4HAAAWCQAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLmFzc2VydF9saW5lX2RhdGFyuRwAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5hc3NlcnRfbGluZV9kYXRhWAEAAAAtdHK6HAAAWBYAAABjc3YuY3N2d3JpdGVyLndyaXRlcm93crscAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIud3JpdGVyb3dYAQAAAC10crwcAABYFQAAAGRhdGV0aW1lLmRhdGUuX19zdHJfX3K9HAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuX19zdHJfX1gBAAAALXRyvhwAAFgNAAAAZmxvYXQuZnJvbWhleHK/HAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zsb2F0LmZyb21oZXhYAQAAAC10csAcAABYOAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0csEcAAAoanMFAABqdAUAAFhuAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVfb25lX3JlcXVlc3RYAQAAAC10csIcAABYHAAAAG11bHRpcHJvY2Vzc2luZy5Mb2NrLmFjcXVpcmVywxwAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkxvY2suYWNxdWlyZVgBAAAALXRyxBwAAFgdAAAAZW1haWwucGFyc2VyLkZlZWRQYXJzZXIuY2xvc2VyxRwAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkZlZWRQYXJzZXIuY2xvc2VYAQAAAC10csYcAABYFAAAAHRocmVhZGluZy5FdmVudC53YWl0csccAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC53YWl0WAEAAAAtdHLIHAAAWCMAAABjb2RlLkludGVyYWN0aXZlQ29uc29sZS5yZXNldGJ1ZmZlcnLJHAAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucmVzZXRidWZmZXJYAQAAAC10csocAABYIAAAAGltcHV0aWwuSW1wb3J0TWFuYWdlci5hZGRfc3VmZml4csscAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydE1hbmFnZXIuYWRkX3N1ZmZpeFgBAAAALXRyzBwAAFgcAAAAc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2xvY2Fsc3LNHAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9sb2NhbHNYAQAAAC10cs4cAABYKAAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIub3B0aW9ueGZvcm1yzxwAAChqcwUAAGp0BQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5vcHRpb254Zm9ybVgBAAAALXRy0BwAAFgkAAAAY29va2llbGliLkNvb2tpZUphci5zZXRfY29va2llX2lmX29rctEcAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXIuc2V0X2Nvb2tpZV9pZl9va1gBAAAALXRy0hwAAFgaAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLndhbGty0xwAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS53YWxrWAEAAAAtdHLUHAAAWBcAAABjdXJzZXMud2luZG93LnNldHNjcnJlZ3LVHAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnNldHNjcnJlZ1gBAAAALXRy1hwAAFgpAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkxvY2ty1xwAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkxvY2tYAQAAAC10ctgcAABYFQAAAGN1cnNlcy53aW5kb3cuYXR0cnNldHLZHAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmF0dHJzZXRYAQAAAC10ctocAABYEQAAAHR0ay5Ob3RlYm9vay50YWJzctscAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Ob3RlYm9vay50YWJzWAEAAAAtdHLcHAAAWA0AAABpYy5JQy5tYXBmaWxlct0cAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMuSUMubWFwZmlsZVgBAAAALXRy3hwAAFgjAAAAdXJsbGliMi5Vbmtub3duSGFuZGxlci51bmtub3duX29wZW5y3xwAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuVW5rbm93bkhhbmRsZXIudW5rbm93bl9vcGVuWAEAAAAtdHLgHAAAWCoAAABsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIubWFwUHJpb3JpdHly4RwAAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5tYXBQcmlvcml0eVgBAAAALXRy4hwAAFgtAAAAdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDA3cuMcAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5RGlnZXN0QXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDdYAQAAAC10cuQcAABYFQAAAG1haWxib3guTWFpbGJveC5pdGVtc3LlHAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lml0ZW1zWAEAAAAtdHLmHAAAWB0AAABtYWlsYm94Lm1ib3hNZXNzYWdlLnNldF9mbGFnc3LnHAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5zZXRfZmxhZ3NYAQAAAC10cugcAABYFwAAAHppcGZpbGUuWmlwRmlsZS5leHRyYWN0cukcAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuZXh0cmFjdFgBAAAALXRy6hwAAFgZAAAAdHRrLlRyZWV2aWV3LmlkZW50aWZ5X3Jvd3LrHAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaWRlbnRpZnlfcm93WAEAAAAtdHLsHAAAWC8AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5maW5kX2xpYnJhcnlfZmlsZXLtHAAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlWAEAAAAtdHLuHAAAWA8AAABvYmplY3QuX19yeG9yX19y7xwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yeG9yX19YAQAAAC10cvAcAABYCQAAAGZpbGUudGVsbHLxHAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUudGVsbFgBAAAALXRy8hwAAFgvAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmdy8xwAAChqcwUAAGp0BQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmdYAQAAAC10cvQcAABYGgAAAHhtbC5kb20uTm9kZS5oYXNBdHRyaWJ1dGVzcvUcAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuaGFzQXR0cmlidXRlc1gBAAAALXRy9hwAAFgSAAAAdHRrLlRyZWV2aWV3LmluZGV4cvccAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5pbmRleFgBAAAALXRy+BwAAFgUAAAAbWhsaWIuTUgubGlzdGZvbGRlcnNy+RwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5saXN0Zm9sZGVyc1gBAAAALXRy+hwAAFgXAAAAY21kLkNtZC5jb21wbGV0ZWRlZmF1bHRy+xwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5jb21wbGV0ZWRlZmF1bHRYAQAAAC10cvwcAABYJAAAAHN5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9pZGVudGlmaWVyc3L9HAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9pZGVudGlmaWVyc1gBAAAALXRy/hwAAFgsAAAAeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGVy/xwAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRE9NSW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBlWAEAAAAtdHIAHQAAWA4AAABiZGIuQmRiLnJ1bmN0eHIBHQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnJ1bmN0eFgBAAAALXRyAh0AAFgSAAAAc3RydWN0LlN0cnVjdC5wYWNrcgMdAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QucGFja1gBAAAALXRyBB0AAFgUAAAAcGlwZXMuVGVtcGxhdGUucmVzZXRyBR0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5yZXNldFgBAAAALXRyBh0AAFgeAAAAc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWlucgcdAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpblgBAAAALXRyCB0AAFgYAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9kYXRhcgkdAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X2RhdGFYAQAAAC10cgodAABYIQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5wYXJzZXILHQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5wYXJzZVgBAAAALXRyDB0AAFgSAAAAY29udGFpbmVyLl9faXRlcl9fcg0dAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY29udGFpbmVyLl9faXRlcl9fWAEAAAAtdHIOHQAAWBUAAABjdXJzZXMud2luZG93Lm5vZGVsYXlyDx0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ub2RlbGF5WAEAAAAtdHIQHQAAWCEAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLndhcm5yER0AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLndhcm5YAQAAAC10chIdAABYLwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RhdGlvbkRlY2xIYW5kbGVychMdAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuTm90YXRpb25EZWNsSGFuZGxlclgBAAAALXRyFB0AAFgSAAAAdHRrLlRyZWV2aWV3Lnh2aWV3chUdAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy54dmlld1gBAAAALXRyFh0AAFgMAAAAc3RyLnN3YXBjYXNlchcdAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnN3YXBjYXNlWAEAAAAtdHIYHQAAWBsAAAB0YXJmaWxlLlRhckZpbGUuZXh0cmFjdGZpbGVyGR0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5leHRyYWN0ZmlsZVgBAAAALXRyGh0AAFgcAAAAbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZnJvbXIbHQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZnJvbVgBAAAALXRyHB0AAFgVAAAAdHRrLlRyZWV2aWV3LnJlYXR0YWNoch0dAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5yZWF0dGFjaFgBAAAALXRyHh0AAFgcAAAAY29sbGVjdGlvbnMuZGVxdWUuZXh0ZW5kbGVmdHIfHQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLmV4dGVuZGxlZnRYAQAAAC10ciAdAABYGgAAAHdhdmUuV2F2ZV9yZWFkLmdldGNvbXB0eXBlciEdAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRjb21wdHlwZVgBAAAALXRyIh0AAFgTAAAAYWlmYy5haWZjLmdldHBhcmFtc3IjHQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldHBhcmFtc1gBAAAALXRyJB0AAFgjAAAAYXN5bmNoYXQuYXN5bmNfY2hhdC5kaXNjYXJkX2J1ZmZlcnNyJR0AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmRpc2NhcmRfYnVmZmVyc1gBAAAALXRyJh0AAFgcAAAAbG9nZ2luZy5IYW5kbGVyLnNldEZvcm1hdHRlcnInHQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLnNldEZvcm1hdHRlclgBAAAALXRyKB0AAFgWAAAAYnNkZGIuYnNkZGJvYmplY3QubmV4dHIpHQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJzZGRib2JqZWN0Lm5leHRYAQAAAC10ciodAABYFwAAAHBzdGF0cy5TdGF0cy5kdW1wX3N0YXRzcisdAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMuZHVtcF9zdGF0c1gBAAAALXRyLB0AAFgjAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkdldEJhc2VyLR0AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRCYXNlWAEAAAAtdHIuHQAAWBAAAABjaHVuay5DaHVuay5zZWVrci8dAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuc2Vla1gBAAAALXRyMB0AAFgbAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UuZmlsZW5vcjEdAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5maWxlbm9YAQAAAC10cjIdAABYGgAAAGFzeW5jb3JlLmRpc3BhdGNoZXIubGlzdGVucjMdAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5saXN0ZW5YAQAAAC10cjQdAABYFAAAAGltYXBsaWIuSU1BUDQubG9nb3V0cjUdAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmxvZ291dFgBAAAALXRyNh0AAFgtAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzcjcdAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzWAEAAAAtdHI4HQAAWBAAAABpby5CeXRlc0lPLnJlYWQxcjkdAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJTy5yZWFkMVgBAAAALXRyOh0AAFgkAAAAcmZjODIyLk1lc3NhZ2UuZ2V0YWxsbWF0Y2hpbmdoZWFkZXJzcjsdAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldGFsbG1hdGNoaW5naGVhZGVyc1gBAAAALXRyPB0AAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlF1ZXVlcj0dAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5RdWV1ZVgBAAAALXRyPh0AAFglAAAAcmZjODIyLk1lc3NhZ2UuZ2V0Zmlyc3RtYXRjaGluZ2hlYWRlcnI/HQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5nZXRmaXJzdG1hdGNoaW5naGVhZGVyWAEAAAAtdHJAHQAAWBIAAABkYmhhc2guZGJoYXNoLnN5bmNyQR0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjZGJoYXNoLmRiaGFzaC5zeW5jWAEAAAAtdHJCHQAAWBAAAAB0dGsuU3R5bGUubGF5b3V0ckMdAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS5sYXlvdXRYAQAAAC10ckQdAABYFAAAAHN0cnVjdC5TdHJ1Y3QudW5wYWNrckUdAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QudW5wYWNrWAEAAAAtdHJGHQAAWBQAAABvYmplY3QuX19pZmxvb3JkaXZfX3JHHQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lmbG9vcmRpdl9fWAEAAAAtdHJIHQAAWBUAAAB0YXJmaWxlLlRhckluZm8uaXNkZXZySR0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2RldlgBAAAALXRySh0AAFgSAAAAYXJyYXkuYXJyYXkucmVtb3ZlcksdAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucmVtb3ZlWAEAAAAtdHJMHQAAWBgAAABzeW10YWJsZS5TeW1ib2wuaXNfbG9jYWxyTR0AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfbG9jYWxYAQAAAC10ck4dAABYLAAAAHVybGxpYjIuSFRUUERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDAxck8dAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMVgBAAAALXRyUB0AAFgWAAAAc2hsZXguc2hsZXguc291cmNlaG9va3JRHQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnNvdXJjZWhvb2tYAQAAAC10clIdAABYHgAAAHhtbC5kb20uRG9jdW1lbnQuY3JlYXRlQ29tbWVudHJTHQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVDb21tZW50WAEAAAAtdHJUHQAAWA0AAABvYmplY3QuX19sdF9fclUdAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbHRfX1gBAAAALXRyVh0AAFgPAAAAZ2VuZXJhdG9yLnRocm93clcdAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNnZW5lcmF0b3IudGhyb3dYAQAAAC10clgdAABYIgAAAG9zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuY2xvc2VyWR0AAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmNsb3NlWAEAAAAtdHJaHQAAWBUAAABwaWNrbGUuVW5waWNrbGVyLmxvYWRyWx0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xlci5sb2FkWAEAAAAtdHJcHQAAWBgAAABzb2NrZXQuc29ja2V0LmdldHNvY2tvcHRyXR0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5nZXRzb2Nrb3B0WAEAAAAtdHJeHQAAWBwAAABkYXRldGltZS5kYXRldGltZS5pc293ZWVrZGF5cl8dAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuaXNvd2Vla2RheVgBAAAALXRyYB0AAFgcAAAAeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZXJhHQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZVgBAAAALXRyYh0AAFgUAAAAaWMuSUMubWFwdHlwZWNyZWF0b3JyYx0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5JQy5tYXB0eXBlY3JlYXRvclgBAAAALXRyZB0AAFgTAAAAdHJhY2UuVHJhY2UucnVuZnVuY3JlHQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJ1bmZ1bmNYAQAAAC10cmYdAABYEwAAAGN1cnNlcy53aW5kb3cuaWRjb2tyZx0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pZGNva1gBAAAALXRyaB0AAFgXAAAAbWFpbGJveC5NYWlsYm94Ll9fbGVuX19yaR0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX2xlbl9fWAEAAAAtdHJqHQAAWCgAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5zZXRfYXBwcmsdAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5zZXRfYXBwWAEAAAAtdHJsHQAAWCEAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLnJlYWRybR0AAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkWAEAAAAtdHJuHQAAWCYAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kdGV4dHJvHQAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kdGV4dFgBAAAALXRycB0AAFgeAAAAeGRybGliLlVucGFja2VyLnVucGFja19mc3RyaW5ncnEdAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfZnN0cmluZ1gBAAAALXRych0AAFgTAAAAZGVjaW1hbC5Db250ZXh0LmFkZHJzHQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmFkZFgBAAAALXRydB0AAFgVAAAAZGVjaW1hbC5EZWNpbWFsLnNoaWZ0cnUdAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2hpZnRYAQAAAC10cnYdAABYJQAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuc2VuZGZpbGVydx0AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuc2VuZGZpbGVYAQAAAC10cngdAABYCwAAAGRsLmRsLmNsb3NlcnkdAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjZGwuZGwuY2xvc2VYAQAAAC10cnodAABYHAAAAGRlY2ltYWwuRGVjaW1hbC5pc19zdWJub3JtYWxyex0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19zdWJub3JtYWxYAQAAAC10cnwdAABYEgAAAHNlbGVjdC5wb2xsLm1vZGlmeXJ9HQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbC5tb2RpZnlYAQAAAC10cn4dAABYDwAAAGZyb3plbnNldC5jbGVhcnJ/HQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5jbGVhclgBAAAALXRygB0AAFgiAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5yZW1vdmVfZmxhZ3KBHQAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5yZW1vdmVfZmxhZ1gBAAAALXRygh0AAFgWAAAAZGlmZmxpYi5EaWZmZXIuY29tcGFyZXKDHQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5EaWZmZXIuY29tcGFyZVgBAAAALXRyhB0AAFglAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZXhlY3V0ZXKFHQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmV4ZWN1dGVYAQAAAC10coYdAABYJQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uud3JpdGVhbGxyhx0AAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLndyaXRlYWxsWAEAAAAtdHKIHQAAWBEAAAB1bmljb2RlLmlzZGVjaW1hbHKJHQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3VuaWNvZGUuaXNkZWNpbWFsWAEAAAAtdHKKHQAAWBEAAABiZGIuQmRiLmdldF9zdGFja3KLHQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmdldF9zdGFja1gBAAAALXRyjB0AAFgVAAAAc3NsLlNTTFNvY2tldC52ZXJzaW9uco0dAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQudmVyc2lvblgBAAAALXRyjh0AAFgTAAAAb2JqZWN0Ll9fZmxvb3JkaXZfX3KPHQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Zsb29yZGl2X19YAQAAAC10cpAdAABYGAAAAG1haWxib3guTUguZ2V0X3NlcXVlbmNlc3KRHQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5nZXRfc2VxdWVuY2VzWAEAAAAtdHKSHQAAWB0AAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfdHlwZXKTHQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF90eXBlWAEAAAAtdHKUHQAAWCIAAABhc3luY2hhdC5hc3luY19jaGF0LnNldF90ZXJtaW5hdG9ycpUdAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5zZXRfdGVybWluYXRvclgBAAAALXRylh0AAFgcAAAAaW1hcGxpYi5JTUFQNC5sb2dpbl9jcmFtX21kNXKXHQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5sb2dpbl9jcmFtX21kNVgBAAAALXRymB0AAFgoAAAAb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5yZWNjb250cm9sc3KZHQAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UucmVjY29udHJvbHNYAQAAAC10cpodAABYGQAAAHBvc2l4ZmlsZS5wb3NpeGZpbGUuZmxhZ3Nymx0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLnBvc2l4ZmlsZS5mbGFnc1gBAAAALXRynB0AAFgXAAAAZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVynR0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlWAEAAAAtdHKeHQAAWCkAAABjb29raWVsaWIuQ29va2llSmFyLmNsZWFyX3Nlc3Npb25fY29va2llc3KfHQAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLmNsZWFyX3Nlc3Npb25fY29va2llc1gBAAAALXRyoB0AAFgZAAAAZGlzdHV0aWxzLmNtZC5Db21tYW5kLnJ1bnKhHQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jbWQuQ29tbWFuZC5ydW5YAQAAAC10cqIdAABYJQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5QYXJzZUZpbGVyox0AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5QYXJzZUZpbGVYAQAAAC10cqQdAABYGwAAAGRlY2ltYWwuRGVjaW1hbC5uZXh0X3Rvd2FyZHKlHQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm5leHRfdG93YXJkWAEAAAAtdHKmHQAAWCUAAABjb29raWVsaWIuQ29va2llLmdldF9ub25zdGFuZGFyZF9hdHRycqcdAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuZ2V0X25vbnN0YW5kYXJkX2F0dHJYAQAAAC10cqgdAABYFwAAAGN1cnNlcy53aW5kb3cuY3Vyc3luY3VwcqkdAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuY3Vyc3luY3VwWAEAAAAtdHKqHQAAWBMAAAB0dGsuVHJlZXZpZXcuZGVsZXRlcqsdAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5kZWxldGVYAQAAAC10cqwdAABYEwAAAGhtYWMuSE1BQy5oZXhkaWdlc3RyrR0AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG1hYy5odG1sI2htYWMuSE1BQy5oZXhkaWdlc3RYAQAAAC10cq4dAABYLwAAAERvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl9uYW1lcq8dAAAoanMFAABqdAUAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI0RvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl9uYW1lWAEAAAAtdHKwHQAAWBwAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19lcV9fcrEdAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19lcV9fWAEAAAAtdHKyHQAAWA8AAABvYmplY3QuX19pc3ViX19ysx0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pc3ViX19YAQAAAC10crQdAABYEwAAAG9iamVjdC5fX2NvbnRhaW5zX19ytR0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jb250YWluc19fWAEAAAAtdHK2HQAAWCAAAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9mbGFnc3K3HQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfZmxhZ3NYAQAAAC10crgdAABYKAAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnBhcnNlX2tub3duX2FyZ3NyuR0AAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wYXJzZV9rbm93bl9hcmdzWAEAAAAtdHK6HQAAWCAAAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2VuZHRhZ3K7HQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9lbmR0YWdYAQAAAC10crwdAABYIAAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNldEVxdWFscr0dAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2V0RXF1YWxYAQAAAC10cr4dAABYJQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJlZ2V4cE1hdGNoZXNyvx0AAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSZWdleHBNYXRjaGVzWAEAAAAtdHLAHQAAWBoAAABtaGxpYi5NSC5saXN0YWxsc3ViZm9sZGVyc3LBHQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1ILmxpc3RhbGxzdWJmb2xkZXJzWAEAAAAtdHLCHQAAWBcAAABpbWFwbGliLklNQVA0LnByb3h5YXV0aHLDHQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5wcm94eWF1dGhYAQAAAC10csQdAABYHAAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uY2xvc2VyxR0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uY2xvc2VYAQAAAC10csYdAABYIAAAAGdldHRleHQuR05VVHJhbnNsYXRpb25zLmxnZXR0ZXh0cscdAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sZ2V0dGV4dFgBAAAALXRyyB0AAFgvAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfZXJyb3JyyR0AAChqcwUAAGp0BQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmxvZ19lcnJvclgBAAAALXRyyh0AAFgRAAAAaW8uSU9CYXNlLl9fZGVsX19yyx0AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuX19kZWxfX1gBAAAALXRyzB0AAFgUAAAAZGVjaW1hbC5Db250ZXh0LnNxcnRyzR0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zcXJ0WAEAAAAtdHLOHQAAWBIAAAB0dGsuVHJlZXZpZXcueXZpZXdyzx0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lnl2aWV3WAEAAAAtdHLQHQAAWB8AAABjb2xsZWN0aW9ucy5Db3VudGVyLm1vc3RfY29tbW9uctEdAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci5tb3N0X2NvbW1vblgBAAAALXRy0h0AAFgUAAAAc2VsZWN0LnBvbGwucmVnaXN0ZXJy0x0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwucmVnaXN0ZXJYAQAAAC10ctQdAABYIAAAAG1haWxib3guQmFieWxNZXNzYWdlLnNldF92aXNpYmxlctUdAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfdmlzaWJsZVgBAAAALXRy1h0AAFgUAAAAZHVtYmRibS5kdW1iZGJtLnN5bmNy1x0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtYmRibS5odG1sI2R1bWJkYm0uZHVtYmRibS5zeW5jWAEAAAAtdHLYHQAAWBUAAABiZGIuQnJlYWtwb2ludC5wcHJpbnRy2R0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQucHByaW50WAEAAAAtdHLaHQAAWBUAAAB0dGsuVHJlZXZpZXcudGFnX2JpbmRy2x0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnRhZ19iaW5kWAEAAAAtdHLcHQAAWCEAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMaXN0RXF1YWxy3R0AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMaXN0RXF1YWxYAQAAAC10ct4dAABYKAAAAHVybGxpYi5GYW5jeVVSTG9wZW5lci5wcm9tcHRfdXNlcl9wYXNzd2Ry3x0AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLkZhbmN5VVJMb3BlbmVyLnByb21wdF91c2VyX3Bhc3N3ZFgBAAAALXRy4B0AAFgfAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLl9wYXJzZXLhHQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLl9wYXJzZVgBAAAALXRy4h0AAFgcAAAAd2F2ZS5XYXZlX3dyaXRlLnNldG5jaGFubmVsc3LjHQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldG5jaGFubmVsc1gBAAAALXRy5B0AAFgjAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWxy5R0AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbFgBAAAALXRy5h0AAFgRAAAAZmwuZm9ybS5iZ25fZ3JvdXBy5x0AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmJnbl9ncm91cFgBAAAALXRy6B0AAFgaAAAAcHN0YXRzLlN0YXRzLnByaW50X2NhbGxlZXNy6R0AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5wcmludF9jYWxsZWVzWAEAAAAtdHLqHQAAWBAAAABjaHVuay5DaHVuay5za2lwcusdAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuc2tpcFgBAAAALXRy7B0AAFgTAAAAY3Vyc2VzLndpbmRvdy5jaGdhdHLtHQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNoZ2F0WAEAAAAtdHLuHQAAWBUAAABhZXRvb2xzLlRhbGtUby5fc3RhcnRy7x0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMuVGFsa1RvLl9zdGFydFgBAAAALXRy8B0AAFgdAAAAeGRybGliLlVucGFja2VyLnVucGFja19vcGFxdWVy8R0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19vcGFxdWVYAQAAAC10cvIdAABYEwAAAHNvY2tldC5zb2NrZXQuY2xvc2Vy8x0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5jbG9zZVgBAAAALXRy9B0AAFgJAAAAZGljdC5jb3B5cvUdAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5jb3B5WAEAAAAtdHL2HQAAWCIAAABjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fYXNkaWN0cvcdAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2FzZGljdFgBAAAALXRy+B0AAFgpAAAAeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmV4cGFuZE5vZGVy+R0AAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmV4cGFuZE5vZGVYAQAAAC10cvodAABYLAAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmlzX25vdF9hbGxvd2VkcvsdAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmlzX25vdF9hbGxvd2VkWAEAAAAtdHL8HQAAWBcAAABpby5CdWZmZXJlZFdyaXRlci53cml0ZXL9HQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkV3JpdGVyLndyaXRlWAEAAAAtdHL+HQAAWBgAAAB6aXBmaWxlLlppcEZpbGUuaW5mb2xpc3Ry/x0AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5pbmZvbGlzdFgBAAAALXRyAB4AAFggAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfZmxhZ3NyAR4AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2ZsYWdzWAEAAAAtdHICHgAAWCUAAAB4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFB1YmxpY0lkcgMeAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvci5nZXRQdWJsaWNJZFgBAAAALXRyBB4AAFgcAAAAY29va2llbGliLkZpbGVDb29raWVKYXIubG9hZHIFHgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5sb2FkWAEAAAAtdHIGHgAAWBYAAABmcm96ZW5zZXQuaW50ZXJzZWN0aW9ucgceAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmludGVyc2VjdGlvblgBAAAALXRyCB4AAFgQAAAAZnRwbGliLkZUUC5hYm9ydHIJHgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmFib3J0WAEAAAAtdHIKHgAAWBMAAAB0dGsuVHJlZXZpZXcucGFyZW50cgseAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5wYXJlbnRYAQAAAC10cgweAABYGwAAAHBwcmludC5QcmV0dHlQcmludGVyLnBwcmludHINHgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlci5wcHJpbnRYAQAAAC10cg4eAABYGwAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5xc2l6ZXIPHgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUucXNpemVYAQAAAC10chAeAABYJAAAAGZyYWN0aW9ucy5GcmFjdGlvbi5saW1pdF9kZW5vbWluYXRvcnIRHgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24ubGltaXRfZGVub21pbmF0b3JYAQAAAC10chIeAABYFAAAAHJleGVjLlJFeGVjLnJfaW1wb3J0chMeAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMucl9pbXBvcnRYAQAAAC10chQeAABYHAAAAGxvZ2dpbmcuRm9ybWF0dGVyLmZvcm1hdFRpbWVyFR4AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuRm9ybWF0dGVyLmZvcm1hdFRpbWVYAQAAAC10chYeAABYFAAAAHppcGZpbGUuWmlwRmlsZS5vcGVuchceAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUub3BlblgBAAAALXRyGB4AAFgJAAAAc3RyLnVwcGVychkeAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnVwcGVyWAEAAAAtdHIaHgAAWAkAAABmaWxlLnNlZWtyGx4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnNlZWtYAQAAAC10chweAABYDwAAAG9iamVjdC5fX3JhZGRfX3IdHgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JhZGRfX1gBAAAALXRyHh4AAFghAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMudW5nZXR0ZXh0ch8eAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy51bmdldHRleHRYAQAAAC10ciAeAABYGAAAAHdhdmUuV2F2ZV9yZWFkLmdldHBhcmFtc3IhHgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0cGFyYW1zWAEAAAAtdHIiHgAAWBQAAABjdXJzZXMud2luZG93LmtleXBhZHIjHgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmtleXBhZFgBAAAALXRyJB4AAFgXAAAAdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RyJR4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5leHRyYWN0WAEAAAAtdHImHgAAdVgHAAAAc3RkOmRvY31yJx4AAChYDgAAAGxpYnJhcnkvcHByaW50cigeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sWB4AAABwcHJpbnQg4oCUIERhdGEgcHJldHR5IHByaW50ZXJ0cikeAABYDAAAAGxpYnJhcnkvcmVwcnIqHgAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWxYKAAAAHJlcHIg4oCUIEFsdGVybmF0ZSByZXByKCkgaW1wbGVtZW50YXRpb250ciseAABYDgAAAGxpYnJhcnkvZnBlY3RsciweAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sWCsAAABmcGVjdGwg4oCUIEZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBjb250cm9sdHItHgAAWBEAAABsaWJyYXJ5L2l0ZXJ0b29sc3IuHgAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbFhAAAAAaXRlcnRvb2xzIOKAlCBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZ3RyLx4AAFgVAAAAdHV0b3JpYWwvaW50cm9kdWN0aW9ucjAeAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbFgiAAAAQW4gSW5mb3JtYWwgSW50cm9kdWN0aW9uIHRvIFB5dGhvbnRyMR4AAFgPAAAAbGlicmFyeS9zdHJpbmdzcjIeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3MuaHRtbFgPAAAAU3RyaW5nIFNlcnZpY2VzdHIzHgAAWAwAAABsaWJyYXJ5LzJ0bzNyNB4AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sWC8AAAAydG8zIC0gQXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdGlvbnRyNR4AAFgLAAAAbGlicmFyeS9kYm1yNh4AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWxYJwAAAGRibSDigJQgU2ltcGxlIOKAnGRhdGFiYXNl4oCdIGludGVyZmFjZXRyNx4AAFgPAAAAbGlicmFyeS9tYWNwYXRocjgeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY3BhdGguaHRtbFgwAAAAbWFjcGF0aCDigJQgTWFjIE9TIDkgcGF0aCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zdHI5HgAAWA0AAABsaWJyYXJ5L3B5ZG9jcjoeAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZG9jLmh0bWxYOAAAAHB5ZG9jIOKAlCBEb2N1bWVudGF0aW9uIGdlbmVyYXRvciBhbmQgb25saW5lIGhlbHAgc3lzdGVtdHI7HgAAWA4AAABsaWJyYXJ5L3NoZWx2ZXI8HgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbFgkAAAAc2hlbHZlIOKAlCBQeXRob24gb2JqZWN0IHBlcnNpc3RlbmNldHI9HgAAWA8AAABsaWJyYXJ5L25ldGRhdGFyPh4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0ZGF0YS5odG1sWBYAAABJbnRlcm5ldCBEYXRhIEhhbmRsaW5ndHI/HgAAWBQAAABsaWJyYXJ5L2Rpc3RyaWJ1dGlvbnJAHgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXN0cmlidXRpb24uaHRtbFgjAAAAU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb250ckEeAABYDQAAAGhvd3RvL3NvY2tldHNyQh4AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3NvY2tldHMuaHRtbFgYAAAAU29ja2V0IFByb2dyYW1taW5nIEhPV1RPdHJDHgAAWBYAAABkaXN0dXRpbHMvaW50cm9kdWN0aW9uckQeAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWxYHAAAAEFuIEludHJvZHVjdGlvbiB0byBEaXN0dXRpbHN0ckUeAABYDAAAAGxpYnJhcnkvY29weXJGHgAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5Lmh0bWxYKQAAAGNvcHkg4oCUIFNoYWxsb3cgYW5kIGRlZXAgY29weSBvcGVyYXRpb25zdHJHHgAAWA8AAABsaWJyYXJ5L2ltcHV0aWxySB4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sWBwAAABpbXB1dGlsIOKAlCBJbXBvcnQgdXRpbGl0aWVzdHJJHgAAWAkAAABjLWFwaS9hcmdySh4AAChqcwUAAGp0BQAAWCgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FyZy5odG1sWCUAAABQYXJzaW5nIGFyZ3VtZW50cyBhbmQgYnVpbGRpbmcgdmFsdWVzdHJLHgAAWBEAAABsaWJyYXJ5L3RlbG5ldGxpYnJMHgAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbFgbAAAAdGVsbmV0bGliIOKAlCBUZWxuZXQgY2xpZW50dHJNHgAAWA4AAABsaWJyYXJ5L3B5Y2xicnJOHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbFgnAAAAcHljbGJyIOKAlCBQeXRob24gY2xhc3MgYnJvd3NlciBzdXBwb3J0dHJPHgAAWA4AAABjLWFwaS9mdW5jdGlvbnJQHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbFgQAAAARnVuY3Rpb24gT2JqZWN0c3RyUR4AAFgNAAAAYy1hcGkvY2Fwc3VsZXJSHgAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sWAgAAABDYXBzdWxlc3RyUx4AAFgRAAAAbGlicmFyeS9lbnN1cmVwaXByVB4AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW5zdXJlcGlwLmh0bWxYLQAAAGVuc3VyZXBpcCDigJQgQm9vdHN0cmFwcGluZyB0aGUgcGlwIGluc3RhbGxlcnRyVR4AAFgQAAAAbGlicmFyeS9zeW10YWJsZXJWHgAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sWDUAAABzeW10YWJsZSDigJQgQWNjZXNzIHRvIHRoZSBjb21waWxlcuKAmXMgc3ltYm9sIHRhYmxlc3RyVx4AAFgUAAAAdHV0b3JpYWwvaW50ZXJwcmV0ZXJyWB4AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWxYHAAAAFVzaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXJ0clkeAABYDgAAAGxpYnJhcnkvbXN2Y3J0cloeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sWDMAAABtc3ZjcnQg4oCUIFVzZWZ1bCByb3V0aW5lcyBmcm9tIHRoZSBNUyBWQysrIHJ1bnRpbWV0clseAABYDQAAAGhvd3RvL3VuaWNvZGVyXB4AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3VuaWNvZGUuaHRtbFgNAAAAVW5pY29kZSBIT1dUT3RyXR4AAFgPAAAAbGlicmFyeS9kdW1iZGJtcl4eAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bWJkYm0uaHRtbFgnAAAAZHVtYmRibSDigJQgUG9ydGFibGUgREJNIGltcGxlbWVudGF0aW9udHJfHgAAWBMAAABsaWJyYXJ5L19fYnVpbHRpbl9fcmAeAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L19fYnVpbHRpbl9fLmh0bWxYIAAAAF9fYnVpbHRpbl9fIOKAlCBCdWlsdC1pbiBvYmplY3RzdHJhHgAAWA8AAABsaWJyYXJ5L2xvZ2dpbmdyYh4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sWCcAAABsb2dnaW5nIOKAlCBMb2dnaW5nIGZhY2lsaXR5IGZvciBQeXRob250cmMeAABYDwAAAGMtYXBpL29iamJ1ZmZlcnJkHgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqYnVmZmVyLmh0bWxYEwAAAE9sZCBCdWZmZXIgUHJvdG9jb2x0cmUeAABYDgAAAGMtYXBpL2Fic3RyYWN0cmYeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hYnN0cmFjdC5odG1sWBYAAABBYnN0cmFjdCBPYmplY3RzIExheWVydHJnHgAAWA8AAABsaWJyYXJ5L21vZHVsZXNyaB4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlcy5odG1sWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RyaR4AAFgTAAAAbGlicmFyeS9vc3NhdWRpb2RldnJqHgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sWDYAAABvc3NhdWRpb2RldiDigJQgQWNjZXNzIHRvIE9TUy1jb21wYXRpYmxlIGF1ZGlvIGRldmljZXN0cmseAABYEQAAAGxpYnJhcnkvbWltZXR5cGVzcmweAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sWCkAAABtaW1ldHlwZXMg4oCUIE1hcCBmaWxlbmFtZXMgdG8gTUlNRSB0eXBlc3RybR4AAFgRAAAAbGlicmFyeS9jb25zdGFudHNybh4AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWxYEgAAAEJ1aWx0LWluIENvbnN0YW50c3Rybx4AAFgPAAAAbGlicmFyeS9kaWZmbGlicnAeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbFgoAAAAZGlmZmxpYiDigJQgSGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhc3RycR4AAFgPAAAAbGlicmFyeS9odHRwbGlicnIeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbFggAAAAaHR0cGxpYiDigJQgSFRUUCBwcm90b2NvbCBjbGllbnR0cnMeAABYCwAAAGxpYnJhcnkvaXBjcnQeAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lwYy5odG1sWCkAAABJbnRlcnByb2Nlc3MgQ29tbXVuaWNhdGlvbiBhbmQgTmV0d29ya2luZ3RydR4AAFgQAAAAbGlicmFyeS9mcGZvcm1hdHJ2HgAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGZvcm1hdC5odG1sWCcAAABmcGZvcm1hdCDigJQgRmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnN0cnceAABYFAAAAHR1dG9yaWFsL2NvbnRyb2xmbG93cngeAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sWBcAAABNb3JlIENvbnRyb2wgRmxvdyBUb29sc3RyeR4AAFgOAAAAbGlicmFyeS9zdHJpbmdyeh4AAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWxYIwAAAHN0cmluZyDigJQgQ29tbW9uIHN0cmluZyBvcGVyYXRpb25zdHJ7HgAAWA4AAABsaWJyYXJ5L3BvcGxpYnJ8HgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbFgfAAAAcG9wbGliIOKAlCBQT1AzIHByb3RvY29sIGNsaWVudHRyfR4AAFgPAAAAbGlicmFyeS9tYWlsY2Fwcn4eAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbFghAAAAbWFpbGNhcCDigJQgTWFpbGNhcCBmaWxlIGhhbmRsaW5ndHJ/HgAAWA4AAABsaWJyYXJ5L3NlbGVjdHKAHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbFglAAAAc2VsZWN0IOKAlCBXYWl0aW5nIGZvciBJL08gY29tcGxldGlvbnRygR4AAFgUAAAAbGlicmFyeS9tb2R1bGVmaW5kZXJygh4AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWxYLgAAAG1vZHVsZWZpbmRlciDigJQgRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHR0coMeAABYEgAAAGRpc3RyaWJ1dGluZy9pbmRleHKEHgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHJpYnV0aW5nL2luZGV4Lmh0bWxYGwAAAERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlc3RyhR4AAFgPAAAAYy1hcGkvdXRpbGl0aWVzcoYeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91dGlsaXRpZXMuaHRtbFgJAAAAVXRpbGl0aWVzdHKHHgAAWA4AAABsaWJyYXJ5L3VybGxpYnKIHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbFgqAAAAdXJsbGliIOKAlCBPcGVuIGFyYml0cmFyeSByZXNvdXJjZXMgYnkgVVJMdHKJHgAAWBEAAABsaWJyYXJ5L3RyYWNlYmFja3KKHgAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbFgxAAAAdHJhY2ViYWNrIOKAlCBQcmludCBvciByZXRyaWV2ZSBhIHN0YWNrIHRyYWNlYmFja3Ryix4AAFgOAAAAbGlicmFyeS9jb29raWVyjB4AAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWxYIAAAAENvb2tpZSDigJQgSFRUUCBzdGF0ZSBtYW5hZ2VtZW50dHKNHgAAWAoAAABjLWFwaS9kaWN0co4eAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWxYEgAAAERpY3Rpb25hcnkgT2JqZWN0c3Ryjx4AAFgLAAAAbGlicmFyeS90dGtykB4AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWxYGQAAAHR0ayDigJQgVGsgdGhlbWVkIHdpZGdldHN0cpEeAABYFAAAAGxpYnJhcnkvY29uZmlncGFyc2VycpIeAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sWCoAAABDb25maWdQYXJzZXIg4oCUIENvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXJ0cpMeAABYGAAAAHJlZmVyZW5jZS9jb21wb3VuZF9zdG10c3KUHgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWxYEwAAAENvbXBvdW5kIHN0YXRlbWVudHN0cpUeAABYDgAAAGxpYnJhcnkvY2FyYm9ucpYeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sWBYAAABNYWMgT1MgVG9vbGJveCBNb2R1bGVzdHKXHgAAWA0AAABsaWJyYXJ5L3NjaGVkcpgeAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NjaGVkLmh0bWxYGQAAAHNjaGVkIOKAlCBFdmVudCBzY2hlZHVsZXJ0cpkeAABYDgAAAGxpYnJhcnkvY3J5cHRvcpoeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NyeXB0by5odG1sWBYAAABDcnlwdG9ncmFwaGljIFNlcnZpY2VzdHKbHgAAWAwAAABjLWFwaS9tZXRob2RynB4AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sWA4AAABNZXRob2QgT2JqZWN0c3RynR4AAFgRAAAAbGlicmFyeS9pbXBvcnRsaWJynh4AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wb3J0bGliLmh0bWxYMwAAAGltcG9ydGxpYiDigJQgQ29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIF9faW1wb3J0X18oKXRynx4AAFgNAAAAbGlicmFyeS9wb3NpeHKgHgAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeC5odG1sWCwAAABwb3NpeCDigJQgVGhlIG1vc3QgY29tbW9uIFBPU0lYIHN5c3RlbSBjYWxsc3RyoR4AAFgVAAAAbGlicmFyeS9jZ2lodHRwc2VydmVycqIeAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaWh0dHBzZXJ2ZXIuaHRtbFgyAAAAQ0dJSFRUUFNlcnZlciDigJQgQ0dJLWNhcGFibGUgSFRUUCByZXF1ZXN0IGhhbmRsZXJ0cqMeAABYCwAAAGxpYnJhcnkvc2hhcqQeAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoYS5odG1sWCYAAABzaGEg4oCUIFNIQS0xIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobXRypR4AAFgOAAAAdHV0b3JpYWwvaW5kZXhyph4AAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2luZGV4Lmh0bWxYEwAAAFRoZSBQeXRob24gVHV0b3JpYWx0cqceAABYGgAAAGxpYnJhcnkvc2ltcGxleG1scnBjc2VydmVycqgeAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sWCsAAABTaW1wbGVYTUxSUENTZXJ2ZXIg4oCUIEJhc2ljIFhNTC1SUEMgc2VydmVydHKpHgAAWAwAAABsaWJyYXJ5L3N0YXRyqh4AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sWCQAAABzdGF0IOKAlCBJbnRlcnByZXRpbmcgc3RhdCgpIHJlc3VsdHN0cqseAABYDQAAAGxpYnJhcnkvbWhsaWJyrB4AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbFggAAAAbWhsaWIg4oCUIEFjY2VzcyB0byBNSCBtYWlsYm94ZXN0cq0eAABYDwAAAGRpc3R1dGlscy9pbmRleHKuHgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2luZGV4Lmh0bWxYLAAAAERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHKvHgAAWA0AAABsaWJyYXJ5L21hY29zcrAeAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWxYLwAAAE1hY09TIOKAlCBBY2Nlc3MgdG8gTWFjIE9TIGludGVycHJldGVyIGZlYXR1cmVzdHKxHgAAWBQAAABsaWJyYXJ5L3Njcm9sbGVkdGV4dHKyHgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY3JvbGxlZHRleHQuaHRtbFglAAAAU2Nyb2xsZWRUZXh0IOKAlCBTY3JvbGxlZCBUZXh0IFdpZGdldHRysx4AAFgPAAAAbGlicmFyeS9fd2lucmVncrQeAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbFgjAAAAX3dpbnJlZyDigJQgV2luZG93cyByZWdpc3RyeSBhY2Nlc3N0crUeAABYDgAAAGxpYnJhcnkvc25kaGRycrYeAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NuZGhkci5odG1sWCcAAABzbmRoZHIg4oCUIERldGVybWluZSB0eXBlIG9mIHNvdW5kIGZpbGV0crceAABYCgAAAGxpYnJhcnkvb3NyuB4AAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbFgwAAAAb3Mg4oCUIE1pc2NlbGxhbmVvdXMgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmZhY2VzdHK5HgAAWAwAAABsaWJyYXJ5L2d6aXByuh4AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3ppcC5odG1sWB8AAABnemlwIOKAlCBTdXBwb3J0IGZvciBnemlwIGZpbGVzdHK7HgAAWA8AAABsaWJyYXJ5L2hhc2hsaWJyvB4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sWC0AAABoYXNobGliIOKAlCBTZWN1cmUgaGFzaGVzIGFuZCBtZXNzYWdlIGRpZ2VzdHN0cr0eAABYEAAAAGxpYnJhcnkvYmluYXNjaWlyvh4AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbFgtAAAAYmluYXNjaWkg4oCUIENvbnZlcnQgYmV0d2VlbiBiaW5hcnkgYW5kIEFTQ0lJdHK/HgAAWA0AAABsaWJyYXJ5L25ldHJjcsAeAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWxYHwAAAG5ldHJjIOKAlCBuZXRyYyBmaWxlIHByb2Nlc3Npbmd0csEeAABYEwAAAGxpYnJhcnkvZWFzeWRpYWxvZ3Nywh4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbFgnAAAARWFzeURpYWxvZ3Mg4oCUIEJhc2ljIE1hY2ludG9zaCBkaWFsb2dzdHLDHgAAWBQAAABkaXN0dXRpbHMvY29uZmlnZmlsZXLEHgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUuaHRtbFgkAAAAV3JpdGluZyB0aGUgU2V0dXAgQ29uZmlndXJhdGlvbiBGaWxldHLFHgAAWBMAAABsaWJyYXJ5L21pbmlhZWZyYW1lcsYeAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWxYOgAAAE1pbmlBRUZyYW1lIOKAlCBPcGVuIFNjcmlwdGluZyBBcmNoaXRlY3R1cmUgc2VydmVyIHN1cHBvcnR0csceAABYCQAAAGNvcHlyaWdodHLIHgAAKGpzBQAAanQFAABYKAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvY29weXJpZ2h0Lmh0bWxYCQAAAENvcHlyaWdodHRyyR4AAFgLAAAAbGlicmFyeS9zc2xyyh4AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWxYKgAAAHNzbCDigJQgVExTL1NTTCB3cmFwcGVyIGZvciBzb2NrZXQgb2JqZWN0c3Ryyx4AAFgNAAAAYy1hcGkvdW5pY29kZXLMHgAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sWBoAAABVbmljb2RlIE9iamVjdHMgYW5kIENvZGVjc3RyzR4AAFgKAAAAYy1hcGkvbGlzdHLOHgAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sWAwAAABMaXN0IE9iamVjdHN0cs8eAABYDAAAAGxpYnJhcnkvaTE4bnLQHgAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pMThuLmh0bWxYFAAAAEludGVybmF0aW9uYWxpemF0aW9udHLRHgAAWBIAAABsaWJyYXJ5L3N1YnByb2Nlc3Ny0h4AAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sWCQAAABzdWJwcm9jZXNzIOKAlCBTdWJwcm9jZXNzIG1hbmFnZW1lbnR0ctMeAABYEQAAAHR1dG9yaWFsL2FwcGV0aXRlctQeAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9hcHBldGl0ZS5odG1sWBYAAABXaGV0dGluZyBZb3VyIEFwcGV0aXRldHLVHgAAWAwAAABsaWJyYXJ5L21hdGhy1h4AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sWB8AAABtYXRoIOKAlCBNYXRoZW1hdGljYWwgZnVuY3Rpb25zdHLXHgAAWA4AAABsaWJyYXJ5L3NvY2tldHLYHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbFgpAAAAc29ja2V0IOKAlCBMb3ctbGV2ZWwgbmV0d29ya2luZyBpbnRlcmZhY2V0ctkeAABYDwAAAGxpYnJhcnkvaW1nZmlsZXLaHgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdmaWxlLmh0bWxYKAAAAGltZ2ZpbGUg4oCUIFN1cHBvcnQgZm9yIFNHSSBpbWdsaWIgZmlsZXN0ctseAABYEgAAAGxpYnJhcnkvZXhjZXB0aW9uc3LcHgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWxYEwAAAEJ1aWx0LWluIEV4Y2VwdGlvbnN0ct0eAABYDwAAAGxpYnJhcnkvbnVtZXJpY3LeHgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1lcmljLmh0bWxYIAAAAE51bWVyaWMgYW5kIE1hdGhlbWF0aWNhbCBNb2R1bGVzdHLfHgAAWA8AAABsaWJyYXJ5L3doaWNoZGJy4B4AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2hpY2hkYi5odG1sWDUAAAB3aGljaGRiIOKAlCBHdWVzcyB3aGljaCBEQk0gbW9kdWxlIGNyZWF0ZWQgYSBkYXRhYmFzZXRy4R4AAFgNAAAAbGlicmFyeS9lcnJub3LiHgAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sWCcAAABlcnJubyDigJQgU3RhbmRhcmQgZXJybm8gc3lzdGVtIHN5bWJvbHN0cuMeAABYGgAAAHJlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzcuQeAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sWBAAAABMZXhpY2FsIGFuYWx5c2lzdHLlHgAAWA0AAABob3d0by91cmxsaWIycuYeAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by91cmxsaWIyLmh0bWxYLAAAAEhPV1RPIEZldGNoIEludGVybmV0IFJlc291cmNlcyBVc2luZyB1cmxsaWIydHLnHgAAWBYAAABsaWJyYXJ5L2dlbnN1aXRlbW9kdWxlcugeAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dlbnN1aXRlbW9kdWxlLmh0bWxYLQAAAGdlbnN1aXRlbW9kdWxlIOKAlCBHZW5lcmF0ZSBPU0Egc3R1YiBwYWNrYWdlc3Ry6R4AAFgVAAAAbGlicmFyeS9lbWFpbC5tZXNzYWdlcuoeAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbFgsAAAAZW1haWwubWVzc2FnZTogUmVwcmVzZW50aW5nIGFuIGVtYWlsIG1lc3NhZ2V0cuseAABYDgAAAGxpYnJhcnkvcG9wZW4ycuweAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sWDMAAABwb3BlbjIg4oCUIFN1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgSS9PIHN0cmVhbXN0cu0eAABYEAAAAGxpYnJhcnkvaW50ZXJuZXRy7h4AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW50ZXJuZXQuaHRtbFgeAAAASW50ZXJuZXQgUHJvdG9jb2xzIGFuZCBTdXBwb3J0dHLvHgAAWA4AAABsaWJyYXJ5L3RocmVhZHLwHgAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbFgmAAAAdGhyZWFkIOKAlCBNdWx0aXBsZSB0aHJlYWRzIG9mIGNvbnRyb2x0cvEeAABYDwAAAGxpYnJhcnkvdGtpbnRlcnLyHgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWxYJgAAAFRraW50ZXIg4oCUIFB5dGhvbiBpbnRlcmZhY2UgdG8gVGNsL1RrdHLzHgAAWBQAAAB0dXRvcmlhbC9pbnRlcmFjdGl2ZXL0HgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbFgyAAAASW50ZXJhY3RpdmUgSW5wdXQgRWRpdGluZyBhbmQgSGlzdG9yeSBTdWJzdGl0dXRpb250cvUeAABYCwAAAGMtYXBpL2NvZGVjcvYeAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sWCQAAABDb2RlYyByZWdpc3RyeSBhbmQgc3VwcG9ydCBmdW5jdGlvbnN0cvceAABYCQAAAGMtYXBpL2ludHL4HgAAKGpzBQAAanQFAABYKAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWxYFQAAAFBsYWluIEludGVnZXIgT2JqZWN0c3Ry+R4AAFgNAAAAbGlicmFyeS9pbnRyb3L6HgAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnRyby5odG1sWAwAAABJbnRyb2R1Y3Rpb250cvseAABYEwAAAGxpYnJhcnkvZGV2ZWxvcG1lbnRy/B4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGV2ZWxvcG1lbnQuaHRtbFgRAAAARGV2ZWxvcG1lbnQgVG9vbHN0cv0eAABYEwAAAGxpYnJhcnkvcm9ib3RwYXJzZXJy/h4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbFgmAAAAcm9ib3RwYXJzZXIg4oCUICBQYXJzZXIgZm9yIHJvYm90cy50eHR0cv8eAABYDwAAAGxpYnJhcnkvc210cGxpYnIAHwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWxYIAAAAHNtdHBsaWIg4oCUIFNNVFAgcHJvdG9jb2wgY2xpZW50dHIBHwAAWBYAAABob3d0by9sb2dnaW5nLWNvb2tib29rcgIfAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWxYEAAAAExvZ2dpbmcgQ29va2Jvb2t0cgMfAABYDwAAAGxpYnJhcnkvbnVtYmVyc3IEHwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWxYKQAAAG51bWJlcnMg4oCUIE51bWVyaWMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzdHIFHwAAWAsAAABjLWFwaS9jbGFzc3IGHwAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbFgaAAAAQ2xhc3MgYW5kIEluc3RhbmNlIE9iamVjdHN0cgcfAABYDwAAAGxpYnJhcnkveG1sLnNheHIIHwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWxYJAAAAHhtbC5zYXgg4oCUIFN1cHBvcnQgZm9yIFNBWDIgcGFyc2Vyc3RyCR8AAFgSAAAAbGlicmFyeS9weV9jb21waWxlcgofAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbFgqAAAAcHlfY29tcGlsZSDigJQgQ29tcGlsZSBQeXRob24gc291cmNlIGZpbGVzdHILHwAAWBgAAAByZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWxyDB8AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sWA8AAABFeGVjdXRpb24gbW9kZWx0cg0fAABYCwAAAGxpYnJhcnkvY3N2cg4fAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sWCQAAABjc3Yg4oCUIENTViBGaWxlIFJlYWRpbmcgYW5kIFdyaXRpbmd0cg8fAABYEAAAAGMtYXBpL2V4Y2VwdGlvbnNyEB8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbFgSAAAARXhjZXB0aW9uIEhhbmRsaW5ndHIRHwAAWBYAAABsaWJyYXJ5L2VtYWlsLWV4YW1wbGVzchIfAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLmh0bWxYDwAAAGVtYWlsOiBFeGFtcGxlc3RyEx8AAFgOAAAAbGlicmFyeS9mdHBsaWJyFB8AAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWxYHgAAAGZ0cGxpYiDigJQgRlRQIHByb3RvY29sIGNsaWVudHRyFR8AAFgPAAAAbGlicmFyeS9hZXRvb2xzchYfAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldG9vbHMuaHRtbFgeAAAAYWV0b29scyDigJQgT1NBIGNsaWVudCBzdXBwb3J0dHIXHwAAWA4AAABsaWJyYXJ5L2RiaGFzaHIYHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbFg6AAAAZGJoYXNoIOKAlCBEQk0tc3R5bGUgaW50ZXJmYWNlIHRvIHRoZSBCU0QgZGF0YWJhc2UgbGlicmFyeXRyGR8AAFgLAAAAbGlicmFyeS9iejJyGh8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWxYKQAAAGJ6MiDigJQgQ29tcHJlc3Npb24gY29tcGF0aWJsZSB3aXRoIGJ6aXAydHIbHwAAWA0AAABsaWJyYXJ5L2hlYXBxchwfAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWxYHgAAAGhlYXBxIOKAlCBIZWFwIHF1ZXVlIGFsZ29yaXRobXRyHR8AAFgKAAAAYy1hcGkvbG9uZ3IeHwAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sWBQAAABMb25nIEludGVnZXIgT2JqZWN0c3RyHx8AAFgTAAAAbGlicmFyeS9ybGNvbXBsZXRlcnIgHwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ybGNvbXBsZXRlci5odG1sWDQAAABybGNvbXBsZXRlciDigJQgQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgR05VIHJlYWRsaW5ldHIhHwAAWA0AAABjLWFwaS9tYXBwaW5nciIfAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWxYEAAAAE1hcHBpbmcgUHJvdG9jb2x0ciMfAABYCgAAAGxpYnJhcnkvdXVyJB8AAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXUuaHRtbFgnAAAAdXUg4oCUIEVuY29kZSBhbmQgZGVjb2RlIHV1ZW5jb2RlIGZpbGVzdHIlHwAAWA4AAABsaWJyYXJ5L3JmYzgyMnImHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbFgmAAAAcmZjODIyIOKAlCBQYXJzZSBSRkMgMjgyMiBtYWlsIGhlYWRlcnN0cicfAABYDQAAAGxpYnJhcnkvY3J5cHRyKB8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3J5cHQuaHRtbFgqAAAAY3J5cHQg4oCUIEZ1bmN0aW9uIHRvIGNoZWNrIFVuaXggcGFzc3dvcmRzdHIpHwAAWBQAAAB0dXRvcmlhbC9pbnB1dG91dHB1dHIqHwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbFgQAAAASW5wdXQgYW5kIE91dHB1dHRyKx8AAFgLAAAAYy1hcGkvdHVwbGVyLB8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWxYDQAAAFR1cGxlIE9iamVjdHN0ci0fAABYDQAAAHVzaW5nL2NtZGxpbmVyLh8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbFgcAAAAQ29tbWFuZCBsaW5lIGFuZCBlbnZpcm9ubWVudHRyLx8AAFgMAAAAYy1hcGkvbW9kdWxlcjAfAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbFgOAAAATW9kdWxlIE9iamVjdHN0cjEfAABYDQAAAGluc3RhbGwvaW5kZXhyMh8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbFgqAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHIzHwAAWA8AAAB0dXRvcmlhbC9lcnJvcnNyNB8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Vycm9ycy5odG1sWBUAAABFcnJvcnMgYW5kIEV4Y2VwdGlvbnN0cjUfAABYDQAAAGxpYnJhcnkvZGVidWdyNh8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVidWcuaHRtbFgXAAAARGVidWdnaW5nIGFuZCBQcm9maWxpbmd0cjcfAABYDQAAAGMtYXBpL21hcnNoYWxyOB8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbFgYAAAARGF0YSBtYXJzaGFsbGluZyBzdXBwb3J0dHI5HwAAWA4AAABjLWFwaS9kYXRldGltZXI6HwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbFgQAAAARGF0ZVRpbWUgT2JqZWN0c3RyOx8AAFgPAAAAZXh0ZW5kaW5nL2luZGV4cjwfAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvaW5kZXguaHRtbFguAAAARXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlcnRyPR8AAFgQAAAAbGlicmFyeS93aW5zb3VuZHI+HwAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sWDAAAAB3aW5zb3VuZCDigJQgU291bmQtcGxheWluZyBpbnRlcmZhY2UgZm9yIFdpbmRvd3N0cj8fAABYDQAAAGxpYnJhcnkvY2dpdGJyQB8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpdGIuaHRtbFgrAAAAY2dpdGIg4oCUIFRyYWNlYmFjayBtYW5hZ2VyIGZvciBDR0kgc2NyaXB0c3RyQR8AAFgOAAAAbGlicmFyeS9pbWdoZHJyQh8AAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1naGRyLmh0bWxYKQAAAGltZ2hkciDigJQgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIGltYWdldHJDHwAAWAkAAABjLWFwaS9nZW5yRB8AAChqcwUAAGp0BQAAWCgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2dlbi5odG1sWBEAAABHZW5lcmF0b3IgT2JqZWN0c3RyRR8AAFgQAAAAdHV0b3JpYWwvc3RkbGliMnJGHwAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sWC4AAABCcmllZiBUb3VyIG9mIHRoZSBTdGFuZGFyZCBMaWJyYXJ5IOKAlCBQYXJ0IElJdHJHHwAAWA8AAABsaWJyYXJ5L3NnbWxsaWJySB8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sWB4AAABzZ21sbGliIOKAlCBTaW1wbGUgU0dNTCBwYXJzZXJ0ckkfAABYEAAAAGxpYnJhcnkvY2FsZW5kYXJySh8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbFgvAAAAY2FsZW5kYXIg4oCUIEdlbmVyYWwgY2FsZW5kYXItcmVsYXRlZCBmdW5jdGlvbnN0cksfAABYDAAAAHdoYXRzbmV3LzIuN3JMHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi43dHJNHwAAWA4AAABsaWJyYXJ5L3F1b3ByaXJOHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdW9wcmkuaHRtbFg3AAAAcXVvcHJpIOKAlCBFbmNvZGUgYW5kIGRlY29kZSBNSU1FIHF1b3RlZC1wcmludGFibGUgZGF0YXRyTx8AAFgMAAAAd2hhdHNuZXcvMi41clAfAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbFgaAAAAV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjV0clEfAABYFAAAAGRpc3R1dGlscy9jb21tYW5kcmVmclIfAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1sWBEAAABDb21tYW5kIFJlZmVyZW5jZXRyUx8AAFgMAAAAd2hhdHNuZXcvMi4zclQfAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbFgaAAAAV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjN0clUfAABYDAAAAHdoYXRzbmV3LzIuMnJWHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4yLmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi4ydHJXHwAAWAwAAAB3aGF0c25ldy8yLjFyWB8AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMS5odG1sWBoAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuMXRyWR8AAFgMAAAAd2hhdHNuZXcvMi4wclofAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjAuaHRtbFgaAAAAV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjB0clsfAABYFgAAAGxpYnJhcnkvZW1haWwuZW5jb2RlcnNyXB8AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbFgYAAAAZW1haWwuZW5jb2RlcnM6IEVuY29kZXJzdHJdHwAAWA8AAABsaWJyYXJ5L25udHBsaWJyXh8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sWCAAAABubnRwbGliIOKAlCBOTlRQIHByb3RvY29sIGNsaWVudHRyXx8AAFgRAAAAbGlicmFyeS9mcmFjdGlvbnNyYB8AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWxYHgAAAGZyYWN0aW9ucyDigJQgUmF0aW9uYWwgbnVtYmVyc3RyYR8AAFgTAAAAbGlicmFyeS9maWxlZm9ybWF0c3JiHwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlZm9ybWF0cy5odG1sWAwAAABGaWxlIEZvcm1hdHN0cmMfAABYDgAAAGxpYnJhcnkvYmFzZTY0cmQfAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sWDoAAABiYXNlNjQg4oCUIFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzdHJlHwAAWAsAAAB1c2luZy9pbmRleHJmHwAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvaW5kZXguaHRtbFgWAAAAUHl0aG9uIFNldHVwIGFuZCBVc2FnZXRyZx8AAFgPAAAAbGlicmFyeS9tYWlsYm94cmgfAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbFgzAAAAbWFpbGJveCDigJQgTWFuaXB1bGF0ZSBtYWlsYm94ZXMgaW4gdmFyaW91cyBmb3JtYXRzdHJpHwAAWAsAAABsaWJyYXJ5L3B0eXJqHwAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbFghAAAAcHR5IOKAlCBQc2V1ZG8tdGVybWluYWwgdXRpbGl0aWVzdHJrHwAAWA0AAABsaWJyYXJ5L3N1bmF1cmwfAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWxYJQAAAHN1bmF1IOKAlCBSZWFkIGFuZCB3cml0ZSBTdW4gQVUgZmlsZXN0cm0fAABYDwAAAGxpYnJhcnkvdGVybWlvc3JuHwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWxYIwAAAHRlcm1pb3Mg4oCUIFBPU0lYIHN0eWxlIHR0eSBjb250cm9sdHJvHwAAWAoAAABsaWJyYXJ5L2FscnAfAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWxYIQAAAGFsIOKAlCBBdWRpbyBmdW5jdGlvbnMgb24gdGhlIFNHSXRycR8AAFgNAAAAYy1hcGkvd2Vha3JlZnJyHwAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sWBYAAABXZWFrIFJlZmVyZW5jZSBPYmplY3RzdHJzHwAAWBMAAABleHRlbmRpbmcvZXh0ZW5kaW5ncnQfAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWxYHgAAAEV4dGVuZGluZyBQeXRob24gd2l0aCBDIG9yIEMrK3RydR8AAFgRAAAAcmVmZXJlbmNlL2dyYW1tYXJydh8AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9ncmFtbWFyLmh0bWxYGgAAAEZ1bGwgR3JhbW1hciBzcGVjaWZpY2F0aW9udHJ3HwAAWBAAAABkaXN0dXRpbHMvYXBpcmVmcngfAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWxYDQAAAEFQSSBSZWZlcmVuY2V0cnkfAABYDQAAAGMtYXBpL2NvbXBsZXhyeh8AAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbFgWAAAAQ29tcGxleCBOdW1iZXIgT2JqZWN0c3Ryex8AAFgPAAAAbGlicmFyeS9odG1sbGlicnwfAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbFgnAAAAaHRtbGxpYiDigJQgQSBwYXJzZXIgZm9yIEhUTUwgZG9jdW1lbnRzdHJ9HwAAWA4AAABsaWJyYXJ5L3N5c2xvZ3J+HwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNsb2cuaHRtbFgnAAAAc3lzbG9nIOKAlCBVbml4IHN5c2xvZyBsaWJyYXJ5IHJvdXRpbmVzdHJ/HwAAWBEAAABsaWJyYXJ5L2ZpbGVpbnB1dHKAHwAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbFg8AAAAZmlsZWlucHV0IOKAlCBJdGVyYXRlIG92ZXIgbGluZXMgZnJvbSBtdWx0aXBsZSBpbnB1dCBzdHJlYW1zdHKBHwAAWAsAAABob3d0by9yZWdleHKCHwAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcmVnZXguaHRtbFgYAAAAUmVndWxhciBFeHByZXNzaW9uIEhPV1RPdHKDHwAAWA0AAABjLWFwaS9vYmppbXBscoQfAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmppbXBsLmh0bWxYHQAAAE9iamVjdCBJbXBsZW1lbnRhdGlvbiBTdXBwb3J0dHKFHwAAWA4AAABsaWJyYXJ5L3BpY2tsZXKGHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbFgmAAAAcGlja2xlIOKAlCBQeXRob24gb2JqZWN0IHNlcmlhbGl6YXRpb250cocfAABYDAAAAGxpYnJhcnkvY29kZXKIHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWxYIQAAAGNvZGUg4oCUIEludGVycHJldGVyIGJhc2UgY2xhc3Nlc3RyiR8AAFgLAAAAaG93dG8vaW5kZXhyih8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2luZGV4Lmh0bWxYDQAAAFB5dGhvbiBIT1dUT3N0cosfAABYFAAAAGxpYnJhcnkvZW1haWwuaGVhZGVycowfAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sWCcAAABlbWFpbC5oZWFkZXI6IEludGVybmF0aW9uYWxpemVkIGhlYWRlcnN0co0fAABYDgAAAGxpYnJhcnkvYXRleGl0co4fAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F0ZXhpdC5odG1sWBgAAABhdGV4aXQg4oCUIEV4aXQgaGFuZGxlcnN0co8fAABYEgAAAGxpYnJhcnkvX19mdXR1cmVfX3KQHwAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fX2Z1dHVyZV9fLmh0bWxYKwAAAF9fZnV0dXJlX18g4oCUIEZ1dHVyZSBzdGF0ZW1lbnQgZGVmaW5pdGlvbnN0cpEfAABYDAAAAGxpYnJhcnkvZ2xvYnKSHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbG9iLmh0bWxYLgAAAGdsb2Ig4oCUIFVuaXggc3R5bGUgcGF0aG5hbWUgcGF0dGVybiBleHBhbnNpb250cpMfAABYCwAAAGxpYnJhcnkvbmlzcpQfAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25pcy5odG1sWC8AAABuaXMg4oCUIEludGVyZmFjZSB0byBTdW7igJlzIE5JUyAoWWVsbG93IFBhZ2VzKXRylR8AAFgSAAAAbGlicmFyeS9taW1ld3JpdGVycpYfAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbFgnAAAATWltZVdyaXRlciDigJQgR2VuZXJpYyBNSU1FIGZpbGUgd3JpdGVydHKXHwAAWA0AAABsaWJyYXJ5L3BpcGVzcpgfAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWxYJgAAAHBpcGVzIOKAlCBJbnRlcmZhY2UgdG8gc2hlbGwgcGlwZWxpbmVzdHKZHwAAWA4AAABjLWFwaS9zZXF1ZW5jZXKaHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbFgRAAAAU2VxdWVuY2UgUHJvdG9jb2x0cpsfAABYDAAAAGxpYnJhcnkvaG1hY3KcHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWxYMQAAAGhtYWMg4oCUIEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb250cp0fAABYDAAAAGxpYnJhcnkvanBlZ3KeHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qcGVnLmh0bWxYIgAAAGpwZWcg4oCUIFJlYWQgYW5kIHdyaXRlIEpQRUcgZmlsZXN0cp8fAABYCwAAAGxpYnJhcnkvaW1wcqAfAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sWCMAAABpbXAg4oCUIEFjY2VzcyB0aGUgaW1wb3J0IGludGVybmFsc3RyoR8AAFgMAAAAbGlicmFyeS91c2VycqIfAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXIuaHRtbFgpAAAAdXNlciDigJQgVXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGhvb2t0cqMfAABYDAAAAGxpYnJhcnkvdW5peHKkHwAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml4Lmh0bWxYFgAAAFVuaXggU3BlY2lmaWMgU2VydmljZXN0cqUfAABYEAAAAGluc3RhbGxpbmcvaW5kZXhyph8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGxpbmcvaW5kZXguaHRtbFgZAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlc3Rypx8AAFgLAAAAbGlicmFyeS9tZDVyqB8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWxYJAAAAG1kNSDigJQgTUQ1IG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobXRyqR8AAFgLAAAAYy1hcGkvaW5kZXhyqh8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luZGV4Lmh0bWxYHQAAAFB5dGhvbi9DIEFQSSBSZWZlcmVuY2UgTWFudWFsdHKrHwAAWAkAAABmYXEvaW5kZXhyrB8AAChqcwUAAGp0BQAAWCgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9pbmRleC5odG1sWCEAAABQeXRob24gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnN0cq0fAABYEQAAAGxpYnJhcnkvZGF0YXR5cGVzcq4fAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGF0eXBlcy5odG1sWAoAAABEYXRhIFR5cGVzdHKvHwAAWA8AAABsaWJyYXJ5L3dzZ2lyZWZysB8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sWDcAAAB3c2dpcmVmIOKAlCBXU0dJIFV0aWxpdGllcyBhbmQgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9udHKxHwAAWA8AAABsaWJyYXJ5L21hcnNoYWxysh8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sWDAAAABtYXJzaGFsIOKAlCBJbnRlcm5hbCBQeXRob24gb2JqZWN0IHNlcmlhbGl6YXRpb250crMfAABYDgAAAGxpYnJhcnkvYmluaGV4crQfAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmhleC5odG1sWCoAAABiaW5oZXgg4oCUIEVuY29kZSBhbmQgZGVjb2RlIGJpbmhleDQgZmlsZXN0crUfAABYEQAAAGV4dGVuZGluZy93aW5kb3dzcrYfAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvd2luZG93cy5odG1sWCgAAABCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucyBvbiBXaW5kb3dzdHK3HwAAWBAAAABsaWJyYXJ5L2NvbG9yc3lzcrgfAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWxYLgAAAGNvbG9yc3lzIOKAlCBDb252ZXJzaW9ucyBiZXR3ZWVuIGNvbG9yIHN5c3RlbXN0crkfAABYDgAAAGxpYnJhcnkvYW55ZGJtcrofAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FueWRibS5odG1sWDAAAABhbnlkYm0g4oCUIEdlbmVyaWMgYWNjZXNzIHRvIERCTS1zdHlsZSBkYXRhYmFzZXN0crsfAABYDwAAAGxpYnJhcnkvZmlsZWNtcHK8HwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWxYKgAAAGZpbGVjbXAg4oCUIEZpbGUgYW5kIERpcmVjdG9yeSBDb21wYXJpc29uc3RyvR8AAFgPAAAAbGlicmFyeS93aW5kb3dzcr4fAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbmRvd3MuaHRtbFgcAAAATVMgV2luZG93cyBTcGVjaWZpYyBTZXJ2aWNlc3Ryvx8AAFgMAAAAYy1hcGkvc3RyaW5ncsAfAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbFgUAAAAU3RyaW5nL0J5dGVzIE9iamVjdHN0csEfAABYDgAAAGxpYnJhcnkvc3ltYm9scsIfAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bWJvbC5odG1sWDEAAABzeW1ib2wg4oCUIENvbnN0YW50cyB1c2VkIHdpdGggUHl0aG9uIHBhcnNlIHRyZWVzdHLDHwAAWBYAAABsaWJyYXJ5L3htbC5zYXgucmVhZGVycsQfAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWxYLwAAAHhtbC5zYXgueG1scmVhZGVyIOKAlCBJbnRlcmZhY2UgZm9yIFhNTCBwYXJzZXJzdHLFHwAAWA4AAABsaWJyYXJ5L2N0eXBlc3LGHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbFgwAAAAY3R5cGVzIOKAlCBBIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9udHLHHwAAWA8AAABsaWJyYXJ5L3dlYWtyZWZyyB8AAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sWBsAAAB3ZWFrcmVmIOKAlCBXZWFrIHJlZmVyZW5jZXN0cskfAABYEgAAAGRpc3R1dGlscy9leGFtcGxlc3LKHwAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWxYCAAAAEV4YW1wbGVzdHLLHwAAWBUAAABsaWJyYXJ5L3htbC5zYXgudXRpbHNyzB8AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sWCIAAAB4bWwuc2F4LnNheHV0aWxzIOKAlCBTQVggVXRpbGl0aWVzdHLNHwAAWBAAAABob3d0by9kZXNjcmlwdG9ycs4fAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9kZXNjcmlwdG9yLmh0bWxYFgAAAERlc2NyaXB0b3IgSG93VG8gR3VpZGV0cs8fAABYDwAAAGxpYnJhcnkvZG9jdGVzdHLQHwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWxYLAAAAGRvY3Rlc3Qg4oCUIFRlc3QgaW50ZXJhY3RpdmUgUHl0aG9uIGV4YW1wbGVzdHLRHwAAWA4AAABob3d0by9hcmdwYXJzZXLSHwAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vYXJncGFyc2UuaHRtbFgRAAAAQXJncGFyc2UgVHV0b3JpYWx0ctMfAABYEAAAAHR1dG9yaWFsL3doYXRub3dy1B8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3doYXRub3cuaHRtbFgJAAAAV2hhdCBOb3c/dHLVHwAAWBAAAAB0dXRvcmlhbC9tb2R1bGVzctYfAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9tb2R1bGVzLmh0bWxYBwAAAE1vZHVsZXN0ctcfAABYEAAAAGhvd3RvL3dlYnNlcnZlcnNy2B8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3dlYnNlcnZlcnMuaHRtbFgbAAAASE9XVE8gVXNlIFB5dGhvbiBpbiB0aGUgd2VidHLZHwAAWA0AAABsaWJyYXJ5L3NtdHBkctofAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBkLmh0bWxYFQAAAHNtdHBkIOKAlCBTTVRQIFNlcnZlcnRy2x8AAFgLAAAAbGlicmFyeS9tYWNy3B8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjLmh0bWxYGgAAAE1hYyBPUyBYIHNwZWNpZmljIHNlcnZpY2VzdHLdHwAAWAcAAABsaWNlbnNlct4fAAAoanMFAABqdAUAAFgmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWNlbnNlLmh0bWxYEwAAAEhpc3RvcnkgYW5kIExpY2Vuc2V0ct8fAABYEAAAAGMtYXBpL2Rlc2NyaXB0b3Jy4B8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbFgSAAAARGVzY3JpcHRvciBPYmplY3RzdHLhHwAAWAwAAABjLWFwaS9idWZmZXJy4h8AAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sWB4AAABCdWZmZXJzIGFuZCBNZW1vcnl2aWV3IE9iamVjdHN0cuMfAABYEAAAAGxpYnJhcnkvY29weV9yZWdy5B8AAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weV9yZWcuaHRtbFguAAAAY29weV9yZWcg4oCUIFJlZ2lzdGVyIHBpY2tsZSBzdXBwb3J0IGZ1bmN0aW9uc3Ry5R8AAFgRAAAAbGlicmFyeS9mb3JtYXR0ZXJy5h8AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWxYJwAAAGZvcm1hdHRlciDigJQgR2VuZXJpYyBvdXRwdXQgZm9ybWF0dGluZ3Ry5x8AAFgQAAAAYy1hcGkvY29udmVyc2lvbnLoHwAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sWCAAAABTdHJpbmcgY29udmVyc2lvbiBhbmQgZm9ybWF0dGluZ3Ry6R8AAFgKAAAAbGlicmFyeS90a3LqHwAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ay5odG1sWCEAAABHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VzIHdpdGggVGt0cusfAABYFgAAAGRpc3R1dGlscy9wYWNrYWdlaW5kZXhy7B8AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbFgfAAAAVGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKXRy7R8AAFgLAAAAZmFxL2dlbmVyYWxy7h8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9nZW5lcmFsLmh0bWxYEgAAAEdlbmVyYWwgUHl0aG9uIEZBUXRy7x8AAFgUAAAAbGlicmFyeS9jdXJzZXMucGFuZWxy8B8AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWxYMwAAAGN1cnNlcy5wYW5lbCDigJQgQSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlc3Ry8R8AAFgRAAAAbGlicmFyeS9taW1ldG9vbHNy8h8AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWxYLQAAAG1pbWV0b29scyDigJQgVG9vbHMgZm9yIHBhcnNpbmcgTUlNRSBtZXNzYWdlc3Ry8x8AAFgLAAAAZmFxL2xpYnJhcnly9B8AAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9saWJyYXJ5Lmh0bWxYGQAAAExpYnJhcnkgYW5kIEV4dGVuc2lvbiBGQVF0cvUfAABYDwAAAGxpYnJhcnkvdXJsbGliMnL2HwAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWxYLwAAAHVybGxpYjIg4oCUIGV4dGVuc2libGUgbGlicmFyeSBmb3Igb3BlbmluZyBVUkxzdHL3HwAAWAsAAABjLWFwaS9pbnRyb3L4HwAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbFgMAAAASW50cm9kdWN0aW9udHL5HwAAWBUAAABsaWJyYXJ5L2VtYWlsLmNoYXJzZXRy+h8AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sWCoAAABlbWFpbC5jaGFyc2V0OiBSZXByZXNlbnRpbmcgY2hhcmFjdGVyIHNldHN0cvsfAABYEgAAAGxpYnJhcnkvc3RyaW5ncHJlcHL8HwAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWxYKgAAAHN0cmluZ3ByZXAg4oCUIEludGVybmV0IFN0cmluZyBQcmVwYXJhdGlvbnRy/R8AAFgKAAAAbGlicmFyeS9mbXL+HwAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sWB0AAABmbSDigJQgRm9udCBNYW5hZ2VyIGludGVyZmFjZXRy/x8AAFgKAAAAbGlicmFyeS9mbHIAIAAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sWDIAAABmbCDigJQgRk9STVMgbGlicmFyeSBmb3IgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlc3RyASAAAFgRAAAAbGlicmFyeS90aHJlYWRpbmdyAiAAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWxYLgAAAHRocmVhZGluZyDigJQgSGlnaGVyLWxldmVsIHRocmVhZGluZyBpbnRlcmZhY2V0cgMgAABYDQAAAGhvd3RvL3NvcnRpbmdyBCAAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3NvcnRpbmcuaHRtbFgOAAAAU29ydGluZyBIT1cgVE90cgUgAABYDgAAAGMtYXBpL2NvbmNyZXRlcgYgAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sWBYAAABDb25jcmV0ZSBPYmplY3RzIExheWVydHIHIAAAWAcAAABmYXEvZ3VpcgggAAAoanMFAABqdAUAAFgmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvZ3VpLmh0bWxYGgAAAEdyYXBoaWMgVXNlciBJbnRlcmZhY2UgRkFRdHIJIAAAWBEAAABsaWJyYXJ5L2FyY2hpdmluZ3IKIAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmNoaXZpbmcuaHRtbFgeAAAARGF0YSBDb21wcmVzc2lvbiBhbmQgQXJjaGl2aW5ndHILIAAAWBEAAABsaWJyYXJ5L2xpbmVjYWNoZXIMIAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9saW5lY2FjaGUuaHRtbFgpAAAAbGluZWNhY2hlIOKAlCBSYW5kb20gYWNjZXNzIHRvIHRleHQgbGluZXN0cg0gAABYFgAAAHJlZmVyZW5jZS9zaW1wbGVfc3RtdHNyDiAAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbFgRAAAAU2ltcGxlIHN0YXRlbWVudHN0cg8gAABYEwAAAGxpYnJhcnkvY29sbGVjdGlvbnNyECAAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbFg0AAAAY29sbGVjdGlvbnMg4oCUIEhpZ2gtcGVyZm9ybWFuY2UgY29udGFpbmVyIGRhdGF0eXBlc3RyESAAAFgRAAAAdHV0b3JpYWwvYXBwZW5kaXhyEiAAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWxYCAAAAEFwcGVuZGl4dHITIAAAWAoAAABjLWFwaS9maWxlchQgAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWxYDAAAAEZpbGUgT2JqZWN0c3RyFSAAAFgJAAAAYy1hcGkvc2V0chYgAAAoanMFAABqdAUAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbFgLAAAAU2V0IE9iamVjdHN0chcgAABYCQAAAGMtYXBpL3N5c3IYIAAAKGpzBQAAanQFAABYKAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWxYGgAAAE9wZXJhdGluZyBTeXN0ZW0gVXRpbGl0aWVzdHIZIAAAWAsAAABsaWJyYXJ5L3NnaXIaIAAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ2kuaHRtbFgaAAAAU0dJIElSSVggU3BlY2lmaWMgU2VydmljZXN0chsgAABYDAAAAGxpYnJhcnkvbWlzY3IcIAAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taXNjLmh0bWxYFgAAAE1pc2NlbGxhbmVvdXMgU2VydmljZXN0ch0gAABYDwAAAGhvd3RvL2RvYW5kZG9udHIeIAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vZG9hbmRkb250Lmh0bWxYIAAAAElkaW9tcyBhbmQgQW50aS1JZGlvbXMgaW4gUHl0aG9udHIfIAAAWAwAAABsaWJyYXJ5L3RpbWVyICAAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sWCQAAAB0aW1lIOKAlCBUaW1lIGFjY2VzcyBhbmQgY29udmVyc2lvbnN0ciEgAABYDAAAAGxpYnJhcnkvc3B3ZHIiIAAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcHdkLmh0bWxYJQAAAHNwd2Qg4oCUIFRoZSBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2V0ciMgAABYDgAAAGxpYnJhcnkvcmFuZG9tciQgAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sWCkAAAByYW5kb20g4oCUIEdlbmVyYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyc3RyJSAAAFgWAAAAbGlicmFyeS9iYXNlaHR0cHNlcnZlcnImIAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sWCQAAABCYXNlSFRUUFNlcnZlciDigJQgQmFzaWMgSFRUUCBzZXJ2ZXJ0cicgAABYEwAAAHJlZmVyZW5jZS9kYXRhbW9kZWxyKCAAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbFgKAAAARGF0YSBtb2RlbHRyKSAAAFgdAAAAcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHNyKiAAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWxYFAAAAFRvcC1sZXZlbCBjb21wb25lbnRzdHIrIAAAWBIAAABsaWJyYXJ5L2VtYWlsLnV0aWxyLCAAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbC5odG1sWCQAAABlbWFpbC51dGlsczogTWlzY2VsbGFuZW91cyB1dGlsaXRpZXN0ci0gAABYDQAAAGxpYnJhcnkvYnNkZGJyLiAAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbFgqAAAAYnNkZGIg4oCUIEludGVyZmFjZSB0byBCZXJrZWxleSBEQiBsaWJyYXJ5dHIvIAAAWA8AAABsaWJyYXJ5L2ltYXBsaWJyMCAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sWCEAAABpbWFwbGliIOKAlCBJTUFQNCBwcm90b2NvbCBjbGllbnR0cjEgAABYEwAAAGxpYnJhcnkvcGVyc2lzdGVuY2VyMiAAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGVyc2lzdGVuY2UuaHRtbFgQAAAARGF0YSBQZXJzaXN0ZW5jZXRyMyAAAFgPAAAAbGlicmFyeS9kZWNpbWFscjQgAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbFg9AAAAZGVjaW1hbCDigJQgRGVjaW1hbCBmaXhlZCBwb2ludCBhbmQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpY3RyNSAAAFgQAAAAbGlicmFyeS91cmxwYXJzZXI2IAAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sWCcAAAB1cmxwYXJzZSDigJQgUGFyc2UgVVJMcyBpbnRvIGNvbXBvbmVudHN0cjcgAABYCwAAAGxpYnJhcnkvY2dpcjggAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sWCgAAABjZ2kg4oCUIENvbW1vbiBHYXRld2F5IEludGVyZmFjZSBzdXBwb3J0dHI5IAAAWA4AAABob3d0by9jcG9ydGluZ3I6IAAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3BvcnRpbmcuaHRtbFglAAAAUG9ydGluZyBFeHRlbnNpb24gTW9kdWxlcyB0byBQeXRob24gM3RyOyAAAFgOAAAAYy1hcGkvaXRlcmF0b3JyPCAAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWxYEAAAAEl0ZXJhdG9yIE9iamVjdHN0cj0gAABYFwAAAGxpYnJhcnkvZG9jeG1scnBjc2VydmVycj4gAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sWDMAAABEb2NYTUxSUENTZXJ2ZXIg4oCUIFNlbGYtZG9jdW1lbnRpbmcgWE1MLVJQQyBzZXJ2ZXJ0cj8gAABYEAAAAGxpYnJhcnkvdG9rZW5pemVyQCAAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbFgoAAAAdG9rZW5pemUg4oCUIFRva2VuaXplciBmb3IgUHl0aG9uIHNvdXJjZXRyQSAAAFgVAAAAZGlzdHV0aWxzL3NldHVwc2NyaXB0ckIgAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbFgYAAAAV3JpdGluZyB0aGUgU2V0dXAgU2NyaXB0dHJDIAAAWA4AAABsaWJyYXJ5L3hkcmxpYnJEIAAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbFglAAAAeGRybGliIOKAlCBFbmNvZGUgYW5kIGRlY29kZSBYRFIgZGF0YXRyRSAAAFgNAAAAbGlicmFyeS9mY250bHJGIAAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sWCoAAABmY250bCDigJQgVGhlIGZjbnRsIGFuZCBpb2N0bCBzeXN0ZW0gY2FsbHN0ckcgAABYDgAAAGxpYnJhcnkvc2lnbmFsckggAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sWC8AAABzaWduYWwg4oCUIFNldCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGV2ZW50c3RySSAAAFgQAAAAYy1hcGkvc3RydWN0dXJlc3JKIAAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sWBgAAABDb21tb24gT2JqZWN0IFN0cnVjdHVyZXN0cksgAABYCgAAAGxpYnJhcnkvZ2xyTCAAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbFghAAAAZ2wg4oCUIEdyYXBoaWNzIExpYnJhcnkgaW50ZXJmYWNldHJNIAAAWBEAAABsaWJyYXJ5L3Bvc2l4ZmlsZXJOIAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbFg0AAAAcG9zaXhmaWxlIOKAlCBGaWxlLWxpa2Ugb2JqZWN0cyB3aXRoIGxvY2tpbmcgc3VwcG9ydHRyTyAAAFgOAAAAbGlicmFyeS9zaHV0aWxyUCAAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWxYJQAAAHNodXRpbCDigJQgSGlnaC1sZXZlbCBmaWxlIG9wZXJhdGlvbnN0clEgAABYFwAAAHR1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzclIgAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sWA8AAABEYXRhIFN0cnVjdHVyZXN0clMgAABYEgAAAGxpYnJhcnkvY29udGV4dGxpYnJUIAAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb250ZXh0bGliLmh0bWxYNAAAAGNvbnRleHRsaWIg4oCUIFV0aWxpdGllcyBmb3Igd2l0aC1zdGF0ZW1lbnQgY29udGV4dHN0clUgAABYEAAAAGxpYnJhcnkvYXN5bmNoYXRyViAAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbFg5AAAAYXN5bmNoYXQg4oCUIEFzeW5jaHJvbm91cyBzb2NrZXQgY29tbWFuZC9yZXNwb25zZSBoYW5kbGVydHJXIAAAWAoAAABsaWJyYXJ5L2lvclggAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWxYKgAAAGlvIOKAlCBDb3JlIHRvb2xzIGZvciB3b3JraW5nIHdpdGggc3RyZWFtc3RyWSAAAFgMAAAAbGlicmFyeS9nZGJtclogAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dkYm0uaHRtbFgoAAAAZ2RibSDigJQgR05V4oCZcyByZWludGVycHJldGF0aW9uIG9mIGRibXRyWyAAAFgSAAAAbGlicmFyeS9jb21waWxlYWxsclwgAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbFgsAAAAY29tcGlsZWFsbCDigJQgQnl0ZS1jb21waWxlIFB5dGhvbiBsaWJyYXJpZXN0cl0gAABYEQAAAGxpYnJhcnkvemlwaW1wb3J0cl4gAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sWC4AAAB6aXBpbXBvcnQg4oCUIEltcG9ydCBtb2R1bGVzIGZyb20gWmlwIGFyY2hpdmVzdHJfIAAAWA4AAABjLWFwaS92ZXJ5aGlnaHJgIAAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbFgZAAAAVGhlIFZlcnkgSGlnaCBMZXZlbCBMYXllcnRyYSAAAFgMAAAAYy1hcGkvaW1wb3J0cmIgAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbFgRAAAASW1wb3J0aW5nIE1vZHVsZXN0cmMgAABYDwAAAGxpYnJhcnkvb3MucGF0aHJkIAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWxYKQAAAG9zLnBhdGgg4oCUIENvbW1vbiBwYXRobmFtZSBtYW5pcHVsYXRpb25zdHJlIAAAWA4AAABsaWJyYXJ5L2NvZGVjc3JmIAAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbFgqAAAAY29kZWNzIOKAlCBDb2RlYyByZWdpc3RyeSBhbmQgYmFzZSBjbGFzc2VzdHJnIAAAWBEAAABsaWJyYXJ5L2ZyYW1ld29ya3JoIAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbFgvAAAARnJhbWVXb3JrIOKAlCBJbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbiBmcmFtZXdvcmt0cmkgAABYDgAAAGxpYnJhcnkvYmlzZWN0cmogAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jpc2VjdC5odG1sWCQAAABiaXNlY3Qg4oCUIEFycmF5IGJpc2VjdGlvbiBhbGdvcml0aG10cmsgAABYDgAAAGxpYnJhcnkvbWltaWZ5cmwgAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sWCsAAABtaW1pZnkg4oCUIE1JTUUgcHJvY2Vzc2luZyBvZiBtYWlsIG1lc3NhZ2VzdHJtIAAAWBAAAABsaWJyYXJ5L2RpcmNhY2hlcm4gAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWxYJgAAAGRpcmNhY2hlIOKAlCBDYWNoZWQgZGlyZWN0b3J5IGxpc3RpbmdzdHJvIAAAWBAAAABsaWJyYXJ5L3RleHR3cmFwcnAgAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWxYJgAAAHRleHR3cmFwIOKAlCBUZXh0IHdyYXBwaW5nIGFuZCBmaWxsaW5ndHJxIAAAWBQAAABsaWJyYXJ5L2VtYWlsLmVycm9yc3JyIAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbFgqAAAAZW1haWwuZXJyb3JzOiBFeGNlcHRpb24gYW5kIERlZmVjdCBjbGFzc2VzdHJzIAAAWA8AAABsaWJyYXJ5L2ltYWdlb3BydCAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sWCUAAABpbWFnZW9wIOKAlCBNYW5pcHVsYXRlIHJhdyBpbWFnZSBkYXRhdHJ1IAAAWA4AAABsaWJyYXJ5L21zaWxpYnJ2IAAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbFgzAAAAbXNpbGliIOKAlCBSZWFkIGFuZCB3cml0ZSBNaWNyb3NvZnQgSW5zdGFsbGVyIGZpbGVzdHJ3IAAAWA8AAABsaWJyYXJ5L2F1ZGlvb3ByeCAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sWCUAAABhdWRpb29wIOKAlCBNYW5pcHVsYXRlIHJhdyBhdWRpbyBkYXRhdHJ5IAAAWAwAAABsaWJyYXJ5L3V1aWRyeiAAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sWCsAAAB1dWlkIOKAlCBVVUlEIG9iamVjdHMgYWNjb3JkaW5nIHRvIFJGQyA0MTIydHJ7IAAAWBYAAAByZWZlcmVuY2UvaW50cm9kdWN0aW9ucnwgAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWxYDAAAAEludHJvZHVjdGlvbnRyfSAAAFgXAAAAbGlicmFyeS94bWwuZG9tLnB1bGxkb21yfiAAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWxYOgAAAHhtbC5kb20ucHVsbGRvbSDigJQgU3VwcG9ydCBmb3IgYnVpbGRpbmcgcGFydGlhbCBET00gdHJlZXN0cn8gAABYEAAAAGxpYnJhcnkvcGxpc3RsaWJygCAAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbFg1AAAAcGxpc3RsaWIg4oCUIEdlbmVyYXRlIGFuZCBwYXJzZSBNYWMgT1MgWCAucGxpc3QgZmlsZXN0coEgAABYCwAAAGxpYnJhcnkvYmRicoIgAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sWBoAAABiZGIg4oCUIERlYnVnZ2VyIGZyYW1ld29ya3RygyAAAFgTAAAAZGlzdHV0aWxzL2V4dGVuZGluZ3KEIAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4dGVuZGluZy5odG1sWBMAAABFeHRlbmRpbmcgRGlzdHV0aWxzdHKFIAAAWA8AAABsaWJyYXJ5L3ppcGZpbGVyhiAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sWCIAAAB6aXBmaWxlIOKAlCBXb3JrIHdpdGggWklQIGFyY2hpdmVzdHKHIAAAWA0AAABsaWJyYXJ5L3J1bnB5coggAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3J1bnB5Lmh0bWxYLwAAAHJ1bnB5IOKAlCBMb2NhdGluZyBhbmQgZXhlY3V0aW5nIFB5dGhvbiBtb2R1bGVzdHKJIAAAWA0AAABsaWJyYXJ5L3VuZG9jcoogAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWxYFAAAAFVuZG9jdW1lbnRlZCBNb2R1bGVzdHKLIAAAWBQAAABsaWJyYXJ5L2VtYWlsLnBhcnNlcnKMIAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbFgkAAAAZW1haWwucGFyc2VyOiBQYXJzaW5nIGVtYWlsIG1lc3NhZ2VzdHKNIAAAWA8AAABmYXEvcHJvZ3JhbW1pbmdyjiAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9wcm9ncmFtbWluZy5odG1sWA8AAABQcm9ncmFtbWluZyBGQVF0co8gAABYDAAAAGxpYnJhcnkvaWRsZXKQIAAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pZGxlLmh0bWxYBAAAAElETEV0cpEgAABYEAAAAGxpYnJhcnkvb3B0cGFyc2VykiAAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbFgsAAAAb3B0cGFyc2Ug4oCUIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnN0cpMgAABYFwAAAGxpYnJhcnkveG1sLmRvbS5taW5pZG9tcpQgAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sWC4AAAB4bWwuZG9tLm1pbmlkb20g4oCUIE1pbmltYWwgRE9NIGltcGxlbWVudGF0aW9udHKVIAAAWAwAAABjLWFwaS9vYmplY3RyliAAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sWA8AAABPYmplY3QgUHJvdG9jb2x0cpcgAABYEgAAAGxpYnJhcnkvZnJhbWV3b3Jrc3KYIAAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmtzLmh0bWxYEgAAAFByb2dyYW0gRnJhbWV3b3Jrc3RymSAAAFgNAAAAZmFxL2V4dGVuZGluZ3KaIAAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2V4dGVuZGluZy5odG1sWBcAAABFeHRlbmRpbmcvRW1iZWRkaW5nIEZBUXRymyAAAFgUAAAAbGlicmFyeS9jdXN0b21pbnRlcnBynCAAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3VzdG9taW50ZXJwLmh0bWxYGgAAAEN1c3RvbSBQeXRob24gSW50ZXJwcmV0ZXJzdHKdIAAAWBAAAABsaWJyYXJ5L3dhcm5pbmdzcp4gAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWxYHAAAAHdhcm5pbmdzIOKAlCBXYXJuaW5nIGNvbnRyb2x0cp8gAABYFAAAAGxpYnJhcnkvY3Vyc2VzLmFzY2lpcqAgAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sWC8AAABjdXJzZXMuYXNjaWkg4oCUIFV0aWxpdGllcyBmb3IgQVNDSUkgY2hhcmFjdGVyc3RyoSAAAFgLAAAAbGlicmFyeS9wd2RyoiAAAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHdkLmh0bWxYHQAAAHB3ZCDigJQgVGhlIHBhc3N3b3JkIGRhdGFiYXNldHKjIAAAWAsAAABsaWJyYXJ5L2FzdHKkIAAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbFgdAAAAYXN0IOKAlCBBYnN0cmFjdCBTeW50YXggVHJlZXN0cqUgAABYDgAAAGxpYnJhcnkvdGltZWl0cqYgAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sWDgAAAB0aW1laXQg4oCUIE1lYXN1cmUgZXhlY3V0aW9uIHRpbWUgb2Ygc21hbGwgY29kZSBzbmlwcGV0c3RypyAAAFgMAAAAbGlicmFyeS90ZXN0cqggAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbFgsAAAAdGVzdCDigJQgUmVncmVzc2lvbiB0ZXN0cyBwYWNrYWdlIGZvciBQeXRob250cqkgAABYEQAAAGxpYnJhcnkvZGlzdHV0aWxzcqogAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpc3R1dGlscy5odG1sWDQAAABkaXN0dXRpbHMg4oCUIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIFB5dGhvbiBtb2R1bGVzdHKrIAAAWBAAAABjLWFwaS9hbGxvY2F0aW9ucqwgAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWxYHgAAAEFsbG9jYXRpbmcgT2JqZWN0cyBvbiB0aGUgSGVhcHRyrSAAAFgOAAAAbGlicmFyeS9hZXBhY2tyriAAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWVwYWNrLmh0bWxYTQAAAGFlcGFjayDigJQgQ29udmVyc2lvbiBiZXR3ZWVuIFB5dGhvbiB2YXJpYWJsZXMgYW5kIEFwcGxlRXZlbnQgZGF0YSBjb250YWluZXJzdHKvIAAAWA0AAABjLWFwaS9jb2JqZWN0crAgAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2JqZWN0Lmh0bWxYCAAAAENPYmplY3RzdHKxIAAAWBAAAABjLWFwaS9yZWZsZWN0aW9ucrIgAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWxYCgAAAFJlZmxlY3Rpb250crMgAABYBQAAAGFib3V0crQgAAAoanMFAABqdAUAAFgkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9hYm91dC5odG1sWBUAAABBYm91dCB0aGVzZSBkb2N1bWVudHN0crUgAABYDQAAAGxpYnJhcnkvcmV4ZWNytiAAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbFgoAAAAcmV4ZWMg4oCUIFJlc3RyaWN0ZWQgZXhlY3V0aW9uIGZyYW1ld29ya3RytyAAAFgSAAAAbGlicmFyeS9yZXN0cmljdGVkcrggAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc3RyaWN0ZWQuaHRtbFgUAAAAUmVzdHJpY3RlZCBFeGVjdXRpb250crkgAABYDAAAAGxpYnJhcnkvYWlmY3K6IAAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWxYKwAAAGFpZmMg4oCUIFJlYWQgYW5kIHdyaXRlIEFJRkYgYW5kIEFJRkMgZmlsZXN0crsgAABYDwAAAGxpYnJhcnkvdGFyZmlsZXK8IAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWxYLAAAAHRhcmZpbGUg4oCUIFJlYWQgYW5kIHdyaXRlIHRhciBhcmNoaXZlIGZpbGVzdHK9IAAAWA8AAABob3d0by9weXBvcnRpbmdyviAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3B5cG9ydGluZy5odG1sWCEAAABQb3J0aW5nIFB5dGhvbiAyIENvZGUgdG8gUHl0aG9uIDN0cr8gAABYCgAAAGxpYnJhcnkvaWNywCAAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbFgtAAAAaWMg4oCUIEFjY2VzcyB0byB0aGUgTWFjIE9TIFggSW50ZXJuZXQgQ29uZmlndHLBIAAAWBAAAABsaWJyYXJ5L3VzZXJkaWN0csIgAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWxYMQAAAFVzZXJEaWN0IOKAlCBDbGFzcyB3cmFwcGVyIGZvciBkaWN0aW9uYXJ5IG9iamVjdHN0csMgAABYCwAAAGxpYnJhcnkvZ3JwcsQgAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dycC5odG1sWBoAAABncnAg4oCUIFRoZSBncm91cCBkYXRhYmFzZXRyxSAAAFgNAAAAbGlicmFyeS9tdXRleHLGIAAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdXRleC5odG1sWCIAAABtdXRleCDigJQgTXV0dWFsIGV4Y2x1c2lvbiBzdXBwb3J0dHLHIAAAWBEAAABsaWJyYXJ5L211bHRpZmlsZXLIIAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbFg5AAAAbXVsdGlmaWxlIOKAlCBTdXBwb3J0IGZvciBmaWxlcyBjb250YWluaW5nIGRpc3RpbmN0IHBhcnRzdHLJIAAAWA8AAABsaWJyYXJ5L3N0YXR2ZnNyyiAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sWCwAAABzdGF0dmZzIOKAlCBDb25zdGFudHMgdXNlZCB3aXRoIG9zLnN0YXR2ZnMoKXRyyyAAAFgRAAAAbGlicmFyeS9mdW5jdGlvbnNyzCAAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWxYEgAAAEJ1aWx0LWluIEZ1bmN0aW9uc3RyzSAAAFgJAAAAdXNpbmcvbWFjcs4gAAAoanMFAABqdAUAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9tYWMuaHRtbFgbAAAAVXNpbmcgUHl0aG9uIG9uIGEgTWFjaW50b3NodHLPIAAAWA0AAAB1c2luZy93aW5kb3dzctAgAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy93aW5kb3dzLmh0bWxYFwAAAFVzaW5nIFB5dGhvbiBvbiBXaW5kb3dzdHLRIAAAWBMAAABsaWJyYXJ5L3VuaWNvZGVkYXRhctIgAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWxYIAAAAHVuaWNvZGVkYXRhIOKAlCBVbmljb2RlIERhdGFiYXNldHLTIAAAWAoAAABjLWFwaS9jZWxsctQgAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWxYDAAAAENlbGwgT2JqZWN0c3Ry1SAAAFgPAAAAbGlicmFyeS9hdXRvZ2lsctYgAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1dG9naWwuaHRtbFg7AAAAYXV0b0dJTCDigJQgR2xvYmFsIEludGVycHJldGVyIExvY2sgaGFuZGxpbmcgaW4gZXZlbnQgbG9vcHN0ctcgAABYFgAAAHR1dG9yaWFsL2Zsb2F0aW5ncG9pbnRy2CAAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQuaHRtbFgyAAAARmxvYXRpbmcgUG9pbnQgQXJpdGhtZXRpYzogIElzc3VlcyBhbmQgTGltaXRhdGlvbnN0ctkgAABYCwAAAGxpYnJhcnkvdGl4ctogAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sWCAAAABUaXgg4oCUIEV4dGVuc2lvbiB3aWRnZXRzIGZvciBUa3Ry2yAAAFgMAAAAbGlicmFyeS9qc29uctwgAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbFghAAAAanNvbiDigJQgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVydHLdIAAAWA8AAABjLWFwaS9nY3N1cHBvcnRy3iAAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sWCQAAABTdXBwb3J0aW5nIEN5Y2xpYyBHYXJiYWdlIENvbGxlY3Rpb250ct8gAABYDwAAAGMtYXBpL2J5dGVhcnJheXLgIAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWxYEgAAAEJ5dGUgQXJyYXkgT2JqZWN0c3Ry4SAAAFgQAAAAbGlicmFyeS9kYXRldGltZXLiIAAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sWCYAAABkYXRldGltZSDigJQgQmFzaWMgZGF0ZSBhbmQgdGltZSB0eXBlc3Ry4yAAAFgTAAAAbGlicmFyeS9jb2xvcnBpY2tlcnLkIAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnBpY2tlci5odG1sWCYAAABDb2xvclBpY2tlciDigJQgQ29sb3Igc2VsZWN0aW9uIGRpYWxvZ3Ry5SAAAFgQAAAAbGlicmFyeS9zdHJpbmdpb3LmIAAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sWCwAAABTdHJpbmdJTyDigJQgUmVhZCBhbmQgd3JpdGUgc3RyaW5ncyBhcyBmaWxlc3Ry5yAAAFgLAAAAbGlicmFyeS9jbWRy6CAAAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWxYNgAAAGNtZCDigJQgU3VwcG9ydCBmb3IgbGluZS1vcmllbnRlZCBjb21tYW5kIGludGVycHJldGVyc3Ry6SAAAFgOAAAAbGlicmFyeS9jdXJzZXNy6iAAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWxYOAAAAGN1cnNlcyDigJQgVGVybWluYWwgaGFuZGxpbmcgZm9yIGNoYXJhY3Rlci1jZWxsIGRpc3BsYXlzdHLrIAAAWA0AAABsaWJyYXJ5L2FsbG9zcuwgAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsbG9zLmh0bWxYIQAAAEdlbmVyaWMgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlc3Ry7SAAAFgQAAAAbGlicmFyeS9sYW5ndWFnZXLuIAAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sYW5ndWFnZS5odG1sWBgAAABQeXRob24gTGFuZ3VhZ2UgU2VydmljZXN0cu8gAABYDQAAAGxpYnJhcnkvY21hdGhy8CAAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbFg0AAAAY21hdGgg4oCUIE1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgZm9yIGNvbXBsZXggbnVtYmVyc3Ry8SAAAFgLAAAAYy1hcGkvc2xpY2Vy8iAAAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWxYDQAAAFNsaWNlIE9iamVjdHN0cvMgAABYDAAAAGxpYnJhcnkvd2F2ZXL0IAAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWxYIQAAAHdhdmUg4oCUIFJlYWQgYW5kIHdyaXRlIFdBViBmaWxlc3Ry9SAAAFgKAAAAYy1hcGkvdHlwZXL2IAAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sWAwAAABUeXBlIE9iamVjdHN0cvcgAABYDwAAAHR1dG9yaWFsL3N0ZGxpYnL4IAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWxYIgAAAEJyaWVmIFRvdXIgb2YgdGhlIFN0YW5kYXJkIExpYnJhcnl0cvkgAABYFQAAAHJlZmVyZW5jZS9leHByZXNzaW9uc3L6IAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWxYCwAAAEV4cHJlc3Npb25zdHL7IAAAWAoAAABsaWJyYXJ5L2djcvwgAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWxYIgAAAGdjIOKAlCBHYXJiYWdlIENvbGxlY3RvciBpbnRlcmZhY2V0cv0gAABYDQAAAGMtYXBpL3R5cGVvYmpy/iAAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbFgMAAAAVHlwZSBPYmplY3RzdHL/IAAAWA0AAABsaWJyYXJ5L3RyYWNlcgAhAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWxYMwAAAHRyYWNlIOKAlCBUcmFjZSBvciB0cmFjayBQeXRob24gc3RhdGVtZW50IGV4ZWN1dGlvbnRyASEAAFgTAAAAZGlzdHV0aWxzL3VwbG9hZGluZ3ICIQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3VwbG9hZGluZy5odG1sWCcAAABVcGxvYWRpbmcgUGFja2FnZXMgdG8gdGhlIFBhY2thZ2UgSW5kZXh0cgMhAABYEQAAAGxpYnJhcnkvZnVuY3Rvb2xzcgQhAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sWEcAAABmdW5jdG9vbHMg4oCUIEhpZ2hlci1vcmRlciBmdW5jdGlvbnMgYW5kIG9wZXJhdGlvbnMgb24gY2FsbGFibGUgb2JqZWN0c3RyBSEAAFgUAAAAbGlicmFyeS9zb2NrZXRzZXJ2ZXJyBiEAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWxYMAAAAFNvY2tldFNlcnZlciDigJQgQSBmcmFtZXdvcmsgZm9yIG5ldHdvcmsgc2VydmVyc3RyByEAAFgLAAAAYy1hcGkvZmxvYXRyCCEAAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWxYFgAAAEZsb2F0aW5nIFBvaW50IE9iamVjdHN0cgkhAABYEAAAAGxpYnJhcnkvdGVtcGZpbGVyCiEAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbFg1AAAAdGVtcGZpbGUg4oCUIEdlbmVyYXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXN0cgshAABYDAAAAHdoYXRzbmV3LzIuNnIMIQAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi42dHINIQAAWAsAAABsaWJyYXJ5L3N5c3IOIQAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbFgwAAAAc3lzIOKAlCBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zdHIPIQAAWAwAAABsaWJyYXJ5L21tYXByECEAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sWCMAAABtbWFwIOKAlCBNZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydHRyESEAAFgMAAAAd2hhdHNuZXcvMi40chIhAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjQuaHRtbFgaAAAAV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjR0chMhAABYEAAAAGxpYnJhcnkvYXN5bmNvcmVyFCEAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbFgoAAAAYXN5bmNvcmUg4oCUIEFzeW5jaHJvbm91cyBzb2NrZXQgaGFuZGxlcnRyFSEAAFgPAAAAcmVmZXJlbmNlL2luZGV4chYhAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW5kZXguaHRtbFgdAAAAVGhlIFB5dGhvbiBMYW5ndWFnZSBSZWZlcmVuY2V0chchAABYFwAAAGxpYnJhcnkveG1sLnNheC5oYW5kbGVychghAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sWDEAAAB4bWwuc2F4LmhhbmRsZXIg4oCUIEJhc2UgY2xhc3NlcyBmb3IgU0FYIGhhbmRsZXJzdHIZIQAAWAQAAABidWdzchohAAAoanMFAABqdAUAAFgjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9idWdzLmh0bWxYDgAAAFJlcG9ydGluZyBCdWdzdHIbIQAAWBEAAABsaWJyYXJ5L3N5c2NvbmZpZ3IcIQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbFhEAAAAc3lzY29uZmlnIOKAlCBQcm92aWRlIGFjY2VzcyB0byBQeXRob27igJlzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb250ch0hAABYEAAAAGxpYnJhcnkvX19tYWluX19yHiEAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX19tYWluX18uaHRtbFgpAAAAX19tYWluX18g4oCUIFRvcC1sZXZlbCBzY3JpcHQgZW52aXJvbm1lbnR0ch8hAABYCgAAAGMtYXBpL2NvZGVyICEAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbFgMAAAAQ29kZSBPYmplY3RzdHIhIQAAWBcAAABsaWJyYXJ5L211bHRpcHJvY2Vzc2luZ3IiIQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbFg7AAAAbXVsdGlwcm9jZXNzaW5nIOKAlCBQcm9jZXNzLWJhc2VkIOKAnHRocmVhZGluZ+KAnSBpbnRlcmZhY2V0ciMhAABYEgAAAGV4dGVuZGluZy9uZXd0eXBlc3IkIQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWxYEgAAAERlZmluaW5nIE5ldyBUeXBlc3RyJSEAAFgOAAAAbGlicmFyeS9tYWNvc2FyJiEAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3NhLmh0bWxYFQAAAE1hY1B5dGhvbiBPU0EgTW9kdWxlc3RyJyEAAFgdAAAAbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWVyKCEAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWxYMQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZSDigJQgVGhlIEVsZW1lbnRUcmVlIFhNTCBBUEl0cikhAABYDAAAAGxpYnJhcnkvc2l0ZXIqIQAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWxYKQAAAHNpdGUg4oCUIFNpdGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBob29rdHIrIQAAWBIAAABleHRlbmRpbmcvYnVpbGRpbmdyLCEAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9idWlsZGluZy5odG1sWCwAAABCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucyB3aXRoIGRpc3R1dGlsc3RyLSEAAFgKAAAAYy1hcGkvaW5pdHIuIQAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sWCkAAABJbml0aWFsaXphdGlvbiwgRmluYWxpemF0aW9uLCBhbmQgVGhyZWFkc3RyLyEAAFgIAAAAZ2xvc3NhcnlyMCEAAChqcwUAAGp0BQAAWCcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWxYCAAAAEdsb3NzYXJ5dHIxIQAAWAwAAABsaWJyYXJ5L3NldHNyMiEAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2V0cy5odG1sWDEAAABzZXRzIOKAlCBVbm9yZGVyZWQgY29sbGVjdGlvbnMgb2YgdW5pcXVlIGVsZW1lbnRzdHIzIQAAWA0AAABsaWJyYXJ5L3NobGV4cjQhAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWxYIQAAAHNobGV4IOKAlCBTaW1wbGUgbGV4aWNhbCBhbmFseXNpc3RyNSEAAFgOAAAAd2hhdHNuZXcvaW5kZXhyNiEAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3L2luZGV4Lmh0bWxYFgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob250cjchAABYDgAAAGxpYnJhcnkvZ2V0b3B0cjghAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldG9wdC5odG1sWDIAAABnZXRvcHQg4oCUIEMtc3R5bGUgcGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9uc3RyOSEAAFgOAAAAbGlicmFyeS9weXRob25yOiEAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHl0aG9uLmh0bWxYFwAAAFB5dGhvbiBSdW50aW1lIFNlcnZpY2VzdHI7IQAAWA8AAABsaWJyYXJ5L2hvdHNob3RyPCEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sWC0AAABob3RzaG90IOKAlCBIaWdoIHBlcmZvcm1hbmNlIGxvZ2dpbmcgcHJvZmlsZXJ0cj0hAABYFwAAAGxpYnJhcnkvZW1haWwuaXRlcmF0b3Jzcj4hAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLml0ZXJhdG9ycy5odG1sWBoAAABlbWFpbC5pdGVyYXRvcnM6IEl0ZXJhdG9yc3RyPyEAAFgWAAAAbGlicmFyeS9sb2dnaW5nLmNvbmZpZ3JAIQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sWCgAAABsb2dnaW5nLmNvbmZpZyDigJQgTG9nZ2luZyBjb25maWd1cmF0aW9udHJBIQAAWBAAAABsaWJyYXJ5L3N0ZHR5cGVzckIhAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWxYDgAAAEJ1aWx0LWluIFR5cGVzdHJDIQAAWA8AAABsaWJyYXJ5L3B5ZXhwYXRyRCEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sWDIAAAB4bWwucGFyc2Vycy5leHBhdCDigJQgRmFzdCBYTUwgcGFyc2luZyB1c2luZyBFeHBhdHRyRSEAAFgKAAAAYy1hcGkvbm9uZXJGIQAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbm9uZS5odG1sWA8AAABUaGUgTm9uZSBPYmplY3R0ckchAABYCwAAAGxpYnJhcnkvdHR5ckghAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0eS5odG1sWCIAAAB0dHkg4oCUIFRlcm1pbmFsIGNvbnRyb2wgZnVuY3Rpb25zdHJJIQAAWA0AAABsaWJyYXJ5L2VtYWlsckohAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmh0bWxYLAAAAGVtYWlsIOKAlCBBbiBlbWFpbCBhbmQgTUlNRSBoYW5kbGluZyBwYWNrYWdldHJLIQAAWBIAAABsaWJyYXJ5L2VtYWlsLm1pbWVyTCEAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sWDgAAABlbWFpbC5taW1lOiBDcmVhdGluZyBlbWFpbCBhbmQgTUlNRSBvYmplY3RzIGZyb20gc2NyYXRjaHRyTSEAAFgKAAAAZmFxL2Rlc2lnbnJOIQAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2Rlc2lnbi5odG1sWBYAAABEZXNpZ24gYW5kIEhpc3RvcnkgRkFRdHJPIQAAWAsAAABsaWJyYXJ5L3BkYnJQIQAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbFgbAAAAcGRiIOKAlCBUaGUgUHl0aG9uIERlYnVnZ2VydHJRIQAAWBAAAABob3d0by9mdW5jdGlvbmFsclIhAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9mdW5jdGlvbmFsLmh0bWxYHAAAAEZ1bmN0aW9uYWwgUHJvZ3JhbW1pbmcgSE9XVE90clMhAABYDgAAAGxpYnJhcnkvbWFya3VwclQhAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hcmt1cC5odG1sWCIAAABTdHJ1Y3R1cmVkIE1hcmt1cCBQcm9jZXNzaW5nIFRvb2xzdHJVIQAAWBAAAABsaWJyYXJ5L2FyZ3BhcnNlclYhAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWxYSAAAAGFyZ3BhcnNlIOKAlCBQYXJzZXIgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zLCBhcmd1bWVudHMgYW5kIHN1Yi1jb21tYW5kc3RyVyEAAFgPAAAAbGlicmFyeS9wcm9maWxlclghAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbFgUAAAAVGhlIFB5dGhvbiBQcm9maWxlcnN0clkhAABYDwAAAGxpYnJhcnkvZm5tYXRjaHJaIQAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWxYKgAAAGZubWF0Y2gg4oCUIFVuaXggZmlsZW5hbWUgcGF0dGVybiBtYXRjaGluZ3RyWyEAAFgKAAAAbGlicmFyeS9yZXJcIQAAKGpzBQAAanQFAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sWCQAAAByZSDigJQgUmVndWxhciBleHByZXNzaW9uIG9wZXJhdGlvbnN0cl0hAABYDQAAAGxpYnJhcnkvcXVldWVyXiEAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbFgkAAAAUXVldWUg4oCUIEEgc3luY2hyb25pemVkIHF1ZXVlIGNsYXNzdHJfIQAAWA8AAABsaWJyYXJ5L2ZpbGVzeXNyYCEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZXN5cy5odG1sWBkAAABGaWxlIGFuZCBEaXJlY3RvcnkgQWNjZXNzdHJhIQAAWBMAAABleHRlbmRpbmcvZW1iZWRkaW5ncmIhAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWxYJwAAAEVtYmVkZGluZyBQeXRob24gaW4gQW5vdGhlciBBcHBsaWNhdGlvbnRyYyEAAFgQAAAAbGlicmFyeS9yZXNvdXJjZXJkIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sWCcAAAByZXNvdXJjZSDigJQgUmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb250cmUhAABYCgAAAGxpYnJhcnkvY2RyZiEAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbFgjAAAAY2Qg4oCUIENELVJPTSBhY2Nlc3Mgb24gU0dJIHN5c3RlbXN0cmchAABYFwAAAGxpYnJhcnkvZnV0dXJlX2J1aWx0aW5zcmghAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1dHVyZV9idWlsdGlucy5odG1sWCUAAABmdXR1cmVfYnVpbHRpbnMg4oCUIFB5dGhvbiAzIGJ1aWx0aW5zdHJpIQAAWBgAAABsaWJyYXJ5L3NpbXBsZWh0dHBzZXJ2ZXJyaiEAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sWDAAAABTaW1wbGVIVFRQU2VydmVyIOKAlCBTaW1wbGUgSFRUUCByZXF1ZXN0IGhhbmRsZXJ0cmshAABYFwAAAGxpYnJhcnkvZHVtbXlfdGhyZWFkaW5ncmwhAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bW15X3RocmVhZGluZy5odG1sWEAAAABkdW1teV90aHJlYWRpbmcg4oCUIERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSB0aHJlYWRpbmcgbW9kdWxldHJtIQAAWA8AAABsaWJyYXJ5L3NxbGl0ZTNybiEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sWDUAAABzcWxpdGUzIOKAlCBEQi1BUEkgMi4wIGludGVyZmFjZSBmb3IgU1FMaXRlIGRhdGFiYXNlc3RybyEAAFgTAAAAZGlzdHV0aWxzL2J1aWx0ZGlzdHJwIQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sWBwAAABDcmVhdGluZyBCdWlsdCBEaXN0cmlidXRpb25zdHJxIQAAWA8AAABsaWJyYXJ5L2dldHBhc3NyciEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0cGFzcy5odG1sWCMAAABnZXRwYXNzIOKAlCBQb3J0YWJsZSBwYXNzd29yZCBpbnB1dHRycyEAAFgPAAAAbGlicmFyeS9pbnNwZWN0cnQhAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbFggAAAAaW5zcGVjdCDigJQgSW5zcGVjdCBsaXZlIG9iamVjdHN0cnUhAABYEAAAAGxpYnJhcnkvcmVhZGxpbmVydiEAAChqcwUAAGp0BQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbFgjAAAAcmVhZGxpbmUg4oCUIEdOVSByZWFkbGluZSBpbnRlcmZhY2V0cnchAABYCwAAAGxpYnJhcnkvc3VucnghAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bi5odG1sWBcAAABTdW5PUyBTcGVjaWZpYyBTZXJ2aWNlc3RyeSEAAFgOAAAAbGlicmFyeS9wYXJzZXJyeiEAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWxYJAAAAHBhcnNlciDigJQgQWNjZXNzIFB5dGhvbiBwYXJzZSB0cmVlc3RyeyEAAFgQAAAAbGlicmFyeS9zdW5hdWRpb3J8IQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sWCwAAABzdW5hdWRpb2RldiDigJQgQWNjZXNzIHRvIFN1biBhdWRpbyBoYXJkd2FyZXRyfSEAAFgMAAAAYy1hcGkvbWVtb3J5cn4hAAAoanMFAABqdAUAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbFgRAAAATWVtb3J5IE1hbmFnZW1lbnR0cn8hAABYCgAAAGMtYXBpL2l0ZXJygCEAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXIuaHRtbFgRAAAASXRlcmF0b3IgUHJvdG9jb2x0coEhAABYDwAAAGxpYnJhcnkvYWV0eXBlc3KCIQAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWxYHgAAAGFldHlwZXMg4oCUIEFwcGxlRXZlbnQgb2JqZWN0c3RygyEAAFgPAAAAbGlicmFyeS9iYXN0aW9ucoQhAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc3Rpb24uaHRtbFgpAAAAQmFzdGlvbiDigJQgUmVzdHJpY3RpbmcgYWNjZXNzIHRvIG9iamVjdHN0coUhAABYFwAAAGxpYnJhcnkvZW1haWwuZ2VuZXJhdG9ycoYhAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sWCoAAABlbWFpbC5nZW5lcmF0b3I6IEdlbmVyYXRpbmcgTUlNRSBkb2N1bWVudHN0cochAABYDgAAAGxpYnJhcnkvc29tZW9zcoghAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvbWVvcy5odG1sWCIAAABPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzdHKJIQAAWAoAAABsaWJyYXJ5L2RscoohAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWxYKQAAAGRsIOKAlCBDYWxsIEMgZnVuY3Rpb25zIGluIHNoYXJlZCBvYmplY3RzdHKLIQAAWA4AAABsaWJyYXJ5L3R1cnRsZXKMIQAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbFghAAAAdHVydGxlIOKAlCBUdXJ0bGUgZ3JhcGhpY3MgZm9yIFRrdHKNIQAAWBIAAABsaWJyYXJ5L21hY29zdG9vbHNyjiEAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sWDkAAABtYWNvc3Rvb2xzIOKAlCBDb252ZW5pZW5jZSByb3V0aW5lcyBmb3IgZmlsZSBtYW5pcHVsYXRpb250co8hAABYEQAAAGxpYnJhcnkveG1scnBjbGlicpAhAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sWCMAAAB4bWxycGNsaWIg4oCUIFhNTC1SUEMgY2xpZW50IGFjY2Vzc3RykSEAAFgQAAAAdHV0b3JpYWwvY2xhc3Nlc3KSIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sWAcAAABDbGFzc2VzdHKTIQAAWBIAAABsaWJyYXJ5L3dlYmJyb3dzZXJylCEAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sWDAAAAB3ZWJicm93c2VyIOKAlCBDb252ZW5pZW50IFdlYi1icm93c2VyIGNvbnRyb2xsZXJ0cpUhAABYEwAAAGxpYnJhcnkvcGlja2xldG9vbHNyliEAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbFgrAAAAcGlja2xldG9vbHMg4oCUIFRvb2xzIGZvciBwaWNrbGUgZGV2ZWxvcGVyc3RylyEAAFgNAAAAbGlicmFyeS90eXBlc3KYIQAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sWCIAAAB0eXBlcyDigJQgTmFtZXMgZm9yIGJ1aWx0LWluIHR5cGVzdHKZIQAAWBAAAABsaWJyYXJ5L2NvbW1hbmRzcpohAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWxYKwAAAGNvbW1hbmRzIOKAlCBVdGlsaXRpZXMgZm9yIHJ1bm5pbmcgY29tbWFuZHN0cpshAABYCwAAAGxpYnJhcnkvbmV3cpwhAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sWCwAAABuZXcg4oCUIENyZWF0aW9uIG9mIHJ1bnRpbWUgaW50ZXJuYWwgb2JqZWN0c3RynSEAAFgQAAAAbGlicmFyeS9vdGhlcmd1aXKeIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vdGhlcmd1aS5odG1sWCcAAABPdGhlciBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgUGFja2FnZXN0cp8hAABYDQAAAGhvd3RvL2xvZ2dpbmdyoCEAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbFgNAAAATG9nZ2luZyBIT1dUT3RyoSEAAFgPAAAAbGlicmFyeS9wa2d1dGlscqIhAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbFglAAAAcGtndXRpbCDigJQgUGFja2FnZSBleHRlbnNpb24gdXRpbGl0eXRyoyEAAFgIAAAAY29udGVudHNypCEAAChqcwUAAGp0BQAAWCcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2NvbnRlbnRzLmh0bWxYHQAAAFB5dGhvbiBEb2N1bWVudGF0aW9uIGNvbnRlbnRzdHKlIQAAWBQAAABkaXN0dXRpbHMvc291cmNlZGlzdHKmIQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbFgeAAAAQ3JlYXRpbmcgYSBTb3VyY2UgRGlzdHJpYnV0aW9udHKnIQAAWBAAAABsaWJyYXJ5L2NvbXBpbGVycqghAAAoanMFAABqdAUAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWxYFwAAAFB5dGhvbiBjb21waWxlciBwYWNrYWdldHKpIQAAWAwAAABob3d0by9jdXJzZXNyqiEAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2N1cnNlcy5odG1sWB4AAABDdXJzZXMgUHJvZ3JhbW1pbmcgd2l0aCBQeXRob250cqshAABYDAAAAGxpYnJhcnkvemxpYnKsIQAAKGpzBQAAanQFAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWxYKQAAAHpsaWIg4oCUIENvbXByZXNzaW9uIGNvbXBhdGlibGUgd2l0aCBnemlwdHKtIQAAWBgAAABsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnNyriEAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sWCUAAABsb2dnaW5nLmhhbmRsZXJzIOKAlCBMb2dnaW5nIGhhbmRsZXJzdHKvIQAAWA4AAABsaWJyYXJ5L3N0cnVjdHKwIQAAKGpzBQAAanQFAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbFgyAAAAc3RydWN0IOKAlCBJbnRlcnByZXQgc3RyaW5ncyBhcyBwYWNrZWQgYmluYXJ5IGRhdGF0crEhAABYEgAAAGxpYnJhcnkvaHRtbHBhcnNlcnKyIQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWxYKwAAAEhUTUxQYXJzZXIg4oCUIFNpbXBsZSBIVE1MIGFuZCBYSFRNTCBwYXJzZXJ0crMhAABYDwAAAGxpYnJhcnkvZ2V0dGV4dHK0IQAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWxYNgAAAGdldHRleHQg4oCUIE11bHRpbGluZ3VhbCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzZXJ2aWNlc3RytSEAAFgRAAAAYy1hcGkvcmVmY291bnRpbmdytiEAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWxYEgAAAFJlZmVyZW5jZSBDb3VudGluZ3RytyEAAFgNAAAAZmFxL2luc3RhbGxlZHK4IQAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2luc3RhbGxlZC5odG1sWDEAAADigJxXaHkgaXMgUHl0aG9uIEluc3RhbGxlZCBvbiBteSBDb21wdXRlcj/igJ0gRkFRdHK5IQAAWAoAAAB1c2luZy91bml4crohAAAoanMFAABqdAUAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy91bml4Lmh0bWxYHgAAAFVzaW5nIFB5dGhvbiBvbiBVbml4IHBsYXRmb3Jtc3RyuyEAAFgLAAAAbGlicmFyeS94bWxyvCEAAChqcwUAAGp0BQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmh0bWxYFgAAAFhNTCBQcm9jZXNzaW5nIE1vZHVsZXN0cr0hAABYDgAAAGxpYnJhcnkvbG9jYWxlcr4hAAAoanMFAABqdAUAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sWCgAAABsb2NhbGUg4oCUIEludGVybmF0aW9uYWxpemF0aW9uIHNlcnZpY2VzdHK/IQAAWAsAAABsaWJyYXJ5L2FiY3LAIQAAKGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hYmMuaHRtbFgdAAAAYWJjIOKAlCBBYnN0cmFjdCBCYXNlIENsYXNzZXN0csEhAABYDQAAAGxpYnJhcnkvY2h1bmtywiEAAChqcwUAAGp0BQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbFgfAAAAY2h1bmsg4oCUIFJlYWQgSUZGIGNodW5rZWQgZGF0YXRywyEAAFgNAAAAbGlicmFyeS9pbmRleHLEIQAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbmRleC5odG1sWBsAAABUaGUgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnl0csUhAABYCgAAAGxpYnJhcnkvbW1yxiEAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW0uaHRtbFgTAAAATXVsdGltZWRpYSBTZXJ2aWNlc3RyxyEAAFgRAAAAbGlicmFyeS9jb29raWVsaWJyyCEAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWxYLgAAAGNvb2tpZWxpYiDigJQgQ29va2llIGhhbmRsaW5nIGZvciBIVFRQIGNsaWVudHN0cskhAABYCgAAAGMtYXBpL2Jvb2xyyiEAAChqcwUAAGp0BQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbFgPAAAAQm9vbGVhbiBPYmplY3RzdHLLIQAAWA0AAABsaWJyYXJ5L3Rva2VucswhAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWxYMAAAAHRva2VuIOKAlCBDb25zdGFudHMgdXNlZCB3aXRoIFB5dGhvbiBwYXJzZSB0cmVlc3RyzSEAAFgQAAAAbGlicmFyeS9wbGF0Zm9ybXLOIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sWEAAAABwbGF0Zm9ybSDigJQgIEFjY2VzcyB0byB1bmRlcmx5aW5nIHBsYXRmb3Jt4oCZcyBpZGVudGlmeWluZyBkYXRhdHLPIQAAWAwAAABjLWFwaS9udW1iZXJy0CEAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sWA8AAABOdW1iZXIgUHJvdG9jb2x0ctEhAABYDwAAAGxpYnJhcnkva2V5d29yZHLSIQAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9rZXl3b3JkLmh0bWxYJwAAAGtleXdvcmQg4oCUIFRlc3RpbmcgZm9yIFB5dGhvbiBrZXl3b3Jkc3Ry0yEAAFgQAAAAbGlicmFyeS90YWJuYW5ueXLUIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YWJuYW5ueS5odG1sWC8AAAB0YWJuYW5ueSDigJQgRGV0ZWN0aW9uIG9mIGFtYmlndW91cyBpbmRlbnRhdGlvbnRy1SEAAFgOAAAAbGlicmFyeS9jb2Rlb3By1iEAAChqcwUAAGp0BQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZW9wLmh0bWxYHgAAAGNvZGVvcCDigJQgQ29tcGlsZSBQeXRob24gY29kZXRy1yEAAFgQAAAAbGlicmFyeS91bml0dGVzdHLYIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sWCMAAAB1bml0dGVzdCDigJQgVW5pdCB0ZXN0aW5nIGZyYW1ld29ya3Ry2SEAAFgUAAAAbGlicmFyeS9kdW1teV90aHJlYWRy2iEAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkLmh0bWxYOgAAAGR1bW15X3RocmVhZCDigJQgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHRocmVhZCBtb2R1bGV0ctshAABYCwAAAGZhcS93aW5kb3dzctwhAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvd2luZG93cy5odG1sWBUAAABQeXRob24gb24gV2luZG93cyBGQVF0ct0hAABYCwAAAGxpYnJhcnkvZGlzct4hAAAoanMFAABqdAUAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sWCgAAABkaXMg4oCUIERpc2Fzc2VtYmxlciBmb3IgUHl0aG9uIGJ5dGVjb2RldHLfIQAAWA8AAABsaWJyYXJ5L3htbC5kb21y4CEAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sWCkAAAB4bWwuZG9tIOKAlCBUaGUgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIEFQSXRy4SEAAFgNAAAAbGlicmFyeS9hcnJheXLiIQAAKGpzBQAAanQFAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sWCwAAABhcnJheSDigJQgRWZmaWNpZW50IGFycmF5cyBvZiBudW1lcmljIHZhbHVlc3Ry4yEAAFgQAAAAbGlicmFyeS9vcGVyYXRvcnLkIQAAKGpzBQAAanQFAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sWCwAAABvcGVyYXRvciDigJQgU3RhbmRhcmQgb3BlcmF0b3JzIGFzIGZ1bmN0aW9uc3Ry5SEAAHVYCQAAAHN0ZDp0b2tlbnLmIQAAfXLnIQAAKFgOAAAAbG9uZ3N0cmluZ2l0ZW1y6CEAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1sb25nc3RyaW5naXRlbVgBAAAALXRy6SEAAFgKAAAAaGV4aW50ZWdlcnLqIQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWhleGludGVnZXJYAQAAAC10cushAABYCQAAAHdpdGhfc3RtdHLsIQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi13aXRoX3N0bXRYAQAAAC10cu0hAABYCgAAAGZpZWxkX25hbWVy7iEAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1maWVsZF9uYW1lWAEAAAAtdHLvIQAAWAcAAABsaXN0X2lmcvAhAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxpc3RfaWZYAQAAAC10cvEhAABYCwAAAHNob3J0c3RyaW5ncvIhAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc2hvcnRzdHJpbmdYAQAAAC10cvMhAABYBwAAAHByaW1hcnly9CEAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tcHJpbWFyeVgBAAAALXRy9SEAAFgJAAAAbGlzdF9pdGVycvYhAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxpc3RfaXRlclgBAAAALXRy9yEAAFgKAAAAaW1hZ251bWJlcnL4IQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWltYWdudW1iZXJYAQAAAC10cvkhAABYCwAAAGZsb2F0bnVtYmVycvohAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZmxvYXRudW1iZXJYAQAAAC10cvshAABYDQAAAGNvbXBfb3BlcmF0b3Jy/CEAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcF9vcGVyYXRvclgBAAAALXRy/SEAAFgMAAAAc3Vic2NyaXB0aW9ucv4hAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXN1YnNjcmlwdGlvblgBAAAALXRy/yEAAFgKAAAAcG9pbnRmbG9hdHIAIgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXBvaW50ZmxvYXRYAQAAAC10cgEiAABYCAAAAHhvcl9leHBycgIiAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXhvcl9leHByWAEAAAAtdHIDIgAAWA4AAABvbGRfZXhwcmVzc2lvbnIEIgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1vbGRfZXhwcmVzc2lvblgBAAAALXRyBSIAAFgHAAAAZnVuY2RlZnIGIgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1mdW5jZGVmWAEAAAAtdHIHIgAAWA0AAABhcmd1bWVudF9saXN0cggiAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWFyZ3VtZW50X2xpc3RYAQAAAC10cgkiAABYCgAAAHdoaWxlX3N0bXRyCiIAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4td2hpbGVfc3RtdFgBAAAALXRyCyIAAFgZAAAAYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdHIMIgAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdFgBAAAALXRyDSIAAFgPAAAAZXhwcmVzc2lvbl9saXN0cg4iAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWV4cHJlc3Npb25fbGlzdFgBAAAALXRyDyIAAFgNAAAAY29udGludWVfc3RtdHIQIgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tY29udGludWVfc3RtdFgBAAAALXRyESIAAFgVAAAAZGlyZWN0aXZlX29wdGlvbl9uYW1lchIiAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZV9vcHRpb25fbmFtZVgBAAAALXRyEyIAAFgOAAAAcGFyYW1ldGVyX2xpc3RyFCIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcGFyYW1ldGVyX2xpc3RYAQAAAC10chUiAABYCAAAAG9jdGRpZ2l0chYiAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tb2N0ZGlnaXRYAQAAAC10chciAABYEwAAAG9sZF9leHByZXNzaW9uX2xpc3RyGCIAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb2xkX2V4cHJlc3Npb25fbGlzdFgBAAAALXRyGSIAAFgJAAAAc3RtdF9saXN0choiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXN0bXRfbGlzdFgBAAAALXRyGyIAAFgIAAAAYXJnX25hbWVyHCIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1hcmdfbmFtZVgBAAAALXRyHSIAAFgIAAAAbGlzdF9mb3JyHiIAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdF9mb3JYAQAAAC10ch8iAABYCAAAAGZyYWN0aW9uciAiAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZnJhY3Rpb25YAQAAAC10ciEiAABYCQAAAGV4ZWNfc3RtdHIiIgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZXhlY19zdG10WAEAAAAtdHIjIgAAWAwAAABzdHJpbmdwcmVmaXhyJCIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpbmdwcmVmaXhYAQAAAC10ciUiAABYCAAAAGRlbF9zdG10ciYiAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWxfc3RtdFgBAAAALXRyJyIAAFgKAAAAc2hpZnRfZXhwcnIoIgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zaGlmdF9leHByWAEAAAAtdHIpIgAAWAwAAABsaXN0X2Rpc3BsYXlyKiIAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdF9kaXNwbGF5WAEAAAAtdHIrIgAAWAoAAABmaWxlX2lucHV0ciwiAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2dyYW1tYXItdG9rZW4tZmlsZV9pbnB1dFgBAAAALXRyLSIAAFgHAAAAc3VibGlzdHIuIgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zdWJsaXN0WAEAAAAtdHIvIgAAWAoAAABvY3RpbnRlZ2VycjAiAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tb2N0aW50ZWdlclgBAAAALXRyMSIAAFgEAAAAbmFtZXIyIgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tbmFtZVgBAAAALXRyMyIAAFgJAAAAZW5jbG9zdXJlcjQiAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWVuY2xvc3VyZVgBAAAALXRyNSIAAFgFAAAAd2lkdGhyNiIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi13aWR0aFgBAAAALXRyNyIAAFgQAAAAZXh0ZW5kZWRfc2xpY2luZ3I4IgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1leHRlbmRlZF9zbGljaW5nWAEAAAAtdHI5IgAAWAkAAABzdGF0ZW1lbnRyOiIAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tc3RhdGVtZW50WAEAAAAtdHI7IgAAWAUAAABhdWdvcHI8IgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXVnb3BYAQAAAC10cj0iAABYBwAAAGxpdGVyYWxyPiIAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGl0ZXJhbFgBAAAALXRyPyIAAFgHAAAAc2xpY2luZ3JAIgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljaW5nWAEAAAAtdHJBIgAAWAkAAABwcmVjaXNpb25yQiIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1wcmVjaXNpb25YAQAAAC10ckMiAABYEAAAAHlpZWxkX2V4cHJlc3Npb25yRCIAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4teWllbGRfZXhwcmVzc2lvblgBAAAALXRyRSIAAFgLAAAAaW5oZXJpdGFuY2VyRiIAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taW5oZXJpdGFuY2VYAQAAAC10ckciAABYCwAAAHVwcGVyX2JvdW5kckgiAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXVwcGVyX2JvdW5kWAEAAAAtdHJJIgAAWAcAAABpZl9zdG10ckoiAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWlmX3N0bXRYAQAAAC10cksiAABYCQAAAHRyeTFfc3RtdHJMIgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10cnkxX3N0bXRYAQAAAC10ck0iAABYCQAAAGVzY2FwZXNlcXJOIgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWVzY2FwZXNlcVgBAAAALXRyTyIAAFgJAAAAZGVjb3JhdGVkclAiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWRlY29yYXRlZFgBAAAALXRyUSIAAFgHAAAAaW50ZWdlcnJSIgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWludGVnZXJYAQAAAC10clMiAABYCwAAAHNob3J0X3NsaWNlclQiAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0X3NsaWNlWAEAAAAtdHJVIgAAWAkAAABjbGFzc25hbWVyViIAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tY2xhc3NuYW1lWAEAAAAtdHJXIgAAWAcAAABmZWF0dXJlclgiAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1mZWF0dXJlWAEAAAAtdHJZIgAAWAsAAAByZXR1cm5fc3RtdHJaIgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcmV0dXJuX3N0bXRYAQAAAC10clsiAABYFAAAAGdlbmVyYXRvcl9leHByZXNzaW9uclwiAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWdlbmVyYXRvcl9leHByZXNzaW9uWAEAAAAtdHJdIgAAWAkAAABkaXJlY3RpdmVyXiIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2dyYW1tYXItdG9rZW4tZGlyZWN0aXZlWAEAAAAtdHJfIgAAWAgAAAB0cnlfc3RtdHJgIgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10cnlfc3RtdFgBAAAALXRyYSIAAFgJAAAAY29tcF9pdGVycmIiAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXBfaXRlclgBAAAALXRyYyIAAFgIAAAAZWxsaXBzaXNyZCIAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZWxsaXBzaXNYAQAAAC10cmUiAABYBgAAAG1fZXhwcnJmIgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1tX2V4cHJYAQAAAC10cmciAABYCAAAAGFuZF90ZXN0cmgiAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWFuZF90ZXN0WAEAAAAtdHJpIgAAWAYAAAB1X2V4cHJyaiIAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tdV9leHByWAEAAAAtdHJrIgAAWAUAAABwb3dlcnJsIgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wb3dlclgBAAAALXRybSIAAFgGAAAAdGFyZ2V0cm4iAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10YXJnZXRYAQAAAC10cm8iAABYCgAAAGNvbXBhcmlzb25ycCIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcGFyaXNvblgBAAAALXRycSIAAFgFAAAAZGlnaXRyciIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kaWdpdFgBAAAALXRycyIAAFgKAAAAYmluaW50ZWdlcnJ0IgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWJpbmludGVnZXJYAQAAAC10cnUiAABYBAAAAGNhbGxydiIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY2FsbFgBAAAALXRydyIAAFgJAAAAYXVndGFyZ2V0cngiAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hdWd0YXJnZXRYAQAAAC10cnkiAABYBwAAAG9yX3Rlc3RyeiIAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb3JfdGVzdFgBAAAALXRyeyIAAFgOAAAAYXR0cmlidXRlX25hbWVyfCIAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1hdHRyaWJ1dGVfbmFtZVgBAAAALXRyfSIAAFgEAAAAZmlsbHJ+IgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWZpbGxYAQAAAC10cn8iAABYCgAAAHlpZWxkX2F0b21ygCIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4teWllbGRfYXRvbVgBAAAALXRygSIAAFgJAAAAdHJ5Ml9zdG10coIiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRyeTJfc3RtdFgBAAAALXRygyIAAFgHAAAAb3JfZXhwcnKEIgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1vcl9leHByWAEAAAAtdHKFIgAAWA8AAABzaG9ydHN0cmluZ2l0ZW1yhiIAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zaG9ydHN0cmluZ2l0ZW1YAQAAAC10cociAABYCwAAAGdsb2JhbF9zdG10cogiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1nbG9iYWxfc3RtdFgBAAAALXRyiSIAAFgLAAAAZm9ybWF0X3NwZWNyiiIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1mb3JtYXRfc3BlY1gBAAAALXRyiyIAAFgIAAAAY29tcF9mb3JyjCIAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcF9mb3JYAQAAAC10co0iAABYDAAAAHBhcmVudGhfZm9ybXKOIgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wYXJlbnRoX2Zvcm1YAQAAAC10co8iAABYCgAAAGlkZW50aWZpZXJykCIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1pZGVudGlmaWVyWAEAAAAtdHKRIgAAWAUAAABzdWl0ZXKSIgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zdWl0ZVgBAAAALXRykyIAAFgWAAAAY29uZGl0aW9uYWxfZXhwcmVzc2lvbnKUIgAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1jb25kaXRpb25hbF9leHByZXNzaW9uWAEAAAAtdHKVIgAAWA8AAABleHByZXNzaW9uX3N0bXRyliIAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWV4cHJlc3Npb25fc3RtdFgBAAAALXRylyIAAFgOAAAAZGVjaW1hbGludGVnZXJymCIAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWNpbWFsaW50ZWdlclgBAAAALXRymSIAAFgIAAAAZm9yX3N0bXRymiIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZm9yX3N0bXRYAQAAAC10cpsiAABYDAAAAGluZGV4X3N0cmluZ3KcIgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWluZGV4X3N0cmluZ1gBAAAALXRynSIAAFgMAAAAbm9uemVyb2RpZ2l0cp4iAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tbm9uemVyb2RpZ2l0WAEAAAAtdHKfIgAAWA0AAABzdHJpbmdsaXRlcmFscqAiAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc3RyaW5nbGl0ZXJhbFgBAAAALXRyoSIAAFgNAAAAZXhwb25lbnRmbG9hdHKiIgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWV4cG9uZW50ZmxvYXRYAQAAAC10cqMiAABYCQAAAGxvd2VyY2FzZXKkIgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvd2VyY2FzZVgBAAAALXRypSIAAFgJAAAAZGVjb3JhdG9ycqYiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWRlY29yYXRvclgBAAAALXRypyIAAFgEAAAAdHlwZXKoIgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLXR5cGVYAQAAAC10cqkiAABYFAAAAHBvc2l0aW9uYWxfYXJndW1lbnRzcqoiAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXBvc2l0aW9uYWxfYXJndW1lbnRzWAEAAAAtdHKrIgAAWAsAAABpbnB1dF9pbnB1dHKsIgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNncmFtbWFyLXRva2VuLWlucHV0X2lucHV0WAEAAAAtdHKtIgAAWA8AAABvbGRfbGFtYmRhX2V4cHJyriIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb2xkX2xhbWJkYV9leHByWAEAAAAtdHKvIgAAWBEAAABrZXl3b3JkX2FyZ3VtZW50c3KwIgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1rZXl3b3JkX2FyZ3VtZW50c1gBAAAALXRysSIAAFgRAAAAcmVwbGFjZW1lbnRfZmllbGRysiIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1yZXBsYWNlbWVudF9maWVsZFgBAAAALXRysyIAAFgJAAAAbGNfbGV0dGVycrQiAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjZ3JhbW1hci10b2tlbi1sY19sZXR0ZXJYAQAAAC10crUiAABYDwAAAHNob3J0c3RyaW5nY2hhcnK2IgAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0c3RyaW5nY2hhclgBAAAALXRytyIAAFgFAAAAYWxpZ25yuCIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1hbGlnblgBAAAALXRyuSIAAFgQAAAAZGlyZWN0aXZlX29wdGlvbnK6IgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1kaXJlY3RpdmVfb3B0aW9uWAEAAAAtdHK7IgAAWAgAAABleHBvbmVudHK8IgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWV4cG9uZW50WAEAAAAtdHK9IgAAWAwAAABkaWN0X2Rpc3BsYXlyviIAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZGljdF9kaXNwbGF5WAEAAAAtdHK/IgAAWAoAAABjb252ZXJzaW9ucsAiAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tY29udmVyc2lvblgBAAAALXRywSIAAFgLAAAAbGFtYmRhX2V4cHJywiIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGFtYmRhX2V4cHJYAQAAAC10csMiAABYEQAAAHN0cmluZ19jb252ZXJzaW9ucsQiAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXN0cmluZ19jb252ZXJzaW9uWAEAAAAtdHLFIgAAWA8AAABhc3NpZ25tZW50X3N0bXRyxiIAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWFzc2lnbm1lbnRfc3RtdFgBAAAALXRyxyIAAFgQAAAAZnV0dXJlX3N0YXRlbWVudHLIIgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZnV0dXJlX3N0YXRlbWVudFgBAAAALXRyySIAAFgGAAAAbW9kdWxlcsoiAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1tb2R1bGVYAQAAAC10cssiAABYEQAAAGRpcmVjdGl2ZV9vcHRpb25zcswiAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZV9vcHRpb25zWAEAAAAtdHLNIgAAWAoAAABwcmludF9zdG10cs4iAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1wcmludF9zdG10WAEAAAAtdHLPIgAAWAsAAABsb25naW50ZWdlcnLQIgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdpbnRlZ2VyWAEAAAAtdHLRIgAAWAcAAABpbnRwYXJ0ctIiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taW50cGFydFgBAAAALXRy0yIAAFgJAAAAcGFyYW1ldGVyctQiAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXBhcmFtZXRlclgBAAAALXRy1SIAAFgKAAAAc2xpY2VfaXRlbXLWIgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljZV9pdGVtWAEAAAAtdHLXIgAAWBEAAABpbnRlcmFjdGl2ZV9pbnB1dHLYIgAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNncmFtbWFyLXRva2VuLWludGVyYWN0aXZlX2lucHV0WAEAAAAtdHLZIgAAWAoAAABsb25nX3NsaWNlctoiAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdfc2xpY2VYAQAAAC10ctsiAABYBgAAAHN0cmlkZXLcIgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpZGVYAQAAAC10ct0iAABYCAAAAGNsYXNzZGVmct4iAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNsYXNzZGVmWAEAAAAtdHLfIgAAWAkAAAB1cHBlcmNhc2Vy4CIAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi11cHBlcmNhc2VYAQAAAC10cuEiAABYCQAAAG9uX29yX29mZnLiIgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1vbl9vcl9vZmZYAQAAAC10cuMiAABYEgAAAGRpY3RfY29tcHJlaGVuc2lvbnLkIgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1kaWN0X2NvbXByZWhlbnNpb25YAQAAAC10cuUiAABYDgAAAGtleV9kYXR1bV9saXN0cuYiAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWtleV9kYXR1bV9saXN0WAEAAAAtdHLnIgAAWAQAAABhdG9tcugiAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWF0b21YAQAAAC10cukiAABYBgAAAGxldHRlcnLqIgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxldHRlclgBAAAALXRy6yIAAFgIAAAAaGV4ZGlnaXRy7CIAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1oZXhkaWdpdFgBAAAALXRy7SIAAFgKAAAAbG9uZ3N0cmluZ3LuIgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdzdHJpbmdYAQAAAC10cu8iAABYCgAAAHNsaWNlX2xpc3Ry8CIAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc2xpY2VfbGlzdFgBAAAALXRy8SIAAFgLAAAAbG93ZXJfYm91bmRy8iIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbG93ZXJfYm91bmRYAQAAAC10cvMiAABYDAAAAGtleXdvcmRfaXRlbXL0IgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1rZXl3b3JkX2l0ZW1YAQAAAC10cvUiAABYDAAAAGRlZnBhcmFtZXRlcnL2IgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWZwYXJhbWV0ZXJYAQAAAC10cvciAABYCQAAAHdpdGhfaXRlbXL4IgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi13aXRoX2l0ZW1YAQAAAC10cvkiAABYCgAAAHJhaXNlX3N0bXRy+iIAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXJhaXNlX3N0bXRYAQAAAC10cvsiAABYDQAAAGNvbXByZWhlbnNpb25y/CIAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcHJlaGVuc2lvblgBAAAALXRy/SIAAFgEAAAAc2lnbnL+IgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLXNpZ25YAQAAAC10cv8iAABYCAAAAGZ1bmNuYW1lcgAjAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZ1bmNuYW1lWAEAAAAtdHIBIwAAWAoAAABldmFsX2lucHV0cgIjAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2dyYW1tYXItdG9rZW4tZXZhbF9pbnB1dFgBAAAALXRyAyMAAFgGAAAAYV9leHBycgQjAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWFfZXhwclgBAAAALXRyBSMAAFgOAAAAc2ltcGxlX3NsaWNpbmdyBiMAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc2ltcGxlX3NsaWNpbmdYAQAAAC10cgcjAABYDQAAAGVsZW1lbnRfaW5kZXhyCCMAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1lbGVtZW50X2luZGV4WAEAAAAtdHIJIwAAWAcAAABjb21wX2lmcgojAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXBfaWZYAQAAAC10cgsjAABYCwAAAGRvdHRlZF9uYW1lcgwjAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWRvdHRlZF9uYW1lWAEAAAAtdHINIwAAWAoAAABicmVha19zdG10cg4jAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1icmVha19zdG10WAEAAAAtdHIPIwAAWAgAAABhbmRfZXhwcnIQIwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hbmRfZXhwclgBAAAALXRyESMAAFgKAAAAZGVjb3JhdG9yc3ISIwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWNvcmF0b3JzWAEAAAAtdHITIwAAWAgAAABub3RfdGVzdHIUIwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1ub3RfdGVzdFgBAAAALXRyFSMAAFgJAAAAa2V5X2RhdHVtchYjAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWtleV9kYXR1bVgBAAAALXRyFyMAAFgMAAAAYXR0cmlidXRlcmVmchgjAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWF0dHJpYnV0ZXJlZlgBAAAALXRyGSMAAFgLAAAAdGFyZ2V0X2xpc3RyGiMAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRhcmdldF9saXN0WAEAAAAtdHIbIwAAWAsAAABhc3NlcnRfc3RtdHIcIwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXNzZXJ0X3N0bXRYAQAAAC10ch0jAABYDAAAAHByb3Blcl9zbGljZXIeIwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wcm9wZXJfc2xpY2VYAQAAAC10ch8jAABYCwAAAHNpbXBsZV9zdG10ciAjAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zaW1wbGVfc3RtdFgBAAAALXRyISMAAFgJAAAAcGFzc19zdG10ciIjAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1wYXNzX3N0bXRYAQAAAC10ciMjAABYDwAAAHJlbGF0aXZlX21vZHVsZXIkIwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcmVsYXRpdmVfbW9kdWxlWAEAAAAtdHIlIwAAWBIAAABsaXN0X2NvbXByZWhlbnNpb25yJiMAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdF9jb21wcmVoZW5zaW9uWAEAAAAtdHInIwAAWAoAAAB5aWVsZF9zdG10cigjAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi15aWVsZF9zdG10WAEAAAAtdHIpIwAAWA0AAABjb21wb3VuZF9zdG10ciojAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXBvdW5kX3N0bXRYAQAAAC10cisjAABYCgAAAGV4cHJlc3Npb25yLCMAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZXhwcmVzc2lvblgBAAAALXRyLSMAAFgLAAAAaW1wb3J0X3N0bXRyLiMAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWltcG9ydF9zdG10WAEAAAAtdHIvIwAAWAgAAABiaW5kaWdpdHIwIwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWJpbmRpZ2l0WAEAAAAtdHIxIwAAWAsAAABzZXRfZGlzcGxheXIyIwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zZXRfZGlzcGxheVgBAAAALXRyMyMAAFgOAAAAbG9uZ3N0cmluZ2NoYXJyNCMAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1sb25nc3RyaW5nY2hhclgBAAAALXRyNSMAAHVYCgAAAHN0ZDplbnZ2YXJyNiMAAH1yNyMAAChYCgAAAFBZVEhPTkhPTUVyOCMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OSE9NRVgBAAAALXRyOSMAAFgMAAAAUFlUSE9OQ0FTRU9LcjojAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkNBU0VPS1gBAAAALXRyOyMAAFgRAAAAUFlUSE9OTUFMTE9DU1RBVFNyPCMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OTUFMTE9DU1RBVFNYAQAAAC10cj0jAABYEgAAAFBZVEhPTlNIT1dSRUZDT1VOVHI+IwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TSE9XUkVGQ09VTlRYAQAAAC10cj8jAABYCQAAAFBZVEhPTlkyS3JAIwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05ZMktYAQAAAC10ckEjAABYDQAAAFBZVEhPTlZFUkJPU0VyQiMAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OVkVSQk9TRVgBAAAALXRyQyMAAFgUAAAAUFlUSE9OU0hPV0FMTE9DQ09VTlRyRCMAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OU0hPV0FMTE9DQ09VTlRYAQAAAC10ckUjAABYEQAAAFBZVEhPTkhUVFBTVkVSSUZZckYjAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkhUVFBTVkVSSUZZWAEAAAAtdHJHIwAAWAoAAABQWVRIT05QQVRIckgjAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlBBVEhYAQAAAC10ckkjAABYCwAAAFBZVEhPTkRFQlVHckojAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkRFQlVHWAEAAAAtdHJLIwAAWBEAAABQWVRIT05USFJFQURERUJVR3JMIwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05USFJFQURERUJVR1gBAAAALXRyTSMAAFgQAAAAUFlUSE9ORVhFQ1VUQUJMRXJOIwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05FWEVDVVRBQkxFWAEAAAAtdHJPIwAAWA0AAABQWVRIT05JTlNQRUNUclAjAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTklOU1BFQ1RYAQAAAC10clEjAABYEAAAAFBZVEhPTklPRU5DT0RJTkdyUiMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OSU9FTkNPRElOR1gBAAAALXRyUyMAAFgOAAAAUFlUSE9ORFVNUFJFRlNyVCMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9ORFVNUFJFRlNYAQAAAC10clUjAABYDgAAAFBZVEhPTk9QVElNSVpFclYjAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTk9QVElNSVpFWAEAAAAtdHJXIwAAWA4AAABQWVRIT05XQVJOSU5HU3JYIwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05XQVJOSU5HU1gBAAAALXRyWSMAAFgQAAAAUFlUSE9OVU5CVUZGRVJFRHJaIwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05VTkJVRkZFUkVEWAEAAAAtdHJbIwAAWBcAAABQWVRIT05ET05UV1JJVEVCWVRFQ09ERXJcIwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05ET05UV1JJVEVCWVRFQ09ERVgBAAAALXRyXSMAAFgNAAAAUFlUSE9OU1RBUlRVUHJeIwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TVEFSVFVQWAEAAAAtdHJfIwAAWA4AAABQWVRIT05VU0VSQkFTRXJgIwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05VU0VSQkFTRVgBAAAALXRyYSMAAFgQAAAAUFlUSE9OTk9VU0VSU0lURXJiIwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05OT1VTRVJTSVRFWAEAAAAtdHJjIwAAWA4AAABQWVRIT05IQVNIU0VFRHJkIwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05IQVNIU0VFRFgBAAAALXRyZSMAAHVYDgAAAHB5OmNsYXNzbWV0aG9kcmYjAAB9cmcjAAAoWB0AAABpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVyYWJsZXJoIwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVyYWJsZVgBAAAALXRyaSMAAFgZAAAAZGF0ZXRpbWUuZGF0ZS5mcm9tb3JkaW5hbHJqIwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuZnJvbW9yZGluYWxYAQAAAC10cmsjAABYFwAAAGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5cmwjAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXlYAQAAAC10cm0jAABYGQAAAGRhdGV0aW1lLmRhdGV0aW1lLmNvbWJpbmVybiMAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5jb21iaW5lWAEAAAAtdHJvIwAAWBUAAABkYXRldGltZS5kYXRldGltZS5ub3dycCMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5ub3dYAQAAAC10cnEjAABYEwAAAGRhdGV0aW1lLmRhdGUudG9kYXlyciMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRvZGF5WAEAAAAtdHJzIwAAWBQAAAB0YXJmaWxlLlRhckZpbGUub3BlbnJ0IwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLm9wZW5YAQAAAC10cnUjAABYHwAAAGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXBydiMAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wWAEAAAAtdHJ3IwAAWBsAAABkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXByeCMAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXBYAQAAAC10cnkjAABYGgAAAGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lcnojAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWVYAQAAAC10cnsjAABYHQAAAGRhdGV0aW1lLmRhdGV0aW1lLmZyb21vcmRpbmFscnwjAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbW9yZGluYWxYAQAAAC10cn0jAABYIAAAAGNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9tYWtlcn4jAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX21ha2VYAQAAAC10cn8jAABYGAAAAGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vd3KAIwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnV0Y25vd1gBAAAALXRygSMAAFgiAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcHKCIwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXBYAQAAAC10coMjAAB1WAoAAABzdGQ6b3Bjb2RlcoQjAAB9coUjAAAoWA0AAABCSU5BUllfRElWSURFcoYjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfRElWSURFWAEAAAAtdHKHIwAAWAMAAABOT1ByiCMAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLU5PUFgBAAAALXRyiSMAAFgKAAAAQklOQVJZX0FORHKKIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX0FORFgBAAAALXRyiyMAAFgIAAAARk9SX0lURVJyjCMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUZPUl9JVEVSWAEAAAAtdHKNIwAAWBMAAABJTlBMQUNFX1RSVUVfRElWSURFco4jAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1RSVUVfRElWSURFWAEAAAAtdHKPIwAAWA0AAABQUklOVF9ORVdMSU5FcpAjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9ORVdMSU5FWAEAAAAtdHKRIwAAWAsAAABJTlBMQUNFX1hPUnKSIwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9YT1JYAQAAAC10cpMjAABYCAAAAEdFVF9JVEVScpQjAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1HRVRfSVRFUlgBAAAALXRylSMAAFgNAAAAQklOQVJZX1JTSElGVHKWIwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1JTSElGVFgBAAAALXRylyMAAFgKAAAASU5QTEFDRV9PUnKYIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9PUlgBAAAALXRymSMAAFgJAAAAUk9UX1RIUkVFcpojAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ST1RfVEhSRUVYAQAAAC10cpsjAABYCQAAAFNUT1BfQ09ERXKcIwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUF9DT0RFWAEAAAAtdHKdIwAAWAoAAABTVE9SRV9OQU1Fcp4jAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9OQU1FWAEAAAAtdHKfIwAAWBEAAABDQUxMX0ZVTkNUSU9OX1ZBUnKgIwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ0FMTF9GVU5DVElPTl9WQVJYAQAAAC10cqEjAABYDgAAAERFTEVURV9TTElDRSsycqIjAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfU0xJQ0UrMlgBAAAALXRyoyMAAFgOAAAAREVMRVRFX1NMSUNFKzNypCMAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9TTElDRSszWAEAAAAtdHKlIwAAWA4AAABERUxFVEVfU0xJQ0UrMHKmIwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX1NMSUNFKzBYAQAAAC10cqcjAABYDgAAAERFTEVURV9TTElDRSsxcqgjAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfU0xJQ0UrMVgBAAAALXRyqSMAAFgKAAAAU0VUVVBfV0lUSHKqIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUVVBfV0lUSFgBAAAALXRyqyMAAFgTAAAAQklOQVJZX0ZMT09SX0RJVklERXKsIwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX0ZMT09SX0RJVklERVgBAAAALXRyrSMAAFgUAAAASlVNUF9JRl9GQUxTRV9PUl9QT1ByriMAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUpVTVBfSUZfRkFMU0VfT1JfUE9QWAEAAAAtdHKvIwAAWA4AAABVTkFSWV9QT1NJVElWRXKwIwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfUE9TSVRJVkVYAQAAAC10crEjAABYEgAAAEJJTkFSWV9UUlVFX0RJVklERXKyIwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1RSVUVfRElWSURFWAEAAAAtdHKzIwAAWA0AAABQUklOVF9JVEVNX1RPcrQjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9JVEVNX1RPWAEAAAAtdHK1IwAAWAwAAABFWFRFTkRFRF9BUkdytiMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUVYVEVOREVEX0FSR1gBAAAALXRytyMAAFgUAAAAQ0FMTF9GVU5DVElPTl9WQVJfS1dyuCMAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNBTExfRlVOQ1RJT05fVkFSX0tXWAEAAAAtdHK5IwAAWAsAAABERUxFVEVfTkFNRXK6IwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX05BTUVYAQAAAC10crsjAABYCgAAAEJJTkFSWV9YT1JyvCMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9YT1JYAQAAAC10cr0jAABYEAAAAElOUExBQ0VfU1VCVFJBQ1RyviMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfU1VCVFJBQ1RYAQAAAC10cr8jAABYDAAAAFNUT1JFX0dMT0JBTHLAIwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfR0xPQkFMWAEAAAAtdHLBIwAAWA0AAABDQUxMX0ZVTkNUSU9OcsIjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1DQUxMX0ZVTkNUSU9OWAEAAAAtdHLDIwAAWAcAAABTTElDRSszcsQjAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TTElDRSszWAEAAAAtdHLFIwAAWAcAAABTTElDRSsycsYjAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TTElDRSsyWAEAAAAtdHLHIwAAWAcAAABTTElDRSsxcsgjAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TTElDRSsxWAEAAAAtdHLJIwAAWA0AAABERUxFVEVfR0xPQkFMcsojAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfR0xPQkFMWAEAAAAtdHLLIwAAWAoAAABTVE9SRV9BVFRScswjAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9BVFRSWAEAAAAtdHLNIwAAWAwAAABMT0FEX0NMT1NVUkVyziMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfQ0xPU1VSRVgBAAAALXRyzyMAAFgIAAAAUk9UX0ZPVVJy0CMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVJPVF9GT1VSWAEAAAAtdHLRIwAAWBAAAABQT1BfSlVNUF9JRl9UUlVFctIjAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfSlVNUF9JRl9UUlVFWAEAAAAtdHLTIwAAWA0AAABCSU5BUllfTFNISUZUctQjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfTFNISUZUWAEAAAAtdHLVIwAAWAsAAABCVUlMRF9TTElDRXLWIwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfU0xJQ0VYAQAAAC10ctcjAABYDQAAAFJBSVNFX1ZBUkFSR1Ny2CMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVJBSVNFX1ZBUkFSR1NYAQAAAC10ctkjAABYCwAAAEVORF9GSU5BTExZctojAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1FTkRfRklOQUxMWVgBAAAALXRy2yMAAFgKAAAAUFJJTlRfRVhQUnLcIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUFJJTlRfRVhQUlgBAAAALXRy3SMAAFgNAAAAVU5BUllfQ09OVkVSVHLeIwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfQ09OVkVSVFgBAAAALXRy3yMAAFgKAAAAQ09NUEFSRV9PUHLgIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ09NUEFSRV9PUFgBAAAALXRy4SMAAFgKAAAATE9BRF9DT05TVHLiIwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9DT05TVFgBAAAALXRy4yMAAFgLAAAATElTVF9BUFBFTkRy5CMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxJU1RfQVBQRU5EWAEAAAAtdHLlIwAAWAoAAABTRVRVUF9MT09QcuYjAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TRVRVUF9MT09QWAEAAAAtdHLnIwAAWAsAAABZSUVMRF9WQUxVRXLoIwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtWUlFTERfVkFMVUVYAQAAAC10cukjAABYDAAAAEJJTkFSWV9QT1dFUnLqIwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1BPV0VSWAEAAAAtdHLrIwAAWAoAAABQUklOVF9JVEVNcuwjAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9JVEVNWAEAAAAtdHLtIwAAWAkAAABFWEVDX1NUTVRy7iMAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUVYRUNfU1RNVFgBAAAALXRy7yMAAFgNAAAAU0VUVVBfRklOQUxMWXLwIwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUVVBfRklOQUxMWVgBAAAALXRy8SMAAFgPAAAAQklOQVJZX01VTFRJUExZcvIjAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfTVVMVElQTFlYAQAAAC10cvMjAABYDwAAAFVOUEFDS19TRVFVRU5DRXL0IwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5QQUNLX1NFUVVFTkNFWAEAAAAtdHL1IwAAWA0AAABCSU5BUllfTU9EVUxPcvYjAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfTU9EVUxPWAEAAAAtdHL3IwAAWBQAAABJTlBMQUNFX0ZMT09SX0RJVklERXL4IwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9GTE9PUl9ESVZJREVYAQAAAC10cvkjAABYDwAAAEJJTkFSWV9TVUJUUkFDVHL6IwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlRSQUNUWAEAAAAtdHL7IwAAWAsAAABJTVBPUlRfTkFNRXL8IwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU1QT1JUX05BTUVYAQAAAC10cv0jAABYCQAAAExPQURfQVRUUnL+IwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9BVFRSWAEAAAAtdHL/IwAAWAoAAABMT0FEX0RFUkVGcgAkAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0RFUkVGWAEAAAAtdHIBJAAAWA0AAABKVU1QX0FCU09MVVRFcgIkAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1KVU1QX0FCU09MVVRFWAEAAAAtdHIDJAAAWBAAAABDQUxMX0ZVTkNUSU9OX0tXcgQkAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1DQUxMX0ZVTkNUSU9OX0tXWAEAAAAtdHIFJAAAWA4AAABJTlBMQUNFX0RJVklERXIGJAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9ESVZJREVYAQAAAC10cgckAABYCwAAAElNUE9SVF9GUk9NcggkAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTVBPUlRfRlJPTVgBAAAALXRyCSQAAFgHAAAARFVQX1RPUHIKJAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRFVQX1RPUFgBAAAALXRyCyQAAFgLAAAAREVMRVRFX0ZBU1RyDCQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9GQVNUWAEAAAAtdHINJAAAWAsAAABJTVBPUlRfU1RBUnIOJAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU1QT1JUX1NUQVJYAQAAAC10cg8kAABYEAAAAFBSSU5UX05FV0xJTkVfVE9yECQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBSSU5UX05FV0xJTkVfVE9YAQAAAC10chEkAABYDQAAAFNUT1JFX1NMSUNFKzJyEiQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX1NMSUNFKzJYAQAAAC10chMkAABYCwAAAExPQURfTE9DQUxTchQkAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0xPQ0FMU1gBAAAALXRyFSQAAFgNAAAAQ09OVElOVUVfTE9PUHIWJAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ09OVElOVUVfTE9PUFgBAAAALXRyFyQAAFgMAAAAV0lUSF9DTEVBTlVQchgkAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1XSVRIX0NMRUFOVVBYAQAAAC10chkkAABYDgAAAFVOQVJZX05FR0FUSVZFchokAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1VTkFSWV9ORUdBVElWRVgBAAAALXRyGyQAAFgQAAAASU5QTEFDRV9NVUxUSVBMWXIcJAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9NVUxUSVBMWVgBAAAALXRyHSQAAFgRAAAAUE9QX0pVTVBfSUZfRkFMU0VyHiQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBPUF9KVU1QX0lGX0ZBTFNFWAEAAAAtdHIfJAAAWAcAAABQT1BfVE9QciAkAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfVE9QWAEAAAAtdHIhJAAAWAkAAABTVE9SRV9NQVByIiQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX01BUFgBAAAALXRyIyQAAFgLAAAAREVMRVRFX0FUVFJyJCQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9BVFRSWAEAAAAtdHIlJAAAWA4AAABJTlBMQUNFX0xTSElGVHImJAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9MU0hJRlRYAQAAAC10cickAABYCgAAAFNUT1JFX0ZBU1RyKCQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0ZBU1RYAQAAAC10cikkAABYDgAAAElOUExBQ0VfUlNISUZUciokAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1JTSElGVFgBAAAALXRyKyQAAFgMAAAAVU5BUllfSU5WRVJUciwkAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1VTkFSWV9JTlZFUlRYAQAAAC10ci0kAABYDAAAAEpVTVBfRk9SV0FSRHIuJAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSlVNUF9GT1JXQVJEWAEAAAAtdHIvJAAAWA0AAABTVE9SRV9TTElDRSswcjAkAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9TTElDRSswWAEAAAAtdHIxJAAAWAsAAABCVUlMRF9UVVBMRXIyJAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfVFVQTEVYAQAAAC10cjMkAABYDQAAAERFTEVURV9TVUJTQ1JyNCQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9TVUJTQ1JYAQAAAC10cjUkAABYDgAAAElOUExBQ0VfTU9EVUxPcjYkAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX01PRFVMT1gBAAAALXRyNyQAAFgNAAAAU1RPUkVfU0xJQ0UrM3I4JAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfU0xJQ0UrM1gBAAAALXRyOSQAAFgNAAAATUFLRV9GVU5DVElPTnI6JAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTUFLRV9GVU5DVElPTlgBAAAALXRyOyQAAFgNAAAAU1RPUkVfU0xJQ0UrMXI8JAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfU0xJQ0UrMVgBAAAALXRyPSQAAFgHAAAAU0xJQ0UrMHI+JAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0xJQ0UrMFgBAAAALXRyPyQAAFgNAAAAQklOQVJZX1NVQlNDUnJAJAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlNDUlgBAAAALXRyQSQAAFgLAAAAU1RPUkVfREVSRUZyQiQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0RFUkVGWAEAAAAtdHJDJAAAWAwAAABTVE9SRV9TVUJTQ1JyRCQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX1NVQlNDUlgBAAAALXRyRSQAAFgKAAAAQklOQVJZX0FERHJGJAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX0FERFgBAAAALXRyRyQAAFgMAAAATUFLRV9DTE9TVVJFckgkAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1NQUtFX0NMT1NVUkVYAQAAAC10ckkkAABYCQAAAFBPUF9CTE9DS3JKJAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUE9QX0JMT0NLWAEAAAAtdHJLJAAAWAsAAABJTlBMQUNFX0FORHJMJAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9BTkRYAQAAAC10ck0kAABYCQAAAFVOQVJZX05PVHJOJAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfTk9UWAEAAAAtdHJPJAAAWAkAAABMT0FEX0ZBU1RyUCQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfRkFTVFgBAAAALXRyUSQAAFgLAAAAQlVJTERfQ0xBU1NyUiQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX0NMQVNTWAEAAAAtdHJTJAAAWAwAAABSRVRVUk5fVkFMVUVyVCQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVJFVFVSTl9WQUxVRVgBAAAALXRyVSQAAFgNAAAASEFWRV9BUkdVTUVOVHJWJAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSEFWRV9BUkdVTUVOVFgBAAAALXRyVyQAAFgKAAAAQlJFQUtfTE9PUHJYJAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlJFQUtfTE9PUFgBAAAALXRyWSQAAFgHAAAAUk9UX1RXT3JaJAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUk9UX1RXT1gBAAAALXRyWyQAAFgIAAAARFVQX1RPUFhyXCQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURVUF9UT1BYWAEAAAAtdHJdJAAAWAoAAABCVUlMRF9MSVNUcl4kAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CVUlMRF9MSVNUWAEAAAAtdHJfJAAAWBMAAABKVU1QX0lGX1RSVUVfT1JfUE9QcmAkAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1KVU1QX0lGX1RSVUVfT1JfUE9QWAEAAAAtdHJhJAAAWAkAAABMT0FEX05BTUVyYiQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfTkFNRVgBAAAALXRyYyQAAFgLAAAATE9BRF9HTE9CQUxyZCQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfR0xPQkFMWAEAAAAtdHJlJAAAWAsAAABJTlBMQUNFX0FERHJmJAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9BRERYAQAAAC10cmckAABYCQAAAEJJTkFSWV9PUnJoJAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX09SWAEAAAAtdHJpJAAAWAwAAABTRVRVUF9FWENFUFRyaiQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNFVFVQX0VYQ0VQVFgBAAAALXRyayQAAFgJAAAAQlVJTERfU0VUcmwkAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CVUlMRF9TRVRYAQAAAC10cm0kAABYCQAAAEJVSUxEX01BUHJuJAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfTUFQWAEAAAAtdHJvJAAAWAoAAABTRVRfTElORU5PcnAkAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TRVRfTElORU5PWAEAAAAtdHJxJAAAWA0AAABJTlBMQUNFX1BPV0VScnIkAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1BPV0VSWAEAAAAtdHJzJAAAdVgIAAAAYzptZW1iZXJydCQAAH1ydSQAAChYFQAAAFB5VHlwZU9iamVjdC50cF9wcmludHJ2JAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3ByaW50WAEAAAAtdHJ3JAAAWBsAAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9jb25jYXRyeCQAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbmNhdFgBAAAALXRyeSQAAFgOAAAAdHBfYXNfc2VxdWVuY2VyeiQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLnRwX2FzX3NlcXVlbmNlWAEAAAAtdHJ7JAAAWBgAAABQeVR5cGVPYmplY3QudHBfaXRlcm5leHRyfCQAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pdGVybmV4dFgBAAAALXRyfSQAAFgjAAAAUHlTZXF1ZW5jZU1ldGhvZHMuc3FfaW5wbGFjZV9jb25jYXRyfiQAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfY29uY2F0WAEAAAAtdHJ/JAAAWBQAAABQeV9idWZmZXIuc3Vib2Zmc2V0c3KAJAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuc3Vib2Zmc2V0c1gBAAAALXRygSQAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX3NldGF0dHJygiQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zZXRhdHRyWAEAAAAtdHKDJAAAWBsAAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9sZW5ndGhyhCQAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2xlbmd0aFgBAAAALXRyhSQAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NyhiQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZWFsbG9jWAEAAAAtdHKHJAAAWBsAAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9yZXBlYXRyiCQAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX3JlcGVhdFgBAAAALXRyiSQAAFgSAAAAUHlfYnVmZmVyLmludGVybmFscookAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5pbnRlcm5hbFgBAAAALXRyiyQAAFgZAAAAUHlUeXBlT2JqZWN0LnRwX2Rlc2NyX2dldHKMJAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Rlc2NyX2dldFgBAAAALXRyjSQAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX2ZyZWVyjiQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mcmVlWAEAAAAtdHKPJAAAWBcAAABQeVR5cGVPYmplY3QudHBfbWV0aG9kc3KQJAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21ldGhvZHNYAQAAAC10cpEkAABYHQAAAFB5TWFwcGluZ01ldGhvZHMubXBfc3Vic2NyaXB0cpIkAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU1hcHBpbmdNZXRob2RzLm1wX3N1YnNjcmlwdFgBAAAALXRykyQAAFgTAAAAUHlUeXBlT2JqZWN0LnRwX21yb3KUJAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21yb1gBAAAALXRylSQAAFgMAAAAdHBfYXNfbnVtYmVycpYkAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy50cF9hc19udW1iZXJYAQAAAC10cpckAABYIwAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfcmVwZWF0cpgkAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kcy5zcV9pbnBsYWNlX3JlcGVhdFgBAAAALXRymSQAAFghAAAAUHlNYXBwaW5nTWV0aG9kcy5tcF9hc3Nfc3Vic2NyaXB0cpokAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU1hcHBpbmdNZXRob2RzLm1wX2Fzc19zdWJzY3JpcHRYAQAAAC10cpskAABYFQAAAFB5VHlwZU9iamVjdC50cF9hbGxvY3KcJAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2FsbG9jWAEAAAAtdHKdJAAAWBUAAABQeVR5cGVPYmplY3QudHBfZmxhZ3NyniQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mbGFnc1gBAAAALXRynyQAAFgeAAAAUHlUeXBlT2JqZWN0LnRwX3dlYWtsaXN0b2Zmc2V0cqAkAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfd2Vha2xpc3RvZmZzZXRYAQAAAC10cqEkAABYGQAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW1yoiQAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW1YAQAAAC10cqMkAABYDQAAAFB5X2J1ZmZlci5idWZypCQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLmJ1ZlgBAAAALXRypSQAAFgdAAAAUHlTZXF1ZW5jZU1ldGhvZHMuc3FfYXNzX2l0ZW1ypiQAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2Fzc19pdGVtWAEAAAAtdHKnJAAAWBQAAABQeVR5cGVPYmplY3QudHBfZGljdHKoJAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2RpY3RYAQAAAC10cqkkAABYGQAAAFB5TnVtYmVyTWV0aG9kcy5uYl9jb2VyY2VyqiQAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9jb2VyY2VYAQAAAC10cqskAABYEgAAAFB5X2J1ZmZlci5pdGVtc2l6ZXKsJAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuaXRlbXNpemVYAQAAAC10cq0kAABYFAAAAFB5VHlwZU9iamVjdC50cF9uYW1lcq4kAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbmFtZVgBAAAALXRyryQAAFgbAAAAUHlUeXBlT2JqZWN0LnRwX3JpY2hjb21wYXJlcrAkAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfcmljaGNvbXBhcmVYAQAAAC10crEkAABYDgAAAFB5X2J1ZmZlci5uZGltcrIkAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5uZGltWAEAAAAtdHKzJAAAWA8AAABQeV9idWZmZXIuc2hhcGVytCQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLnNoYXBlWAEAAAAtdHK1JAAAWBkAAABQeVR5cGVPYmplY3QudHBfYXNfYnVmZmVycrYkAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYXNfYnVmZmVyWAEAAAAtdHK3JAAAWBQAAABQeVR5cGVPYmplY3QudHBfaGFzaHK4JAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2hhc2hYAQAAAC10crkkAABYDQAAAHRwX2FzX21hcHBpbmdyuiQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLnRwX2FzX21hcHBpbmdYAQAAAC10crskAABYFgAAAFB5VHlwZU9iamVjdC50cF9nZXRzZXRyvCQAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9nZXRzZXRYAQAAAC10cr0kAABYGAAAAFB5VHlwZU9iamVjdC50cF9tYXhhbGxvY3K+JAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21heGFsbG9jWAEAAAAtdHK/JAAAWBQAAABQeVR5cGVPYmplY3QudHBfaW5pdHLAJAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2luaXRYAQAAAC10csEkAABYFAAAAFB5VHlwZU9iamVjdC50cF9yZXBycsIkAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfcmVwclgBAAAALXRywyQAAFgdAAAAUHlTZXF1ZW5jZU1ldGhvZHMuc3FfY29udGFpbnNyxCQAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbnRhaW5zWAEAAAAtdHLFJAAAWBQAAABQeVR5cGVPYmplY3QudHBfY2FsbHLGJAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2NhbGxYAQAAAC10csckAABYGQAAAFB5VHlwZU9iamVjdC50cF9kZXNjcl9zZXRyyCQAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZXNjcl9zZXRYAQAAAC10cskkAABYFwAAAFB5VHlwZU9iamVjdC50cF9jb21wYXJlcsokAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfY29tcGFyZVgBAAAALXRyyyQAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX25leHRyzCQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9uZXh0WAEAAAAtdHLNJAAAWBYAAABQeVR5cGVPYmplY3QudHBfYWxsb2Nzcs4kAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYWxsb2NzWAEAAAAtdHLPJAAAWBUAAABQeVR5cGVPYmplY3QudHBfaXNfZ2Ny0CQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pc19nY1gBAAAALXRy0SQAAFgSAAAAUHlPYmplY3Qub2JfcmVmY250ctIkAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU9iamVjdC5vYl9yZWZjbnRYAQAAAC10ctMkAABYGAAAAFB5VHlwZU9iamVjdC50cF9zZXRhdHRyb3LUJAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3NldGF0dHJvWAEAAAAtdHLVJAAAWBgAAABQeVR5cGVPYmplY3QudHBfaXRlbXNpemVy1iQAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pdGVtc2l6ZVgBAAAALXRy1yQAAFgYAAAAUHlUeXBlT2JqZWN0LnRwX3dlYWtsaXN0ctgkAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfd2Vha2xpc3RYAQAAAC10ctkkAABYEwAAAFB5VHlwZU9iamVjdC50cF9uZXdy2iQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9uZXdYAQAAAC10ctskAABYGQAAAFB5VHlwZU9iamVjdC50cF9iYXNpY3NpemVy3CQAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9iYXNpY3NpemVYAQAAAC10ct0kAABYEwAAAFB5VHlwZU9iamVjdC50cF9kb2Ny3iQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kb2NYAQAAAC10ct8kAABYEwAAAFB5VHlwZU9iamVjdC50cF9zdHJy4CQAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zdHJYAQAAAC10cuEkAABYEgAAAFB5X2J1ZmZlci5yZWFkb25seXLiJAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIucmVhZG9ubHlYAQAAAC10cuMkAABYEQAAAFB5T2JqZWN0Ll9vYl9wcmV2cuQkAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU9iamVjdC5fb2JfcHJldlgBAAAALXRy5SQAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX2dldGF0dHJy5iQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9nZXRhdHRyWAEAAAAtdHLnJAAAWBUAAABQeVR5cGVPYmplY3QudHBfYmFzZXNy6CQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9iYXNlc1gBAAAALXRy6SQAAFgRAAAAUHlfYnVmZmVyLnN0cmlkZXNy6iQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLnN0cmlkZXNYAQAAAC10cuskAABYGAAAAFB5VHlwZU9iamVjdC50cF90cmF2ZXJzZXLsJAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlWAEAAAAtdHLtJAAAWBEAAABQeU9iamVjdC5fb2JfbmV4dHLuJAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlPYmplY3QuX29iX25leHRYAQAAAC10cu8kAABYFAAAAFB5VHlwZU9iamVjdC50cF9iYXNlcvAkAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYmFzZVgBAAAALXRy8SQAAFgYAAAAUHlUeXBlT2JqZWN0LnRwX2dldGF0dHJvcvIkAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZ2V0YXR0cm9YAQAAAC10cvMkAABYGgAAAFB5TWFwcGluZ01ldGhvZHMubXBfbGVuZ3RocvQkAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU1hcHBpbmdNZXRob2RzLm1wX2xlbmd0aFgBAAAALXRy9SQAAFgaAAAAUHlUeXBlT2JqZWN0LnRwX3N1YmNsYXNzZXNy9iQAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zdWJjbGFzc2VzWAEAAAAtdHL3JAAAWBUAAABQeVR5cGVPYmplY3QudHBfY2FjaGVy+CQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jYWNoZVgBAAAALXRy+SQAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX2l0ZXJy+iQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pdGVyWAEAAAAtdHL7JAAAWBUAAABQeVR5cGVPYmplY3QudHBfZnJlZXNy/CQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mcmVlc1gBAAAALXRy/SQAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX21lbWJlcnNy/iQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9tZW1iZXJzWAEAAAAtdHL/JAAAWBMAAABQeVZhck9iamVjdC5vYl9zaXplcgAlAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVZhck9iamVjdC5vYl9zaXplWAEAAAAtdHIBJQAAWBUAAABQeVR5cGVPYmplY3QudHBfY2xlYXJyAiUAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jbGVhclgBAAAALXRyAyUAAFgaAAAAUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXRyBCUAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kaWN0b2Zmc2V0WAEAAAAtdHIFJQAAWBAAAABQeU9iamVjdC5vYl90eXBlcgYlAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU9iamVjdC5vYl90eXBlWAEAAAAtdHIHJQAAdVgHAAAAYzptYWNyb3IIJQAAfXIJJQAAKFgUAAAAUHlfRU5EX0FMTE9XX1RIUkVBRFNyCiUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0VORF9BTExPV19USFJFQURTWAEAAAAtdHILJQAAWA8AAABQeV9SRVRVUk5fRkFMU0VyDCUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbCNjLlB5X1JFVFVSTl9GQUxTRVgBAAAALXRyDSUAAFgHAAAAUHlfVFlQRXIOJQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlfVFlQRVgBAAAALXRyDyUAAFgRAAAAUHlPYmplY3RfVkFSX0hFQURyECUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5T2JqZWN0X1ZBUl9IRUFEWAEAAAAtdHIRJQAAWBAAAABQeV9CTE9DS19USFJFQURTchIlAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9CTE9DS19USFJFQURTWAEAAAAtdHITJQAAWBUAAABQeVZhck9iamVjdF9IRUFEX0lOSVRyFCUAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5VmFyT2JqZWN0X0hFQURfSU5JVFgBAAAALXRyFSUAAFgNAAAAUHlPYmplY3RfSEVBRHIWJQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlPYmplY3RfSEVBRFgBAAAALXRyFyUAAFgOAAAAUHlfUkVUVVJOX05PTkVyGCUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL25vbmUuaHRtbCNjLlB5X1JFVFVSTl9OT05FWAEAAAAtdHIZJQAAWBIAAABQeV9VTkJMT0NLX1RIUkVBRFNyGiUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X1VOQkxPQ0tfVEhSRUFEU1gBAAAALXRyGyUAAFgWAAAAUHlfQkVHSU5fQUxMT1dfVEhSRUFEU3IcJQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfQkVHSU5fQUxMT1dfVEhSRUFEU1gBAAAALXRyHSUAAFgSAAAAUHlPYmplY3RfSEVBRF9JTklUch4lAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU9iamVjdF9IRUFEX0lOSVRYAQAAAC10ch8lAABYDgAAAFB5X1JFVFVSTl9UUlVFciAlAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWwjYy5QeV9SRVRVUk5fVFJVRVgBAAAALXRyISUAAFgJAAAAUHlfUkVGQ05UciIlAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeV9SRUZDTlRYAQAAAC10ciMlAABYBwAAAFB5X1NJWkVyJCUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5X1NJWkVYAQAAAC10ciUlAAB1WAkAAABzdGQ6bGFiZWx9ciYlAAAoWDMAAABjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnMtd2l0aC1vd24tY3VzdG9tLWRhdGEtdHlwZXNyJyUAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLXdpdGgtb3duLWN1c3RvbS1kYXRhLXR5cGVzWDEAAABDYWxsaW5nIGZ1bmN0aW9ucyB3aXRoIHlvdXIgb3duIGN1c3RvbSBkYXRhIHR5cGVzdHIoJQAAWBEAAAB1bmRvYy1tYWMtbW9kdWxlc3IpJQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI3VuZG9jLW1hYy1tb2R1bGVzWBsAAABVbmRvY3VtZW50ZWQgTWFjIE9TIG1vZHVsZXN0ciolAABYCQAAAHJlLXN5bnRheHIrJQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLXN5bnRheFgZAAAAUmVndWxhciBFeHByZXNzaW9uIFN5bnRheHRyLCUAAFgOAAAAdHV0LWNhbGN1bGF0b3JyLSUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC1jYWxjdWxhdG9yWBwAAABVc2luZyBQeXRob24gYXMgYSBDYWxjdWxhdG9ydHIuJQAAWAoAAAB0dXQtb2JqZWN0ci8lAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LW9iamVjdFgeAAAAQSBXb3JkIEFib3V0IE5hbWVzIGFuZCBPYmplY3RzdHIwJQAAWAYAAAAyM2Fja3NyMSUAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI2Fja3NYEAAAAEFja25vd2xlZGdlbWVudHN0cjIlAABYFQAAAGVsZW1lbnR0cmVlLWZ1bmN0aW9uc3IzJQAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS1mdW5jdGlvbnNYCQAAAEZ1bmN0aW9uc3RyNCUAAFgTAAAAZG9tLWNvbW1lbnQtb2JqZWN0c3I1JQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWNvbW1lbnQtb2JqZWN0c1gPAAAAQ29tbWVudCBPYmplY3RzdHI2JQAAWAwAAAB2aWV3LW9iamVjdHNyNyUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjdmlldy1vYmplY3RzWAwAAABWaWV3IE9iamVjdHN0cjglAABYEwAAAHR1dC1kYXRlcy1hbmQtdGltZXNyOSUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1kYXRlcy1hbmQtdGltZXNYDwAAAERhdGVzIGFuZCBUaW1lc3RyOiUAAFgHAAAAcGVwLTMzOHI7JQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTMzOFglAAAAUEVQIDMzODogRXhlY3V0aW5nIE1vZHVsZXMgYXMgU2NyaXB0c3RyPCUAAFgUAAAAbWFpbGJveC1iYWJ5bG1lc3NhZ2VyPSUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtYmFieWxtZXNzYWdlWAwAAABCYWJ5bE1lc3NhZ2V0cj4lAABYDgAAAHNlcXVlbmNlLXR5cGVzcj8lAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjc2VxdWVuY2UtdHlwZXNYGQAAAEVtdWxhdGluZyBjb250YWluZXIgdHlwZXN0ckAlAABYCgAAAGZyYW1ld29ya3NyQSUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3Jrcy5odG1sI2ZyYW1ld29ya3NYEgAAAFByb2dyYW0gRnJhbWV3b3Jrc3RyQiUAAFgKAAAAc2luZ2xlLWV4dHJDJQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjc2luZ2xlLWV4dFgXAAAAU2luZ2xlIGV4dGVuc2lvbiBtb2R1bGV0ckQlAABYAgAAAGlmckUlAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNpZlgQAAAAVGhlIGlmIHN0YXRlbWVudHRyRiUAAFgWAAAAYXJncGFyc2UtZnJvbS1vcHRwYXJzZXJHJQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLWZyb20tb3B0cGFyc2VYFwAAAFVwZ3JhZGluZyBvcHRwYXJzZSBjb2RldHJIJQAAWBcAAABmaWxlLWNvb2tpZS1qYXItY2xhc3Nlc3JJJQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNmaWxlLWNvb2tpZS1qYXItY2xhc3Nlc1g7AAAARmlsZUNvb2tpZUphciBzdWJjbGFzc2VzIGFuZCBjby1vcGVyYXRpb24gd2l0aCB3ZWIgYnJvd3NlcnN0ckolAABYGQAAAGxvZ2dpbmctYWR2YW5jZWQtdHV0b3JpYWxySyUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsWBkAAABBZHZhbmNlZCBMb2dnaW5nIFR1dG9yaWFsdHJMJQAAWBkAAABwcm94eS1kaWdlc3QtYXV0aC1oYW5kbGVyck0lAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNwcm94eS1kaWdlc3QtYXV0aC1oYW5kbGVyWB4AAABQcm94eURpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHN0ck4lAABYFQAAAHBhcnNldHVwbGVhbmRrZXl3b3Jkc3JPJQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3BhcnNldHVwbGVhbmRrZXl3b3Jkc1gqAAAAS2V5d29yZCBQYXJhbWV0ZXJzIGZvciBFeHRlbnNpb24gRnVuY3Rpb25zdHJQJQAAWBkAAABvcHRwYXJzZS1vcHRpb24tY2FsbGJhY2tzclElAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utb3B0aW9uLWNhbGxiYWNrc1gQAAAAT3B0aW9uIENhbGxiYWNrc3RyUiUAAFgDAAAAc2V0clMlAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNzZXRYDAAAAFNldCBkaXNwbGF5c3RyVCUAAFgLAAAAaW50ZXJhY3RpdmVyVSUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjaW50ZXJhY3RpdmVYEQAAAEludGVyYWN0aXZlIGlucHV0dHJWJQAAWBAAAAByZWFkbGluZS1leGFtcGxlclclAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUtZXhhbXBsZVgHAAAARXhhbXBsZXRyWCUAAFgYAAAAY29va2llbGliLWNvb2tpZS1vYmplY3RzclklAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi1jb29raWUtb2JqZWN0c1gOAAAAQ29va2llIE9iamVjdHN0clolAABYEQAAAHhtbHBhcnNlci1vYmplY3RzclslAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWxwYXJzZXItb2JqZWN0c1gRAAAAWE1MUGFyc2VyIE9iamVjdHN0clwlAABYDQAAAGFwaS1kZWJ1Z2dpbmdyXSUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLWRlYnVnZ2luZ1gQAAAARGVidWdnaW5nIEJ1aWxkc3RyXiUAAFgbAAAAaW5jcmVtZW50YWwtZGVjb2Rlci1vYmplY3Rzcl8lAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2luY3JlbWVudGFsLWRlY29kZXItb2JqZWN0c1gaAAAASW5jcmVtZW50YWxEZWNvZGVyIE9iamVjdHN0cmAlAABYCAAAAGZ1bmMtc2V0cmElAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtc2V0WAEAAAAtdHJiJQAAWCAAAABvcHRwYXJzZS1wdXR0aW5nLWl0LWFsbC10b2dldGhlcnJjJQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXB1dHRpbmctaXQtYWxsLXRvZ2V0aGVyWBcAAABQdXR0aW5nIGl0IGFsbCB0b2dldGhlcnRyZCUAAFgSAAAAdHV0LXVzZXJleGNlcHRpb25zcmUlAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtdXNlcmV4Y2VwdGlvbnNYFwAAAFVzZXItZGVmaW5lZCBFeGNlcHRpb25zdHJmJQAAWB8AAABlbGVtZW50dHJlZS1lbGVtZW50dHJlZS1vYmplY3RzcmclAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLWVsZW1lbnR0cmVlLW9iamVjdHNYEwAAAEVsZW1lbnRUcmVlIE9iamVjdHN0cmglAABYEgAAAGZpbHRlcnMtY29udGV4dHVhbHJpJQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2ZpbHRlcnMtY29udGV4dHVhbFguAAAAVXNpbmcgRmlsdGVycyB0byBpbXBhcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbnRyaiUAAFgRAAAAZXhjZXB0aW9uaGFuZGxpbmdyayUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25oYW5kbGluZ1gSAAAARXhjZXB0aW9uIEhhbmRsaW5ndHJsJQAAWAwAAABjcmVhdGluZy1zdHNybSUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjY3JlYXRpbmctc3RzWBMAAABDcmVhdGluZyBTVCBPYmplY3RzdHJuJQAAWA4AAAB0dXQtc3RydWN0dXJlc3JvJQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtc3RydWN0dXJlc1gPAAAARGF0YSBTdHJ1Y3R1cmVzdHJwJQAAWBAAAABhdS13cml0ZS1vYmplY3RzcnElAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjYXUtd3JpdGUtb2JqZWN0c1gQAAAAQVVfd3JpdGUgT2JqZWN0c3RyciUAAFgQAAAAdXNpbmctb24td2luZG93c3JzJQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvd2luZG93cy5odG1sI3VzaW5nLW9uLXdpbmRvd3NYFwAAAFVzaW5nIFB5dGhvbiBvbiBXaW5kb3dzdHJ0JQAAWA8AAAB0dXQtaW50ZXJhY3RpbmdydSUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWludGVyYWN0aW5nWDIAAABJbnRlcmFjdGl2ZSBJbnB1dCBFZGl0aW5nIGFuZCBIaXN0b3J5IFN1YnN0aXR1dGlvbnRydiUAAFgHAAAAdGtpbnRlcnJ3JQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ay5odG1sI3RraW50ZXJYIQAAAEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUa3RyeCUAAFgbAAAAb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0ycnklAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0yWCYAAABDYWxsYmFjayBleGFtcGxlIDI6IGNoZWNrIG9wdGlvbiBvcmRlcnRyeiUAAFgbAAAAb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0zcnslAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0zWDQAAABDYWxsYmFjayBleGFtcGxlIDM6IGNoZWNrIG9wdGlvbiBvcmRlciAoZ2VuZXJhbGl6ZWQpdHJ8JQAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTFyfSUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTFYJAAAAENhbGxiYWNrIGV4YW1wbGUgMTogdHJpdmlhbCBjYWxsYmFja3RyfiUAAFgbAAAAb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS02cn8lAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS02WCYAAABDYWxsYmFjayBleGFtcGxlIDY6IHZhcmlhYmxlIGFyZ3VtZW50c3RygCUAAFgUAAAAZG9tLWFjY2Vzc29yLW1ldGhvZHNygSUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1hY2Nlc3Nvci1tZXRob2RzWBAAAABBY2Nlc3NvciBNZXRob2RzdHKCJQAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTVygyUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTVYIwAAAENhbGxiYWNrIGV4YW1wbGUgNTogZml4ZWQgYXJndW1lbnRzdHKEJQAAWBEAAABpbnN0LXNwbGl0dGluZy11cHKFJQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3Qtc3BsaXR0aW5nLXVwWBQAAABTcGxpdHRpbmcgdGhlIGpvYiB1cHRyhiUAAFgNAAAAdHV0LWNvbXBhcmluZ3KHJQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtY29tcGFyaW5nWCMAAABDb21wYXJpbmcgU2VxdWVuY2VzIGFuZCBPdGhlciBUeXBlc3RyiCUAAFgIAAAAZnVuY3Rpb25yiSUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2Z1bmN0aW9uWBQAAABGdW5jdGlvbiBkZWZpbml0aW9uc3RyiiUAAFgLAAAAdHV0LXdoYXRub3dyiyUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3doYXRub3cuaHRtbCN0dXQtd2hhdG5vd1gJAAAAV2hhdCBOb3c/dHKMJQAAWBMAAABpdGVydG9vbHMtZnVuY3Rpb25zco0lAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy1mdW5jdGlvbnNYEgAAAEl0ZXJ0b29sIGZ1bmN0aW9uc3RyjiUAAFgMAAAAY29udGV4dC1pbmZvco8lAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY29udGV4dC1pbmZvWDQAAABBZGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB5b3VyIGxvZ2dpbmcgb3V0cHV0dHKQJQAAWBMAAABodG1sLXBhcnNlci1vYmplY3RzcpElAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sLXBhcnNlci1vYmplY3RzWBIAAABIVE1MUGFyc2VyIE9iamVjdHN0cpIlAABYEgAAAG5ldy0yNi1pbnRlcnByZXRlcnKTJQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjbmV3LTI2LWludGVycHJldGVyWBMAAABJbnRlcnByZXRlciBDaGFuZ2VzdHKUJQAAWBMAAABnemlwLXVzYWdlLWV4YW1wbGVzcpUlAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2d6aXAuaHRtbCNnemlwLXVzYWdlLWV4YW1wbGVzWBEAAABFeGFtcGxlcyBvZiB1c2FnZXRyliUAAFgUAAAAaW1tdXRhYmxlLXRyYW5zZm9ybXNylyUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2V0cy5odG1sI2ltbXV0YWJsZS10cmFuc2Zvcm1zWC4AAABQcm90b2NvbCBmb3IgYXV0b21hdGljIGNvbnZlcnNpb24gdG8gaW1tdXRhYmxldHKYJQAAWB0AAABlbGVtZW50dHJlZS14bWxwYXJzZXItb2JqZWN0c3KZJQAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS14bWxwYXJzZXItb2JqZWN0c1gRAAAAWE1MUGFyc2VyIE9iamVjdHN0cpolAABYDgAAAG1vcnNlbC1vYmplY3RzcpslAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI21vcnNlbC1vYmplY3RzWA4AAABNb3JzZWwgT2JqZWN0c3RynCUAAFgKAAAAcmZjLWVycmF0YXKdJQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjcmZjLWVycmF0YVgBAAAALXRyniUAAFgIAAAAc2hpZnRpbmdynyUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3NoaWZ0aW5nWBMAAABTaGlmdGluZyBvcGVyYXRpb25zdHKgJQAAWAcAAAB0b29sYm94cqElAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI3Rvb2xib3hYFgAAAE1hYyBPUyBUb29sYm94IE1vZHVsZXN0cqIlAABYBwAAAGJpdHdpc2VyoyUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2JpdHdpc2VYGQAAAEJpbmFyeSBiaXR3aXNlIG9wZXJhdGlvbnN0cqQlAABYFwAAAG9wdHBhcnNlLWRlZmF1bHQtdmFsdWVzcqUlAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZGVmYXVsdC12YWx1ZXNYDgAAAERlZmF1bHQgdmFsdWVzdHKmJQAAWAYAAABnbG9iYWxypyUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNnbG9iYWxYFAAAAFRoZSBnbG9iYWwgc3RhdGVtZW50dHKoJQAAWCEAAABvcHRwYXJzZS1oYW5kbGluZy1ib29sZWFuLW9wdGlvbnNyqSUAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1oYW5kbGluZy1ib29sZWFuLW9wdGlvbnNYHwAAAEhhbmRsaW5nIGJvb2xlYW4gKGZsYWcpIG9wdGlvbnN0cqolAABYDAAAAHNvY2tldC1ob3d0b3KrJQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vc29ja2V0cy5odG1sI3NvY2tldC1ob3d0b1gYAAAAU29ja2V0IFByb2dyYW1taW5nIEhPV1RPdHKsJQAAWBIAAAB3YXJuaW5nLWNhdGVnb3JpZXNyrSUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLWNhdGVnb3JpZXNYEgAAAFdhcm5pbmcgQ2F0ZWdvcmllc3RyriUAAFgPAAAAZGF0ZXRpbWVvYmplY3Rzcq8lAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2RhdGV0aW1lb2JqZWN0c1gQAAAARGF0ZVRpbWUgT2JqZWN0c3RysCUAAFgQAAAAZGF0YWJhc2Utb2JqZWN0c3KxJQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNkYXRhYmFzZS1vYmplY3RzWBAAAABEYXRhYmFzZSBPYmplY3RzdHKyJQAAWA4AAABjb21wb3VuZHNoYXBlc3KzJQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCNjb21wb3VuZHNoYXBlc1gpAAAARXhjdXJzdXMgYWJvdXQgdGhlIHVzZSBvZiBjb21wb3VuZCBzaGFwZXN0crQlAABYCQAAAHN0LWVycm9yc3K1JQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNzdC1lcnJvcnNYHQAAAEV4Y2VwdGlvbnMgYW5kIEVycm9yIEhhbmRsaW5ndHK2JQAAWAkAAAB0dXQtbGlzdHNytyUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC1saXN0c1gFAAAATGlzdHN0crglAABYEAAAAHVzaW5nLW9uLWdlbmVyYWxyuSUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1nZW5lcmFsWBwAAABDb21tYW5kIGxpbmUgYW5kIGVudmlyb25tZW50dHK6JQAAWA0AAABzbGljZS1vYmplY3RzcrslAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zbGljZS5odG1sI3NsaWNlLW9iamVjdHNYDQAAAFNsaWNlIE9iamVjdHN0crwlAABYFgAAAHR1dC1iYXR0ZXJpZXMtaW5jbHVkZWRyvSUAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1iYXR0ZXJpZXMtaW5jbHVkZWRYEgAAAEJhdHRlcmllcyBJbmNsdWRlZHRyviUAAFgHAAAAcG9ydGluZ3K/JQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcG9ydGluZ1gVAAAAUG9ydGluZyB0byBQeXRob24gMi41dHLAJQAAWA4AAAB0dXQtZmlyc3RzdGVwc3LBJQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWZpcnN0c3RlcHNYHwAAAEZpcnN0IFN0ZXBzIFRvd2FyZHMgUHJvZ3JhbW1pbmd0csIlAABYEQAAAGluc3QtbmV3LXN0YW5kYXJkcsMlAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1uZXctc3RhbmRhcmRYGwAAAFRoZSBuZXcgc3RhbmRhcmQ6IERpc3R1dGlsc3RyxCUAAFgPAAAAcHJlZml4LW1hdGNoaW5ncsUlAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjcHJlZml4LW1hdGNoaW5nWCgAAABBcmd1bWVudCBhYmJyZXZpYXRpb25zIChwcmVmaXggbWF0Y2hpbmcpdHLGJQAAWAwAAAB0dXQtaW52b2tpbmdyxyUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludm9raW5nWBgAAABJbnZva2luZyB0aGUgSW50ZXJwcmV0ZXJ0csglAABYDAAAAG9wZXJhdG9yLW1hcHLJJQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLW1hcFgeAAAATWFwcGluZyBPcGVyYXRvcnMgdG8gRnVuY3Rpb25zdHLKJQAAWAYAAABtYXJrdXByyyUAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFya3VwLmh0bWwjbWFya3VwWCIAAABTdHJ1Y3R1cmVkIE1hcmt1cCBQcm9jZXNzaW5nIFRvb2xzdHLMJQAAWA0AAABidWZmZXJvYmplY3Rzcs0lAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNidWZmZXJvYmplY3RzWB4AAABCdWZmZXJzIGFuZCBNZW1vcnl2aWV3IE9iamVjdHN0cs4lAABYBgAAAGNyeXB0b3LPJQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jcnlwdG8uaHRtbCNjcnlwdG9YFgAAAENyeXB0b2dyYXBoaWMgU2VydmljZXN0ctAlAABYCAAAAG1vZGluZGV4KGpzBQAAanQFAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcHktbW9kaW5kZXguaHRtbFgMAAAATW9kdWxlIEluZGV4dHLRJQAAWAwAAABmbC1mdW5jdGlvbnNy0iUAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC1mdW5jdGlvbnNYHgAAAEZ1bmN0aW9ucyBEZWZpbmVkIGluIE1vZHVsZSBmbHRy0yUAAFgTAAAAbWFpbGJveC1tbWRmbWVzc2FnZXLUJQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tbWRmbWVzc2FnZVgLAAAATU1ERk1lc3NhZ2V0ctUlAABYEAAAAHNlcXVlbmNlLW1hdGNoZXJy1iUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI3NlcXVlbmNlLW1hdGNoZXJYFwAAAFNlcXVlbmNlTWF0Y2hlciBPYmplY3RzdHLXJQAAWAkAAABjZ2ktaW50cm9y2CUAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLWludHJvWAEAAAAtdHLZJQAAWBgAAABleHRlbmRpbmctd2l0aC1lbWJlZGRpbmdy2iUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbCNleHRlbmRpbmctd2l0aC1lbWJlZGRpbmdYGQAAAEV4dGVuZGluZyBFbWJlZGRlZCBQeXRob250ctslAABYDwAAAGRlY2ltYWwtZGVjaW1hbHLcJQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1kZWNpbWFsWA8AAABEZWNpbWFsIG9iamVjdHN0ct0lAABYKQAAAGN0eXBlcy1zcGVjaWZ5aW5nLXJlcXVpcmVkLWFyZ3VtZW50LXR5cGVzct4lAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zcGVjaWZ5aW5nLXJlcXVpcmVkLWFyZ3VtZW50LXR5cGVzWDwAAABTcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0eXBlcyAoZnVuY3Rpb24gcHJvdG90eXBlcyl0ct8lAABYEQAAAGZvcm1hdHRlci1vYmplY3RzcuAlAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNmb3JtYXR0ZXItb2JqZWN0c1gRAAAARm9ybWF0dGVyIE9iamVjdHN0cuElAABYCAAAAHBlcC0zMTEycuIlAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExMlgXAAAAUEVQIDMxMTI6IEJ5dGUgTGl0ZXJhbHN0cuMlAABYFQAAAHR5cGUtc3BlY2lmaWMtbWV0aG9kc3LkJQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3R5cGUtc3BlY2lmaWMtbWV0aG9kc1gBAAAALXRy5SUAAFgVAAAAeG1scnBjLWNsaWVudC1leGFtcGxlcuYlAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwYy1jbGllbnQtZXhhbXBsZVgXAAAARXhhbXBsZSBvZiBDbGllbnQgVXNhZ2V0cuclAABYEwAAAGR0ZC1oYW5kbGVyLW9iamVjdHNy6CUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjZHRkLWhhbmRsZXItb2JqZWN0c1gSAAAARFRESGFuZGxlciBPYmplY3RzdHLpJQAAWA4AAABrcXVldWUtb2JqZWN0c3LqJQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNrcXVldWUtb2JqZWN0c1gOAAAAS3F1ZXVlIE9iamVjdHN0cuslAABYDAAAAGV4YW1wbGVzLWltcHLsJQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNleGFtcGxlcy1pbXBYCAAAAEV4YW1wbGVzdHLtJQAAWBEAAABkb2N0ZXN0LWJhc2ljLWFwaXLuJQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1iYXNpYy1hcGlYCQAAAEJhc2ljIEFQSXRy7yUAAFgNAAAAdHV0LWZwLWlzc3Vlc3LwJQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5odG1sI3R1dC1mcC1pc3N1ZXNYMgAAAEZsb2F0aW5nIFBvaW50IEFyaXRobWV0aWM6ICBJc3N1ZXMgYW5kIExpbWl0YXRpb25zdHLxJQAAWBIAAABkaXN0dXRpbHMtY29uY2VwdHNy8iUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24uaHRtbCNkaXN0dXRpbHMtY29uY2VwdHNYFgAAAENvbmNlcHRzICYgVGVybWlub2xvZ3l0cvMlAABYHAAAAGdlbmVyaWMtYXR0cmlidXRlLW1hbmFnZW1lbnRy9CUAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9uZXd0eXBlcy5odG1sI2dlbmVyaWMtYXR0cmlidXRlLW1hbmFnZW1lbnRYHAAAAEdlbmVyaWMgQXR0cmlidXRlIE1hbmFnZW1lbnR0cvUlAABYEAAAAHdyaXRlci1pbnRlcmZhY2Vy9iUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjd3JpdGVyLWludGVyZmFjZVgUAAAAVGhlIFdyaXRlciBJbnRlcmZhY2V0cvclAABYDQAAAG9zLW5ld3N0cmVhbXNy+CUAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1uZXdzdHJlYW1zWBQAAABGaWxlIE9iamVjdCBDcmVhdGlvbnRy+SUAAFgEAAAAaTE4bnL6JQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pMThuLmh0bWwjaTE4blgUAAAASW50ZXJuYXRpb25hbGl6YXRpb250cvslAABYDwAAAHR1dC1rZXl3b3JkYXJnc3L8JQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQta2V5d29yZGFyZ3NYEQAAAEtleXdvcmQgQXJndW1lbnRzdHL9JQAAWBsAAABsb2dnaW5nLWNvbmZpZy1kaWN0LXVzZXJkZWZy/iUAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LXVzZXJkZWZYFAAAAFVzZXItZGVmaW5lZCBvYmplY3RzdHL/JQAAWBIAAABtYWlsYm94LWRlcHJlY2F0ZWRyACYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtZGVwcmVjYXRlZFgeAAAARGVwcmVjYXRlZCBjbGFzc2VzIGFuZCBtZXRob2RzdHIBJgAAWCAAAABjdHlwZXMtdmFyaWFibGUtc2l6ZWQtZGF0YS10eXBlc3ICJgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtdmFyaWFibGUtc2l6ZWQtZGF0YS10eXBlc1gZAAAAVmFyaWFibGUtc2l6ZWQgZGF0YSB0eXBlc3RyAyYAAFgiAAAAY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLWNvbnRpbnVlZHIEJgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnMtY29udGludWVkWBwAAABDYWxsaW5nIGZ1bmN0aW9ucywgY29udGludWVkdHIFJgAAWBMAAAB0dXQtaW50ZXJuZXQtYWNjZXNzcgYmAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtaW50ZXJuZXQtYWNjZXNzWA8AAABJbnRlcm5ldCBBY2Nlc3N0cgcmAABYFQAAAGNvbnRyb2xzd2luZG93LW9iamVjdHIIJgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNjb250cm9sc3dpbmRvdy1vYmplY3RYFQAAAENvbnRyb2xzV2luZG93IE9iamVjdHRyCSYAAFgSAAAAcGFja2FnZS1jbWRvcHRpb25zcgomAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvcGFja2FnZWluZGV4Lmh0bWwjcGFja2FnZS1jbWRvcHRpb25zWBoAAABBZGRpdGlvbmFsIGNvbW1hbmQgb3B0aW9uc3RyCyYAAFgXAAAAY29udGVudC1oYW5kbGVyLW9iamVjdHNyDCYAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjY29udGVudC1oYW5kbGVyLW9iamVjdHNYFgAAAENvbnRlbnRIYW5kbGVyIE9iamVjdHN0cg0mAABYGAAAAGN0eXBlcy1zdHJ1Y3R1cmVzLXVuaW9uc3IOJgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtc3RydWN0dXJlcy11bmlvbnNYFQAAAFN0cnVjdHVyZXMgYW5kIHVuaW9uc3RyDyYAAFgRAAAAbWFuaWZlc3RfdGVtcGxhdGVyECYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zb3VyY2VkaXN0Lmh0bWwjbWFuaWZlc3QtdGVtcGxhdGVYGAAAAFRoZSBNQU5JRkVTVC5pbiB0ZW1wbGF0ZXRyESYAAFgPAAAAbWFwcGluZy1zdHJ1Y3RzchImAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjbWFwcGluZy1zdHJ1Y3RzWBkAAABNYXBwaW5nIE9iamVjdCBTdHJ1Y3R1cmVzdHITJgAAWBUAAABjb250ZW50cy1vZi1tb2R1bGUtcmVyFCYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNjb250ZW50cy1vZi1tb2R1bGUtcmVYDwAAAE1vZHVsZSBDb250ZW50c3RyFSYAAFgMAAAAcXVldWVvYmplY3RzchYmAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWVvYmplY3RzWA0AAABRdWV1ZSBPYmplY3RzdHIXJgAAWBMAAABtYWMtcGFja2FnZS1tYW5hZ2VychgmAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9tYWMuaHRtbCNtYWMtcGFja2FnZS1tYW5hZ2VyWCUAAABJbnN0YWxsaW5nIEFkZGl0aW9uYWwgUHl0aG9uIFBhY2thZ2VzdHIZJgAAWBAAAABkb20tbm9kZS1vYmplY3RzchomAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tbm9kZS1vYmplY3RzWAwAAABOb2RlIE9iamVjdHN0chsmAABYGAAAAGN0eXBlcy1mb3JlaWduLWZ1bmN0aW9uc3IcJgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtZm9yZWlnbi1mdW5jdGlvbnNYEQAAAEZvcmVpZ24gZnVuY3Rpb25zdHIdJgAAWA4AAABidWZmZXItc3RydWN0c3IeJgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2J1ZmZlci1zdHJ1Y3RzWBgAAABCdWZmZXIgT2JqZWN0IFN0cnVjdHVyZXN0ch8mAABYFgAAAG1haWxib3gtbWFpbGRpcm1lc3NhZ2VyICYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWFpbGRpcm1lc3NhZ2VYDgAAAE1haWxkaXJNZXNzYWdldHIhJgAAWAYAAABsb2dnZXJyIiYAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dlclgOAAAATG9nZ2VyIE9iamVjdHN0ciMmAABYDwAAAHR1dC1maWxlbWV0aG9kc3IkJgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbCN0dXQtZmlsZW1ldGhvZHNYFwAAAE1ldGhvZHMgb2YgRmlsZSBPYmplY3RzdHIlJgAAWBsAAAB0dXQtcGVyZm9ybWFuY2UtbWVhc3VyZW1lbnRyJiYAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1wZXJmb3JtYW5jZS1tZWFzdXJlbWVudFgXAAAAUGVyZm9ybWFuY2UgTWVhc3VyZW1lbnR0cicmAABYDQAAAGN0eXBlcy1hcnJheXNyKCYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWFycmF5c1gGAAAAQXJyYXlzdHIpJgAAWAwAAAB0dXQtZGVmaW5pbmdyKiYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWRlZmluaW5nWBoAAABNb3JlIG9uIERlZmluaW5nIEZ1bmN0aW9uc3RyKyYAAFgVAAAAY3Jvc3MtY29tcGlsZS13aW5kb3dzciwmAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjY3Jvc3MtY29tcGlsZS13aW5kb3dzWBoAAABDcm9zcy1jb21waWxpbmcgb24gV2luZG93c3RyLSYAAFgPAAAAbG9jYXRvci1vYmplY3Rzci4mAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjbG9jYXRvci1vYmplY3RzWA8AAABMb2NhdG9yIE9iamVjdHN0ci8mAABYFwAAAHNxbGl0ZTMtbW9kdWxlLWNvbnRlbnRzcjAmAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLW1vZHVsZS1jb250ZW50c1geAAAATW9kdWxlIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzdHIxJgAAWA4AAABoa2V5LWNvbnN0YW50c3IyJgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjaGtleS1jb25zdGFudHNYEAAAAEhLRVlfKiBDb25zdGFudHN0cjMmAABYFAAAAGZpbGUtaGFuZGxlci1vYmplY3RzcjQmAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNmaWxlLWhhbmRsZXItb2JqZWN0c1gTAAAARmlsZUhhbmRsZXIgT2JqZWN0c3RyNSYAAFgNAAAAbGlicmFyeS1pbnRyb3I2JgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnRyby5odG1sI2xpYnJhcnktaW50cm9YDAAAAEludHJvZHVjdGlvbnRyNyYAAFgLAAAAdHV0LWhpc3RvcnlyOCYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWhpc3RvcnlYFAAAAEhpc3RvcnkgU3Vic3RpdHV0aW9udHI5JgAAWAgAAABsYW5ndWFnZXI6JgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sYW5ndWFnZS5odG1sI2xhbmd1YWdlWBgAAABQeXRob24gTGFuZ3VhZ2UgU2VydmljZXN0cjsmAABYCAAAAHBlcC0zMTA1cjwmAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEwNVgdAAAAUEVQIDMxMDU6IHByaW50IEFzIGEgRnVuY3Rpb250cj0mAABYBQAAAHByaW50cj4mAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcHJpbnRYEwAAAFRoZSBwcmludCBzdGF0ZW1lbnR0cj8mAABYCAAAAHBlcC0zMTAxckAmAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEwMVgkAAAAUEVQIDMxMDE6IEFkdmFuY2VkIFN0cmluZyBGb3JtYXR0aW5ndHJBJgAAWAkAAABjb25zdGFudHNyQiYAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI2NvbnN0YW50c1gJAAAAQ29uc3RhbnRzdHJDJgAAWAgAAABwdXJlLW1vZHJEJgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjcHVyZS1tb2RYJAAAAFB1cmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiAoYnkgbW9kdWxlKXRyRSYAAFgaAAAAbmV3LXN0eWxlLWF0dHJpYnV0ZS1hY2Nlc3NyRiYAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNuZXctc3R5bGUtYXR0cmlidXRlLWFjY2Vzc1grAAAATW9yZSBhdHRyaWJ1dGUgYWNjZXNzIGZvciBuZXctc3R5bGUgY2xhc3Nlc3RyRyYAAFgXAAAAYnVpbGRpbmctcHl0aG9uLW9uLXVuaXhySCYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL3VuaXguaHRtbCNidWlsZGluZy1weXRob24tb24tdW5peFgPAAAAQnVpbGRpbmcgUHl0aG9udHJJJgAAWBMAAAB3aGF0c25ldzI3LWNhcHN1bGVzckomAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCN3aGF0c25ldzI3LWNhcHN1bGVzWAgAAABDYXBzdWxlc3RySyYAAFgVAAAAZG9jdGVzdC1kb2N0ZXN0ZmluZGVyckwmAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWRvY3Rlc3RmaW5kZXJYFQAAAERvY1Rlc3RGaW5kZXIgb2JqZWN0c3RyTSYAAFgYAAAAZG9tLWRvY3VtZW50dHlwZS1vYmplY3Rzck4mAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZG9jdW1lbnR0eXBlLW9iamVjdHNYFAAAAERvY3VtZW50VHlwZSBPYmplY3RzdHJPJgAAWAsAAAB0dXQtbW9kdWxlc3JQJgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1tb2R1bGVzWAcAAABNb2R1bGVzdHJRJgAAWA8AAABtaW5pZG9tLW9iamVjdHNyUiYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjbWluaWRvbS1vYmplY3RzWAsAAABET00gT2JqZWN0c3RyUyYAAFgQAAAAdHV0LWZpcnN0Y2xhc3Nlc3JUJgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1maXJzdGNsYXNzZXNYFwAAAEEgRmlyc3QgTG9vayBhdCBDbGFzc2VzdHJVJgAAWAsAAAB0dXQtc3RyaW5nc3JWJgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LXN0cmluZ3NYBwAAAFN0cmluZ3N0clcmAABYCwAAAHR1dC1yYWlzaW5nclgmAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtcmFpc2luZ1gSAAAAUmFpc2luZyBFeGNlcHRpb25zdHJZJgAAWAQAAABlbHNlclomAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNlbHNlWBAAAABUaGUgaWYgc3RhdGVtZW50dHJbJgAAWAwAAAB1cmxsaWItaG93dG9yXCYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3VybGxpYjIuaHRtbCN1cmxsaWItaG93dG9YLAAAAEhPV1RPIEZldGNoIEludGVybmV0IFJlc291cmNlcyBVc2luZyB1cmxsaWIydHJdJgAAWA4AAAB0eXBlbWVtb3J5dmlld3JeJgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVtZW1vcnl2aWV3WA8AAABtZW1vcnl2aWV3IHR5cGV0cl8mAABYCwAAAGNvbXBpbGF0aW9ucmAmAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjY29tcGlsYXRpb25YFwAAAENvbXBpbGF0aW9uIGFuZCBMaW5rYWdldHJhJgAAWBAAAABleHBsaWNpdC1qb2luaW5ncmImAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2V4cGxpY2l0LWpvaW5pbmdYFQAAAEV4cGxpY2l0IGxpbmUgam9pbmluZ3RyYyYAAFgXAAAAbmV3LTI2LWNvbnRleHQtbWFuYWdlcnNyZCYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI25ldy0yNi1jb250ZXh0LW1hbmFnZXJzWBgAAABXcml0aW5nIENvbnRleHQgTWFuYWdlcnN0cmUmAABYGQAAAGZhcS1tdWx0aWRpbWVuc2lvbmFsLWxpc3RyZiYAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9wcm9ncmFtbWluZy5odG1sI2ZhcS1tdWx0aWRpbWVuc2lvbmFsLWxpc3RYKAAAAEhvdyBkbyBJIGNyZWF0ZSBhIG11bHRpZGltZW5zaW9uYWwgbGlzdD90cmcmAABYDwAAAGRvY3Rlc3Qtc29hcGJveHJoJgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1zb2FwYm94WAcAAABTb2FwYm94dHJpJgAAWA4AAAB0dXRvcmlhbC1pbmRleHJqJgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW5kZXguaHRtbCN0dXRvcmlhbC1pbmRleFgTAAAAVGhlIFB5dGhvbiBUdXRvcmlhbHRyayYAAFgQAAAAYWJzdHJhY3QtZ3JhbW1hcnJsJgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhYnN0cmFjdC1ncmFtbWFyWBAAAABBYnN0cmFjdCBHcmFtbWFydHJtJgAAWBMAAABhZGRyZXNzbGlzdC1vYmplY3Rzcm4mAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI2FkZHJlc3NsaXN0LW9iamVjdHNYEwAAAEFkZHJlc3NMaXN0IE9iamVjdHN0cm8mAABYCAAAAHR1dC1wYXNzcnAmAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1wYXNzWA8AAABwYXNzIFN0YXRlbWVudHN0cnEmAABYEAAAAHBhY2thZ2UtY29tbWFuZHNyciYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbCNwYWNrYWdlLWNvbW1hbmRzWBIAAABEaXN0dXRpbHMgY29tbWFuZHN0cnMmAABYDQAAAGN1c3RvbWl6YXRpb25ydCYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNjdXN0b21pemF0aW9uWBMAAABCYXNpYyBjdXN0b21pemF0aW9udHJ1JgAAWBMAAABlbGVtZW50dHJlZS1zZWN0aW9ucnYmAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNlbGVtZW50dHJlZS1zZWN0aW9uWB8AAABVcGRhdGVkIG1vZHVsZTogRWxlbWVudFRyZWUgMS4zdHJ3JgAAWBAAAAB1bml0dGVzdC1zZWN0aW9ucngmAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCN1bml0dGVzdC1zZWN0aW9uWBgAAABVcGRhdGVkIG1vZHVsZTogdW5pdHRlc3R0cnkmAABYGAAAAG9sZC1zdHlsZS1zcGVjaWFsLWxvb2t1cHJ6JgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29sZC1zdHlsZS1zcGVjaWFsLWxvb2t1cFgrAAAAU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBvbGQtc3R5bGUgY2xhc3Nlc3RyeyYAAFgJAAAAZW1iZWRkaW5ncnwmAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjZW1iZWRkaW5nWCcAAABFbWJlZGRpbmcgUHl0aG9uIGluIEFub3RoZXIgQXBwbGljYXRpb250cn0mAABYCgAAAGlkLWNsYXNzZXNyfiYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaWQtY2xhc3Nlc1gfAAAAUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc3RyfyYAAFgIAAAAdmVyeWhpZ2hygCYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjdmVyeWhpZ2hYGQAAAFRoZSBWZXJ5IEhpZ2ggTGV2ZWwgTGF5ZXJ0coEmAABYDwAAAGRlY2ltYWwtY29udGV4dHKCJgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1jb250ZXh0WA8AAABDb250ZXh0IG9iamVjdHN0coMmAABYFgAAAHVuaWNvZGVtZXRob2RzYW5kc2xvdHNyhCYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCN1bmljb2RlbWV0aG9kc2FuZHNsb3RzWBoAAABNZXRob2RzIGFuZCBTbG90IEZ1bmN0aW9uc3RyhSYAAFgIAAAAbm90YXRpb25yhiYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24uaHRtbCNub3RhdGlvblgIAAAATm90YXRpb250cocmAABYCAAAAGRlYnVnZ2VycogmAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI2RlYnVnZ2VyWBsAAABwZGIg4oCUIFRoZSBQeXRob24gRGVidWdnZXJ0cokmAABYCQAAAHV0aWxpdGllc3KKJgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdXRpbGl0aWVzLmh0bWwjdXRpbGl0aWVzWAkAAABVdGlsaXRpZXN0cosmAABYEwAAAGh0bWxwYXJzZXItZXhhbXBsZXNyjCYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI2h0bWxwYXJzZXItZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHKNJgAAWAsAAAB0dXQtcHJpdmF0ZXKOJgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1wcml2YXRlWCwAAABQcml2YXRlIFZhcmlhYmxlcyBhbmQgQ2xhc3MtbG9jYWwgUmVmZXJlbmNlc3RyjyYAAFgOAAAAcG9wZW4zLW9iamVjdHNykCYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4zLW9iamVjdHNYGQAAAFBvcGVuMyBhbmQgUG9wZW40IE9iamVjdHN0cpEmAABYCAAAAHBlcC0zMTI3cpImAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEyN1gsAAAAUEVQIDMxMjc6IEludGVnZXIgTGl0ZXJhbCBTdXBwb3J0IGFuZCBTeW50YXh0cpMmAABYDAAAAHBvbGwtb2JqZWN0c3KUJgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNwb2xsLW9iamVjdHNYDwAAAFBvbGxpbmcgT2JqZWN0c3RylSYAAFgNAAAAYml0c3RyaW5nLW9wc3KWJgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JpdHN0cmluZy1vcHNYIwAAAEJpdHdpc2UgT3BlcmF0aW9ucyBvbiBJbnRlZ2VyIFR5cGVzdHKXJgAAWAkAAAB5aWVsZGV4cHJymCYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3lpZWxkZXhwclgRAAAAWWllbGQgZXhwcmVzc2lvbnN0cpkmAABYFAAAAGF1ZGlvLWRldmljZS1vYmplY3RzcpomAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1ZGlvLmh0bWwjYXVkaW8tZGV2aWNlLW9iamVjdHNYFAAAAEF1ZGlvIERldmljZSBPYmplY3RzdHKbJgAAWA4AAABiaXNlY3QtZXhhbXBsZXKcJgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QtZXhhbXBsZVgBAAAALXRynSYAAFgWAAAAc3RyZWFtLXJlY29kZXItb2JqZWN0c3KeJgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNzdHJlYW0tcmVjb2Rlci1vYmplY3RzWBUAAABTdHJlYW1SZWNvZGVyIE9iamVjdHN0cp8mAABYBwAAAG51bWVyaWNyoCYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtZXJpYy5odG1sI251bWVyaWNYIAAAAE51bWVyaWMgYW5kIE1hdGhlbWF0aWNhbCBNb2R1bGVzdHKhJgAAWBAAAABkb20tdHlwZS1tYXBwaW5ncqImAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tdHlwZS1tYXBwaW5nWAwAAABUeXBlIE1hcHBpbmd0cqMmAABYDgAAAGRiaGFzaC1vYmplY3RzcqQmAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sI2RiaGFzaC1vYmplY3RzWBAAAABEYXRhYmFzZSBPYmplY3RzdHKlJgAAWBUAAABwcm9maWxlci1pbnRyb2R1Y3Rpb25ypiYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGVyLWludHJvZHVjdGlvblgdAAAASW50cm9kdWN0aW9uIHRvIHRoZSBwcm9maWxlcnN0cqcmAABYEwAAAGludGVycHJldGVyLW9iamVjdHNyqCYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2ludGVycHJldGVyLW9iamVjdHNYHwAAAEludGVyYWN0aXZlIEludGVycHJldGVyIE9iamVjdHN0cqkmAABYEwAAAHR1dC1wa2ctaW1wb3J0LXN0YXJyqiYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtcGtnLWltcG9ydC1zdGFyWBoAAABJbXBvcnRpbmcgKiBGcm9tIGEgUGFja2FnZXRyqyYAAFgVAAAAc2Nyb2xsZWR3aW5kb3ctb2JqZWN0cqwmAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI3Njcm9sbGVkd2luZG93LW9iamVjdFgVAAAAU2Nyb2xsZWRXaW5kb3cgT2JqZWN0dHKtJgAAWBUAAAB0dXQtb3V0cHV0LWZvcm1hdHRpbmdyriYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtb3V0cHV0LWZvcm1hdHRpbmdYEQAAAE91dHB1dCBGb3JtYXR0aW5ndHKvJgAAWA4AAAB0dXQtY29tbWVudGFyeXKwJgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbCN0dXQtY29tbWVudGFyeVgrAAAAQWx0ZXJuYXRpdmVzIHRvIHRoZSBJbnRlcmFjdGl2ZSBJbnRlcnByZXRlcnRysSYAAFgMAAAAdHlwZS1zdHJ1Y3RzcrImAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjdHlwZS1zdHJ1Y3RzWAwAAABUeXBlIE9iamVjdHN0crMmAABYBwAAAHByb2ZpbGVytCYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGVYFAAAAFRoZSBQeXRob24gUHJvZmlsZXJzdHK1JgAAWBMAAABzZXJ2ZXJwcm94eS1vYmplY3RzcrYmAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3NlcnZlcnByb3h5LW9iamVjdHNYEwAAAFNlcnZlclByb3h5IE9iamVjdHN0crcmAABYBwAAAHBlcC0zMjhyuCYAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMjhYJgAAAFBFUCAzMjg6IEFic29sdXRlIGFuZCBSZWxhdGl2ZSBJbXBvcnRzdHK5JgAAWA0AAAB0aW1lci1vYmplY3RzcromAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RpbWVyLW9iamVjdHNYDQAAAFRpbWVyIE9iamVjdHN0crsmAABYEQAAAHR1dC1tZXRob2RvYmplY3RzcrwmAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LW1ldGhvZG9iamVjdHNYDgAAAE1ldGhvZCBPYmplY3RzdHK9JgAAWAwAAABzcGVjaWFsYXR0cnNyviYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzcGVjaWFsYXR0cnNYEgAAAFNwZWNpYWwgQXR0cmlidXRlc3RyvyYAAFgQAAAAYXR0ci10YXJnZXQtbm90ZXLAJgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2F0dHItdGFyZ2V0LW5vdGVYAQAAAC10csEmAABYDgAAAGZwZWN0bC1leGFtcGxlcsImAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC1leGFtcGxlWAcAAABFeGFtcGxldHLDJgAAWAkAAABhcGktaW50cm9yxCYAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLWludHJvWAwAAABJbnRyb2R1Y3Rpb250csUmAABYFAAAAHVzaW5nLXRoZS1jZ2ktbW9kdWxlcsYmAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI3VzaW5nLXRoZS1jZ2ktbW9kdWxlWBQAAABVc2luZyB0aGUgY2dpIG1vZHVsZXRyxyYAAFgLAAAAZnRwLW9iamVjdHNyyCYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwLW9iamVjdHNYCwAAAEZUUCBPYmplY3RzdHLJJgAAWA4AAABkaWZmZXItb2JqZWN0c3LKJgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmVyLW9iamVjdHNYDgAAAERpZmZlciBPYmplY3RzdHLLJgAAWBYAAABwcm90b2NvbC1lcnJvci1vYmplY3RzcswmAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3Byb3RvY29sLWVycm9yLW9iamVjdHNYFQAAAFByb3RvY29sRXJyb3IgT2JqZWN0c3RyzSYAAFgiAAAAb3B0cGFyc2UtY29uZmxpY3RzLWJldHdlZW4tb3B0aW9uc3LOJgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNvbmZsaWN0cy1iZXR3ZWVuLW9wdGlvbnNYGQAAAENvbmZsaWN0cyBiZXR3ZWVuIG9wdGlvbnN0cs8mAABYCQAAAHByb2ZpbGluZ3LQJgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI3Byb2ZpbGluZ1gVAAAAUHJvZmlsaW5nIGFuZCBUcmFjaW5ndHLRJgAAWBUAAABkb2N0ZXN0LWRvY3Rlc3RwYXJzZXJy0iYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdHBhcnNlclgVAAAARG9jVGVzdFBhcnNlciBvYmplY3RzdHLTJgAAWAcAAABtb2R1bGVzctQmAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZXMuaHRtbCNtb2R1bGVzWBEAAABJbXBvcnRpbmcgTW9kdWxlc3Ry1SYAAFgPAAAAdHV0LW1vcmVtb2R1bGVzctYmAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LW1vcmVtb2R1bGVzWA8AAABNb3JlIG9uIE1vZHVsZXN0ctcmAABYEQAAAG11bHRpZmlsZS1vYmplY3RzctgmAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS1vYmplY3RzWBEAAABNdWx0aUZpbGUgT2JqZWN0c3Ry2SYAAFgQAAAAY29udGV4dC1tYW5hZ2Vyc3LaJgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NvbnRleHQtbWFuYWdlcnNYHwAAAFdpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnN0ctsmAABYAwAAAGlwY3LcJgAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pcGMuaHRtbCNpcGNYKQAAAEludGVycHJvY2VzcyBDb21tdW5pY2F0aW9uIGFuZCBOZXR3b3JraW5ndHLdJgAAWB8AAABsb2dnaW5nLWNvbmZpZy1kaWN0LWV4dGVybmFsb2Jqct4mAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdC1leHRlcm5hbG9ialgaAAAAQWNjZXNzIHRvIGV4dGVybmFsIG9iamVjdHN0ct8mAABYDwAAAGZ1bmMtbWVtb3J5dmlld3LgJgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLW1lbW9yeXZpZXdYAQAAAC10cuEmAABYDgAAAHhkci1leGNlcHRpb25zcuImAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkci1leGNlcHRpb25zWAoAAABFeGNlcHRpb25zdHLjJgAAWBQAAABjb25maWdwYXJzZXItb2JqZWN0c3LkJgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXItb2JqZWN0c1gUAAAAQ29uZmlnUGFyc2VyIE9iamVjdHN0cuUmAABYEAAAAHNlY3Rpb24tcHltYWxsb2Ny5iYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tcHltYWxsb2NYKAAAAFB5bWFsbG9jOiBBIFNwZWNpYWxpemVkIE9iamVjdCBBbGxvY2F0b3J0cucmAABYEwAAAGhpc3RvcnktYW5kLWxpY2Vuc2Vy6CYAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpY2Vuc2UuaHRtbCNoaXN0b3J5LWFuZC1saWNlbnNlWBMAAABIaXN0b3J5IGFuZCBMaWNlbnNldHLpJgAAWAgAAABwZXAtMDM2NnLqJgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNjZYNQAAAFBFUCAzNjY6IEV4cGxpY2l0IFJlbGF0aXZlIEltcG9ydHMgRnJvbSBhIE1haW4gTW9kdWxldHLrJgAAWBAAAABibHRpbi1leGNlcHRpb25zcuwmAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNibHRpbi1leGNlcHRpb25zWBMAAABCdWlsdC1pbiBFeGNlcHRpb25zdHLtJgAAWB0AAABweTI3LW1haW50ZW5hbmNlLWVuaGFuY2VtZW50c3LuJgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWwjcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHNYNQAAAE5ldyBGZWF0dXJlcyBBZGRlZCB0byBQeXRob24gMi43IE1haW50ZW5hbmNlIFJlbGVhc2VzdHLvJgAAWBIAAABkZWZpbmluZy1uZXctdHlwZXNy8CYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9uZXd0eXBlcy5odG1sI2RlZmluaW5nLW5ldy10eXBlc1gSAAAARGVmaW5pbmcgTmV3IFR5cGVzdHLxJgAAWBIAAABuZXctMjctaW50ZXJwcmV0ZXJy8iYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNy5odG1sI25ldy0yNy1pbnRlcnByZXRlclgTAAAASW50ZXJwcmV0ZXIgQ2hhbmdlc3Ry8yYAAFgLAAAAYmx0aW4tdHlwZXNy9CYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi10eXBlc1gOAAAAQnVpbHQtaW4gVHlwZXN0cvUmAABYBwAAAGhhbmRsZXJy9iYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2hhbmRsZXJYDwAAAEhhbmRsZXIgT2JqZWN0c3Ry9yYAAFgJAAAAdHV0LXJhbmdlcvgmAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1yYW5nZVgUAAAAVGhlIHJhbmdlKCkgRnVuY3Rpb250cvkmAABYDwAAAHN1bW1hcnktb2JqZWN0c3L6JgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNzdW1tYXJ5LW9iamVjdHNYGwAAAFN1bW1hcnkgSW5mb3JtYXRpb24gT2JqZWN0c3Ry+yYAAFgYAAAAb3B0cGFyc2UtZ2VuZXJhdGluZy1oZWxwcvwmAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZ2VuZXJhdGluZy1oZWxwWA8AAABHZW5lcmF0aW5nIGhlbHB0cv0mAABYDwAAAHN0cnVjdC1leGFtcGxlc3L+JgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QtZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHL/JgAAWAoAAABtYXBvYmplY3RzcgAnAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI21hcG9iamVjdHNYDwAAAE1hcHBpbmcgT2JqZWN0c3RyAScAAFgKAAAAbXNpLWVycm9yc3ICJwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktZXJyb3JzWAYAAABFcnJvcnN0cgMnAABYCAAAAHByb2dyYW1zcgQnAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI3Byb2dyYW1zWBgAAABDb21wbGV0ZSBQeXRob24gcHJvZ3JhbXN0cgUnAABYCgAAAGZvcm1hdHNwZWNyBicAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZm9ybWF0c3BlY1giAAAARm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZXRyBycAAFgJAAAAZXZhbG9yZGVycggnAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNldmFsb3JkZXJYEAAAAEV2YWx1YXRpb24gb3JkZXJ0cgknAABYDgAAAHBsYXllci1vYmplY3RzcgonAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjcGxheWVyLW9iamVjdHNYDgAAAFBsYXllciBPYmplY3RzdHILJwAAWAwAAAB0eXBlc29iamVjdHNyDCcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc29iamVjdHNYGwAAAENsYXNzZXMgYW5kIENsYXNzIEluc3RhbmNlc3RyDScAAFgDAAAAYW5kcg4nAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhbmRYEgAAAEJvb2xlYW4gb3BlcmF0aW9uc3RyDycAAFgFAAAAcG9ydHNyECcAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BvcnRzWBUAAABQb3J0LVNwZWNpZmljIENoYW5nZXN0chEnAABYFgAAAHVybHBhcnNlLXJlc3VsdC1vYmplY3RyEicAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS1yZXN1bHQtb2JqZWN0WCQAAABSZXN1bHRzIG9mIHVybHBhcnNlKCkgYW5kIHVybHNwbGl0KCl0chMnAABYEQAAAGVsZW1lbnR0cmVlLXhwYXRochQnAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXhwYXRoWA0AAABYUGF0aCBzdXBwb3J0dHIVJwAAWAYAAABpbXBvcnRyFicAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNpbXBvcnRYFAAAAFRoZSBpbXBvcnQgc3RhdGVtZW50dHIXJwAAWAoAAABkbnQtYmFzaWNzchgnAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCNkbnQtYmFzaWNzWAoAAABUaGUgQmFzaWNzdHIZJwAAWAkAAABhcGktdHlwZXNyGicAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLXR5cGVzWAUAAABUeXBlc3RyGycAAFgQAAAAc2VxdWVuY2UtbWV0aG9kc3IcJwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NlcXVlbmNlLW1ldGhvZHNYMgAAAEFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgZW11bGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVzdHIdJwAAWBAAAABpbnN0LXR3ZWFrLWZsYWdzch4nAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC10d2Vhay1mbGFnc1geAAAAVHdlYWtpbmcgY29tcGlsZXIvbGlua2VyIGZsYWdzdHIfJwAAWAsAAABvcy1maWxlLWRpcnIgJwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLWZpbGUtZGlyWBUAAABGaWxlcyBhbmQgRGlyZWN0b3JpZXN0ciEnAABYGAAAAG11bHRpcHJvY2Vzc2luZy1leGFtcGxlc3IiJwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmctZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHIjJwAAWBwAAABodHRwLWVycm9yLXByb2Nlc3Nvci1vYmplY3RzciQnAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNodHRwLWVycm9yLXByb2Nlc3Nvci1vYmplY3RzWBoAAABIVFRQRXJyb3JQcm9jZXNzb3IgT2JqZWN0c3RyJScAAFgVAAAAc3RydWN0LWZvcm1hdC1zdHJpbmdzciYnAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC1mb3JtYXQtc3RyaW5nc1gOAAAARm9ybWF0IFN0cmluZ3N0cicnAABYDwAAAG1haWxib3gtbWFpbGRpcnIoJwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYWlsZGlyWAcAAABNYWlsZGlydHIpJwAAWA8AAABleHRlbmRpbmctaW5kZXhyKicAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9pbmRleC5odG1sI2V4dGVuZGluZy1pbmRleFguAAAARXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlcnRyKycAAFgaAAAAb3B0cGFyc2UtcGFyc2luZy1hcmd1bWVudHNyLCcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1wYXJzaW5nLWFyZ3VtZW50c1gRAAAAUGFyc2luZyBhcmd1bWVudHN0ci0nAABYBQAAAHN1bm9zci4nAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bi5odG1sI3N1bm9zWBcAAABTdW5PUyBTcGVjaWZpYyBTZXJ2aWNlc3RyLycAAFgJAAAAdHJhY2UtY2xpcjAnAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UtY2xpWBIAAABDb21tYW5kLUxpbmUgVXNhZ2V0cjEnAABYCwAAAGRlY2ltYWwtZmFxcjInAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLWZhcVgLAAAARGVjaW1hbCBGQVF0cjMnAABYDAAAAHR1dC1tdWx0aXBsZXI0JwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1tdWx0aXBsZVgUAAAATXVsdGlwbGUgSW5oZXJpdGFuY2V0cjUnAABYCAAAAHR1dC1qc29ucjYnAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnB1dG91dHB1dC5odG1sI3R1dC1qc29uWCAAAABTYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpdGgganNvbnRyNycAAFgfAAAAZWxlbWVudHRyZWUtdHJlZWJ1aWxkZXItb2JqZWN0c3I4JwAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzWBMAAABUcmVlQnVpbGRlciBPYmplY3RzdHI5JwAAWBAAAAB0dXQtYnJpZWZ0b3VydHdvcjonAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWJyaWVmdG91cnR3b1guAAAAQnJpZWYgVG91ciBvZiB0aGUgU3RhbmRhcmQgTGlicmFyeSDigJQgUGFydCBJSXRyOycAAFgPAAAAY3VzdG9tLWhhbmRsZXJzcjwnAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY3VzdG9tLWhhbmRsZXJzWCYAAABDdXN0b21pemluZyBoYW5kbGVycyB3aXRoIGRpY3RDb25maWcoKXRyPScAAFgSAAAAc3RhbmRhcmQtZW5jb2Rpbmdzcj4nAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI3N0YW5kYXJkLWVuY29kaW5nc1gSAAAAU3RhbmRhcmQgRW5jb2RpbmdzdHI/JwAAWBsAAABlbGVtZW50dHJlZS1lbGVtZW50LW9iamVjdHNyQCcAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtZWxlbWVudC1vYmplY3RzWA8AAABFbGVtZW50IE9iamVjdHN0ckEnAABYDQAAAG5ldHJjLW9iamVjdHNyQicAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy1vYmplY3RzWA0AAABuZXRyYyBPYmplY3RzdHJDJwAAWBIAAABkZWJ1Zy1zZXR1cC1zY3JpcHRyRCcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2RlYnVnLXNldHVwLXNjcmlwdFgaAAAARGVidWdnaW5nIHRoZSBzZXR1cCBzY3JpcHR0ckUnAABYFwAAAG90aGVyLW1ldGhvZHMtYW5kLWF0dHJzckYnAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjb3RoZXItbWV0aG9kcy1hbmQtYXR0cnNYAQAAAC10ckcnAABYEgAAAGRvYy14bWxycGMtc2VydmVyc3JIJwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNkb2MteG1scnBjLXNlcnZlcnNYFwAAAERvY1hNTFJQQ1NlcnZlciBPYmplY3RzdHJJJwAAWBEAAABpbXBvcnRsaWItc2VjdGlvbnJKJwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWwjaW1wb3J0bGliLXNlY3Rpb25YFQAAAE5ldyBtb2R1bGU6IGltcG9ydGxpYnRySycAAFgPAAAAdHlwZXNzZXEteHJhbmdlckwnAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNzZXEteHJhbmdlWAsAAABYUmFuZ2UgVHlwZXRyTScAAFgYAAAAc2VxdWVuY2VtYXRjaGVyLWV4YW1wbGVzck4nAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNzZXF1ZW5jZW1hdGNoZXItZXhhbXBsZXNYGAAAAFNlcXVlbmNlTWF0Y2hlciBFeGFtcGxlc3RyTycAAFgSAAAAYmx0aW4tZmlsZS1vYmplY3RzclAnAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYmx0aW4tZmlsZS1vYmplY3RzWAwAAABGaWxlIE9iamVjdHN0clEnAABYDgAAAG51bWVyaWNvYmplY3RzclInAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI251bWVyaWNvYmplY3RzWA8AAABOdW1lcmljIE9iamVjdHN0clMnAABYDgAAAHByb2Nlc3Njb250cm9sclQnAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNwcm9jZXNzY29udHJvbFgPAAAAUHJvY2VzcyBDb250cm9sdHJVJwAAWBAAAABkb20tYXR0ci1vYmplY3RzclYnAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tYXR0ci1vYmplY3RzWAwAAABBdHRyIE9iamVjdHN0clcnAABYEQAAAG1vZHVsZS1jb250ZXh0bGliclgnAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNtb2R1bGUtY29udGV4dGxpYlgVAAAAVGhlIGNvbnRleHRsaWIgbW9kdWxldHJZJwAAWA4AAAB0dXQtbG9vcGlkaW9tc3JaJwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbG9vcGlkaW9tc1gSAAAATG9vcGluZyBUZWNobmlxdWVzdHJbJwAAWBQAAABhdHRyaWJ1dGUtcmVmZXJlbmNlc3JcJwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXR0cmlidXRlLXJlZmVyZW5jZXNYFAAAAEF0dHJpYnV0ZSByZWZlcmVuY2VzdHJdJwAAWA8AAABkZWNpbWFsLXJlY2lwZXNyXicAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtcmVjaXBlc1gHAAAAUmVjaXBlc3RyXycAAFgVAAAAY29va2llLXBvbGljeS1vYmplY3RzcmAnAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZS1wb2xpY3ktb2JqZWN0c1gUAAAAQ29va2llUG9saWN5IE9iamVjdHN0cmEnAABYBgAAADI0YWNrc3JiJwAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi40Lmh0bWwjYWNrc1gQAAAAQWNrbm93bGVkZ2VtZW50c3RyYycAAFgPAAAAYXUtcmVhZC1vYmplY3RzcmQnAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjYXUtcmVhZC1vYmplY3RzWA8AAABBVV9yZWFkIE9iamVjdHN0cmUnAABYGwAAAG9wdHBhcnNlLWNhbGxiYWNrLWV4YW1wbGUtNHJmJwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNhbGxiYWNrLWV4YW1wbGUtNFgtAAAAQ2FsbGJhY2sgZXhhbXBsZSA0OiBjaGVjayBhcmJpdHJhcnkgY29uZGl0aW9udHJnJwAAWA4AAAB0dXQtc2VhcmNocGF0aHJoJwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1zZWFyY2hwYXRoWBYAAABUaGUgTW9kdWxlIFNlYXJjaCBQYXRodHJpJwAAWBMAAAB0dXQtbXVsdGktdGhyZWFkaW5ncmonAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LW11bHRpLXRocmVhZGluZ1gPAAAATXVsdGktdGhyZWFkaW5ndHJrJwAAWA8AAABhbC1wb3J0LW9iamVjdHNybCcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNhbC1wb3J0LW9iamVjdHNYDAAAAFBvcnQgT2JqZWN0c3RybScAAFgNAAAAZGVjaW1hbC1ub3Rlc3JuJwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1ub3Rlc1gUAAAARmxvYXRpbmcgUG9pbnQgTm90ZXN0cm8nAABYDQAAAHR1dC1icmllZnRvdXJycCcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1icmllZnRvdXJYIgAAAEJyaWVmIFRvdXIgb2YgdGhlIFN0YW5kYXJkIExpYnJhcnl0cnEnAABYEwAAAHR1dC1jbGFzc2RlZmluaXRpb25ycicAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtY2xhc3NkZWZpbml0aW9uWBcAAABDbGFzcyBEZWZpbml0aW9uIFN5bnRheHRycycAAFgRAAAAd2FybmluZy1mdW5jdGlvbnNydCcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLWZ1bmN0aW9uc1gTAAAAQXZhaWxhYmxlIEZ1bmN0aW9uc3RydScAAFgQAAAAbG9nZ2luZy1jb29rYm9va3J2JwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2xvZ2dpbmctY29va2Jvb2tYEAAAAExvZ2dpbmcgQ29va2Jvb2t0cncnAABYDAAAAGN1c3RvbWludGVycHJ4JwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXN0b21pbnRlcnAuaHRtbCNjdXN0b21pbnRlcnBYGgAAAEN1c3RvbSBQeXRob24gSW50ZXJwcmV0ZXJzdHJ5JwAAWAgAAABzbGljaW5nc3J6JwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjc2xpY2luZ3NYCAAAAFNsaWNpbmdzdHJ7JwAAWBYAAABkb21ldmVudHN0cmVhbS1vYmplY3RzcnwnAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI2RvbWV2ZW50c3RyZWFtLW9iamVjdHNYFgAAAERPTUV2ZW50U3RyZWFtIE9iamVjdHN0cn0nAABYFwAAAHJhd2NvbmZpZ3BhcnNlci1vYmplY3Rzcn4nAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI3Jhd2NvbmZpZ3BhcnNlci1vYmplY3RzWBcAAABSYXdDb25maWdQYXJzZXIgT2JqZWN0c3RyfycAAFgPAAAAZG9jdGVzdC1leGFtcGxlcoAnAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWV4YW1wbGVYDwAAAEV4YW1wbGUgT2JqZWN0c3RygScAAFgLAAAAdHlwZW9iamVjdHNygicAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCN0eXBlb2JqZWN0c1gMAAAAVHlwZSBPYmplY3RzdHKDJwAAWAoAAABsb2ctcmVjb3JkcoQnAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2ctcmVjb3JkWBEAAABMb2dSZWNvcmQgT2JqZWN0c3RyhScAAFgZAAAAbXVsdGlwcm9jZXNzaW5nLWF1dGgta2V5c3KGJwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmctYXV0aC1rZXlzWBMAAABBdXRoZW50aWNhdGlvbiBrZXlzdHKHJwAAWA4AAABvd25lcnNoaXBydWxlc3KIJwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI293bmVyc2hpcHJ1bGVzWA8AAABPd25lcnNoaXAgUnVsZXN0coknAABYCAAAAGNvbmNyZXRlcoonAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI2NvbmNyZXRlWBYAAABDb25jcmV0ZSBPYmplY3RzIExheWVydHKLJwAAWAkAAABvcGVyYXRvcnNyjCcAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjb3BlcmF0b3JzWAkAAABPcGVyYXRvcnN0co0nAABYFwAAAHN1YnByb2Nlc3MtcmVwbGFjZW1lbnRzco4nAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLXJlcGxhY2VtZW50c1g0AAAAUmVwbGFjaW5nIE9sZGVyIEZ1bmN0aW9ucyB3aXRoIHRoZSBzdWJwcm9jZXNzIE1vZHVsZXRyjycAAFgJAAAAYnl0ZWNvZGVzcpAnAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2J5dGVjb2Rlc1gcAAAAUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9uc3RykScAAFgQAAAAaW5zdGFsbGluZy1pbmRleHKSJwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbGluZy9pbmRleC5odG1sI2luc3RhbGxpbmctaW5kZXhYGQAAAEluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXN0cpMnAABYHwAAAGN0eXBlcy1sb2FkaW5nLXNoYXJlZC1saWJyYXJpZXNylCcAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWxvYWRpbmctc2hhcmVkLWxpYnJhcmllc1gYAAAATG9hZGluZyBzaGFyZWQgbGlicmFyaWVzdHKVJwAAWAQAAABleGVjcpYnAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZXhlY1gSAAAAVGhlIGV4ZWMgc3RhdGVtZW50dHKXJwAAWA4AAABjb21wbGV4b2JqZWN0c3KYJwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2NvbXBsZXhvYmplY3RzWBYAAABDb21wbGV4IE51bWJlciBPYmplY3RzdHKZJwAAWAsAAABwaWNrbGUtaW5zdHKaJwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtaW5zdFguAAAAUGlja2xpbmcgYW5kIHVucGlja2xpbmcgbm9ybWFsIGNsYXNzIGluc3RhbmNlc3RymycAAFgNAAAAYnNkZGItb2JqZWN0c3KcJwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLW9iamVjdHNYHgAAAEhhc2gsIEJUcmVlIGFuZCBSZWNvcmQgT2JqZWN0c3RynScAAFgNAAAAaW5zcGVjdC1zdGFja3KeJwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC1zdGFja1gVAAAAVGhlIGludGVycHJldGVyIHN0YWNrdHKfJwAAWBsAAAB0aW1lZC1yb3RhdGluZy1maWxlLWhhbmRsZXJyoCcAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3RpbWVkLXJvdGF0aW5nLWZpbGUtaGFuZGxlclgYAAAAVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVydHKhJwAAWAsAAAB1c2luZy1pbmRleHKiJwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvaW5kZXguaHRtbCN1c2luZy1pbmRleFgWAAAAUHl0aG9uIFNldHVwIGFuZCBVc2FnZXRyoycAAFgKAAAAdHV0LXR1cGxlc3KkJwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtdHVwbGVzWBQAAABUdXBsZXMgYW5kIFNlcXVlbmNlc3RypScAAFgQAAAAcGFja2FnZS1yZWdpc3RlcnKmJwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3BhY2thZ2UtcmVnaXN0ZXJYFAAAAFRoZSByZWdpc3RlciBjb21tYW5kdHKnJwAAWBMAAABidWlsZGluZy1vbi13aW5kb3dzcqgnAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvd2luZG93cy5odG1sI2J1aWxkaW5nLW9uLXdpbmRvd3NYKAAAAEJ1aWxkaW5nIEMgYW5kIEMrKyBFeHRlbnNpb25zIG9uIFdpbmRvd3N0cqknAABYCQAAAHR1dC1lcnJvcnKqJwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtZXJyb3JYDgAAAEVycm9yIEhhbmRsaW5ndHKrJwAAWBEAAABlbWFpbC1wa2ctaGlzdG9yeXKsJwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5odG1sI2VtYWlsLXBrZy1oaXN0b3J5WA8AAABQYWNrYWdlIEhpc3Rvcnl0cq0nAABYCwAAAG9zLW1pc2NmdW5jcq4nAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MtbWlzY2Z1bmNYFwAAAE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zdHKvJwAAWAoAAABwaWNrbGUtc3VicrAnAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS1zdWJYFgAAAFN1YmNsYXNzaW5nIFVucGlja2xlcnN0crEnAABYDAAAAHB5dGhvbi10ZXJtc3KyJwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI3B5dGhvbi10ZXJtc1gaAAAAR2VuZXJhbCBQeXRob24gdGVybWlub2xvZ3l0crMnAABYCAAAAGdpbHN0YXRlcrQnAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjZ2lsc3RhdGVYGgAAAE5vbi1QeXRob24gY3JlYXRlZCB0aHJlYWRzdHK1JwAAWBMAAABleHRlbmRpbmctZGlzdHV0aWxzcrYnAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLWRpc3R1dGlsc1gTAAAARXh0ZW5kaW5nIERpc3R1dGlsc3RytycAAFgUAAAAaW5zdC10cml2aWFsLWluc3RhbGxyuCcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXRyaXZpYWwtaW5zdGFsbFgfAAAAQmVzdCBjYXNlOiB0cml2aWFsIGluc3RhbGxhdGlvbnRyuScAAFgNAAAAY3VzdG9tLWxldmVsc3K6JwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sI2N1c3RvbS1sZXZlbHNYDQAAAEN1c3RvbSBMZXZlbHN0crsnAABYDgAAAHBhY2thZ2UtdXBsb2FkcrwnAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvcGFja2FnZWluZGV4Lmh0bWwjcGFja2FnZS11cGxvYWRYEgAAAFRoZSB1cGxvYWQgY29tbWFuZHRyvScAAFgMAAAAdHV0LWhhbmRsaW5ncr4nAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtaGFuZGxpbmdYEwAAAEhhbmRsaW5nIEV4Y2VwdGlvbnN0cr8nAABYCgAAAHR1dC1pbnRlcnBywCcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVycFgjAAAAVGhlIEludGVycHJldGVyIGFuZCBJdHMgRW52aXJvbm1lbnR0csEnAABYEAAAAHR1dC1kaWN0aW9uYXJpZXNywicAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWRpY3Rpb25hcmllc1gMAAAARGljdGlvbmFyaWVzdHLDJwAAWBcAAABmdW5jdGlvbnMtaW4tY2dpLW1vZHVsZXLEJwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2kuaHRtbCNmdW5jdGlvbnMtaW4tY2dpLW1vZHVsZVgJAAAARnVuY3Rpb25zdHLFJwAAWBAAAABzc2wtY2VydGlmaWNhdGVzcsYnAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC1jZXJ0aWZpY2F0ZXNYDAAAAENlcnRpZmljYXRlc3RyxycAAFgTAAAAdHV0LWxpc3RzLWFzLXN0YWNrc3LIJwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbGlzdHMtYXMtc3RhY2tzWBUAAABVc2luZyBMaXN0cyBhcyBTdGFja3N0csknAABYDAAAAHR1dC1pbmZvcm1hbHLKJwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWluZm9ybWFsWCIAAABBbiBJbmZvcm1hbCBJbnRyb2R1Y3Rpb24gdG8gUHl0aG9udHLLJwAAWA8AAAB0dXQtaW50ZXJhY3RpdmVyzCcAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVyYWN0aXZlWBAAAABJbnRlcmFjdGl2ZSBNb2RldHLNJwAAWAsAAABleHByZXNzaW9uc3LOJwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZXhwcmVzc2lvbnNYCwAAAEV4cHJlc3Npb25zdHLPJwAAWA4AAABzY3JlZW5zcGVjaWZpY3LQJwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCNzY3JlZW5zcGVjaWZpY1g7AAAATWV0aG9kcyBzcGVjaWZpYyB0byBTY3JlZW4sIG5vdCBpbmhlcml0ZWQgZnJvbSBUdXJ0bGVTY3JlZW50ctEnAABYCQAAAGJ1aWxkLWFwaXLSJwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjYnVpbGQtYXBpWBcAAABCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlc3Ry0ycAAFgMAAAAdHlwZXNtZXRob2RzctQnAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNtZXRob2RzWAcAAABNZXRob2RzdHLVJwAAWBkAAABpbnNwZWN0LWNsYXNzZXMtZnVuY3Rpb25zctYnAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LWNsYXNzZXMtZnVuY3Rpb25zWBUAAABDbGFzc2VzIGFuZCBmdW5jdGlvbnN0ctcnAABYDgAAAHR1dC1saXN0LXRvb2xzctgnAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWxpc3QtdG9vbHNYHAAAAFRvb2xzIGZvciBXb3JraW5nIHdpdGggTGlzdHN0ctknAABYCwAAAG1ldGhvZHRhYmxlctonAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjbWV0aG9kdGFibGVYNwAAAFRoZSBNb2R1bGXigJlzIE1ldGhvZCBUYWJsZSBhbmQgSW5pdGlhbGl6YXRpb24gRnVuY3Rpb250ctsnAABYEAAAAGltcGxpY2l0LWpvaW5pbmdy3CcAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW1wbGljaXQtam9pbmluZ1gVAAAASW1wbGljaXQgbGluZSBqb2luaW5ndHLdJwAAWAwAAABxdWVyeWluZy1zdHNy3icAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcXVlcnlpbmctc3RzWBUAAABRdWVyaWVzIG9uIFNUIE9iamVjdHN0ct8nAABYDwAAAHRlcm1pb3MtZXhhbXBsZXLgJwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy1leGFtcGxlWAEAAAAtdHLhJwAAWBUAAABpbnN0LXN0YW5kYXJkLWluc3RhbGxy4icAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXN0YW5kYXJkLWluc3RhbGxYGgAAAFN0YW5kYXJkIEJ1aWxkIGFuZCBJbnN0YWxsdHLjJwAAWA4AAABzb2NrZXQtZXhhbXBsZXLkJwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQtZXhhbXBsZVgHAAAARXhhbXBsZXRy5ScAAFgIAAAAc2VxdWVuY2Vy5icAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjc2VxdWVuY2VYEQAAAFNlcXVlbmNlIFByb3RvY29sdHLnJwAAWAsAAAB0dXQtY2xhc3Nlc3LoJwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1jbGFzc2VzWAcAAABDbGFzc2VzdHLpJwAAWBQAAABzdHJlYW0tcmVhZGVyLXdyaXRlcnLqJwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNzdHJlYW0tcmVhZGVyLXdyaXRlclgaAAAAU3RyZWFtUmVhZGVyV3JpdGVyIE9iamVjdHN0cusnAABYGgAAAGluY3JlbWVudGFsLXBhcnNlci1vYmplY3RzcuwnAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjaW5jcmVtZW50YWwtcGFyc2VyLW9iamVjdHNYGQAAAEluY3JlbWVudGFsUGFyc2VyIE9iamVjdHN0cu0nAABYDwAAAHppcGZpbGUtb2JqZWN0c3LuJwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS1vYmplY3RzWA8AAABaaXBGaWxlIE9iamVjdHN0cu8nAABYDgAAAG1vZHVsZS1oYXNobGlicvAnAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtaGFzaGxpYlgTAAAAVGhlIGhhc2hsaWIgcGFja2FnZXRy8ScAAFgJAAAAZXhwcnN0bXRzcvInAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZXhwcnN0bXRzWBUAAABFeHByZXNzaW9uIHN0YXRlbWVudHN0cvMnAABYCgAAAHdpdGgtbG9ja3Ny9CcAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjd2l0aC1sb2Nrc1g9AAAAVXNpbmcgbG9ja3MsIGNvbmRpdGlvbnMsIGFuZCBzZW1hcGhvcmVzIGluIHRoZSB3aXRoIHN0YXRlbWVudHRy9ScAAFgNAAAAZGF0ZXRpbWUtZGF0ZXL2JwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLWRhdGVYDAAAAGRhdGUgT2JqZWN0c3Ry9ycAAFgMAAAAdHlwZXNudW1lcmljcvgnAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNudW1lcmljWCsAAABOdW1lcmljIFR5cGVzIOKAlCBpbnQsIGZsb2F0LCBsb25nLCBjb21wbGV4dHL5JwAAWBgAAABodHRwLWRpZ2VzdC1hdXRoLWhhbmRsZXJy+icAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHAtZGlnZXN0LWF1dGgtaGFuZGxlclgdAAAASFRUUERpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHN0cvsnAABYCwAAAGZ1bmRhbWVudGFscvwnAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI2Z1bmRhbWVudGFsWBMAAABGdW5kYW1lbnRhbCBPYmplY3RzdHL9JwAAWAYAAABhc3NlcnRy/icAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhc3NlcnRYFAAAAFRoZSBhc3NlcnQgc3RhdGVtZW50dHL/JwAAWAoAAAByZWZsZWN0aW9ucgAoAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjcmVmbGVjdGlvblgKAAAAUmVmbGVjdGlvbnRyASgAAFgLAAAAYy1hcGktaW5kZXhyAigAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luZGV4Lmh0bWwjYy1hcGktaW5kZXhYHQAAAFB5dGhvbi9DIEFQSSBSZWZlcmVuY2UgTWFudWFsdHIDKAAAWBQAAABkaWFsb2d3aW5kb3ctb2JqZWN0c3IEKAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNkaWFsb2d3aW5kb3ctb2JqZWN0c1gUAAAARGlhbG9nV2luZG93IE9iamVjdHN0cgUoAABYEAAAAHN0cnVjdC1hbGlnbm1lbnRyBigAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LWFsaWdubWVudFgfAAAAQnl0ZSBPcmRlciwgU2l6ZSwgYW5kIEFsaWdubWVudHRyBygAAFgRAAAAb3B0cGFyc2UtdHV0b3JpYWxyCCgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS10dXRvcmlhbFgIAAAAVHV0b3JpYWx0cgkoAABYCgAAAHJlc3RyaWN0ZWRyCigAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzdHJpY3RlZC5odG1sI3Jlc3RyaWN0ZWRYFAAAAFJlc3RyaWN0ZWQgRXhlY3V0aW9udHILKAAAWBwAAABjdHlwZXMtc3RydWN0dXJlZC1kYXRhLXR5cGVzcgwoAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zdHJ1Y3R1cmVkLWRhdGEtdHlwZXNYFQAAAFN0cnVjdHVyZWQgZGF0YSB0eXBlc3RyDSgAAFgEAAAAZnJvbXIOKAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2Zyb21YFAAAAFRoZSBpbXBvcnQgc3RhdGVtZW50dHIPKAAAWBEAAAB1bml0dGVzdC1za2lwcGluZ3IQKAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LXNraXBwaW5nWCQAAABTa2lwcGluZyB0ZXN0cyBhbmQgZXhwZWN0ZWQgZmFpbHVyZXN0chEoAABYBAAAAGVsaWZyEigAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2VsaWZYEAAAAFRoZSBpZiBzdGF0ZW1lbnR0chMoAABYBgAAAGxhbWJkYXIUKAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbGFtYmRhWAcAAABMYW1iZGFzdHIVKAAAWA8AAABwYXJ0aWFsLW9iamVjdHNyFigAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjcGFydGlhbC1vYmplY3RzWA8AAABwYXJ0aWFsIE9iamVjdHN0chcoAABYFwAAAGRldGVybWluaXN0aWMtcHJvZmlsaW5nchgoAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNkZXRlcm1pbmlzdGljLXByb2ZpbGluZ1ggAAAAV2hhdCBJcyBEZXRlcm1pbmlzdGljIFByb2ZpbGluZz90chkoAABYDwAAAHNlYXJjaC12cy1tYXRjaHIaKAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3NlYXJjaC12cy1tYXRjaFgUAAAAc2VhcmNoKCkgdnMuIG1hdGNoKCl0chsoAABYDQAAAG1vZHVsZW9iamVjdHNyHCgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI21vZHVsZW9iamVjdHNYDgAAAE1vZHVsZSBPYmplY3RzdHIdKAAAWAYAAABzaW1wbGVyHigAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNzaW1wbGVYEQAAAFNpbXBsZSBzdGF0ZW1lbnRzdHIfKAAAWBcAAABuZXctMjUtY29udGV4dC1tYW5hZ2Vyc3IgKAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjbmV3LTI1LWNvbnRleHQtbWFuYWdlcnNYGAAAAFdyaXRpbmcgQ29udGV4dCBNYW5hZ2Vyc3RyISgAAFgXAAAAdW5pdHRlc3QtdGVzdC1kaXNjb3ZlcnlyIigAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC10ZXN0LWRpc2NvdmVyeVgOAAAAVGVzdCBEaXNjb3Zlcnl0ciMoAABYEQAAAHRyYWNlYmFjay1leGFtcGxlciQoAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay1leGFtcGxlWBIAAABUcmFjZWJhY2sgRXhhbXBsZXN0ciUoAABYCgAAAHN0LW9iamVjdHNyJigAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjc3Qtb2JqZWN0c1gKAAAAU1QgT2JqZWN0c3RyJygAAFgVAAAAaHR0cC1yZWRpcmVjdC1oYW5kbGVycigoAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNodHRwLXJlZGlyZWN0LWhhbmRsZXJYGwAAAEhUVFBSZWRpcmVjdEhhbmRsZXIgT2JqZWN0c3RyKSgAAFgTAAAAaW5zdC1jdXN0b20taW5zdGFsbHIqKAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtY3VzdG9tLWluc3RhbGxYEwAAAEN1c3RvbSBJbnN0YWxsYXRpb250cisoAABYEgAAAGVuY29kaW5ncy1vdmVydmlld3IsKAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3Mtb3ZlcnZpZXdYFQAAAEVuY29kaW5ncyBhbmQgVW5pY29kZXRyLSgAAFgRAAAAaW5zdC1idWlsZGluZy1leHRyLigAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWJ1aWxkaW5nLWV4dFgkAAAAQnVpbGRpbmcgRXh0ZW5zaW9uczogVGlwcyBhbmQgVHJpY2tzdHIvKAAAWA4AAABzb2NrZXQtaGFuZGxlcnIwKAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc29ja2V0LWhhbmRsZXJYDQAAAFNvY2tldEhhbmRsZXJ0cjEoAABYFgAAAGN0eXBlcy1hcnJheXMtcG9pbnRlcnNyMigAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWFycmF5cy1wb2ludGVyc1gTAAAAQXJyYXlzIGFuZCBwb2ludGVyc3RyMygAAFgUAAAAZXhwYXQtY29udGVudC1tb2RlbHNyNCgAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0LWNvbnRlbnQtbW9kZWxzWBoAAABDb250ZW50IE1vZGVsIERlc2NyaXB0aW9uc3RyNSgAAFgOAAAAd2hhdHNuZXctaW5kZXhyNigAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3L2luZGV4Lmh0bWwjd2hhdHNuZXctaW5kZXhYFgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob250cjcoAABYDAAAAHdyaXRlci1pbXBsc3I4KAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCN3cml0ZXItaW1wbHNYFgAAAFdyaXRlciBJbXBsZW1lbnRhdGlvbnN0cjkoAABYEAAAAG9ic29sZXRlLW1vZHVsZXNyOigAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNvYnNvbGV0ZS1tb2R1bGVzWAgAAABPYnNvbGV0ZXRyOygAAFgSAAAAc2VtYXBob3JlLWV4YW1wbGVzcjwoAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3NlbWFwaG9yZS1leGFtcGxlc1gRAAAAU2VtYXBob3JlIEV4YW1wbGV0cj0oAABYDQAAAGZhdWx0LW9iamVjdHNyPigAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjZmF1bHQtb2JqZWN0c1gNAAAARmF1bHQgT2JqZWN0c3RyPygAAFgDAAAAaWRlckAoAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9tYWMuaHRtbCNpZGVYBwAAAFRoZSBJREV0ckEoAABYEAAAAHNlcXVlbmNlLXN0cnVjdHNyQigAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNzZXF1ZW5jZS1zdHJ1Y3RzWBoAAABTZXF1ZW5jZSBPYmplY3QgU3RydWN0dXJlc3RyQygAAFgQAAAAY3JlYXRpbmctd2luaW5zdHJEKAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sI2NyZWF0aW5nLXdpbmluc3RYGwAAAENyZWF0aW5nIFdpbmRvd3MgSW5zdGFsbGVyc3RyRSgAAFgJAAAAcHJpbWFyaWVzckYoAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwcmltYXJpZXNYCQAAAFByaW1hcmllc3RyRygAAFgOAAAAdHV0LWRvY3N0cmluZ3NySCgAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWRvY3N0cmluZ3NYFQAAAERvY3VtZW50YXRpb24gU3RyaW5nc3RySSgAAFgOAAAAdHV0LWdlbmVyYXRvcnNySigAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtZ2VuZXJhdG9yc1gKAAAAR2VuZXJhdG9yc3RySygAAFgRAAAAZGF0ZXRpbWUtZGF0ZXRpbWVyTCgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS1kYXRldGltZVgQAAAAZGF0ZXRpbWUgT2JqZWN0c3RyTSgAAFgSAAAAemlwaW1wb3J0LWV4YW1wbGVzck4oAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC1leGFtcGxlc1gIAAAARXhhbXBsZXN0ck8oAABYGQAAAGN0eXBlcy1jYWxsYmFjay1mdW5jdGlvbnNyUCgAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxiYWNrLWZ1bmN0aW9uc1gSAAAAQ2FsbGJhY2sgZnVuY3Rpb25zdHJRKAAAWBAAAAB0aHJlYWRlZC1pbXBvcnRzclIoAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGVkLWltcG9ydHNYGgAAAEltcG9ydGluZyBpbiB0aHJlYWRlZCBjb2RldHJTKAAAWBIAAAB0dXQtZmlsZS13aWxkY2FyZHNyVCgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1maWxlLXdpbGRjYXJkc1gOAAAARmlsZSBXaWxkY2FyZHN0clUoAABYEQAAAHVuaWNvZGVleGNlcHRpb25zclYoAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjdW5pY29kZWV4Y2VwdGlvbnNYGQAAAFVuaWNvZGUgRXhjZXB0aW9uIE9iamVjdHN0clcoAABYDAAAAHBvcDMtb2JqZWN0c3JYKAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3AzLW9iamVjdHNYDAAAAFBPUDMgT2JqZWN0c3RyWSgAAFgZAAAAZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0c3JaKAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0c1gUAAAATmFtZWROb2RlTWFwIE9iamVjdHN0clsoAABYEQAAAGRvY3Rlc3QtZGVidWdnaW5nclwoAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWRlYnVnZ2luZ1gJAAAARGVidWdnaW5ndHJdKAAAWA0AAABhY2Nlc3MtcmlnaHRzcl4oAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNhY2Nlc3MtcmlnaHRzWA0AAABBY2Nlc3MgUmlnaHRzdHJfKAAAWBMAAAB0dXQtbGlzdHMtYXMtcXVldWVzcmAoAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1saXN0cy1hcy1xdWV1ZXNYFQAAAFVzaW5nIExpc3RzIGFzIFF1ZXVlc3RyYSgAAFgNAAAAbXNpLWRpcmVjdG9yeXJiKAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktZGlyZWN0b3J5WBEAAABEaXJlY3RvcnkgT2JqZWN0c3RyYygAAFgZAAAAZmFxLWFyZ3VtZW50LXZzLXBhcmFtZXRlcnJkKAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL3Byb2dyYW1taW5nLmh0bWwjZmFxLWFyZ3VtZW50LXZzLXBhcmFtZXRlclg4AAAAV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycz90cmUoAABYEAAAAGV4YW1wbGVzLWltcHV0aWxyZigAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2V4YW1wbGVzLWltcHV0aWxYCAAAAEV4YW1wbGVzdHJnKAAAWBEAAABtYXJzaGFsbGluZy11dGlsc3JoKAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI21hcnNoYWxsaW5nLXV0aWxzWBgAAABEYXRhIG1hcnNoYWxsaW5nIHN1cHBvcnR0cmkoAABYCgAAAGV4Y2VwdGlvbnNyaigAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI2V4Y2VwdGlvbnNYCgAAAEV4Y2VwdGlvbnN0cmsoAABYDwAAAHJlZmVyZW5jZS1pbmRleHJsKAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2luZGV4Lmh0bWwjcmVmZXJlbmNlLWluZGV4WB0AAABUaGUgUHl0aG9uIExhbmd1YWdlIFJlZmVyZW5jZXRybSgAAFgSAAAAb3RoZXItZ3VpLXBhY2thZ2Vzcm4oAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L290aGVyZ3VpLmh0bWwjb3RoZXItZ3VpLXBhY2thZ2VzWCcAAABPdGhlciBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgUGFja2FnZXN0cm8oAABYBwAAAG9iamVjdHNycCgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3RzWBkAAABPYmplY3RzLCB2YWx1ZXMgYW5kIHR5cGVzdHJxKAAAWB8AAABjdHlwZXMtZmluZGluZy1zaGFyZWQtbGlicmFyaWVzcnIoAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1maW5kaW5nLXNoYXJlZC1saWJyYXJpZXNYGAAAAEZpbmRpbmcgc2hhcmVkIGxpYnJhcmllc3RycygAAFgYAAAAc2FmZWNvbmZpZ3BhcnNlci1vYmplY3RzcnQoAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI3NhZmVjb25maWdwYXJzZXItb2JqZWN0c1gYAAAAU2FmZUNvbmZpZ1BhcnNlciBPYmplY3RzdHJ1KAAAWAwAAABtc3ZjcnQtb3RoZXJydigAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LW90aGVyWA8AAABPdGhlciBGdW5jdGlvbnN0cncoAABYEQAAAGRpZmZsaWItaW50ZXJmYWNlcngoAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLWludGVyZmFjZVgjAAAAQSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHRvIGRpZmZsaWJ0cnkoAABYCwAAAGRlc2NyaXB0b3JzcnooAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZGVzY3JpcHRvcnNYGAAAAEltcGxlbWVudGluZyBEZXNjcmlwdG9yc3RyeygAAFgaAAAAdXNpbmctb24taW50ZXJmYWNlLW9wdGlvbnNyfCgAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1pbnRlcmZhY2Utb3B0aW9uc1gRAAAASW50ZXJmYWNlIG9wdGlvbnN0cn0oAABYEAAAAGV4cHJlc3Npb24taW5wdXRyfigAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjZXhwcmVzc2lvbi1pbnB1dFgQAAAARXhwcmVzc2lvbiBpbnB1dHRyfygAAFgLAAAAZ2V0dGluZy1vc3hygCgAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL21hYy5odG1sI2dldHRpbmctb3N4WCAAAABHZXR0aW5nIGFuZCBJbnN0YWxsaW5nIE1hY1B5dGhvbnRygSgAAFgPAAAAc3lzdGVtZnVuY3Rpb25zcoIoAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNzeXN0ZW1mdW5jdGlvbnNYEAAAAFN5c3RlbSBGdW5jdGlvbnN0coMoAABYAwAAAGNhYnKEKAAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNjYWJYCwAAAENBQiBPYmplY3RzdHKFKAAAWA0AAABwcm94eS1oYW5kbGVycoYoAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNwcm94eS1oYW5kbGVyWBQAAABQcm94eUhhbmRsZXIgT2JqZWN0c3RyhygAAFgIAAAAcHVyZS1wa2dyiCgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9leGFtcGxlcy5odG1sI3B1cmUtcGtnWCUAAABQdXJlIFB5dGhvbiBkaXN0cmlidXRpb24gKGJ5IHBhY2thZ2UpdHKJKAAAWA8AAABleHRlbmRpbmctaW50cm9yiigAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNleHRlbmRpbmctaW50cm9YHgAAAEV4dGVuZGluZyBQeXRob24gd2l0aCBDIG9yIEMrK3RyiygAAFgJAAAAdHV0LXVzaW5ncowoAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnRlcnByZXRlci5odG1sI3R1dC11c2luZ1gcAAAAVXNpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlcnRyjSgAAFgaAAAAc2ltcGxleG1scnBjc2VydmVyLWV4YW1wbGVyjigAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjc2ltcGxleG1scnBjc2VydmVyLWV4YW1wbGVYGgAAAFNpbXBsZVhNTFJQQ1NlcnZlciBFeGFtcGxldHKPKAAAWA4AAAB0eXBlc2Z1bmN0aW9uc3KQKAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzZnVuY3Rpb25zWAkAAABGdW5jdGlvbnN0cpEoAABYCwAAAGJvb2xvYmplY3RzcpIoAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWwjYm9vbG9iamVjdHNYDwAAAEJvb2xlYW4gT2JqZWN0c3RykygAAFgPAAAAbmV0d29yay1sb2dnaW5ncpQoAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjbmV0d29yay1sb2dnaW5nWDUAAABTZW5kaW5nIGFuZCByZWNlaXZpbmcgbG9nZ2luZyBldmVudHMgYWNyb3NzIGEgbmV0d29ya3RylSgAAFgPAAAAd2Vha3JlZi1zdXBwb3J0cpYoAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCN3ZWFrcmVmLXN1cHBvcnRYFgAAAFdlYWsgUmVmZXJlbmNlIFN1cHBvcnR0cpcoAABYDwAAAGRlY2ltYWwtdGhyZWFkc3KYKAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC10aHJlYWRzWBQAAABXb3JraW5nIHdpdGggdGhyZWFkc3RymSgAAFgOAAAAd2luZG93LW9iamVjdHNymigAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjd2luZG93LW9iamVjdHNYDgAAAFdpbmRvdyBPYmplY3RzdHKbKAAAWAwAAABjb3VudGluZ3JlZnNynCgAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjY291bnRpbmdyZWZzWBIAAABSZWZlcmVuY2UgQ291bnRpbmd0cp0oAABYDQAAAGV2ZW50LW9iamVjdHNynigAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjZXZlbnQtb2JqZWN0c1gNAAAARXZlbnQgT2JqZWN0c3RynygAAFgRAAAAYXJjaGl2aW5nLWV4YW1wbGVyoCgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjYXJjaGl2aW5nLWV4YW1wbGVYEQAAAEFyY2hpdmluZyBleGFtcGxldHKhKAAAWBEAAABjb25kaXRpb24tb2JqZWN0c3KiKAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNjb25kaXRpb24tb2JqZWN0c1gRAAAAQ29uZGl0aW9uIE9iamVjdHN0cqMoAABYBwAAAG1zaS1ndWlypCgAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpLWd1aVgLAAAAR1VJIGNsYXNzZXN0cqUoAABYCgAAAG5vbmVvYmplY3RypigAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL25vbmUuaHRtbCNub25lb2JqZWN0WA8AAABUaGUgTm9uZSBPYmplY3R0cqcoAABYDAAAAGNzdi1jb250ZW50c3KoKAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YtY29udGVudHNYDwAAAE1vZHVsZSBDb250ZW50c3RyqSgAAFggAAAAc3FsaXRlMy1jb250cm9sbGluZy10cmFuc2FjdGlvbnNyqigAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMtY29udHJvbGxpbmctdHJhbnNhY3Rpb25zWBgAAABDb250cm9sbGluZyBUcmFuc2FjdGlvbnN0cqsoAABYAwAAAHhtbHKsKAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuaHRtbCN4bWxYFgAAAFhNTCBQcm9jZXNzaW5nIE1vZHVsZXN0cq0oAABYEAAAAGR5bmFtaWMtZmVhdHVyZXNyrigAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI2R5bmFtaWMtZmVhdHVyZXNYIQAAAEludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc3RyrygAAFgGAAAAZmlsdGVycrAoAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNmaWx0ZXJYDgAAAEZpbHRlciBPYmplY3RzdHKxKAAAWAgAAABjb2JqZWN0c3KyKAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2NvYmplY3RzWAgAAABDT2JqZWN0c3RysygAAFgRAAAAdW5pdHRlc3QtY29udGVudHNytCgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC1jb250ZW50c1gVAAAAQ2xhc3NlcyBhbmQgZnVuY3Rpb25zdHK1KAAAWAoAAABkZWxpbWl0ZXJzcrYoAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2RlbGltaXRlcnNYCgAAAERlbGltaXRlcnN0crcoAABYDgAAAGtldmVudC1vYmplY3RzcrgoAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI2tldmVudC1vYmplY3RzWA4AAABLZXZlbnQgT2JqZWN0c3RyuSgAAFgCAAAAb3JyuigAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI29yWBIAAABCb29sZWFuIG9wZXJhdGlvbnN0crsoAABYCgAAADJ0bzMtdXNpbmdyvCgAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sI3RvMy11c2luZ1gKAAAAVXNpbmcgMnRvM3RyvSgAAFggAAAAb3B0cGFyc2Utc3RhbmRhcmQtb3B0aW9uLWFjdGlvbnNyvigAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1zdGFuZGFyZC1vcHRpb24tYWN0aW9uc1gXAAAAU3RhbmRhcmQgb3B0aW9uIGFjdGlvbnN0cr8oAABYEQAAAGRlYnVnZ2VyLWNvbW1hbmRzcsAoAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI2RlYnVnZ2VyLWNvbW1hbmRzWBEAAABEZWJ1Z2dlciBDb21tYW5kc3RywSgAAFgCAAAAb3NywigAAChqcwUAAGp0BQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI29zWBoAAABPcGVyYXRpbmcgU3lzdGVtIFV0aWxpdGllc3RywygAAFgQAAAAaHR0cGxpYi1leGFtcGxlc3LEKAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi1leGFtcGxlc1gIAAAARXhhbXBsZXN0csUoAABYBQAAAHNsb3RzcsYoAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjc2xvdHNYCQAAAF9fc2xvdHNfX3RyxygAAFgOAAAAZnVuYy1mcm96ZW5zZXRyyCgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZnVuYy1mcm96ZW5zZXRYAQAAAC10cskoAABYGQAAAHN0YW5kYXJkd2FybmluZ2NhdGVnb3JpZXNyyigAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNzdGFuZGFyZHdhcm5pbmdjYXRlZ29yaWVzWBsAAABTdGFuZGFyZCBXYXJuaW5nIENhdGVnb3JpZXN0cssoAABYBQAAAHRydXRocswoAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHJ1dGhYEwAAAFRydXRoIFZhbHVlIFRlc3Rpbmd0cs0oAABYCwAAAHZhbHVlLXR5cGVzcs4oAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCN2YWx1ZS10eXBlc1gLAAAAVmFsdWUgVHlwZXN0cs8oAABYCwAAAHR1dC1yZW1hcmtzctAoAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LXJlbWFya3NYDgAAAFJhbmRvbSBSZW1hcmtzdHLRKAAAWBcAAABodHRwLWJhc2ljLWF1dGgtaGFuZGxlcnLSKAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjaHR0cC1iYXNpYy1hdXRoLWhhbmRsZXJYHAAAAEhUVFBCYXNpY0F1dGhIYW5kbGVyIE9iamVjdHN0ctMoAABYEAAAAGZ1bmN0aW9uLW9iamVjdHNy1CgAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Z1bmN0aW9uLmh0bWwjZnVuY3Rpb24tb2JqZWN0c1gQAAAARnVuY3Rpb24gT2JqZWN0c3Ry1SgAAFgFAAAAbGlzdHNy1igAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2xpc3RzWA0AAABMaXN0IGRpc3BsYXlzdHLXKAAAWA4AAABzZWN0aW9uLXBlcDMwN3LYKAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1wZXAzMDdYHAAAAFBFUCAzMDc6IFBpY2tsZSBFbmhhbmNlbWVudHN0ctkoAABYBgAAAGxheW91dHLaKAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCNsYXlvdXRzWAcAAABMYXlvdXRzdHLbKAAAWA4AAABzZWN0aW9uLXBlcDMwMXLcKAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1wZXAzMDFYMQAAAFBFUCAzMDE6IFBhY2thZ2UgSW5kZXggYW5kIE1ldGFkYXRhIGZvciBEaXN0dXRpbHN0ct0oAABYDgAAAGNhbGxhYmxlLXR5cGVzct4oAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2FsbGFibGUtdHlwZXNYGgAAAEVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzdHLfKAAAWA4AAABzZWN0aW9uLXBlcDMwMnLgKAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1wZXAzMDJYGQAAAFBFUCAzMDI6IE5ldyBJbXBvcnQgSG9va3N0cuEoAABYGgAAAGN0eXBlcy1mdW5jdGlvbi1wcm90b3R5cGVzcuIoAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1mdW5jdGlvbi1wcm90b3R5cGVzWBMAAABGdW5jdGlvbiBwcm90b3R5cGVzdHLjKAAAWBAAAAB3YXJuaW5nLXN1cHByZXNzcuQoAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1zdXBwcmVzc1ggAAAAVGVtcG9yYXJpbHkgU3VwcHJlc3NpbmcgV2FybmluZ3N0cuUoAABYDwAAAGhvdHNob3QtZXhhbXBsZXLmKAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC1leGFtcGxlWA0AAABFeGFtcGxlIFVzYWdldHLnKAAAWA4AAAB0dXQtZnVuY3Rpb25hbHLoKAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtZnVuY3Rpb25hbFgcAAAARnVuY3Rpb25hbCBQcm9ncmFtbWluZyBUb29sc3Ry6SgAAFgIAAAAYnVpbGRpbmdy6igAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9idWlsZGluZy5odG1sI2J1aWxkaW5nWCwAAABCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucyB3aXRoIGRpc3R1dGlsc3Ry6ygAAFgYAAAAaW5zdC1wbGF0Zm9ybS12YXJpYXRpb25zcuwoAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1wbGF0Zm9ybS12YXJpYXRpb25zWBMAAABQbGF0Zm9ybSB2YXJpYXRpb25zdHLtKAAAWBMAAABmdHAtaGFuZGxlci1vYmplY3Rzcu4oAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNmdHAtaGFuZGxlci1vYmplY3RzWBIAAABGVFBIYW5kbGVyIE9iamVjdHN0cu8oAABYCQAAAHR1dC1icmVha3LwKAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtYnJlYWtYOAAAAGJyZWFrIGFuZCBjb250aW51ZSBTdGF0ZW1lbnRzLCBhbmQgZWxzZSBDbGF1c2VzIG9uIExvb3BzdHLxKAAAWBAAAABjb3B5dHJlZS1leGFtcGxlcvIoAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI2NvcHl0cmVlLWV4YW1wbGVYEAAAAGNvcHl0cmVlIGV4YW1wbGV0cvMoAABYCwAAAG9zLXByb2NpbmZvcvQoAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MtcHJvY2luZm9YEgAAAFByb2Nlc3MgUGFyYW1ldGVyc3Ry9SgAAFgfAAAAbG9nZ2luZy1jb25maWctZGljdC1pbmNyZW1lbnRhbHL2KAAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWxYGQAAAEluY3JlbWVudGFsIENvbmZpZ3VyYXRpb250cvcoAABYHAAAAGRpc3R1dGlscy1pbnN0YWxsaW5nLXNjcmlwdHNy+CgAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2Rpc3R1dGlscy1pbnN0YWxsaW5nLXNjcmlwdHNYEgAAAEluc3RhbGxpbmcgU2NyaXB0c3Ry+SgAAFgPAAAAdHV0LWRlZmF1bHRhcmdzcvooAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1kZWZhdWx0YXJnc1gXAAAARGVmYXVsdCBBcmd1bWVudCBWYWx1ZXN0cvsoAABYBwAAAGZpbmFsbHly/CgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2ZpbmFsbHlYEQAAAFRoZSB0cnkgc3RhdGVtZW50dHL9KAAAWBkAAABmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzcv4oAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzWBkAAABGcmVxdWVudGx5IFVzZWQgQXJndW1lbnRzdHL/KAAAWAcAAABsb2dpY2FscgApAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2xvZ2ljYWxYDQAAAExvZ2ljYWwgbGluZXN0cgEpAABYDAAAAGZpbGUtaGFuZGxlcnICKQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjZmlsZS1oYW5kbGVyWAsAAABGaWxlSGFuZGxlcnRyAykAAFgEAAAAbWlzY3IEKQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taXNjLmh0bWwjbWlzY1gWAAAATWlzY2VsbGFuZW91cyBTZXJ2aWNlc3RyBSkAAFgTAAAAemlwaW1wb3J0ZXItb2JqZWN0c3IGKQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnRlci1vYmplY3RzWBMAAAB6aXBpbXBvcnRlciBPYmplY3RzdHIHKQAAWAwAAABpbnRyb2R1Y3Rpb25yCCkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24uaHRtbCNpbnRyb2R1Y3Rpb25YDAAAAEludHJvZHVjdGlvbnRyCSkAAFgdAAAAZGVmYXVsdC1jb29raWUtcG9saWN5LW9iamVjdHNyCikAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjZGVmYXVsdC1jb29raWUtcG9saWN5LW9iamVjdHNYGwAAAERlZmF1bHRDb29raWVQb2xpY3kgT2JqZWN0c3RyCykAAFgMAAAAc210cC1vYmplY3RzcgwpAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwLW9iamVjdHNYDAAAAFNNVFAgT2JqZWN0c3RyDSkAAFgMAAAAbm50cC1vYmplY3Rzcg4pAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwLW9iamVjdHNYDAAAAE5OVFAgT2JqZWN0c3RyDykAAFgNAAAAcGFyZW50aGVzaXplZHIQKQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjcGFyZW50aGVzaXplZFgTAAAAUGFyZW50aGVzaXplZCBmb3Jtc3RyESkAAFgJAAAAZnVuYy1kaWN0chIpAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtZGljdFgBAAAALXRyEykAAFgbAAAAbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5nchQpAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ1gWAAAAUHJvZ3JhbW1pbmcgZ3VpZGVsaW5lc3RyFSkAAFgHAAAAcGVwLTM1MnIWKQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTM1MlgoAAAAUEVQIDM1MjogRXhjZXB0aW9ucyBhcyBOZXctU3R5bGUgQ2xhc3Nlc3RyFykAAFgNAAAAbWFjLXNjcmlwdGluZ3IYKQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc2EuaHRtbCNtYWMtc2NyaXB0aW5nWBUAAABNYWNQeXRob24gT1NBIE1vZHVsZXN0chkpAABYDAAAAHR1dC1hcHBlbmRpeHIaKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtYXBwZW5kaXhYCAAAAEFwcGVuZGl4dHIbKQAAWBEAAABzY2hlZHVsZXItb2JqZWN0c3IcKQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkdWxlci1vYmplY3RzWBEAAABTY2hlZHVsZXIgT2JqZWN0c3RyHSkAAFgRAAAAYWwtY29uZmlnLW9iamVjdHNyHikAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNhbC1jb25maWctb2JqZWN0c1gVAAAAQ29uZmlndXJhdGlvbiBPYmplY3RzdHIfKQAAWBMAAAB0dXQtcXVhbGl0eS1jb250cm9sciApAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtcXVhbGl0eS1jb250cm9sWA8AAABRdWFsaXR5IENvbnRyb2x0ciEpAABYCAAAAHdoeS1zZWxmciIpAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvZGVzaWduLmh0bWwjd2h5LXNlbGZYRwAAAFdoeSBtdXN0IOKAmHNlbGbigJkgYmUgdXNlZCBleHBsaWNpdGx5IGluIG1ldGhvZCBkZWZpbml0aW9ucyBhbmQgY2FsbHM/dHIjKQAAWBoAAABvcHRwYXJzZS1vcHRpb24tYXR0cmlidXRlc3IkKQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLW9wdGlvbi1hdHRyaWJ1dGVzWBEAAABPcHRpb24gYXR0cmlidXRlc3RyJSkAAFgPAAAAd2Vha3JlZi1leGFtcGxlciYpAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLWV4YW1wbGVYBwAAAEV4YW1wbGV0cicpAABYJAAAAG9wdHBhcnNlLWhvdy1vcHRwYXJzZS1oYW5kbGVzLWVycm9yc3IoKQAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWhvdy1vcHRwYXJzZS1oYW5kbGVzLWVycm9yc1gbAAAASG93IG9wdHBhcnNlIGhhbmRsZXMgZXJyb3JzdHIpKQAAWBIAAABhZHZhbmNlZC1kZWJ1Z2dpbmdyKikAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNhZHZhbmNlZC1kZWJ1Z2dpbmdYGQAAAEFkdmFuY2VkIERlYnVnZ2VyIFN1cHBvcnR0cispAABYCgAAAGJ1aWx0LWRpc3RyLCkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNidWlsdC1kaXN0WBwAAABDcmVhdGluZyBCdWlsdCBEaXN0cmlidXRpb25zdHItKQAAWAgAAABwaHlzaWNhbHIuKQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNwaHlzaWNhbFgOAAAAUGh5c2ljYWwgbGluZXN0ci8pAABYDwAAAGJvb2xlYW4tb2JqZWN0c3IwKQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCNib29sZWFuLW9iamVjdHNYDwAAAEJvb2xlYW4gT2JqZWN0c3RyMSkAAFgLAAAAd2luZG93cy1mYXFyMikAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS93aW5kb3dzLmh0bWwjd2luZG93cy1mYXFYFQAAAFB5dGhvbiBvbiBXaW5kb3dzIEZBUXRyMykAAFgHAAAAdHV0LWZvcnI0KQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtZm9yWA4AAABmb3IgU3RhdGVtZW50c3RyNSkAAFgQAAAAYnVmZmVyZWQtbG9nZ2luZ3I2KQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2J1ZmZlcmVkLWxvZ2dpbmdYPAAAAEJ1ZmZlcmluZyBsb2dnaW5nIG1lc3NhZ2VzIGFuZCBvdXRwdXR0aW5nIHRoZW0gY29uZGl0aW9uYWxseXRyNykAAFgRAAAAeG1scmVhZGVyLW9iamVjdHNyOCkAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWxyZWFkZXItb2JqZWN0c1gRAAAAWE1MUmVhZGVyIE9iamVjdHN0cjkpAABYDAAAAHR1dC1wYWNrYWdlc3I6KQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1wYWNrYWdlc1gIAAAAUGFja2FnZXN0cjspAABYEQAAAHNlY3Rpb24tZW5jb2RpbmdzcjwpAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLWVuY29kaW5nc1geAAAAUEVQIDI2MzogU291cmNlIENvZGUgRW5jb2RpbmdzdHI9KQAAWA0AAABmb3Jtcy1vYmplY3Rzcj4pAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZm9ybXMtb2JqZWN0c1gNAAAARk9STVMgT2JqZWN0c3RyPykAAFgNAAAAZW5jb2Rpbmctbm90ZXJAKQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZy1ub3RlWAEAAAAtdHJBKQAAWA0AAABjb250ZXh0bGlibW9kckIpAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNjb250ZXh0bGlibW9kWBUAAABUaGUgY29udGV4dGxpYiBtb2R1bGV0ckMpAABYEAAAAHB5LXRvLWpzb24tdGFibGVyRCkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI3B5LXRvLWpzb24tdGFibGVYAQAAAC10ckUpAABYFwAAAG1haWxib3gtbWVzc2FnZS1vYmplY3RzckYpAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1lc3NhZ2Utb2JqZWN0c1gPAAAATWVzc2FnZSBvYmplY3RzdHJHKQAAWBkAAABlbGVtZW50dHJlZS1xbmFtZS1vYmplY3RzckgpAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXFuYW1lLW9iamVjdHNYDQAAAFFOYW1lIE9iamVjdHN0ckkpAABYDwAAAG1haWxib3gtb2JqZWN0c3JKKQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1vYmplY3RzWA8AAABNYWlsYm94IG9iamVjdHN0ckspAABYDAAAAGZsb2F0b2JqZWN0c3JMKQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNmbG9hdG9iamVjdHNYFgAAAEZsb2F0aW5nIFBvaW50IE9iamVjdHN0ck0pAABYCgAAAGRsLW9iamVjdHNyTikAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGwuaHRtbCNkbC1vYmplY3RzWAoAAABEbCBPYmplY3RzdHJPKQAAWAYAAABweXRob25yUCkAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHl0aG9uLmh0bWwjcHl0aG9uWBcAAABQeXRob24gUnVudGltZSBTZXJ2aWNlc3RyUSkAAFgZAAAAbG9nZ2luZy1pbXBvcnQtcmVzb2x1dGlvbnJSKQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctaW1wb3J0LXJlc29sdXRpb25YJgAAAEltcG9ydCByZXNvbHV0aW9uIGFuZCBjdXN0b20gaW1wb3J0ZXJzdHJTKQAAWA4AAAB0ZWxuZXQtZXhhbXBsZXJUKQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXQtZXhhbXBsZVgOAAAAVGVsbmV0IEV4YW1wbGV0clUpAABYCQAAAHR1dC1pbnRyb3JWKQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZXRpdGUuaHRtbCN0dXQtaW50cm9YFgAAAFdoZXR0aW5nIFlvdXIgQXBwZXRpdGV0clcpAABYDgAAAHdhcm5pbmctZmlsdGVyclgpAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1maWx0ZXJYEwAAAFRoZSBXYXJuaW5ncyBGaWx0ZXJ0clkpAABYEAAAAGRvY3Rlc3Qtd2FybmluZ3NyWikAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtd2FybmluZ3NYCAAAAFdhcm5pbmdzdHJbKQAAWA4AAABsb2NhbGUtZ2V0dGV4dHJcKQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUtZ2V0dGV4dFgaAAAAQWNjZXNzIHRvIG1lc3NhZ2UgY2F0YWxvZ3N0cl0pAABYDAAAAHdpbi1jb29rYm9va3JeKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL3dpbmRvd3MuaHRtbCN3aW4tY29va2Jvb2tYEwAAAEEgQ29va2Jvb2sgQXBwcm9hY2h0cl8pAABYDQAAAGJ1aWx0aW5jb2RlY3NyYCkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNidWlsdGluY29kZWNzWA8AAABCdWlsdC1pbiBDb2RlY3N0cmEpAABYGAAAAG9wdHBhcnNlLWNyZWF0aW5nLXBhcnNlcnJiKQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNyZWF0aW5nLXBhcnNlclgTAAAAQ3JlYXRpbmcgdGhlIHBhcnNlcnRyYykAAFgIAAAAY29tcG91bmRyZCkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2NvbXBvdW5kWBMAAABDb21wb3VuZCBzdGF0ZW1lbnRzdHJlKQAAWAYAAABvYmplY3RyZikAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI29iamVjdFgPAAAAT2JqZWN0IFByb3RvY29sdHJnKQAAWAoAAABvcy1wcm9jZXNzcmgpAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MtcHJvY2Vzc1gSAAAAUHJvY2VzcyBNYW5hZ2VtZW50dHJpKQAAWCEAAABkaXN0dXRpbHMtaW5zdGFsbGluZy1wYWNrYWdlLWRhdGFyaikAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2Rpc3R1dGlscy1pbnN0YWxsaW5nLXBhY2thZ2UtZGF0YVgXAAAASW5zdGFsbGluZyBQYWNrYWdlIERhdGF0cmspAABYDgAAAGJpbmFyeS1vYmplY3RzcmwpAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI2JpbmFyeS1vYmplY3RzWA4AAABCaW5hcnkgT2JqZWN0c3RybSkAAFgOAAAAbXN2Y3J0LWNvbnNvbGVybikAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LWNvbnNvbGVYCwAAAENvbnNvbGUgSS9PdHJvKQAAWBsAAABkaXN0dXRpbHMtYnVpbGQtZXh0LWlucGxhY2VycCkAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb25maWdmaWxlLmh0bWwjZGlzdHV0aWxzLWJ1aWxkLWV4dC1pbnBsYWNlWAEAAAAtdHJxKQAAWAsAAABzZXQtb2JqZWN0c3JyKQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0LW9iamVjdHNYCwAAAFNldCBPYmplY3RzdHJzKQAAWA4AAABlbWFpbC1leGFtcGxlc3J0KQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5odG1sI2VtYWlsLWV4YW1wbGVzWA8AAABlbWFpbDogRXhhbXBsZXN0cnUpAABYGgAAAHN0cmZ0aW1lLXN0cnB0aW1lLWJlaGF2aW9ycnYpAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjc3RyZnRpbWUtc3RycHRpbWUtYmVoYXZpb3JYIgAAAHN0cmZ0aW1lKCkgYW5kIHN0cnB0aW1lKCkgQmVoYXZpb3J0cncpAABYBwAAAG9zLXBhdGhyeCkAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1wYXRoWCAAAABNaXNjZWxsYW5lb3VzIFN5c3RlbSBJbmZvcm1hdGlvbnRyeSkAAFgIAAAAcGVwLTAzNzFyeikAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI3BlcC0wMzcxWCQAAABQRVAgMzcxOiBUaGUgbXVsdGlwcm9jZXNzaW5nIFBhY2thZ2V0cnspAABYCAAAAGNhcHN1bGVzcnwpAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjY2Fwc3VsZXNYCAAAAENhcHN1bGVzdHJ9KQAAWBgAAABkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVyfikAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24uaHRtbCNkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVYEAAAAEEgU2ltcGxlIEV4YW1wbGV0cn8pAABYEAAAAHR5cGVzc2VxLW11dGFibGVygCkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc3NlcS1tdXRhYmxlWBYAAABNdXRhYmxlIFNlcXVlbmNlIFR5cGVzdHKBKQAAWAgAAABwZXAtMDM3MHKCKQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNzBYKQAAAFBFUCAzNzA6IFBlci11c2VyIHNpdGUtcGFja2FnZXMgRGlyZWN0b3J5dHKDKQAAWA8AAABkaWZmZXItZXhhbXBsZXNyhCkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZlci1leGFtcGxlc1gOAAAARGlmZmVyIEV4YW1wbGV0coUpAABYDQAAAHNobGV4LW9iamVjdHNyhikAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC1vYmplY3RzWA0AAABzaGxleCBPYmplY3RzdHKHKQAAWA4AAABzdGRjb21wYXJpc29uc3KIKQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ZGNvbXBhcmlzb25zWAsAAABDb21wYXJpc29uc3RyiSkAAFgPAAAAZ2VuZXJhdG9yLXR5cGVzcoopAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZ2VuZXJhdG9yLXR5cGVzWA8AAABHZW5lcmF0b3IgVHlwZXN0cospAABYEgAAAGMtd3JhcHBlci1zb2Z0d2FyZXKMKQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2V4dGVuZGluZy5odG1sI2Mtd3JhcHBlci1zb2Z0d2FyZVguAAAAV3JpdGluZyBDIGlzIGhhcmQ7IGFyZSB0aGVyZSBhbnkgYWx0ZXJuYXRpdmVzP3RyjSkAAFgPAAAAaW1wbGVtZW50YXRpb25zco4pAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjaW1wbGVtZW50YXRpb25zWBkAAABBbHRlcm5hdGUgSW1wbGVtZW50YXRpb25zdHKPKQAAWA4AAABjb2RlYy1yZWdpc3RyeXKQKQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjb2RlYy1yZWdpc3RyeVgkAAAAQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zdHKRKQAAWBAAAAB0ZW1wbGF0ZS1vYmplY3RzcpIpAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjdGVtcGxhdGUtb2JqZWN0c1gQAAAAVGVtcGxhdGUgT2JqZWN0c3RykykAAFgDAAAAZm9ycpQpAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNmb3JYEQAAAFRoZSBmb3Igc3RhdGVtZW50dHKVKQAAWAsAAAB0dXQtZ2VuZXhwc3KWKQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1nZW5leHBzWBUAAABHZW5lcmF0b3IgRXhwcmVzc2lvbnN0cpcpAABYEwAAAG1vcmUtbWV0YWNoYXJhY3RlcnNymCkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3JlZ2V4Lmh0bWwjbW9yZS1tZXRhY2hhcmFjdGVyc1gTAAAATW9yZSBNZXRhY2hhcmFjdGVyc3RymSkAAFgQAAAAdXNpbmctb24tY21kbGluZXKaKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI3VzaW5nLW9uLWNtZGxpbmVYDAAAAENvbW1hbmQgbGluZXRymykAAFgNAAAAbW9kdWxlLWN0eXBlc3KcKQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjbW9kdWxlLWN0eXBlc1gSAAAAVGhlIGN0eXBlcyBwYWNrYWdldHKdKQAAWAcAAABwZXAtMzQycp4pAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzQyWB8AAABQRVAgMzQyOiBOZXcgR2VuZXJhdG9yIEZlYXR1cmVzdHKfKQAAWA4AAAB0dXQtZXhjZXB0aW9uc3KgKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LWV4Y2VwdGlvbnNYCgAAAEV4Y2VwdGlvbnN0cqEpAABYBQAAAHR5cGVzcqIpAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjdHlwZXNYGwAAAFRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeXRyoykAAFgaAAAAZG9tLWltcGxlbWVudGF0aW9uLW9iamVjdHNypCkAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1pbXBsZW1lbnRhdGlvbi1vYmplY3RzWBkAAABET01JbXBsZW1lbnRhdGlvbiBPYmplY3RzdHKlKQAAWBIAAABleHBhdGVycm9yLW9iamVjdHNypikAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0ZXJyb3Itb2JqZWN0c1gVAAAARXhwYXRFcnJvciBFeGNlcHRpb25zdHKnKQAAWA0AAABmb3JtYXRzdHJpbmdzcqgpAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2Zvcm1hdHN0cmluZ3NYFAAAAEZvcm1hdCBTdHJpbmcgU3ludGF4dHKpKQAAWBAAAABpbnN0YWxsLWRhdGEtY21kcqopAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1sI2luc3RhbGwtZGF0YS1jbWRYDAAAAGluc3RhbGxfZGF0YXRyqykAAFgOAAAAc29ja2V0LW9iamVjdHNyrCkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LW9iamVjdHNYDgAAAFNvY2tldCBPYmplY3RzdHKtKQAAWAsAAAB0YXItdW5pY29kZXKuKQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyLXVuaWNvZGVYDgAAAFVuaWNvZGUgaXNzdWVzdHKvKQAAWBEAAAByZWZjb3VudHNpbnB5dGhvbnKwKQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3JlZmNvdW50c2lucHl0aG9uWBwAAABSZWZlcmVuY2UgQ291bnRpbmcgaW4gUHl0aG9udHKxKQAAWAQAAAB3c2dpcrIpAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by93ZWJzZXJ2ZXJzLmh0bWwjd3NnaVgPAAAAU3RlcCBiYWNrOiBXU0dJdHKzKQAAWA8AAABzZXR0aW5nLWVudnZhcnNytCkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL3dpbmRvd3MuaHRtbCNzZXR0aW5nLWVudnZhcnNYJwAAAEV4Y3Vyc3VzOiBTZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlc3RytSkAAFgPAAAAZm9ybWF0dGVyLWltcGxzcrYpAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci1pbXBsc1gZAAAARm9ybWF0dGVyIEltcGxlbWVudGF0aW9uc3RytykAAFgRAAAAYXJncGFyc2UtdHV0b3JpYWxyuCkAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2FyZ3BhcnNlLmh0bWwjaWQxWAEAAAAtdHK5KQAAWB8AAAB1bml0dGVzdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlcropAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QtY29tbWFuZC1saW5lLWludGVyZmFjZVgWAAAAQ29tbWFuZC1MaW5lIEludGVyZmFjZXRyuykAAFgQAAAAb3B0cGFyc2UtY2xlYW51cHK8KQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNsZWFudXBYBwAAAENsZWFudXB0cr0pAABYFQAAAG9wdHBhcnNlLXN0b3JlLWFjdGlvbnK+KQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXN0b3JlLWFjdGlvblgQAAAAVGhlIHN0b3JlIGFjdGlvbnRyvykAAFgMAAAAY2VsbC1vYmplY3RzcsApAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjY2VsbC1vYmplY3RzWAwAAABDZWxsIE9iamVjdHN0csEpAABYGAAAAG9wdHBhcnNlLXJlZmVyZW5jZS1ndWlkZXLCKQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXJlZmVyZW5jZS1ndWlkZVgPAAAAUmVmZXJlbmNlIEd1aWRldHLDKQAAWAQAAABwYXNzcsQpAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcGFzc1gSAAAAVGhlIHBhc3Mgc3RhdGVtZW50dHLFKQAAWA4AAABwdXJlLWVtYmVkZGluZ3LGKQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI3B1cmUtZW1iZWRkaW5nWA4AAABQdXJlIEVtYmVkZGluZ3RyxykAAFgJAAAAZXhlY21vZGVscsgpAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwuaHRtbCNleGVjbW9kZWxYDwAAAEV4ZWN1dGlvbiBtb2RlbHRyySkAAFgPAAAAYWJzdHJhY3QtYnVmZmVycsopAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmpidWZmZXIuaHRtbCNhYnN0cmFjdC1idWZmZXJYEwAAAE9sZCBCdWZmZXIgUHJvdG9jb2x0csspAABYCwAAAGRldmVsb3BtZW50cswpAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RldmVsb3BtZW50Lmh0bWwjZGV2ZWxvcG1lbnRYEQAAAERldmVsb3BtZW50IFRvb2xzdHLNKQAAWA4AAABmb3JtYXRleGFtcGxlc3LOKQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNmb3JtYXRleGFtcGxlc1gPAAAARm9ybWF0IGV4YW1wbGVzdHLPKQAAWBgAAABjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnNy0CkAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zWBEAAABDYWxsaW5nIGZ1bmN0aW9uc3Ry0SkAAFgNAAAAdHV0LWN1c3RvbWl6ZXLSKQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtY3VzdG9taXplWBkAAABUaGUgQ3VzdG9taXphdGlvbiBNb2R1bGVzdHLTKQAAWAgAAAB0dXQtc2V0c3LUKQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtc2V0c1gEAAAAU2V0c3Ry1SkAAFgMAAAAbW9kdWxlLWV0cmVlctYpAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtZXRyZWVYFwAAAFRoZSBFbGVtZW50VHJlZSBwYWNrYWdldHLXKQAAWA4AAABkb20tcGktb2JqZWN0c3LYKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLXBpLW9iamVjdHNYHQAAAFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBPYmplY3RzdHLZKQAAWBMAAABpbnN0YWxsLXNjcmlwdHMtY21kctopAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1sI2luc3RhbGwtc2NyaXB0cy1jbWRYDwAAAGluc3RhbGxfc2NyaXB0c3Ry2ykAAFgYAAAAY3R5cGVzLXV0aWxpdHktZnVuY3Rpb25zctwpAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy11dGlsaXR5LWZ1bmN0aW9uc1gRAAAAVXRpbGl0eSBmdW5jdGlvbnN0ct0pAABYDAAAAHVzaW5nLW9uLW1hY3LeKQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvbWFjLmh0bWwjdXNpbmctb24tbWFjWBsAAABVc2luZyBQeXRob24gb24gYSBNYWNpbnRvc2h0ct8pAABYFQAAAGF0dHJpYnV0ZXMtbnMtb2JqZWN0c3LgKQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2F0dHJpYnV0ZXMtbnMtb2JqZWN0c1gaAAAAVGhlIEF0dHJpYnV0ZXNOUyBJbnRlcmZhY2V0cuEpAABYDAAAAGxvY2stb2JqZWN0c3LiKQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNsb2NrLW9iamVjdHNYDAAAAExvY2sgT2JqZWN0c3Ry4ykAAFgFAAAAYXRvbXNy5CkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2F0b21zWAUAAABBdG9tc3Ry5SkAAFgUAAAAdHV0LWV4Y2VwdGlvbmNsYXNzZXNy5ikAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtZXhjZXB0aW9uY2xhc3Nlc1gaAAAARXhjZXB0aW9ucyBBcmUgQ2xhc3NlcyBUb290cucpAABYCAAAAHJlZ3J0ZXN0cugpAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCNyZWdydGVzdFguAAAAUnVubmluZyB0ZXN0cyB1c2luZyB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZXRy6SkAAFgLAAAAaWRlbnRpZmllcnNy6ikAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaWRlbnRpZmllcnNYGAAAAElkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc3Ry6ykAAFgRAAAAc2VtYXBob3JlLW9iamVjdHNy7CkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjc2VtYXBob3JlLW9iamVjdHNYEQAAAFNlbWFwaG9yZSBPYmplY3RzdHLtKQAAWA4AAABzaWduYWwtZXhhbXBsZXLuKQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwtZXhhbXBsZVgHAAAARXhhbXBsZXRy7ykAAFgQAAAAZG50LXR5cGUtbWV0aG9kc3LwKQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWwjZG50LXR5cGUtbWV0aG9kc1gMAAAAVHlwZSBNZXRob2RzdHLxKQAAWA0AAABiYWNrdG9leGFtcGxlcvIpAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjYmFja3RvZXhhbXBsZVgTAAAAQmFjayB0byB0aGUgRXhhbXBsZXRy8ykAAFgPAAAAbWVzc2FnZS1vYmplY3RzcvQpAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI21lc3NhZ2Utb2JqZWN0c1gPAAAATWVzc2FnZSBPYmplY3RzdHL1KQAAWAsAAABhcmctcGFyc2luZ3L2KQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYXJnLXBhcnNpbmdYJQAAAFBhcnNpbmcgYXJndW1lbnRzIGFuZCBidWlsZGluZyB2YWx1ZXN0cvcpAABYEAAAAHRlc3RjYXNlLW9iamVjdHNy+CkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN0ZXN0Y2FzZS1vYmplY3RzWAoAAABUZXN0IGNhc2VzdHL5KQAAWBUAAABwcmV0dHlwcmludGVyLW9iamVjdHNy+ikAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHJldHR5cHJpbnRlci1vYmplY3RzWBUAAABQcmV0dHlQcmludGVyIE9iamVjdHN0cvspAABYDQAAAGluc3BlY3QtdHlwZXNy/CkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QtdHlwZXNYEQAAAFR5cGVzIGFuZCBtZW1iZXJzdHL9KQAAWBEAAABpbnN0LWNvbmZpZy1maWxlc3L+KQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtY29uZmlnLWZpbGVzWB0AAABEaXN0dXRpbHMgQ29uZmlndXJhdGlvbiBGaWxlc3Ry/ykAAFgNAAAAY2FsbGluZ3B5dGhvbnIAKgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI2NhbGxpbmdweXRob25YHwAAAENhbGxpbmcgUHl0aG9uIEZ1bmN0aW9ucyBmcm9tIEN0cgEqAABYDgAAAGNvb2tpZS1leGFtcGxlcgIqAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI2Nvb2tpZS1leGFtcGxlWAcAAABFeGFtcGxldHIDKgAAWAgAAABpdGVyYXRvcnIEKgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlci5odG1sI2l0ZXJhdG9yWBEAAABJdGVyYXRvciBQcm90b2NvbHRyBSoAAFgRAAAAc3RyaW5nLWZvcm1hdHRpbmdyBioAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHJpbmctZm9ybWF0dGluZ1gcAAAAU3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9uc3RyByoAAFgXAAAAdW5rbm93bi1oYW5kbGVyLW9iamVjdHNyCCoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3Vua25vd24taGFuZGxlci1vYmplY3RzWBYAAABVbmtub3duSGFuZGxlciBPYmplY3RzdHIJKgAAWBQAAABpbnB1dC1zb3VyY2Utb2JqZWN0c3IKKgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2lucHV0LXNvdXJjZS1vYmplY3RzWBMAAABJbnB1dFNvdXJjZSBPYmplY3RzdHILKgAAWAUAAAB1bmFyeXIMKgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjdW5hcnlYJwAAAFVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc3RyDSoAAFggAAAAb3B0cGFyc2UtcHJpbnRpbmctdmVyc2lvbi1zdHJpbmdyDioAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1wcmludGluZy12ZXJzaW9uLXN0cmluZ1gZAAAAUHJpbnRpbmcgYSB2ZXJzaW9uIHN0cmluZ3RyDyoAAFgqAAAAY3R5cGVzLXN0cnVjdHVyZXVuaW9uLWFsaWdubWVudC1ieXRlLW9yZGVychAqAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zdHJ1Y3R1cmV1bmlvbi1hbGlnbm1lbnQtYnl0ZS1vcmRlclgBAAAALXRyESoAAFgRAAAAY2QtcGFyc2VyLW9iamVjdHNyEioAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC1wYXJzZXItb2JqZWN0c1gOAAAAUGFyc2VyIE9iamVjdHN0chMqAABYBwAAAGdlbmV4cHJyFCoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dlbmV4cHJYFQAAAEdlbmVyYXRvciBleHByZXNzaW9uc3RyFSoAAFgVAAAAbXVsdGlwbGUtZGVzdGluYXRpb25zchYqAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjbXVsdGlwbGUtZGVzdGluYXRpb25zWCAAAABMb2dnaW5nIHRvIG11bHRpcGxlIGRlc3RpbmF0aW9uc3RyFyoAAFgRAAAAc3RyaW5nLWNvbnZlcnNpb25yGCoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNzdHJpbmctY29udmVyc2lvblggAAAAU3RyaW5nIGNvbnZlcnNpb24gYW5kIGZvcm1hdHRpbmd0chkqAABYCAAAAHBlcC0wMzc4choqAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNwZXAtMDM3OFgxAAAAUEVQIDM3ODogRm9ybWF0IFNwZWNpZmllciBmb3IgVGhvdXNhbmRzIFNlcGFyYXRvcnRyGyoAAFgUAAAAZG9tLW5vZGVsaXN0LW9iamVjdHNyHCoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1ub2RlbGlzdC1vYmplY3RzWBAAAABOb2RlTGlzdCBPYmplY3RzdHIdKgAAWB0AAABjdHlwZXMtZnVuZGFtZW50YWwtZGF0YS10eXBlc3IeKgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtZnVuZGFtZW50YWwtZGF0YS10eXBlc1gWAAAARnVuZGFtZW50YWwgZGF0YSB0eXBlc3RyHyoAAFgOAAAAdHV0LXRlbXBsYXRpbmdyICoAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtdGVtcGxhdGluZ1gKAAAAVGVtcGxhdGluZ3RyISoAAFgXAAAAY3R5cGVzLWN0eXBlcy1yZWZlcmVuY2VyIioAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWN0eXBlcy1yZWZlcmVuY2VYEAAAAGN0eXBlcyByZWZlcmVuY2V0ciMqAABYEAAAAGRlY2ltYWwtdHV0b3JpYWxyJCoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtdHV0b3JpYWxYFAAAAFF1aWNrLXN0YXJ0IFR1dG9yaWFsdHIlKgAAWAcAAABsZXhpY2FsciYqAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2xleGljYWxYEAAAAExleGljYWwgYW5hbHlzaXN0cicqAABYDAAAAG1haWxib3gtbW1kZnIoKgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tbWRmWAQAAABNTURGdHIpKgAAWBQAAABodHRwLWhhbmRsZXItb2JqZWN0c3IqKgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjaHR0cC1oYW5kbGVyLW9iamVjdHNYEwAAAEhUVFBIYW5kbGVyIE9iamVjdHN0cisqAABYAgAAAGFzciwqAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNhc1gSAAAAVGhlIHdpdGggc3RhdGVtZW50dHItKgAAWBoAAABzcWxpdGUzLWNvbm5lY3Rpb24tb2JqZWN0c3IuKgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1jb25uZWN0aW9uLW9iamVjdHNYEgAAAENvbm5lY3Rpb24gT2JqZWN0c3RyLyoAAFgXAAAAdGtpbnRlci1zZXR0aW5nLW9wdGlvbnNyMCoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI3RraW50ZXItc2V0dGluZy1vcHRpb25zWA8AAABTZXR0aW5nIE9wdGlvbnN0cjEqAABYDQAAAGNyZWF0aW5nLXJwbXNyMioAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNjcmVhdGluZy1ycG1zWBUAAABDcmVhdGluZyBSUE0gcGFja2FnZXN0cjMqAABYBAAAAGRpY3RyNCoAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2RpY3RYEwAAAERpY3Rpb25hcnkgZGlzcGxheXN0cjUqAABYDAAAAHV1aWQtZXhhbXBsZXI2KgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC1leGFtcGxlWAcAAABFeGFtcGxldHI3KgAAWBIAAABibHRpbi10eXBlLW9iamVjdHNyOCoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi10eXBlLW9iamVjdHNYDAAAAFR5cGUgT2JqZWN0c3RyOSoAAFgQAAAAb3BlcmF0b3Itc3VtbWFyeXI6KgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjb3BlcmF0b3Itc3VtbWFyeVgTAAAAT3BlcmF0b3IgcHJlY2VkZW5jZXRyOyoAAFgQAAAAdHV0LWNsZWFudXAtd2l0aHI8KgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LWNsZWFudXAtd2l0aFgbAAAAUHJlZGVmaW5lZCBDbGVhbi11cCBBY3Rpb25zdHI9KgAAWAkAAABleHBybGlzdHNyPioAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2V4cHJsaXN0c1gQAAAARXhwcmVzc2lvbiBsaXN0c3RyPyoAAFglAAAAY3R5cGVzLWxvYWRpbmctZHluYW1pYy1saW5rLWxpYnJhcmllc3JAKgAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtbG9hZGluZy1keW5hbWljLWxpbmstbGlicmFyaWVzWB4AAABMb2FkaW5nIGR5bmFtaWMgbGluayBsaWJyYXJpZXN0ckEqAABYDAAAAHJlcHItb2JqZWN0c3JCKgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci1vYmplY3RzWAwAAABSZXByIE9iamVjdHN0ckMqAABYHwAAAGxvZ2dpbmctY29uZmlnLWRpY3QtY29ubmVjdGlvbnNyRCoAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zWBIAAABPYmplY3QgY29ubmVjdGlvbnN0ckUqAABYEAAAAGFzeW5jaGF0LWV4YW1wbGVyRioAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC1leGFtcGxlWBAAAABhc3luY2hhdCBFeGFtcGxldHJHKgAAWBMAAAB0dXQtc3RhbmRhcmRtb2R1bGVzckgqAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LXN0YW5kYXJkbW9kdWxlc1gQAAAAU3RhbmRhcmQgTW9kdWxlc3RySSoAAFgKAAAAaW5zdC1pbnRyb3JKKgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtaW50cm9YDAAAAEludHJvZHVjdGlvbnRySyoAAFgRAAAAbWFpbGJveC1taG1lc3NhZ2VyTCoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWhtZXNzYWdlWAkAAABNSE1lc3NhZ2V0ck0qAABYCAAAAGtleXdvcmRzck4qAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2tleXdvcmRzWAgAAABLZXl3b3Jkc3RyTyoAAFgMAAAAdHlwZXNtYXBwaW5nclAqAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNtYXBwaW5nWBYAAABNYXBwaW5nIFR5cGVzIOKAlCBkaWN0dHJRKgAAWBMAAAB6aXBmaWxlLWNvbW1hbmRsaW5lclIqAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLWNvbW1hbmRsaW5lWBYAAABDb21tYW5kLUxpbmUgSW50ZXJmYWNldHJTKgAAWBEAAABzZWN0aW9uLWVudW1lcmF0ZXJUKgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1lbnVtZXJhdGVYFAAAAFBFUCAyNzk6IGVudW1lcmF0ZSgpdHJVKgAAWAMAAABzZ2lyVioAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dpLmh0bWwjc2dpWBoAAABTR0kgSVJJWCBTcGVjaWZpYyBTZXJ2aWNlc3RyVyoAAFgUAAAAZG9jdGVzdC11bml0dGVzdC1hcGlyWCoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtdW5pdHRlc3QtYXBpWAwAAABVbml0dGVzdCBBUEl0clkqAABYDAAAAGNsYXNzb2JqZWN0c3JaKgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjbGFzc29iamVjdHNYGgAAAENsYXNzIGFuZCBJbnN0YW5jZSBPYmplY3RzdHJbKgAAWBkAAABhcmJpdHJhcnktb2JqZWN0LW1lc3NhZ2VzclwqAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjYXJiaXRyYXJ5LW9iamVjdC1tZXNzYWdlc1gjAAAAVXNpbmcgYXJiaXRyYXJ5IG9iamVjdHMgYXMgbWVzc2FnZXN0cl0qAABYEwAAAG1haWxib3gtbWJveG1lc3NhZ2VyXioAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWJveG1lc3NhZ2VYCwAAAG1ib3hNZXNzYWdldHJfKgAAWBIAAABsb2dnaW5nLWV4Y2VwdGlvbnNyYCoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNsb2dnaW5nLWV4Y2VwdGlvbnNYIAAAAEV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBsb2dnaW5ndHJhKgAAWAkAAABhdWdhc3NpZ25yYioAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhdWdhc3NpZ25YHwAAAEF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHN0cmMqAABYDQAAAG1haWxib3gtYmFieWxyZCoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtYmFieWxYBQAAAEJhYnlsdHJlKgAAWA4AAAB0aW1lLXkya2lzc3Vlc3JmKgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS15Mmtpc3N1ZXNYAQAAAC10cmcqAABYDAAAAHR5cGVzbW9kdWxlc3JoKgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzbW9kdWxlc1gHAAAATW9kdWxlc3RyaSoAAFgHAAAAdGhpbmljZXJqKgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3RoaW5pY2VYCAAAAFRoaW4gSWNldHJrKgAAWBcAAABtc3dpbi1zcGVjaWZpYy1zZXJ2aWNlc3JsKgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5kb3dzLmh0bWwjbXN3aW4tc3BlY2lmaWMtc2VydmljZXNYHAAAAE1TIFdpbmRvd3MgU3BlY2lmaWMgU2VydmljZXN0cm0qAABYFwAAAGN0eXBlcy1pbmNvbXBsZXRlLXR5cGVzcm4qAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1pbmNvbXBsZXRlLXR5cGVzWBAAAABJbmNvbXBsZXRlIFR5cGVzdHJvKgAAWAgAAABuZXdzdHlsZXJwKgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI25ld3N0eWxlWB0AAABOZXctc3R5bGUgYW5kIGNsYXNzaWMgY2xhc3Nlc3RycSoAAFgGAAAAYWNrczI3cnIqAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNhY2tzMjdYEAAAAEFja25vd2xlZGdlbWVudHN0cnMqAABYFgAAAGluc3QtaG93LWluc3RhbGwtd29ya3NydCoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWhvdy1pbnN0YWxsLXdvcmtzWBYAAABIb3cgaW5zdGFsbGF0aW9uIHdvcmtzdHJ1KgAAWA4AAAB0dXQtZGVjaW1hbC1mcHJ2KgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC1kZWNpbWFsLWZwWCEAAABEZWNpbWFsIEZsb2F0aW5nIFBvaW50IEFyaXRobWV0aWN0cncqAABYDgAAAHR1dC1mb3JtYXR0aW5ncngqAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnB1dG91dHB1dC5odG1sI3R1dC1mb3JtYXR0aW5nWBkAAABGYW5jaWVyIE91dHB1dCBGb3JtYXR0aW5ndHJ5KgAAWAwAAABzbXRwLWhhbmRsZXJyeioAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3NtdHAtaGFuZGxlclgLAAAAU01UUEhhbmRsZXJ0cnsqAABYFQAAAHNpbXBsZS14bWxycGMtc2VydmVyc3J8KgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNzaW1wbGUteG1scnBjLXNlcnZlcnNYGgAAAFNpbXBsZVhNTFJQQ1NlcnZlciBPYmplY3RzdHJ9KgAAWAYAAAAyNmFja3NyfioAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI2Fja3NYEAAAAEFja25vd2xlZGdlbWVudHN0cn8qAABYBwAAAGJvb2xlYW5ygCoAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNib29sZWFuWCMAAABCb29sZWFuIE9wZXJhdGlvbnMg4oCUIGFuZCwgb3IsIG5vdHRygSoAAFgOAAAAcGlja2xlLWV4YW1wbGVygioAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLWV4YW1wbGVYBwAAAEV4YW1wbGV0coMqAABYFgAAAG9wdHBhcnNlLW90aGVyLWFjdGlvbnNyhCoAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vdGhlci1hY3Rpb25zWA0AAABPdGhlciBhY3Rpb25zdHKFKgAAWA0AAABzdHJpbmdvYmplY3RzcoYqAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNzdHJpbmdvYmplY3RzWBQAAABTdHJpbmcvQnl0ZXMgT2JqZWN0c3RyhyoAAFgPAAAAZHVtYmRibS1vYmplY3RzcogqAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bWJkYm0uaHRtbCNkdW1iZGJtLW9iamVjdHNYDwAAAER1bWJkYm0gT2JqZWN0c3RyiSoAAFgGAAAAYmluYXJ5cooqAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNiaW5hcnlYHAAAAEJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnN0cosqAABYFAAAAHdhdGNoZWQtZmlsZS1oYW5kbGVycowqAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCN3YXRjaGVkLWZpbGUtaGFuZGxlclgSAAAAV2F0Y2hlZEZpbGVIYW5kbGVydHKNKgAAWAcAAABsYW1iZGFzco4qAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNsYW1iZGFzWAcAAABMYW1iZGFzdHKPKgAAWAsAAAB0dXQtc2NyaXB0c3KQKgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtc2NyaXB0c1gZAAAARXhlY3V0YWJsZSBQeXRob24gU2NyaXB0c3RykSoAAFgHAAAAdHV0LWRpcnKSKgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1kaXJYEgAAAFRoZSBkaXIoKSBGdW5jdGlvbnRykyoAAFgLAAAAY29tcGFyaXNvbnNylCoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2NvbXBhcmlzb25zWAsAAABDb21wYXJpc29uc3RylSoAAFgIAAAAaW50ZXJuZXRylioAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW50ZXJuZXQuaHRtbCNpbnRlcm5ldFgeAAAASW50ZXJuZXQgUHJvdG9jb2xzIGFuZCBTdXBwb3J0dHKXKgAAWBIAAABzdHJpbmctY29udmVyc2lvbnNymCoAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3N0cmluZy1jb252ZXJzaW9uc1gSAAAAU3RyaW5nIGNvbnZlcnNpb25zdHKZKgAAWBIAAABhdHRyaWJ1dGVzLW9iamVjdHNymioAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCNhdHRyaWJ1dGVzLW9iamVjdHNYGAAAAFRoZSBBdHRyaWJ1dGVzIEludGVyZmFjZXRymyoAAFgdAAAAb3B0cGFyc2UtaG93LWNhbGxiYWNrcy1jYWxsZWRynCoAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1ob3ctY2FsbGJhY2tzLWNhbGxlZFgYAAAASG93IGNhbGxiYWNrcyBhcmUgY2FsbGVkdHKdKgAAWBAAAABkYXRldGltZS1vYmplY3Rzcp4qAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI2RhdGV0aW1lLW9iamVjdHNYEAAAAERhdGVUaW1lIE9iamVjdHN0cp8qAABYEAAAAGluc3Qtc2VhcmNoLXBhdGhyoCoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXNlYXJjaC1wYXRoWCAAAABNb2RpZnlpbmcgUHl0aG9u4oCZcyBTZWFyY2ggUGF0aHRyoSoAAFgSAAAAaW5zdC1jb25maWctc3ludGF4cqIqAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctc3ludGF4WBYAAABTeW50YXggb2YgY29uZmlnIGZpbGVzdHKjKgAAWBkAAABjb21wYXJpc29uLXRvLWJ1aWx0aW4tc2V0cqQqAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NldHMuaHRtbCNjb21wYXJpc29uLXRvLWJ1aWx0aW4tc2V0WCQAAABDb21wYXJpc29uIHRvIHRoZSBidWlsdC1pbiBzZXQgdHlwZXN0cqUqAABYDAAAAG51bGxwb2ludGVyc3KmKgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI251bGxwb2ludGVyc1gNAAAATlVMTCBQb2ludGVyc3RypyoAAFgPAAAAcmVxdWVzdC1vYmplY3RzcqgqAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNyZXF1ZXN0LW9iamVjdHNYDwAAAFJlcXVlc3QgT2JqZWN0c3RyqSoAAFgJAAAAZGF0YW1vZGVscqoqAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZGF0YW1vZGVsWAoAAABEYXRhIG1vZGVsdHKrKgAAWBkAAABvcHRwYXJzZS1hZGRpbmctbmV3LXR5cGVzcqwqAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtYWRkaW5nLW5ldy10eXBlc1gQAAAAQWRkaW5nIG5ldyB0eXBlc3RyrSoAAFgOAAAAc2VjdGlvbi1zbGljZXNyrioAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tc2xpY2VzWA8AAABFeHRlbmRlZCBTbGljZXN0cq8qAABYCwAAAHR1dC1pbnRlcmFjcrAqAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9hcHBlbmRpeC5odG1sI3R1dC1pbnRlcmFjWBAAAABJbnRlcmFjdGl2ZSBNb2RldHKxKgAAWA4AAABudW1iZXItc3RydWN0c3KyKgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI251bWJlci1zdHJ1Y3RzWBgAAABOdW1iZXIgT2JqZWN0IFN0cnVjdHVyZXN0crMqAABYCgAAAHBhcnNldHVwbGVytCoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNwYXJzZXR1cGxlWCwAAABFeHRyYWN0aW5nIFBhcmFtZXRlcnMgaW4gRXh0ZW5zaW9uIEZ1bmN0aW9uc3RytSoAAFgOAAAAb3Blbi1jb25zdGFudHNytioAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcGVuLWNvbnN0YW50c1gVAAAAb3BlbigpIGZsYWcgY29uc3RhbnRzdHK3KgAAWAgAAABleGFtcGxlc3K4KgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHK5KgAAWAsAAABjbWQtb2JqZWN0c3K6KgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQtb2JqZWN0c1gLAAAAQ21kIE9iamVjdHN0crsqAABYBQAAAGFsbG9zcrwqAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsbG9zLmh0bWwjYWxsb3NYIQAAAEdlbmVyaWMgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlc3RyvSoAAFgMAAAAZm9ybS1vYmplY3Rzcr4qAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZm9ybS1vYmplY3RzWAwAAABGb3JtIE9iamVjdHN0cr8qAABYEwAAAHByb2ZpbGUtbGltaXRhdGlvbnNywCoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtbGltaXRhdGlvbnNYCwAAAExpbWl0YXRpb25zdHLBKgAAWBsAAABvcHRwYXJzZS1leHRlbmRpbmctb3B0cGFyc2VywioAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1leHRlbmRpbmctb3B0cGFyc2VYEgAAAEV4dGVuZGluZyBvcHRwYXJzZXRywyoAAFgUAAAAcHljbGJyLWNsYXNzLW9iamVjdHNyxCoAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLWNsYXNzLW9iamVjdHNYDQAAAENsYXNzIE9iamVjdHN0csUqAABYFQAAAGRlc2NyaXB0b3ItaW52b2NhdGlvbnLGKgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2Rlc2NyaXB0b3ItaW52b2NhdGlvblgUAAAASW52b2tpbmcgRGVzY3JpcHRvcnN0cscqAABYEQAAAHdhdmUtcmVhZC1vYmplY3RzcsgqAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLXJlYWQtb2JqZWN0c1gRAAAAV2F2ZV9yZWFkIE9iamVjdHN0cskqAABYCgAAAGZpbGUtaW5wdXRyyioAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjZmlsZS1pbnB1dFgKAAAARmlsZSBpbnB1dHRyyyoAAFgJAAAAcmVmZXJlbmNlcswqAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1sI3JlZmVyZW5jZVgRAAAAQ29tbWFuZCBSZWZlcmVuY2V0cs0qAABYBwAAAHBlcC0zMDlyzioAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMDlYJQAAAFBFUCAzMDk6IFBhcnRpYWwgRnVuY3Rpb24gQXBwbGljYXRpb250cs8qAABYBwAAAHBlcC0zMDhy0CoAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMDhYIAAAAFBFUCAzMDg6IENvbmRpdGlvbmFsIEV4cHJlc3Npb25zdHLRKgAAWA4AAABzaGVsdmUtZXhhbXBsZXLSKgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUtZXhhbXBsZVgHAAAARXhhbXBsZXRy0yoAAFgNAAAAdHV0LWxpc3Rjb21wc3LUKgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbGlzdGNvbXBzWBMAAABMaXN0IENvbXByZWhlbnNpb25zdHLVKgAAWA4AAABzeXNsb2ctaGFuZGxlcnLWKgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3lzbG9nLWhhbmRsZXJYDQAAAFN5c0xvZ0hhbmRsZXJ0ctcqAABYDgAAAGNzdi1mbXQtcGFyYW1zctgqAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi1mbXQtcGFyYW1zWCIAAABEaWFsZWN0cyBhbmQgRm9ybWF0dGluZyBQYXJhbWV0ZXJzdHLZKgAAWCYAAABvcHRwYXJzZS13aGF0LXBvc2l0aW9uYWwtYXJndW1lbnRzLWZvcnLaKgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXdoYXQtcG9zaXRpb25hbC1hcmd1bWVudHMtZm9yWCIAAABXaGF0IGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBmb3I/dHLbKgAAWA4AAABsaW5lLXN0cnVjdHVyZXLcKgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsaW5lLXN0cnVjdHVyZVgOAAAATGluZSBzdHJ1Y3R1cmV0ct0qAABYDQAAAGNyZWF0aW5nLWR1bWJy3ioAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNjcmVhdGluZy1kdW1iWCEAAABDcmVhdGluZyBkdW1iIGJ1aWx0IGRpc3RyaWJ1dGlvbnN0ct8qAABYFAAAAGJhc2UtaGFuZGxlci1vYmplY3RzcuAqAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNiYXNlLWhhbmRsZXItb2JqZWN0c1gTAAAAQmFzZUhhbmRsZXIgT2JqZWN0c3Ry4SoAAFgNAAAAc2VjdC1yZWxsaW5rc3LiKgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4yLmh0bWwjc2VjdC1yZWxsaW5rc1gNAAAAUmVsYXRlZCBMaW5rc3Ry4yoAAFgUAAAANjQtYml0LWFjY2Vzcy1yaWdodHNy5CoAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI2JpdC1hY2Nlc3MtcmlnaHRzWA8AAAA2NC1iaXQgU3BlY2lmaWN0cuUqAABYDgAAAGJ1aWx0LWluLWZ1bmNzcuYqAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2J1aWx0LWluLWZ1bmNzWBIAAABCdWlsdC1pbiBGdW5jdGlvbnN0cucqAABYIQAAAGNvbGxlY3Rpb25zLWFic3RyYWN0LWJhc2UtY2xhc3Nlc3LoKgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLWFic3RyYWN0LWJhc2UtY2xhc3Nlc1ghAAAAQ29sbGVjdGlvbnMgQWJzdHJhY3QgQmFzZSBDbGFzc2VzdHLpKgAAWBQAAAB0dXQtZGF0YS1jb21wcmVzc2lvbnLqKgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWRhdGEtY29tcHJlc3Npb25YEAAAAERhdGEgQ29tcHJlc3Npb250cusqAABYDQAAAGVwb2xsLW9iamVjdHNy7CoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjZXBvbGwtb2JqZWN0c1guAAAARWRnZSBhbmQgTGV2ZWwgVHJpZ2dlciBQb2xsaW5nIChlcG9sbCkgT2JqZWN0c3Ry7SoAAFgKAAAAdHV0LWVycm9yc3LuKgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LWVycm9yc1gVAAAARXJyb3JzIGFuZCBFeGNlcHRpb25zdHLvKgAAWA4AAABzdHJ1Y3Qtb2JqZWN0c3LwKgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3Qtb2JqZWN0c1gHAAAAQ2xhc3Nlc3Ry8SoAAFgMAAAAc2V0dXAtc2NyaXB0cvIqAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNzZXR1cC1zY3JpcHRYGAAAAFdyaXRpbmcgdGhlIFNldHVwIFNjcmlwdHRy8yoAAFgTAAAAdHV0LWluc3RhbmNlb2JqZWN0c3L0KgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1pbnN0YW5jZW9iamVjdHNYEAAAAEluc3RhbmNlIE9iamVjdHN0cvUqAABYDQAAAGhhbmRsZS1vYmplY3Ry9ioAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI2hhbmRsZS1vYmplY3RYFwAAAFJlZ2lzdHJ5IEhhbmRsZSBPYmplY3RzdHL3KgAAWAsAAAB0dXQtbnVtYmVyc3L4KgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LW51bWJlcnNYBwAAAE51bWJlcnN0cvkqAABYEQAAAHN1YmNsYXNzaW5nLXJlcHJzcvoqAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNzdWJjbGFzc2luZy1yZXByc1gYAAAAU3ViY2xhc3NpbmcgUmVwciBPYmplY3RzdHL7KgAAWAoAAABtc2ktdGFibGVzcvwqAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaS10YWJsZXNYEgAAAFByZWNvbXB1dGVkIHRhYmxlc3Ry/SoAAFgZAAAAb3B0cGFyc2UtZGVmaW5pbmctb3B0aW9uc3L+KgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWRlZmluaW5nLW9wdGlvbnNYEAAAAERlZmluaW5nIG9wdGlvbnN0cv8qAABYBQAAAHVuZG9jcgArAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjdW5kb2NYFAAAAFVuZG9jdW1lbnRlZCBNb2R1bGVzdHIBKwAAWBAAAABqc29uLXRvLXB5LXRhYmxlcgIrAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLXRvLXB5LXRhYmxlWAEAAAAtdHIDKwAAWBAAAAB1c2luZy1vbi1lbnZ2YXJzcgQrAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjdXNpbmctb24tZW52dmFyc1gVAAAARW52aXJvbm1lbnQgdmFyaWFibGVzdHIFKwAAWBUAAABjdXJzZXNwYW5lbC1mdW5jdGlvbnNyBisAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzcGFuZWwtZnVuY3Rpb25zWAkAAABGdW5jdGlvbnN0cgcrAABYDAAAAHBvcDMtZXhhbXBsZXIIKwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3AzLWV4YW1wbGVYDAAAAFBPUDMgRXhhbXBsZXRyCSsAAFgCAAAAZjFyCisAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI2YxWAEAAAAtdHILKwAAWB8AAABtdWx0aXByb2Nlc3NpbmctYWRkcmVzcy1mb3JtYXRzcgwrAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1hZGRyZXNzLWZvcm1hdHNYDwAAAEFkZHJlc3MgRm9ybWF0c3RyDSsAAFgYAAAAY2FjaGVmdHAtaGFuZGxlci1vYmplY3Rzcg4rAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNjYWNoZWZ0cC1oYW5kbGVyLW9iamVjdHNYFwAAAENhY2hlRlRQSGFuZGxlciBPYmplY3RzdHIPKwAAWBsAAABpbmNyZW1lbnRhbC1lbmNvZGVyLW9iamVjdHNyECsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjaW5jcmVtZW50YWwtZW5jb2Rlci1vYmplY3RzWBoAAABJbmNyZW1lbnRhbEVuY29kZXIgT2JqZWN0c3RyESsAAFgSAAAAZGF0ZXRpbWUtdGltZWRlbHRhchIrAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUtdGltZWRlbHRhWBEAAAB0aW1lZGVsdGEgT2JqZWN0c3RyEysAAFgXAAAAY3R5cGVzLXBhc3NpbmctcG9pbnRlcnNyFCsAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXBhc3NpbmctcG9pbnRlcnNYNgAAAFBhc3NpbmcgcG9pbnRlcnMgKG9yOiBwYXNzaW5nIHBhcmFtZXRlcnMgYnkgcmVmZXJlbmNlKXRyFSsAAFgIAAAAY29udGludWVyFisAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNjb250aW51ZVgWAAAAVGhlIGNvbnRpbnVlIHN0YXRlbWVudHRyFysAAFgIAAAAdHV0LW9kZHNyGCsAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtb2Rkc1gNAAAAT2RkcyBhbmQgRW5kc3RyGSsAAFgYAAAAcHJveHktYmFzaWMtYXV0aC1oYW5kbGVychorAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNwcm94eS1iYXNpYy1hdXRoLWhhbmRsZXJYHQAAAFByb3h5QmFzaWNBdXRoSGFuZGxlciBPYmplY3RzdHIbKwAAWCEAAABvcHRwYXJzZS1kZWZpbmluZy1jYWxsYmFjay1vcHRpb25yHCsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1kZWZpbmluZy1jYWxsYmFjay1vcHRpb25YGgAAAERlZmluaW5nIGEgY2FsbGJhY2sgb3B0aW9udHIdKwAAWAsAAAB0YXItZm9ybWF0c3IeKwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyLWZvcm1hdHNYFQAAAFN1cHBvcnRlZCB0YXIgZm9ybWF0c3RyHysAAFgNAAAAdHV0LWl0ZXJhdG9yc3IgKwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1pdGVyYXRvcnNYCQAAAEl0ZXJhdG9yc3RyISsAAFgLAAAAdHV0LWxvZ2dpbmdyIisAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtbG9nZ2luZ1gHAAAATG9nZ2luZ3RyIysAAFgSAAAAYWxsb2NhdGluZy1vYmplY3RzciQrAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYWxsb2NhdGluZy1vYmplY3RzWB4AAABBbGxvY2F0aW5nIE9iamVjdHMgb24gdGhlIEhlYXB0ciUrAABYFAAAAGh0dHByZXNwb25zZS1vYmplY3RzciYrAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwcmVzcG9uc2Utb2JqZWN0c1gUAAAASFRUUFJlc3BvbnNlIE9iamVjdHN0cicrAABYFAAAAGRvY3Rlc3QtYWR2YW5jZWQtYXBpcigrAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWFkdmFuY2VkLWFwaVgMAAAAQWR2YW5jZWQgQVBJdHIpKwAAWBcAAABtZW1iZXJzaGlwLXRlc3QtZGV0YWlsc3IqKwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbWVtYmVyc2hpcC10ZXN0LWRldGFpbHNYGgAAAE1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zdHIrKwAAWBIAAABtaW1ld3JpdGVyLW9iamVjdHNyLCsAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI21pbWV3cml0ZXItb2JqZWN0c1gSAAAATWltZVdyaXRlciBPYmplY3RzdHItKwAAWBQAAAB0dXQtbW9kdWxlc2Fzc2NyaXB0c3IuKwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1tb2R1bGVzYXNzY3JpcHRzWBwAAABFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzdHIvKwAAWBMAAABwb3BlbjItZmxvdy1jb250cm9scjArAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi1mbG93LWNvbnRyb2xYEwAAAEZsb3cgQ29udHJvbCBJc3N1ZXN0cjErAABYCgAAAGludG9iamVjdHNyMisAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2ludG9iamVjdHNYFQAAAFBsYWluIEludGVnZXIgT2JqZWN0c3RyMysAAFgMAAAAdHV0LWZwLWVycm9ycjQrAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9mbG9hdGluZ3BvaW50Lmh0bWwjdHV0LWZwLWVycm9yWBQAAABSZXByZXNlbnRhdGlvbiBFcnJvcnRyNSsAAFgLAAAAcmVnZXgtaG93dG9yNisAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3JlZ2V4Lmh0bWwjcmVnZXgtaG93dG9YGAAAAFJlZ3VsYXIgRXhwcmVzc2lvbiBIT1dUT3RyNysAAFgKAAAAYnVpbGR2YWx1ZXI4KwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI2J1aWxkdmFsdWVYGQAAAEJ1aWxkaW5nIEFyYml0cmFyeSBWYWx1ZXN0cjkrAABYEQAAAGl0ZXJ0b29scy1yZWNpcGVzcjorAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy1yZWNpcGVzWAcAAABSZWNpcGVzdHI7KwAAWAYAAABleGNlcHRyPCsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2V4Y2VwdFgRAAAAVGhlIHRyeSBzdGF0ZW1lbnR0cj0rAABYEAAAAGF0b20taWRlbnRpZmllcnNyPisAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2F0b20taWRlbnRpZmllcnNYEwAAAElkZW50aWZpZXJzIChOYW1lcyl0cj8rAABYFAAAAGN1cnNlcy1wYW5lbC1vYmplY3RzckArAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy1wYW5lbC1vYmplY3RzWA0AAABQYW5lbCBPYmplY3RzdHJBKwAAWBAAAABpdGVyYXRvci1vYmplY3RzckIrAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pdGVyYXRvci5odG1sI2l0ZXJhdG9yLW9iamVjdHNYEAAAAEl0ZXJhdG9yIE9iamVjdHN0ckMrAABYFAAAAGVtYmVkZGluZ2luY3BsdXNwbHVzckQrAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjZW1iZWRkaW5naW5jcGx1c3BsdXNYFwAAAEVtYmVkZGluZyBQeXRob24gaW4gQysrdHJFKwAAWAwAAABjc3YtZXhhbXBsZXNyRisAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyRysAAFgIAAAAZmVhdHVyZXNySCsAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjZmVhdHVyZXNYCAAAAEZlYXR1cmVzdHJJKwAAWBcAAABlbGVtZW50dHJlZS1wYXJzaW5nLXhtbHJKKwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS1wYXJzaW5nLXhtbFgLAAAAUGFyc2luZyBYTUx0cksrAABYDQAAAHJsb2NrLW9iamVjdHNyTCsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjcmxvY2stb2JqZWN0c1gNAAAAUkxvY2sgT2JqZWN0c3RyTSsAAFgLAAAAcGVyc2lzdGVuY2VyTisAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGVyc2lzdGVuY2UuaHRtbCNwZXJzaXN0ZW5jZVgQAAAARGF0YSBQZXJzaXN0ZW5jZXRyTysAAFgLAAAAaW5zdGFsbC1jbWRyUCsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb21tYW5kcmVmLmh0bWwjaW5zdGFsbC1jbWRYLgAAAEluc3RhbGxpbmcgbW9kdWxlczogdGhlIGluc3RhbGwgY29tbWFuZCBmYW1pbHl0clErAABYCwAAAGFwaS1vYmplY3RzclIrAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnRyby5odG1sI2FwaS1vYmplY3RzWCMAAABPYmplY3RzLCBUeXBlcyBhbmQgUmVmZXJlbmNlIENvdW50c3RyUysAAFgSAAAAZmlsdGVycy1kaWN0Y29uZmlnclQrAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjZmlsdGVycy1kaWN0Y29uZmlnWCUAAABDb25maWd1cmluZyBmaWx0ZXJzIHdpdGggZGljdENvbmZpZygpdHJVKwAAWA8AAABtZW1vcnlpbnRlcmZhY2VyVisAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeWludGVyZmFjZVgQAAAATWVtb3J5IEludGVyZmFjZXRyVysAAFgVAAAAZG9jdGVzdC1kb2N0ZXN0cnVubmVyclgrAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWRvY3Rlc3RydW5uZXJYFQAAAERvY1Rlc3RSdW5uZXIgb2JqZWN0c3RyWSsAAFgTAAAAYXBwbGljYXRpb24tb2JqZWN0c3JaKwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNhcHBsaWNhdGlvbi1vYmplY3RzWBMAAABBcHBsaWNhdGlvbiBPYmplY3RzdHJbKwAAWAcAAABudW1iZXJzclwrAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI251bWJlcnNYEAAAAE51bWVyaWMgbGl0ZXJhbHN0cl0rAABYCAAAAHR5cGVzc2Vxcl4rAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNzZXFYRwAAAFNlcXVlbmNlIFR5cGVzIOKAlCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlLCBieXRlYXJyYXksIGJ1ZmZlciwgeHJhbmdldHJfKwAAWA0AAABudW1lcmljLXR5cGVzcmArAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjbnVtZXJpYy10eXBlc1gXAAAARW11bGF0aW5nIG51bWVyaWMgdHlwZXN0cmErAABYBgAAAHR1dC1pb3JiKwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbCN0dXQtaW9YEAAAAElucHV0IGFuZCBPdXRwdXR0cmMrAABYFQAAAGRvY3Rlc3Qtb3V0cHV0Y2hlY2tlcnJkKwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1vdXRwdXRjaGVja2VyWBUAAABPdXRwdXRDaGVja2VyIG9iamVjdHN0cmUrAABYKwAAAGN0eXBlcy1hY2Nlc3NpbmctZnVuY3Rpb25zLWZyb20tbG9hZGVkLWRsbHNyZisAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWFjY2Vzc2luZy1mdW5jdGlvbnMtZnJvbS1sb2FkZWQtZGxsc1gkAAAAQWNjZXNzaW5nIGZ1bmN0aW9ucyBmcm9tIGxvYWRlZCBkbGxzdHJnKwAAWBUAAABzYXgtZXhjZXB0aW9uLW9iamVjdHNyaCsAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3NheC1leGNlcHRpb24tb2JqZWN0c1gUAAAAU0FYRXhjZXB0aW9uIE9iamVjdHN0cmkrAABYEgAAAG11bHRpcGxlLXByb2Nlc3Nlc3JqKwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI211bHRpcGxlLXByb2Nlc3Nlc1gwAAAATG9nZ2luZyB0byBhIHNpbmdsZSBmaWxlIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzdHJrKwAAWBYAAABkb2N0ZXN0LXNpbXBsZS10ZXN0bW9kcmwrAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LXNpbXBsZS10ZXN0bW9kWC0AAABTaW1wbGUgVXNhZ2U6IENoZWNraW5nIEV4YW1wbGVzIGluIERvY3N0cmluZ3N0cm0rAABYJQAAAG9wdHBhcnNlLXVuZGVyc3RhbmRpbmctb3B0aW9uLWFjdGlvbnNybisAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS11bmRlcnN0YW5kaW5nLW9wdGlvbi1hY3Rpb25zWBwAAABVbmRlcnN0YW5kaW5nIG9wdGlvbiBhY3Rpb25zdHJvKwAAWAwAAABzZWN0aW9uLWJvb2xycCsAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tYm9vbFgXAAAAUEVQIDI4NTogQSBCb29sZWFuIFR5cGV0cnErAABYBQAAAHdoaWxlcnIrAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCN3aGlsZVgTAAAAVGhlIHdoaWxlIHN0YXRlbWVudHRycysAAFgVAAAAcm90YXRpbmctZmlsZS1oYW5kbGVycnQrAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNyb3RhdGluZy1maWxlLWhhbmRsZXJYEwAAAFJvdGF0aW5nRmlsZUhhbmRsZXJ0cnUrAABYBwAAAHRocmVhZHNydisAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCN0aHJlYWRzWCwAAABUaHJlYWQgU3RhdGUgYW5kIHRoZSBHbG9iYWwgSW50ZXJwcmV0ZXIgTG9ja3RydysAAFgTAAAAYnJvd3Nlci1jb250cm9sbGVyc3J4KwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjYnJvd3Nlci1jb250cm9sbGVyc1gaAAAAQnJvd3NlciBDb250cm9sbGVyIE9iamVjdHN0cnkrAABYDQAAADI1aW50ZXJhY3RpdmVyeisAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI2ludGVyYWN0aXZlWB8AAABJbnRlcmFjdGl2ZSBJbnRlcnByZXRlciBDaGFuZ2VzdHJ7KwAAWAgAAABwZXAtMzEyOXJ8KwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMjlYGgAAAFBFUCAzMTI5OiBDbGFzcyBEZWNvcmF0b3JzdHJ9KwAAWA4AAABtZW1vcnlleGFtcGxlc3J+KwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjbWVtb3J5ZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHJ/KwAAWBMAAAB0dXQtd2Vhay1yZWZlcmVuY2VzcoArAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LXdlYWstcmVmZXJlbmNlc1gPAAAAV2VhayBSZWZlcmVuY2VzdHKBKwAAWAgAAABweW1hbGxvY3KCKwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjcHltYWxsb2NYFgAAAFRoZSBweW1hbGxvYyBhbGxvY2F0b3J0coMrAABYDgAAAHBvc2l4LWNvbnRlbnRzcoQrAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4Lmh0bWwjcG9zaXgtY29udGVudHNYFwAAAE5vdGFibGUgTW9kdWxlIENvbnRlbnRzdHKFKwAAWA8AAAB0YXJpbmZvLW9iamVjdHNyhisAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmluZm8tb2JqZWN0c1gPAAAAVGFySW5mbyBPYmplY3RzdHKHKwAAWAgAAABsaXRlcmFsc3KIKwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsaXRlcmFsc1gIAAAATGl0ZXJhbHN0cokrAABYEAAAAGJ5dGVhcnJheW9iamVjdHNyiisAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2J5dGVhcnJheW9iamVjdHNYEgAAAEJ5dGUgQXJyYXkgT2JqZWN0c3RyiysAAFgLAAAAY29kZW9iamVjdHNyjCsAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjb2Rlb2JqZWN0c1gBAAAALXRyjSsAAFgjAAAAb3B0cGFyc2UtcmFpc2luZy1lcnJvcnMtaW4tY2FsbGJhY2tyjisAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1yYWlzaW5nLWVycm9ycy1pbi1jYWxsYmFja1gcAAAAUmFpc2luZyBlcnJvcnMgaW4gYSBjYWxsYmFja3RyjysAAFgLAAAAdHV0LXN0YXJ0dXBykCsAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LXN0YXJ0dXBYHAAAAFRoZSBJbnRlcmFjdGl2ZSBTdGFydHVwIEZpbGV0cpErAABYGgAAAGRpc3R1dGlscy1hZGRpdGlvbmFsLWZpbGVzcpIrAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkaXN0dXRpbHMtYWRkaXRpb25hbC1maWxlc1gbAAAASW5zdGFsbGluZyBBZGRpdGlvbmFsIEZpbGVzdHKTKwAAWAwAAABleHBhdC1lcnJvcnNylCsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0LWVycm9yc1gVAAAARXhwYXQgZXJyb3IgY29uc3RhbnRzdHKVKwAAWBEAAABtdWx0aWZpbGUtZXhhbXBsZXKWKwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUtZXhhbXBsZVgRAAAATXVsdGlGaWxlIEV4YW1wbGV0cpcrAABYGAAAAG11bHRpcHJvY2Vzc2luZy1tYW5hZ2Vyc3KYKwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmctbWFuYWdlcnNYCAAAAE1hbmFnZXJzdHKZKwAAWB8AAABsb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqcporAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdC1pbnRlcm5hbG9ialgaAAAAQWNjZXNzIHRvIGludGVybmFsIG9iamVjdHN0cpsrAABYDwAAAHNwb2tlbi1tZXNzYWdlc3KcKwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI3Nwb2tlbi1tZXNzYWdlc1gZAAAAU3BlYWtpbmcgbG9nZ2luZyBtZXNzYWdlc3RynSsAAFgUAAAAb3B0cGFyc2UtdGVybWlub2xvZ3lynisAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS10ZXJtaW5vbG9neVgLAAAAVGVybWlub2xvZ3l0cp8rAABYDgAAAGNvbXByZWhlbnNpb25zcqArAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNjb21wcmVoZW5zaW9uc1giAAAARGlzcGxheXMgZm9yIHNldHMgYW5kIGRpY3Rpb25hcmllc3RyoSsAAFgGAAAAZnV0dXJlcqIrAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZnV0dXJlWBEAAABGdXR1cmUgc3RhdGVtZW50c3RyoysAAFgKAAAAdHRrc3R5bGluZ3KkKwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGtzdHlsaW5nWAsAAABUdGsgU3R5bGluZ3RypSsAAFgTAAAAbnQtZXZlbnRsb2ctaGFuZGxlcnKmKwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbnQtZXZlbnRsb2ctaGFuZGxlclgRAAAATlRFdmVudExvZ0hhbmRsZXJ0cqcrAABYBwAAAHR1dC1kZWxyqCsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWRlbFgRAAAAVGhlIGRlbCBzdGF0ZW1lbnR0cqkrAABYEAAAAGN1cnNlcy1mdW5jdGlvbnNyqisAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLWZ1bmN0aW9uc1gJAAAARnVuY3Rpb25zdHKrKwAAWA0AAABjb2RlYy1vYmplY3RzcqwrAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjLW9iamVjdHNYDQAAAENvZGVjIE9iamVjdHN0cq0rAABYEAAAAHVybGxpYjItZXhhbXBsZXNyrisAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjItZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHKvKwAAWAwAAABzb3J0aW5naG93dG9ysCsAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3NvcnRpbmcuaHRtbCNzb3J0aW5naG93dG9YDgAAAFNvcnRpbmcgSE9XIFRPdHKxKwAAWAsAAABsaXN0b2JqZWN0c3KyKwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2xpc3RvYmplY3RzWAwAAABMaXN0IE9iamVjdHN0crMrAABYEgAAAGRvY3Rlc3QtZGlyZWN0aXZlc3K0KwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kaXJlY3RpdmVzWAoAAABEaXJlY3RpdmVzdHK1KwAAWAUAAABjYWxsc3K2KwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjY2FsbHNYBQAAAENhbGxzdHK3KwAAWBIAAABjb2RlYy1iYXNlLWNsYXNzZXNyuCsAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWMtYmFzZS1jbGFzc2VzWBIAAABDb2RlYyBCYXNlIENsYXNzZXN0crkrAABYHwAAAGluc3QtYWx0LWluc3RhbGwtcHJlZml4LXdpbmRvd3NyuisAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWFsdC1pbnN0YWxsLXByZWZpeC13aW5kb3dzWDMAAABBbHRlcm5hdGUgaW5zdGFsbGF0aW9uOiBXaW5kb3dzICh0aGUgcHJlZml4IHNjaGVtZSl0crsrAABYFwAAAG9zc2F1ZGlvLWRldmljZS1vYmplY3RzcrwrAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW8tZGV2aWNlLW9iamVjdHNYFAAAAEF1ZGlvIERldmljZSBPYmplY3RzdHK9KwAAWBkAAABsb2dnaW5nLWNvbmZpZy1maWxlZm9ybWF0cr4rAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdFgZAAAAQ29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdHRyvysAAFgRAAAAcG9zaXgtbGFyZ2UtZmlsZXNywCsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXguaHRtbCNwb3NpeC1sYXJnZS1maWxlc1gSAAAATGFyZ2UgRmlsZSBTdXBwb3J0dHLBKwAAWA8AAABwYWNrYWdlLWRpc3BsYXlywisAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbCNwYWNrYWdlLWRpc3BsYXlYFAAAAFB5UEkgcGFja2FnZSBkaXNwbGF5dHLDKwAAWAkAAAAyNW1vZHVsZXNyxCsAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZXNYIgAAAE5ldywgSW1wcm92ZWQsIGFuZCBSZW1vdmVkIE1vZHVsZXN0csUrAABYEAAAAHB5dGhvbi1pbnRlcmZhY2VyxisAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjcHl0aG9uLWludGVyZmFjZVgQAAAAUHl0aG9uIEludGVyZmFjZXRyxysAAFgaAAAAb3B0cGFyc2UtcG9wdWxhdGluZy1wYXJzZXJyyCsAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1wb3B1bGF0aW5nLXBhcnNlclgVAAAAUG9wdWxhdGluZyB0aGUgcGFyc2VydHLJKwAAWA8AAABidWlsdC1pbi1jb25zdHNyyisAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjYnVpbHQtaW4tY29uc3RzWBIAAABCdWlsdC1pbiBDb25zdGFudHN0cssrAABYBwAAAG5ldGRhdGFyzCsAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0ZGF0YS5odG1sI25ldGRhdGFYFgAAAEludGVybmV0IERhdGEgSGFuZGxpbmd0cs0rAABYDgAAAGNvZXJjaW9uLXJ1bGVzcs4rAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY29lcmNpb24tcnVsZXNYDgAAAENvZXJjaW9uIHJ1bGVzdHLPKwAAWA8AAABzZXF1ZW5jZW9iamVjdHNy0CsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbmNyZXRlLmh0bWwjc2VxdWVuY2VvYmplY3RzWBAAAABTZXF1ZW5jZSBPYmplY3RzdHLRKwAAWAkAAABtZXRhLWRhdGFy0isAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI21ldGEtZGF0YVgUAAAAQWRkaXRpb25hbCBtZXRhLWRhdGF0ctMrAABYDwAAAHB5cG9ydGluZy1ob3d0b3LUKwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcHlwb3J0aW5nLmh0bWwjcHlwb3J0aW5nLWhvd3RvWCEAAABQb3J0aW5nIFB5dGhvbiAyIENvZGUgdG8gUHl0aG9uIDN0ctUrAABYFgAAAHVzaW5nLW9uLW9wdGltaXphdGlvbnNy1isAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1vcHRpbWl6YXRpb25zWAEAAAAtdHLXKwAAWBYAAABsb2dpY2FsX29wZXJhbmRzX2xhYmVsctgrAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNsb2dpY2FsLW9wZXJhbmRzLWxhYmVsWBAAAABMb2dpY2FsIG9wZXJhbmRzdHLZKwAAWA8AAAB3ZWFrcmVmLW9iamVjdHNy2isAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYtb2JqZWN0c1gWAAAAV2VhayBSZWZlcmVuY2UgT2JqZWN0c3Ry2ysAAFgTAAAAY3R5cGVzLXJldHVybi10eXBlc3LcKwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtcmV0dXJuLXR5cGVzWAwAAABSZXR1cm4gdHlwZXN0ct0rAABYCAAAAGludGVnZXJzct4rAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ludGVnZXJzWCEAAABJbnRlZ2VyIGFuZCBsb25nIGludGVnZXIgbGl0ZXJhbHN0ct8rAABYCgAAAHJlLW9iamVjdHNy4CsAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS1vYmplY3RzWBoAAABSZWd1bGFyIEV4cHJlc3Npb24gT2JqZWN0c3Ry4SsAAFgHAAAAc3RyaW5nc3LiKwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNzdHJpbmdzWA8AAABTdHJpbmcgbGl0ZXJhbHN0cuMrAABYEgAAAHR1dC11bmljb2Rlc3RyaW5nc3LkKwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LXVuaWNvZGVzdHJpbmdzWA8AAABVbmljb2RlIFN0cmluZ3N0cuUrAABYFwAAAGV4dGVuZGluZy1zaW1wbGVleGFtcGxlcuYrAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLXNpbXBsZWV4YW1wbGVYEAAAAEEgU2ltcGxlIEV4YW1wbGV0cucrAABYFQAAAGluc3Qtbm9uLW1zLWNvbXBpbGVyc3LoKwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3Qtbm9uLW1zLWNvbXBpbGVyc1goAAAAVXNpbmcgbm9uLU1pY3Jvc29mdCBjb21waWxlcnMgb24gV2luZG93c3Ry6SsAAFgXAAAAdHV0LXVucGFja2luZy1hcmd1bWVudHNy6isAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LXVucGFja2luZy1hcmd1bWVudHNYGAAAAFVucGFja2luZyBBcmd1bWVudCBMaXN0c3Ry6ysAAFgYAAAAZG9jdGVzdC13aGljaC1kb2NzdHJpbmdzcuwrAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LXdoaWNoLWRvY3N0cmluZ3NYHgAAAFdoaWNoIERvY3N0cmluZ3MgQXJlIEV4YW1pbmVkP3Ry7SsAAFgLAAAAMnRvMy1maXhlcnNy7isAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sI3RvMy1maXhlcnNYBgAAAEZpeGVyc3Ry7ysAAFgMAAAAc3NsLXNlY3VyaXR5cvArAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC1zZWN1cml0eVgXAAAAU2VjdXJpdHkgY29uc2lkZXJhdGlvbnN0cvErAABYDAAAAHR1cGxlb2JqZWN0c3LyKwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCN0dXBsZW9iamVjdHNYDQAAAFR1cGxlIE9iamVjdHN0cvMrAABYCwAAAGRpY3RvYmplY3RzcvQrAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjZGljdG9iamVjdHNYEgAAAERpY3Rpb25hcnkgT2JqZWN0c3Ry9SsAAFgRAAAAY3R5cGVzLWRhdGEtdHlwZXNy9isAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWRhdGEtdHlwZXNYCgAAAERhdGEgdHlwZXN0cvcrAABYDgAAAGluaXRpYWxpemF0aW9ucvgrAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjaW5pdGlhbGl6YXRpb25YKQAAAEluaXRpYWxpemF0aW9uLCBGaW5hbGl6YXRpb24sIGFuZCBUaHJlYWRzdHL5KwAAWA0AAABzZWN0aW9uLW90aGVycvorAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLW90aGVyWBcAAABPdGhlciBDaGFuZ2VzIGFuZCBGaXhlc3Ry+ysAAFgOAAAAc3RyaW5nLW1ldGhvZHNy/CsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHJpbmctbWV0aG9kc1gOAAAAU3RyaW5nIE1ldGhvZHN0cv0rAABYCQAAAHRyYWNlLWFwaXL+KwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLWFwaVgWAAAAUHJvZ3JhbW1hdGljIEludGVyZmFjZXRy/ysAAFgPAAAAZHluYW1pYy1saW5raW5ncgAsAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvd2luZG93cy5odG1sI2R5bmFtaWMtbGlua2luZ1gkAAAARGlmZmVyZW5jZXMgQmV0d2VlbiBVbml4IGFuZCBXaW5kb3dzdHIBLAAAWBUAAABibHRpbi1lbGxpcHNpcy1vYmplY3RyAiwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi1lbGxpcHNpcy1vYmplY3RYEwAAAFRoZSBFbGxpcHNpcyBPYmplY3R0cgMsAABYFwAAAHB5Y2xici1mdW5jdGlvbi1vYmplY3RzcgQsAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici1mdW5jdGlvbi1vYmplY3RzWBAAAABGdW5jdGlvbiBPYmplY3RzdHIFLAAAWA0AAABtdXRleC1vYmplY3RzcgYsAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211dGV4Lmh0bWwjbXV0ZXgtb2JqZWN0c1gNAAAATXV0ZXggT2JqZWN0c3RyBywAAFgOAAAAcHByaW50LWV4YW1wbGVyCCwAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LWV4YW1wbGVYDgAAAHBwcmludCBFeGFtcGxldHIJLAAAWAsAAABmaWxlb2JqZWN0c3IKLAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2ZpbGVvYmplY3RzWAwAAABGaWxlIE9iamVjdHN0cgssAABYDwAAAHR1dC1rZXliaW5kaW5nc3IMLAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbCN0dXQta2V5YmluZGluZ3NYDAAAAEtleSBCaW5kaW5nc3RyDSwAAFgVAAAAaW5zdC1jb25maWctZmlsZW5hbWVzcg4sAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctZmlsZW5hbWVzWCIAAABMb2NhdGlvbiBhbmQgbmFtZXMgb2YgY29uZmlnIGZpbGVzdHIPLAAAWA8AAAB0dXQtbGluZWVkaXRpbmdyECwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWxpbmVlZGl0aW5nWAwAAABMaW5lIEVkaXRpbmd0chEsAABYBgAAAHNvbWVvc3ISLAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb21lb3MuaHRtbCNzb21lb3NYIgAAAE9wdGlvbmFsIE9wZXJhdGluZyBTeXN0ZW0gU2VydmljZXN0chMsAABYBwAAAHBlcC0zNDNyFCwAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNDNYIQAAAFBFUCAzNDM6IFRoZSDigJh3aXRo4oCZIHN0YXRlbWVudHRyFSwAAFgNAAAAbGlicmFyeS1pbmRleHIWLAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbmRleC5odG1sI2xpYnJhcnktaW5kZXhYGwAAAFRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeXRyFywAAFgHAAAAcGVwLTM0MXIYLAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTM0MVgjAAAAUEVQIDM0MTogVW5pZmllZCB0cnkvZXhjZXB0L2ZpbmFsbHl0chksAABYEgAAAGNvb2tpZS1qYXItb2JqZWN0c3IaLAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWUtamFyLW9iamVjdHNYIwAAAENvb2tpZUphciBhbmQgRmlsZUNvb2tpZUphciBPYmplY3RzdHIbLAAAWA4AAABhcGktZXhjZXB0aW9uc3IcLAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktZXhjZXB0aW9uc1gKAAAARXhjZXB0aW9uc3RyHSwAAFgQAAAAdHV0LWNsYXNzb2JqZWN0c3IeLAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1jbGFzc29iamVjdHNYDQAAAENsYXNzIE9iamVjdHN0ch8sAABYCgAAAGRpY3Qtdmlld3NyICwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LXZpZXdzWBcAAABEaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c3RyISwAAFgOAAAAZGlzdHV0aWxzLXRlcm1yIiwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24uaHRtbCNkaXN0dXRpbHMtdGVybVgeAAAARGlzdHV0aWxzLXNwZWNpZmljIHRlcm1pbm9sb2d5dHIjLAAAWAkAAABmdW5jLWxpc3RyJCwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZnVuYy1saXN0WAEAAAAtdHIlLAAAWAYAAABpcyBub3RyJiwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2lzLW5vdFgUAAAASWRlbnRpdHkgY29tcGFyaXNvbnN0cicsAABYDwAAAGRvY3Rlc3QtZG9jdGVzdHIoLAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kb2N0ZXN0WA8AAABEb2NUZXN0IE9iamVjdHN0ciksAABYDQAAAGRlY29kaW5nLW5vdGVyKiwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjZGVjb2Rpbmctbm90ZVgBAAAALXRyKywAAFgRAAAAbWgtZm9sZGVyLW9iamVjdHNyLCwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaC1mb2xkZXItb2JqZWN0c1gOAAAARm9sZGVyIE9iamVjdHN0ci0sAABYCgAAAG1oLW9iamVjdHNyLiwAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaC1vYmplY3RzWAoAAABNSCBPYmplY3RzdHIvLAAAWAgAAABwZXAtMzE0MXIwLAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxNDFYJgAAAFBFUCAzMTQxOiBBIFR5cGUgSGllcmFyY2h5IGZvciBOdW1iZXJzdHIxLAAAWAgAAABmbG9hdGluZ3IyLAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNmbG9hdGluZ1gXAAAARmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHN0cjMsAABYDQAAAGFwaS1yZWZjb3VudHNyNCwAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLXJlZmNvdW50c1gQAAAAUmVmZXJlbmNlIENvdW50c3RyNSwAAFgEAAAAb3B0c3I2LAAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjb3B0c1gNAAAAT3B0aW1pemF0aW9uc3RyNywAAFgXAAAAZW50aXR5LXJlc29sdmVyLW9iamVjdHNyOCwAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjZW50aXR5LXJlc29sdmVyLW9iamVjdHNYFgAAAEVudGl0eVJlc29sdmVyIE9iamVjdHN0cjksAABYEAAAAGRvbS10ZXh0LW9iamVjdHNyOiwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS10ZXh0LW9iamVjdHNYHQAAAFRleHQgYW5kIENEQVRBU2VjdGlvbiBPYmplY3RzdHI7LAAAWBUAAABodHRwcy1oYW5kbGVyLW9iamVjdHNyPCwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHBzLWhhbmRsZXItb2JqZWN0c1gUAAAASFRUUFNIYW5kbGVyIE9iamVjdHN0cj0sAABYDAAAAG1haWxib3gtbWJveHI+LAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYm94WAQAAABtYm94dHI/LAAAWBwAAABhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVyckAsAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVyWCEAAABBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHN0ckEsAABYEgAAAHhkci1wYWNrZXItb2JqZWN0c3JCLAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHItcGFja2VyLW9iamVjdHNYDgAAAFBhY2tlciBPYmplY3RzdHJDLAAAWAcAAABwZXAtMzE0ckQsAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzE0WDMAAABQRVAgMzE0OiBNZXRhZGF0YSBmb3IgUHl0aG9uIFNvZnR3YXJlIFBhY2thZ2VzIHYxLjF0ckUsAABYDgAAAGxpYnJhcnktY29uZmlnckYsAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjbGlicmFyeS1jb25maWdYIQAAAENvbmZpZ3VyaW5nIExvZ2dpbmcgZm9yIGEgTGlicmFyeXRyRywAAFgUAAAAZG9tLWRvY3VtZW50LW9iamVjdHNySCwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1kb2N1bWVudC1vYmplY3RzWBAAAABEb2N1bWVudCBPYmplY3RzdHJJLAAAWBIAAABjb29raWVsaWItZXhhbXBsZXNySiwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLWV4YW1wbGVzWAgAAABFeGFtcGxlc3RySywAAFgTAAAAdHV0LXNvdXJjZS1lbmNvZGluZ3JMLAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbCN0dXQtc291cmNlLWVuY29kaW5nWBQAAABTb3VyY2UgQ29kZSBFbmNvZGluZ3RyTSwAAFgPAAAAdHV0LWluaGVyaXRhbmNlck4sAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWluaGVyaXRhbmNlWAsAAABJbmhlcml0YW5jZXRyTywAAFgVAAAAaW5zdC1hbHQtaW5zdGFsbC11c2VyclAsAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1hbHQtaW5zdGFsbC11c2VyWCcAAABBbHRlcm5hdGUgaW5zdGFsbGF0aW9uOiB0aGUgdXNlciBzY2hlbWV0clEsAABYDQAAAGFwaS1yZWZlcmVuY2VyUiwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNhcGktcmVmZXJlbmNlWA0AAABBUEkgUmVmZXJlbmNldHJTLAAAWBUAAABodHRwLWNvb2tpZS1wcm9jZXNzb3JyVCwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHAtY29va2llLXByb2Nlc3NvclgbAAAASFRUUENvb2tpZVByb2Nlc3NvciBPYmplY3RzdHJVLAAAWBwAAABpbnN0LWFsdC1pbnN0YWxsLXByZWZpeC11bml4clYsAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtdW5peFgwAAAAQWx0ZXJuYXRlIGluc3RhbGxhdGlvbjogVW5peCAodGhlIHByZWZpeCBzY2hlbWUpdHJXLAAAWBYAAABodHRwY29ubmVjdGlvbi1vYmplY3RzclgsAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwY29ubmVjdGlvbi1vYmplY3RzWBYAAABIVFRQQ29ubmVjdGlvbiBPYmplY3RzdHJZLAAAWAwAAABzZXR1cC1jb25maWdyWiwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb25maWdmaWxlLmh0bWwjc2V0dXAtY29uZmlnWCQAAABXcml0aW5nIHRoZSBTZXR1cCBDb25maWd1cmF0aW9uIEZpbGV0clssAABYCAAAAG5ld3R5cGVzclwsAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmppbXBsLmh0bWwjbmV3dHlwZXNYHQAAAE9iamVjdCBJbXBsZW1lbnRhdGlvbiBTdXBwb3J0dHJdLAAAWAoAAABtYWlsYm94LW1ocl4sAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1oWAIAAABNSHRyXywAAFgJAAAAb3MtZmQtb3BzcmAsAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MtZmQtb3BzWBoAAABGaWxlIERlc2NyaXB0b3IgT3BlcmF0aW9uc3RyYSwAAFgOAAAAdW5pY29kZW9iamVjdHNyYiwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCN1bmljb2Rlb2JqZWN0c1gaAAAAVW5pY29kZSBPYmplY3RzIGFuZCBDb2RlY3N0cmMsAABYCgAAAHR5cGVzb3RoZXJyZCwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc290aGVyWBQAAABPdGhlciBCdWlsdC1pbiBUeXBlc3RyZSwAAFgLAAAAZG9tLW9iamVjdHNyZiwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1vYmplY3RzWBIAAABPYmplY3RzIGluIHRoZSBET010cmcsAABYEQAAAGZvcm1hdC1jaGFyYWN0ZXJzcmgsAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI2Zvcm1hdC1jaGFyYWN0ZXJzWBEAAABGb3JtYXQgQ2hhcmFjdGVyc3RyaSwAAFgJAAAAbmFtZXNwYWNlcmosAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjbmFtZXNwYWNlWBQAAABUaGUgTmFtZXNwYWNlIG9iamVjdHRyaywAAFgPAAAAZGlzdHV0aWxzLWluZGV4cmwsAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvaW5kZXguaHRtbCNkaXN0dXRpbHMtaW5kZXhYLAAAAERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHJtLAAAWA0AAABmcmFtZS1vYmplY3Rzcm4sAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZnJhbWUtb2JqZWN0c1gBAAAALXRybywAAFgQAAAAbWFuaWZlc3Qtb3B0aW9uc3JwLAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNtYW5pZmVzdC1vcHRpb25zWBgAAABNYW5pZmVzdC1yZWxhdGVkIG9wdGlvbnN0cnEsAABYDAAAAGJpbmhleC1ub3Rlc3JyLAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXgtbm90ZXNYBQAAAE5vdGVzdHJzLAAAWBkAAABsb2dnaW5nLWNvbmZpZy1kaWN0c2NoZW1hcnQsAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdHNjaGVtYVgfAAAAQ29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IHNjaGVtYXRydSwAAFgTAAAAYXBpLXJlZmNvdW50ZGV0YWlsc3J2LAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktcmVmY291bnRkZXRhaWxzWBcAAABSZWZlcmVuY2UgQ291bnQgRGV0YWlsc3RydywAAFgNAAAAcHJvZmlsZS1zdGF0c3J4LAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS1zdGF0c1gPAAAAVGhlIFN0YXRzIENsYXNzdHJ5LAAAWA8AAABjdHlwZXMtcG9pbnRlcnNyeiwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXBvaW50ZXJzWAgAAABQb2ludGVyc3RyeywAAFgJAAAAdHlwZXMtc2V0cnwsAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXMtc2V0WBwAAABTZXQgVHlwZXMg4oCUIHNldCwgZnJvemVuc2V0dHJ9LAAAWA4AAAByZWNvcmQtb2JqZWN0c3J+LAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNyZWNvcmQtb2JqZWN0c1gOAAAAUmVjb3JkIE9iamVjdHN0cn8sAABYCwAAAHR1dC1jbGVhbnVwcoAsAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtY2xlYW51cFgZAAAARGVmaW5pbmcgQ2xlYW4tdXAgQWN0aW9uc3RygSwAAFgMAAAAc210cC1leGFtcGxlcoIsAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwLWV4YW1wbGVYDAAAAFNNVFAgRXhhbXBsZXRygywAAFgVAAAAZGVzY3JpYmluZy1leHRlbnNpb25zcoQsAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkZXNjcmliaW5nLWV4dGVuc2lvbnNYHAAAAERlc2NyaWJpbmcgZXh0ZW5zaW9uIG1vZHVsZXN0coUsAABYCgAAAHdoaXRlc3BhY2VyhiwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjd2hpdGVzcGFjZVgZAAAAV2hpdGVzcGFjZSBiZXR3ZWVuIHRva2Vuc3RyhywAAFgNAAAAYXBpLWVtYmVkZGluZ3KILAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktZW1iZWRkaW5nWBAAAABFbWJlZGRpbmcgUHl0aG9udHKJLAAAWBMAAABwcm9maWxlLWNhbGlicmF0aW9ucoosAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLWNhbGlicmF0aW9uWAsAAABDYWxpYnJhdGlvbnRyiywAAFgIAAAAdHlwZWl0ZXJyjCwAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlaXRlclgOAAAASXRlcmF0b3IgVHlwZXN0co0sAABYFgAAAG9wdHBhcnNlLW90aGVyLW1ldGhvZHNyjiwAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vdGhlci1tZXRob2RzWA0AAABPdGhlciBtZXRob2RzdHKPLAAAWAMAAAB0cnlykCwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI3RyeVgRAAAAVGhlIHRyeSBzdGF0ZW1lbnR0cpEsAABYDgAAAGNwb3J0aW5nLWhvd3RvcpIsAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9jcG9ydGluZy5odG1sI2Nwb3J0aW5nLWhvd3RvWCUAAABQb3J0aW5nIEV4dGVuc2lvbiBNb2R1bGVzIHRvIFB5dGhvbiAzdHKTLAAAWAkAAAB0dXQtZmlsZXNylCwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWZpbGVzWBkAAABSZWFkaW5nIGFuZCBXcml0aW5nIEZpbGVzdHKVLAAAWAkAAABob3N0X3BvcnRyliwAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjaG9zdC1wb3J0WAEAAAAtdHKXLAAAWAkAAABmdW5jLXJlcHJymCwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZnVuYy1yZXByWAEAAAAtdHKZLAAAWAYAAABsZXZlbHNymiwAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xldmVsc1gOAAAATG9nZ2luZyBMZXZlbHN0cpssAABYFQAAAHRraW50ZXItZmlsZS1oYW5kbGVyc3KcLAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci1maWxlLWhhbmRsZXJzWA0AAABGaWxlIEhhbmRsZXJzdHKdLAAAWBsAAABhYnN0cmFjdC1iYXNpYy1hdXRoLWhhbmRsZXJyniwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2Fic3RyYWN0LWJhc2ljLWF1dGgtaGFuZGxlclggAAAAQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyIE9iamVjdHN0cp8sAABYDwAAAG9zeC1ndWktc2NyaXB0c3KgLAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvbWFjLmh0bWwjb3N4LWd1aS1zY3JpcHRzWBoAAABSdW5uaW5nIHNjcmlwdHMgd2l0aCBhIEdVSXRyoSwAAFgSAAAAc2VjdGlvbi1nZW5lcmF0b3JzcqIsAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLWdlbmVyYXRvcnNYGgAAAFBFUCAyNTU6IFNpbXBsZSBHZW5lcmF0b3JzdHKjLAAAWA0AAABpbnN0YWxsLWluZGV4cqQsAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdGFsbC1pbmRleFgqAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHKlLAAAWAsAAABmaWxlZm9ybWF0c3KmLAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlZm9ybWF0cy5odG1sI2ZpbGVmb3JtYXRzWAwAAABGaWxlIEZvcm1hdHN0cqcsAABYDQAAAGhhbmRsZXItYmFzaWNyqCwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNoYW5kbGVyLWJhc2ljWAgAAABIYW5kbGVyc3RyqSwAAFgJAAAAcmVmY291bnRzcqosAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjcmVmY291bnRzWBAAAABSZWZlcmVuY2UgQ291bnRzdHKrLAAAWCYAAABjdHlwZXMtYml0LWZpZWxkcy1pbi1zdHJ1Y3R1cmVzLXVuaW9uc3KsLAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYml0LWZpZWxkcy1pbi1zdHJ1Y3R1cmVzLXVuaW9uc1gjAAAAQml0IGZpZWxkcyBpbiBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnN0cq0sAABYEgAAAGFyZ3BhcnNlLnJlbWFpbmRlcnKuLAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLXJlbWFpbmRlclgBAAAALXRyrywAAFgNAAAAZXhwYXQtZXhhbXBsZXKwLAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjZXhwYXQtZXhhbXBsZVgHAAAARXhhbXBsZXRysSwAAFgVAAAAbWFjLXNwZWNpZmljLXNlcnZpY2VzcrIsAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hYy5odG1sI21hYy1zcGVjaWZpYy1zZXJ2aWNlc1gaAAAATWFjIE9TIFggc3BlY2lmaWMgc2VydmljZXN0crMsAABYEwAAAGRvbS1lbGVtZW50LW9iamVjdHNytCwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1lbGVtZW50LW9iamVjdHNYDwAAAEVsZW1lbnQgT2JqZWN0c3RytSwAAFgRAAAAdGVzdHN1aXRlLW9iamVjdHNytiwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN0ZXN0c3VpdGUtb2JqZWN0c1gOAAAAR3JvdXBpbmcgdGVzdHN0crcsAABYEAAAAGRlY29tcHJlc3Mtd2JpdHNyuCwAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI2RlY29tcHJlc3Mtd2JpdHNYAQAAAC10crksAABYGwAAAHR1dC1zdHJpbmctcGF0dGVybi1tYXRjaGluZ3K6LAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LXN0cmluZy1wYXR0ZXJuLW1hdGNoaW5nWBcAAABTdHJpbmcgUGF0dGVybiBNYXRjaGluZ3RyuywAAFgLAAAAZG9tLWV4YW1wbGVyvCwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjZG9tLWV4YW1wbGVYCwAAAERPTSBFeGFtcGxldHK9LAAAWBQAAABoaWdoLWxldmVsLWVtYmVkZGluZ3K+LAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2hpZ2gtbGV2ZWwtZW1iZWRkaW5nWBkAAABWZXJ5IEhpZ2ggTGV2ZWwgRW1iZWRkaW5ndHK/LAAAWBEAAABjb21wbGV0ZXItb2JqZWN0c3LALAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ybGNvbXBsZXRlci5odG1sI2NvbXBsZXRlci1vYmplY3RzWBEAAABDb21wbGV0ZXIgT2JqZWN0c3RywSwAAFgFAAAAcmFpc2VywiwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNyYWlzZVgTAAAAVGhlIHJhaXNlIHN0YXRlbWVudHRywywAAFgTAAAAd2hhdHNuZXcyNy1weXRob24zMXLELAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWwjd2hhdHNuZXcyNy1weXRob24zMVgZAAAAVGhlIEZ1dHVyZSBmb3IgUHl0aG9uIDIueHRyxSwAAFgZAAAAb3B0cGFyc2Utd2hhdC1vcHRpb25zLWZvcnLGLAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXdoYXQtb3B0aW9ucy1mb3JYFQAAAFdoYXQgYXJlIG9wdGlvbnMgZm9yP3RyxywAAFgRAAAAbWltZXR5cGVzLW9iamVjdHNyyCwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLW9iamVjdHNYEQAAAE1pbWVUeXBlcyBPYmplY3RzdHLJLAAAWA4AAABjb21tb24tc3RydWN0c3LKLAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2NvbW1vbi1zdHJ1Y3RzWBgAAABDb21tb24gT2JqZWN0IFN0cnVjdHVyZXN0csssAABYDwAAAGZpbGUtb3BlcmF0aW9uc3LMLAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNmaWxlLW9wZXJhdGlvbnNYHgAAAERpcmVjdG9yeSBhbmQgZmlsZXMgb3BlcmF0aW9uc3RyzSwAAFgFAAAAY2xhc3NyziwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2NsYXNzWBEAAABDbGFzcyBkZWZpbml0aW9uc3RyzywAAFgOAAAAc2VjdGlvbi1wZXAzMDVy0CwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tcGVwMzA1WB4AAABQRVAgMzA1OiBDb21tYS1zZXBhcmF0ZWQgRmlsZXN0ctEsAABYCQAAAGltYWdpbmFyeXLSLAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbWFnaW5hcnlYEgAAAEltYWdpbmFyeSBsaXRlcmFsc3Ry0ywAAFgOAAAAZGlyY21wLW9iamVjdHNy1CwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2RpcmNtcC1vYmplY3RzWBAAAABUaGUgZGlyY21wIGNsYXNzdHLVLAAAWAwAAABodHRwLWhhbmRsZXJy1iwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2h0dHAtaGFuZGxlclgLAAAASFRUUEhhbmRsZXJ0ctcsAABYDgAAAGNvbnZlcnRpbmctc3RzctgsAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI2NvbnZlcnRpbmctc3RzWBUAAABDb252ZXJ0aW5nIFNUIE9iamVjdHN0ctksAABYCwAAAGxvbmdvYmplY3RzctosAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjbG9uZ29iamVjdHNYFAAAAExvbmcgSW50ZWdlciBPYmplY3RzdHLbLAAAWA8AAAB0aW1laXQtZXhhbXBsZXNy3CwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LWV4YW1wbGVzWAgAAABFeGFtcGxlc3Ry3SwAAFgOAAAAdXNpbmctY2Fwc3VsZXNy3iwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCN1c2luZy1jYXBzdWxlc1gpAAAAUHJvdmlkaW5nIGEgQyBBUEkgZm9yIGFuIEV4dGVuc2lvbiBNb2R1bGV0ct8sAABYDgAAADJ0bzMtcmVmZXJlbmNlcuAsAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCN0bzMtcmVmZXJlbmNlWC8AAAAydG8zIC0gQXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdGlvbnRy4SwAAFgSAAAAdHlwZWNvbnRleHRtYW5hZ2VycuIsAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZWNvbnRleHRtYW5hZ2VyWBUAAABDb250ZXh0IE1hbmFnZXIgVHlwZXN0cuMsAABYDAAAAG51bGwtaGFuZGxlcnLkLAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbnVsbC1oYW5kbGVyWAsAAABOdWxsSGFuZGxlcnRy5SwAAFgUAAAAeGRyLXVucGFja2VyLW9iamVjdHNy5iwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRyLXVucGFja2VyLW9iamVjdHNYEAAAAFVucGFja2VyIE9iamVjdHN0cucsAABYDAAAAGFwaS1pbmNsdWRlc3LoLAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktaW5jbHVkZXNYDQAAAEluY2x1ZGUgRmlsZXN0cuksAABYCAAAAGdsb3NzYXJ5cuosAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI2dsb3NzYXJ5WAgAAABHbG9zc2FyeXRy6ywAAFgMAAAAdGFyLWV4YW1wbGVzcuwsAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXItZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHLtLAAAWBgAAABuZXctc3R5bGUtc3BlY2lhbC1sb29rdXBy7iwAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNuZXctc3R5bGUtc3BlY2lhbC1sb29rdXBYKwAAAFNwZWNpYWwgbWV0aG9kIGxvb2t1cCBmb3IgbmV3LXN0eWxlIGNsYXNzZXN0cu8sAABYDwAAAGNvbnRleHQtbWFuYWdlcnLwLAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2NvbnRleHQtbWFuYWdlclgtAAAAVXNpbmcgYSBjb250ZXh0IG1hbmFnZXIgZm9yIHNlbGVjdGl2ZSBsb2dnaW5ndHLxLAAAWBAAAAB0dXQtc3ludGF4ZXJyb3JzcvIsAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtc3ludGF4ZXJyb3JzWA0AAABTeW50YXggRXJyb3JzdHLzLAAAWAgAAABjb21waWxlcnL0LAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyWBcAAABQeXRob24gY29tcGlsZXIgcGFja2FnZXRy9SwAAHUoWBoAAAB0dXQtY29tbWFuZC1saW5lLWFyZ3VtZW50c3L2LAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWNvbW1hbmQtbGluZS1hcmd1bWVudHNYFgAAAENvbW1hbmQgTGluZSBBcmd1bWVudHN0cvcsAABYBgAAAHB5cGlyY3L4LAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3B5cGlyY1gQAAAAVGhlIC5weXBpcmMgZmlsZXRy+SwAAFgVAAAAc3RyZWFtLXdyaXRlci1vYmplY3RzcvosAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI3N0cmVhbS13cml0ZXItb2JqZWN0c1gUAAAAU3RyZWFtV3JpdGVyIE9iamVjdHN0cvssAABYDwAAAGRhdGV0aW1lLXR6aW5mb3L8LAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLXR6aW5mb1gOAAAAdHppbmZvIE9iamVjdHN0cv0sAABYDQAAAHR1dC1mdW5jdGlvbnNy/iwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWZ1bmN0aW9uc1gSAAAARGVmaW5pbmcgRnVuY3Rpb25zdHL/LAAAWAIAAABpbnIALQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjaW5YGgAAAE1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zdHIBLQAAWAcAAABmaWxlc3lzcgItAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVzeXMuaHRtbCNmaWxlc3lzWBkAAABGaWxlIGFuZCBEaXJlY3RvcnkgQWNjZXNzdHIDLQAAWAoAAAB0dXQtc3RkZXJycgQtAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtc3RkZXJyWDAAAABFcnJvciBPdXRwdXQgUmVkaXJlY3Rpb24gYW5kIFByb2dyYW0gVGVybWluYXRpb250cgUtAABYCwAAAGdlbi1vYmplY3RzcgYtAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nZW4uaHRtbCNnZW4tb2JqZWN0c1gRAAAAR2VuZXJhdG9yIE9iamVjdHN0cgctAABYDwAAAHR1dC1tb3JlY29udHJvbHIILQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtbW9yZWNvbnRyb2xYFwAAAE1vcmUgQ29udHJvbCBGbG93IFRvb2xzdHIJLQAAWA0AAAB0eXBlc2ludGVybmFscgotAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNpbnRlcm5hbFgQAAAASW50ZXJuYWwgT2JqZWN0c3RyCy0AAFgIAAAAZ2VuaW5kZXgoanMFAABqdAUAAFgnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nZW5pbmRleC5odG1sWAUAAABJbmRleHRyDC0AAFgQAAAAYXR0cmlidXRlLWFjY2Vzc3INLQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2F0dHJpYnV0ZS1hY2Nlc3NYHAAAAEN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3N0cg4tAABYBQAAAHBvd2Vycg8tAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwb3dlclgSAAAAVGhlIHBvd2VyIG9wZXJhdG9ydHIQLQAAWAwAAABvdGhlci10b2tlbnNyES0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjb3RoZXItdG9rZW5zWAwAAABPdGhlciB0b2tlbnN0chItAABYHgAAAG9wdHBhcnNlLXN0YW5kYXJkLW9wdGlvbi10eXBlc3ITLQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXN0YW5kYXJkLW9wdGlvbi10eXBlc1gVAAAAU3RhbmRhcmQgb3B0aW9uIHR5cGVzdHIULQAAWBgAAAB1bml0dGVzdC1taW5pbWFsLWV4YW1wbGVyFS0AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC1taW5pbWFsLWV4YW1wbGVYDQAAAEJhc2ljIGV4YW1wbGV0chYtAABYFAAAAGxvZ3JlY29yZC1hdHRyaWJ1dGVzchctAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dyZWNvcmQtYXR0cmlidXRlc1gUAAAATG9nUmVjb3JkIGF0dHJpYnV0ZXN0chgtAABYGQAAAG1pbWV0b29scy1tZXNzYWdlLW9iamVjdHNyGS0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLW1lc3NhZ2Utb2JqZWN0c1glAAAAQWRkaXRpb25hbCBNZXRob2RzIG9mIE1lc3NhZ2UgT2JqZWN0c3RyGi0AAFgSAAAAZGlzdHJpYnV0aW5nLWluZGV4chstAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0cmlidXRpbmcvaW5kZXguaHRtbCNkaXN0cmlidXRpbmctaW5kZXhYGwAAAERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlc3RyHC0AAFgOAAAAbWVtb3J5LWhhbmRsZXJyHS0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI21lbW9yeS1oYW5kbGVyWA0AAABNZW1vcnlIYW5kbGVydHIeLQAAWAwAAABvdGhlcm9iamVjdHNyHy0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbmNyZXRlLmh0bWwjb3RoZXJvYmplY3RzWA0AAABPdGhlciBPYmplY3RzdHIgLQAAWA4AAABzdHJlYW0taGFuZGxlcnIhLQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3RyZWFtLWhhbmRsZXJYDQAAAFN0cmVhbUhhbmRsZXJ0ciItAABYDAAAAGN1cnNlcy1ob3d0b3IjLQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3Vyc2VzLmh0bWwjY3Vyc2VzLWhvd3RvWB4AAABDdXJzZXMgUHJvZ3JhbW1pbmcgd2l0aCBQeXRob250ciQtAABYBAAAAGlkbGVyJS0AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWRsZS5odG1sI2lkbGVYBAAAAElETEV0ciYtAABYDgAAAHRlbG5ldC1vYmplY3RzcictAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldC1vYmplY3RzWA4AAABUZWxuZXQgT2JqZWN0c3RyKC0AAFgDAAAAYzk5ciktAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI2M5OVgBAAAALXRyKi0AAFgUAAAAaW5zdC1ob3ctYnVpbGQtd29ya3NyKy0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWhvdy1idWlsZC13b3Jrc1gSAAAASG93IGJ1aWxkaW5nIHdvcmtzdHIsLQAAWA4AAABtZXRob2Qtb2JqZWN0c3ItLQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjbWV0aG9kLW9iamVjdHNYDgAAAE1ldGhvZCBPYmplY3RzdHIuLQAAWA8AAABwcm9maWxlLWluc3RhbnRyLy0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtaW5zdGFudFgXAAAASW5zdGFudCBVc2Vy4oCZcyBNYW51YWx0cjAtAABYEQAAAHNheC1lcnJvci1oYW5kbGVycjEtAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3NheC1lcnJvci1oYW5kbGVyWBQAAABFcnJvckhhbmRsZXIgT2JqZWN0c3RyMi0AAFgVAAAAY3Vyc2VzLXdpbmRvdy1vYmplY3RzcjMtAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy13aW5kb3ctb2JqZWN0c1gOAAAAV2luZG93IE9iamVjdHN0cjQtAABYHwAAAGN0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzLTJyNS0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWZ1bmRhbWVudGFsLWRhdGEtdHlwZXMtMlgWAAAARnVuZGFtZW50YWwgZGF0YSB0eXBlc3RyNi0AAFgOAAAAc3RyaW5nc2VydmljZXNyNy0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncy5odG1sI3N0cmluZ3NlcnZpY2VzWA8AAABTdHJpbmcgU2VydmljZXN0cjgtAABYDgAAAHJlcG9ydGluZy1idWdzcjktAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9idWdzLmh0bWwjcmVwb3J0aW5nLWJ1Z3NYDgAAAFJlcG9ydGluZyBCdWdzdHI6LQAAWA4AAABjb29raWUtb2JqZWN0c3I7LQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNjb29raWUtb2JqZWN0c1gOAAAAQ29va2llIE9iamVjdHN0cjwtAABYBgAAAHNlYXJjaChqcwUAAGp0BQAAWCUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3NlYXJjaC5odG1sWAsAAABTZWFyY2ggUGFnZXRyPS0AAFgPAAAAc3NsLW5vbmJsb2NraW5ncj4tAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC1ub25ibG9ja2luZ1gdAAAATm90ZXMgb24gbm9uLWJsb2NraW5nIHNvY2tldHN0cj8tAABYDwAAAG1pbmlkb20tYW5kLWRvbXJALQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCNtaW5pZG9tLWFuZC1kb21YHAAAAG1pbmlkb20gYW5kIHRoZSBET00gc3RhbmRhcmR0ckEtAABYAwAAAGRlZnJCLQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZGVmWBQAAABGdW5jdGlvbiBkZWZpbml0aW9uc3RyQy0AAFgSAAAAbWgtbWVzc2FnZS1vYmplY3RzckQtAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWgtbWVzc2FnZS1vYmplY3RzWA8AAABNZXNzYWdlIE9iamVjdHN0ckUtAABYCQAAAGRhdGF0eXBlc3JGLQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRhdHlwZXMuaHRtbCNkYXRhdHlwZXNYCgAAAERhdGEgVHlwZXN0ckctAABYCQAAAGltcG9ydGluZ3JILQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjaW1wb3J0aW5nWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RySS0AAFgMAAAAbXN2Y3J0LWZpbGVzckotAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC1maWxlc1gPAAAARmlsZSBPcGVyYXRpb25zdHJLLQAAWAMAAABkZWxyTC0AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNkZWxYEQAAAFRoZSBkZWwgc3RhdGVtZW50dHJNLQAAWBEAAABodHRwLXBhc3N3b3JkLW1ncnJOLQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjaHR0cC1wYXNzd29yZC1tZ3JYFwAAAEhUVFBQYXNzd29yZE1nciBPYmplY3RzdHJPLQAAWBYAAABjdXJzZXMtdGV4dHBhZC1vYmplY3RzclAtAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy10ZXh0cGFkLW9iamVjdHNYDwAAAFRleHRib3ggb2JqZWN0c3RyUS0AAFgJAAAAY3BsdXNwbHVzclItAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjY3BsdXNwbHVzWBkAAABXcml0aW5nIEV4dGVuc2lvbnMgaW4gQysrdHJTLQAAWA0AAABpbWFwNC1leGFtcGxlclQtAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwNC1leGFtcGxlWA0AAABJTUFQNCBFeGFtcGxldHJVLQAAWAcAAABwZXAtMzUzclYtAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzUzWCgAAABQRVAgMzUzOiBVc2luZyBzc2l6ZV90IGFzIHRoZSBpbmRleCB0eXBldHJXLQAAWA4AAABkb20tZXhjZXB0aW9uc3JYLQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWV4Y2VwdGlvbnNYCgAAAEV4Y2VwdGlvbnN0clktAABYDwAAAHppcGluZm8tb2JqZWN0c3JaLQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwaW5mby1vYmplY3RzWA8AAABaaXBJbmZvIE9iamVjdHN0clstAABYCgAAAHR1dC1zY29wZXNyXC0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtc2NvcGVzWBwAAABQeXRob24gU2NvcGVzIGFuZCBOYW1lc3BhY2VzdHJdLQAAWBAAAABleHRlbmRpbmctZXJyb3Jzcl4tAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLWVycm9yc1ghAAAASW50ZXJtZXp6bzogRXJyb3JzIGFuZCBFeGNlcHRpb25zdHJfLQAAWBsAAABvcHRwYXJzZS1hZGRpbmctbmV3LWFjdGlvbnNyYC0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1hZGRpbmctbmV3LWFjdGlvbnNYEgAAAEFkZGluZyBuZXcgYWN0aW9uc3RyYS0AAFgRAAAAcHl6aXBmaWxlLW9iamVjdHNyYi0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3B5emlwZmlsZS1vYmplY3RzWBEAAABQeVppcEZpbGUgT2JqZWN0c3RyYy0AAFgOAAAAbG9nZ2VyLWFkYXB0ZXJyZC0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dlci1hZGFwdGVyWBUAAABMb2dnZXJBZGFwdGVyIE9iamVjdHN0cmUtAABYDgAAAHdlYWtyZWZvYmplY3RzcmYtAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjd2Vha3JlZm9iamVjdHNYFgAAAFdlYWsgUmVmZXJlbmNlIE9iamVjdHN0cmctAABYEAAAAHR1dC1vcy1pbnRlcmZhY2VyaC0AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1vcy1pbnRlcmZhY2VYGgAAAE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNldHJpLQAAWA0AAAB0dXQtbW9yZWxpc3RzcmotAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1tb3JlbGlzdHNYDQAAAE1vcmUgb24gTGlzdHN0cmstAABYBAAAAHdpdGhybC0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI3dpdGhYEgAAAFRoZSB3aXRoIHN0YXRlbWVudHRybS0AAFgVAAAAaG93dG8tbWluaW1hbC1leGFtcGxlcm4tAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjaG93dG8tbWluaW1hbC1leGFtcGxlWBAAAABBIHNpbXBsZSBleGFtcGxldHJvLQAAWA8AAAB0dXQtY29kaW5nc3R5bGVycC0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWNvZGluZ3N0eWxlWBgAAABJbnRlcm1lenpvOiBDb2RpbmcgU3R5bGV0cnEtAABYEwAAAG9wdHBhcnNlLWJhY2tncm91bmRyci0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1iYWNrZ3JvdW5kWAoAAABCYWNrZ3JvdW5kdHJzLQAAWAoAAABhc3NpZ25tZW50cnQtAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjYXNzaWdubWVudFgVAAAAQXNzaWdubWVudCBzdGF0ZW1lbnRzdHJ1LQAAWBYAAABzcWxpdGUzLWN1cnNvci1vYmplY3RzcnYtAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLWN1cnNvci1vYmplY3RzWA4AAABDdXJzb3IgT2JqZWN0c3Rydy0AAFgGAAAAbm90IGlucngtAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNub3QtaW5YGgAAAE1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zdHJ5LQAAWAoAAABtb2QtcHl0aG9ucnotAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by93ZWJzZXJ2ZXJzLmh0bWwjbW9kLXB5dGhvblgKAAAAbW9kX3B5dGhvbnRyey0AAFgMAAAAY2dpLXNlY3VyaXR5cnwtAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS1zZWN1cml0eVgVAAAAQ2FyaW5nIGFib3V0IHNlY3VyaXR5dHJ9LQAAWCEAAABtdWx0aXByb2Nlc3NpbmctbGlzdGVuZXJzLWNsaWVudHNyfi0AAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLWxpc3RlbmVycy1jbGllbnRzWBUAAABMaXN0ZW5lcnMgYW5kIENsaWVudHN0cn8tAABYEwAAAGZvcm1hdHRlci1pbnRlcmZhY2VygC0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLWludGVyZmFjZVgXAAAAVGhlIEZvcm1hdHRlciBJbnRlcmZhY2V0coEtAABYDwAAAHR1dC1tYXRoZW1hdGljc3KCLQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LW1hdGhlbWF0aWNzWAsAAABNYXRoZW1hdGljc3Rygy0AAFgSAAAAZnBlY3RsLWxpbWl0YXRpb25zcoQtAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC1saW1pdGF0aW9uc1gkAAAATGltaXRhdGlvbnMgYW5kIG90aGVyIGNvbnNpZGVyYXRpb25zdHKFLQAAWAYAAABuYW1pbmdyhi0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI25hbWluZ1gSAAAATmFtaW5nIGFuZCBiaW5kaW5ndHKHLQAAWAkAAAB0b3AtbGV2ZWxyiC0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjdG9wLWxldmVsWBQAAABUb3AtbGV2ZWwgY29tcG9uZW50c3RyiS0AAFgPAAAAY29uc29sZS1vYmplY3RzcootAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb25zb2xlLW9iamVjdHNYGwAAAEludGVyYWN0aXZlIENvbnNvbGUgT2JqZWN0c3Ryiy0AAFgPAAAAdXJsbGliLWV4YW1wbGVzcowtAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi1leGFtcGxlc1gIAAAARXhhbXBsZXN0co0tAABYBwAAAHBlcC0zNTdyji0AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNTdYIwAAAFBFUCAzNTc6IFRoZSDigJhfX2luZGV4X1/igJkgbWV0aG9kdHKPLQAAWAsAAABibGFuay1saW5lc3KQLQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNibGFuay1saW5lc1gLAAAAQmxhbmsgbGluZXN0cpEtAABYEgAAAGRlc2NyaXB0b3Itb2JqZWN0c3KSLQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2Rlc2NyaXB0b3Itb2JqZWN0c1gSAAAARGVzY3JpcHRvciBPYmplY3RzdHKTLQAAWAkAAABmcmFtZXdvcmtylC0AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3dlYnNlcnZlcnMuaHRtbCNmcmFtZXdvcmtYCgAAAEZyYW1ld29ya3N0cpUtAABYEQAAAGJsdGluLW51bGwtb2JqZWN0cpYtAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYmx0aW4tbnVsbC1vYmplY3RYDwAAAFRoZSBOdWxsIE9iamVjdHRyly0AAFgMAAAAc3BlY2lhbG5hbWVzcpgtAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjc3BlY2lhbG5hbWVzWBQAAABTcGVjaWFsIG1ldGhvZCBuYW1lc3RymS0AAFgQAAAAZGF0YWdyYW0taGFuZGxlcnKaLQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjZGF0YWdyYW0taGFuZGxlclgPAAAARGF0YWdyYW1IYW5kbGVydHKbLQAAWAYAAABudW1iZXJynC0AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI251bWJlclgPAAAATnVtYmVyIFByb3RvY29sdHKdLQAAWCAAAAB0dXQtY2xhc3MtYW5kLWluc3RhbmNlLXZhcmlhYmxlc3KeLQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1jbGFzcy1hbmQtaW5zdGFuY2UtdmFyaWFibGVzWBwAAABDbGFzcyBhbmQgSW5zdGFuY2UgVmFyaWFibGVzdHKfLQAAWAQAAABhcmdzcqAtAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJnc1gPAAAAQmV5b25kIHN5cy5hcmd2dHKhLQAAWAkAAABhcmNoaXZpbmdyoi0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJjaGl2aW5nLmh0bWwjYXJjaGl2aW5nWB4AAABEYXRhIENvbXByZXNzaW9uIGFuZCBBcmNoaXZpbmd0cqMtAABYEwAAAHNobGV4LXBhcnNpbmctcnVsZXNypC0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC1wYXJzaW5nLXJ1bGVzWA0AAABQYXJzaW5nIFJ1bGVzdHKlLQAAWA4AAABta2Rpcl9tb2RlYml0c3KmLQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI21rZGlyLW1vZGViaXRzWAEAAAAtdHKnLQAAWA8AAAB3YXJuaW5nLXRlc3RpbmdyqC0AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLXRlc3RpbmdYEAAAAFRlc3RpbmcgV2FybmluZ3N0cqktAABYBgAAAG1tZWRpYXKqLQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbS5odG1sI21tZWRpYVgTAAAATXVsdGltZWRpYSBTZXJ2aWNlc3Ryqy0AAFgPAAAAcGlja2xlLXByb3RvY29scqwtAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS1wcm90b2NvbFgTAAAAVGhlIHBpY2tsZSBwcm90b2NvbHRyrS0AAFgbAAAAb3B0aW9uLWZsYWdzLWFuZC1kaXJlY3RpdmVzcq4tAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNvcHRpb24tZmxhZ3MtYW5kLWRpcmVjdGl2ZXNYDAAAAE9wdGlvbiBGbGFnc3Ryry0AAFgSAAAAYXN5bmNvcmUtZXhhbXBsZS0ycrAtAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUtZXhhbXBsZS0yWCIAAABhc3luY29yZSBFeGFtcGxlIGJhc2ljIGVjaG8gc2VydmVydHKxLQAAWBIAAABhc3luY29yZS1leGFtcGxlLTFysi0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS1leGFtcGxlLTFYIgAAAGFzeW5jb3JlIEV4YW1wbGUgYmFzaWMgSFRUUCBjbGllbnR0crMtAABYCAAAAHBlcC0wMzcycrQtAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNwZXAtMDM3Mlg0AAAAUEVQIDM3MjogQWRkaW5nIGFuIE9yZGVyZWQgRGljdGlvbmFyeSB0byBjb2xsZWN0aW9uc3RytS0AAFgQAAAAb3JnYW5pemluZy10ZXN0c3K2LQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI29yZ2FuaXppbmctdGVzdHNYFAAAAE9yZ2FuaXppbmcgdGVzdCBjb2RldHK3LQAAWA8AAABob3RzaG90LW9iamVjdHNyuC0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sI2hvdHNob3Qtb2JqZWN0c1gPAAAAUHJvZmlsZSBPYmplY3RzdHK5LQAAWBIAAAB3YXZlLXdyaXRlLW9iamVjdHNyui0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUtd3JpdGUtb2JqZWN0c1gSAAAAV2F2ZV93cml0ZSBPYmplY3RzdHK7LQAAWAYAAAB0dXQtaWZyvC0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWlmWA0AAABpZiBTdGF0ZW1lbnRzdHK9LQAAWBEAAABzdHJpbmctY2F0ZW5hdGlvbnK+LQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNzdHJpbmctY2F0ZW5hdGlvblgcAAAAU3RyaW5nIGxpdGVyYWwgY29uY2F0ZW5hdGlvbnRyvy0AAFgWAAAAY3R5cGVzLWN0eXBlcy10dXRvcmlhbHLALQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY3R5cGVzLXR1dG9yaWFsWA8AAABjdHlwZXMgdHV0b3JpYWx0csEtAABYCQAAAGxpbmstcmVxc3LCLQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2xpbmstcmVxc1gtAAAAQ29tcGlsaW5nIGFuZCBMaW5raW5nIHVuZGVyIFVuaXgtbGlrZSBzeXN0ZW1zdHLDLQAAWAoAAABvdGhlci1sYW5ncsQtAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNvdGhlci1sYW5nWBYAAABPdGhlciBMYW5ndWFnZSBDaGFuZ2VzdHLFLQAAWBMAAABzcWxpdGUzLXJvdy1vYmplY3RzcsYtAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLXJvdy1vYmplY3RzWAsAAABSb3cgT2JqZWN0c3Ryxy0AAFgSAAAAYmx0aW4tY29kZS1vYmplY3RzcsgtAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYmx0aW4tY29kZS1vYmplY3RzWAwAAABDb2RlIE9iamVjdHN0csktAABYFAAAAG1vZHVsZWZpbmRlci1leGFtcGxlcsotAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci1leGFtcGxlWB0AAABFeGFtcGxlIHVzYWdlIG9mIE1vZHVsZUZpbmRlcnRyyy0AAFgIAAAAY29tbWVudHNyzC0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjY29tbWVudHNYCAAAAENvbW1lbnRzdHLNLQAAWA8AAABkb20tY29uZm9ybWFuY2Vyzi0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1jb25mb3JtYW5jZVgLAAAAQ29uZm9ybWFuY2V0cs8tAABYEwAAAHByb2dyZXNzYmFyLW9iamVjdHNy0C0AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNwcm9ncmVzc2Jhci1vYmplY3RzWBMAAABQcm9ncmVzc0JhciBPYmplY3RzdHLRLQAAWAgAAABib29sZWFuc3LSLQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYm9vbGVhbnNYEgAAAEJvb2xlYW4gb3BlcmF0aW9uc3Ry0y0AAFgKAAAAdHV0LWxhbWJkYXLULQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtbGFtYmRhWBIAAABMYW1iZGEgRXhwcmVzc2lvbnN0ctUtAABYGAAAAGRvY3Rlc3QtZmluZGluZy1leGFtcGxlc3LWLQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1maW5kaW5nLWV4YW1wbGVzWCYAAABIb3cgYXJlIERvY3N0cmluZyBFeGFtcGxlcyBSZWNvZ25pemVkP3Ry1y0AAFgLAAAAY29udmVyc2lvbnNy2C0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2NvbnZlcnNpb25zWBYAAABBcml0aG1ldGljIGNvbnZlcnNpb25zdHLZLQAAWA8AAAB0YXJmaWxlLW9iamVjdHNy2i0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUtb2JqZWN0c1gPAAAAVGFyRmlsZSBPYmplY3RzdHLbLQAAWA0AAABhdG9tLWxpdGVyYWxzctwtAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhdG9tLWxpdGVyYWxzWAgAAABMaXRlcmFsc3Ry3S0AAFgZAAAAZG9jdGVzdC1leGVjdXRpb24tY29udGV4dHLeLQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1leGVjdXRpb24tY29udGV4dFgfAAAAV2hhdOKAmXMgdGhlIEV4ZWN1dGlvbiBDb250ZXh0P3Ry3y0AAFgPAAAAZGVjaW1hbC1zaWduYWxzcuAtAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLXNpZ25hbHNYBwAAAFNpZ25hbHN0cuEtAABYDQAAAHNxbGl0ZTMtdHlwZXNy4i0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMtdHlwZXNYFwAAAFNRTGl0ZSBhbmQgUHl0aG9uIHR5cGVzdHLjLQAAWAkAAABlbmNvZGluZ3Ny5C0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZW5jb2RpbmdzWBUAAABFbmNvZGluZyBkZWNsYXJhdGlvbnN0cuUtAABYDwAAAHJleGVjLWV4dGVuc2lvbnLmLQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLWV4dGVuc2lvblggAAAARGVmaW5pbmcgcmVzdHJpY3RlZCBlbnZpcm9ubWVudHN0cuctAABYEwAAAHhtbC12dWxuZXJhYmlsaXRpZXNy6C0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmh0bWwjeG1sLXZ1bG5lcmFiaWxpdGllc1gTAAAAWE1MIHZ1bG5lcmFiaWxpdGllc3Ry6S0AAFgdAAAAdGltZWl0LWNvbW1hbmQtbGluZS1pbnRlcmZhY2Vy6i0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LWNvbW1hbmQtbGluZS1pbnRlcmZhY2VYFgAAAENvbW1hbmQtTGluZSBJbnRlcmZhY2V0custAABYDgAAAGFzc2VydC1tZXRob2RzcuwtAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjYXNzZXJ0LW1ldGhvZHNYAQAAAC10cu0tAABYFQAAAGluc3QtYWx0LWluc3RhbGwtaG9tZXLuLQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGwtaG9tZVgnAAAAQWx0ZXJuYXRlIGluc3RhbGxhdGlvbjogdGhlIGhvbWUgc2NoZW1ldHLvLQAAWBcAAABjdXN0b20tZm9ybWF0LWV4Y2VwdGlvbnLwLQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2N1c3RvbS1mb3JtYXQtZXhjZXB0aW9uWB8AAABDdXN0b21pemVkIGV4Y2VwdGlvbiBmb3JtYXR0aW5ndHLxLQAAWBAAAABhZXNlcnZlci1vYmplY3RzcvItAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWwjYWVzZXJ2ZXItb2JqZWN0c1gQAAAAQUVTZXJ2ZXIgT2JqZWN0c3Ry8y0AAFgIAAAAYWJzdHJhY3Ry9C0AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Fic3RyYWN0Lmh0bWwjYWJzdHJhY3RYFgAAAEFic3RyYWN0IE9iamVjdHMgTGF5ZXJ0cvUtAABYEQAAAHR1dC1hcmJpdHJhcnlhcmdzcvYtAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1hcmJpdHJhcnlhcmdzWBgAAABBcmJpdHJhcnkgQXJndW1lbnQgTGlzdHN0cvctAABYDwAAAHVzZWZ1bC1oYW5kbGVyc3L4LQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sI3VzZWZ1bC1oYW5kbGVyc1gPAAAAVXNlZnVsIEhhbmRsZXJzdHL5LQAAWA0AAABwYWNrYWdlLWluZGV4cvotAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvcGFja2FnZWluZGV4Lmh0bWwjcGFja2FnZS1pbmRleFgfAAAAVGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKXRy+y0AAFgXAAAAY3R5cGVzLXR5cGUtY29udmVyc2lvbnNy/C0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXR5cGUtY29udmVyc2lvbnNYEAAAAFR5cGUgY29udmVyc2lvbnN0cv0tAABYFAAAAGRvY3Rlc3QtaG93LWl0LXdvcmtzcv4tAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWhvdy1pdC13b3Jrc1gMAAAASG93IEl0IFdvcmtzdHL/LQAAWA8AAABkb2N0ZXN0LW9wdGlvbnNyAC4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtb3B0aW9uc1gMAAAAT3B0aW9uIEZsYWdzdHIBLgAAWA4AAABwcm9maWxlLXRpbWVyc3ICLgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS10aW1lcnNYFAAAAFVzaW5nIGEgY3VzdG9tIHRpbWVydHIDLgAAWAsAAABtZXRhY2xhc3Nlc3IELgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI21ldGFjbGFzc2VzWBoAAABDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbnRyBS4AAFgVAAAAbG93ZXItbGV2ZWwtZW1iZWRkaW5ncgYuAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjbG93ZXItbGV2ZWwtZW1iZWRkaW5nWC0AAABCZXlvbmQgVmVyeSBIaWdoIExldmVsIEVtYmVkZGluZzogQW4gb3ZlcnZpZXd0cgcuAABYHAAAAGNvbnZlcnRpbmctYXJndW1lbnQtc2VxdWVuY2VyCC4AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI2NvbnZlcnRpbmctYXJndW1lbnQtc2VxdWVuY2VYNgAAAENvbnZlcnRpbmcgYW4gYXJndW1lbnQgc2VxdWVuY2UgdG8gYSBzdHJpbmcgb24gV2luZG93c3RyCS4AAFgEAAAAdW5peHIKLgAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml4Lmh0bWwjdW5peFgWAAAAVW5peCBTcGVjaWZpYyBTZXJ2aWNlc3RyCy4AAFgXAAAAZG9jdGVzdC1zaW1wbGUtdGVzdGZpbGVyDC4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtc2ltcGxlLXRlc3RmaWxlWC4AAABTaW1wbGUgVXNhZ2U6IENoZWNraW5nIEV4YW1wbGVzIGluIGEgVGV4dCBGaWxldHINLgAAWBUAAABzdHJlYW0tcmVhZGVyLW9iamVjdHNyDi4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RyZWFtLXJlYWRlci1vYmplY3RzWBQAAABTdHJlYW1SZWFkZXIgT2JqZWN0c3RyDy4AAFgIAAAAbWFuaWZlc3RyEC4AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zb3VyY2VkaXN0Lmh0bWwjbWFuaWZlc3RYIgAAAFNwZWNpZnlpbmcgdGhlIGZpbGVzIHRvIGRpc3RyaWJ1dGV0chEuAABYBQAAAHlpZWxkchIuAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjeWllbGRYEwAAAFRoZSB5aWVsZCBzdGF0ZW1lbnR0chMuAABYBwAAAG1hcHBpbmdyFC4AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNtYXBwaW5nWBAAAABNYXBwaW5nIFByb3RvY29sdHIVLgAAWA4AAABhdGV4aXQtZXhhbXBsZXIWLgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdGV4aXQuaHRtbCNhdGV4aXQtZXhhbXBsZVgOAAAAYXRleGl0IEV4YW1wbGV0chcuAABYFQAAAHRraW50ZXItYmFzaWMtbWFwcGluZ3IYLgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci1iYXNpYy1tYXBwaW5nWB0AAABNYXBwaW5nIEJhc2ljIFRrIGludG8gVGtpbnRlcnRyGS4AAFgOAAAAbWVtb3J5b3ZlcnZpZXdyGi4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeW92ZXJ2aWV3WAgAAABPdmVydmlld3RyGy4AAFgOAAAAdXRjLWZvcm1hdHRpbmdyHC4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCN1dGMtZm9ybWF0dGluZ1gyAAAARm9ybWF0dGluZyB0aW1lcyB1c2luZyBVVEMgKEdNVCkgdmlhIGNvbmZpZ3VyYXRpb250ch0uAABYDQAAAHdyaXRpbmctdGVzdHNyHi4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3dyaXRpbmctdGVzdHNYJwAAAFdyaXRpbmcgVW5pdCBUZXN0cyBmb3IgdGhlIHRlc3QgcGFja2FnZXRyHy4AAFgOAAAAaW5zcGVjdC1zb3VyY2VyIC4AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3Qtc291cmNlWBYAAABSZXRyaWV2aW5nIHNvdXJjZSBjb2RldHIhLgAAWBYAAABsb2dnaW5nLWJhc2ljLXR1dG9yaWFsciIuAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjbG9nZ2luZy1iYXNpYy10dXRvcmlhbFgWAAAAQmFzaWMgTG9nZ2luZyBUdXRvcmlhbHRyIy4AAFgSAAAAc3RhbmRhcmRleGNlcHRpb25zciQuAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjc3RhbmRhcmRleGNlcHRpb25zWBMAAABTdGFuZGFyZCBFeGNlcHRpb25zdHIlLgAAWA8AAABsaXN0aW5nLW1vZHVsZXNyJi4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2xpc3RpbmctbW9kdWxlc1gaAAAATGlzdGluZyBpbmRpdmlkdWFsIG1vZHVsZXN0cicuAABYEgAAAHR1dC1iaW5hcnktZm9ybWF0c3IoLgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC1iaW5hcnktZm9ybWF0c1gnAAAAV29ya2luZyB3aXRoIEJpbmFyeSBEYXRhIFJlY29yZCBMYXlvdXRzdHIpLgAAWBEAAAB1c2luZy10aGUtdHJhY2tlcnIqLgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYnVncy5odG1sI3VzaW5nLXRoZS10cmFja2VyWB4AAABVc2luZyB0aGUgUHl0aG9uIGlzc3VlIHRyYWNrZXJ0cisuAABYDAAAAGRpc3RyaWJ1dGluZ3IsLgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2J1aWxkaW5nLmh0bWwjZGlzdHJpYnV0aW5nWCMAAABEaXN0cmlidXRpbmcgeW91ciBleHRlbnNpb24gbW9kdWxlc3RyLS4AAFgOAAAAdHV0LWNvbmRpdGlvbnNyLi4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWNvbmRpdGlvbnNYEgAAAE1vcmUgb24gQ29uZGl0aW9uc3RyLy4AAFgQAAAAaW5zdC1hbHQtaW5zdGFsbHIwLgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGxYFgAAAEFsdGVybmF0ZSBJbnN0YWxsYXRpb250cjEuAABYCwAAAHNvdXJjZS1kaXN0cjIuAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc291cmNlZGlzdC5odG1sI3NvdXJjZS1kaXN0WB4AAABDcmVhdGluZyBhIFNvdXJjZSBEaXN0cmlidXRpb250cjMuAABYKgAAAGN0eXBlcy1hY2Nlc3NpbmctdmFsdWVzLWV4cG9ydGVkLWZyb20tZGxsc3I0LgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYWNjZXNzaW5nLXZhbHVlcy1leHBvcnRlZC1mcm9tLWRsbHNYIwAAAEFjY2Vzc2luZyB2YWx1ZXMgZXhwb3J0ZWQgZnJvbSBkbGxzdHI1LgAAWAUAAABicmVha3I2LgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2JyZWFrWBMAAABUaGUgYnJlYWsgc3RhdGVtZW50dHI3LgAAWBIAAABsb2dnaW5nLWNvbmZpZy1hcGlyOC4AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1hcGlYFwAAAENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zdHI5LgAAWAsAAABzZXQtZXhhbXBsZXI6LgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0LWV4YW1wbGVYBwAAAEV4YW1wbGV0cjsuAABYDQAAAG1hdGNoLW9iamVjdHNyPC4AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNtYXRjaC1vYmplY3RzWA0AAABNYXRjaCBPYmplY3RzdHI9LgAAWAYAAAByZXR1cm5yPi4AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNyZXR1cm5YFAAAAFRoZSByZXR1cm4gc3RhdGVtZW50dHI/LgAAWAgAAABwZXAtMzExOHJALgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMThYIQAAAFBFUCAzMTE4OiBSZXZpc2VkIEJ1ZmZlciBQcm90b2NvbHRyQS4AAFgIAAAAcGVwLTMxMTlyQi4AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTE5WB8AAABQRVAgMzExOTogQWJzdHJhY3QgQmFzZSBDbGFzc2VzdHJDLgAAWA4AAAB0aHJlYWQtb2JqZWN0c3JELgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWQtb2JqZWN0c1gOAAAAVGhyZWFkIE9iamVjdHN0ckUuAABYEAAAAGxpc3RpbmctcGFja2FnZXNyRi4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2xpc3RpbmctcGFja2FnZXNYFgAAAExpc3Rpbmcgd2hvbGUgcGFja2FnZXN0ckcuAABYDQAAAHN1YnNjcmlwdGlvbnNySC4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3N1YnNjcmlwdGlvbnNYDQAAAFN1YnNjcmlwdGlvbnN0ckkuAABYDQAAAHJleGVjLW9iamVjdHNySi4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy1vYmplY3RzWA0AAABSRXhlYyBPYmplY3RzdHJLLgAAWAgAAABwZXAtMzExNnJMLgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMTZYGQAAAFBFUCAzMTE2OiBOZXcgSS9PIExpYnJhcnl0ck0uAABYEAAAAG1haWxib3gtZXhhbXBsZXNyTi4AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHJPLgAAWAgAAABwZXAtMzExMHJQLgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMTBYJAAAAFBFUCAzMTEwOiBFeGNlcHRpb24tSGFuZGxpbmcgQ2hhbmdlc3RyUS4AAFgRAAAAbGVnYWN5LXVuaXQtdGVzdHNyUi4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNsZWdhY3ktdW5pdC10ZXN0c1gWAAAAUmUtdXNpbmcgb2xkIHRlc3QgY29kZXRyUy4AAFgJAAAAZmFxLWluZGV4clQuAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvaW5kZXguaHRtbCNmYXEtaW5kZXhYIQAAAFB5dGhvbiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uc3RyVS4AAFgOAAAAbW9kdWxlLXdzZ2lyZWZyVi4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZS13c2dpcmVmWBMAAABUaGUgd3NnaXJlZiBwYWNrYWdldHJXLgAAWAYAAABtZW1vcnlyWC4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeVgRAAAATWVtb3J5IE1hbmFnZW1lbnR0clkuAABYFAAAAGFyY2hpdmluZy1vcGVyYXRpb25zclouAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI2FyY2hpdmluZy1vcGVyYXRpb25zWBQAAABBcmNoaXZpbmcgb3BlcmF0aW9uc3RyWy4AAFgNAAAAdXNpbmctb24tdW5peHJcLgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvdW5peC5odG1sI3VzaW5nLW9uLXVuaXhYHgAAAFVzaW5nIFB5dGhvbiBvbiBVbml4IHBsYXRmb3Jtc3RyXS4AAFgCAAAAaXNyXi4AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2lzWBQAAABJZGVudGl0eSBjb21wYXJpc29uc3RyXy4AAFgIAAAAd2luLWRsbHNyYC4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy93aW5kb3dzLmh0bWwjd2luLWRsbHNYFgAAAFVzaW5nIERMTHMgaW4gUHJhY3RpY2V0cmEuAABYEAAAAGVtYmVkZGluZy1sb2NhbGVyYi4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjZW1iZWRkaW5nLWxvY2FsZVg0AAAARm9yIGV4dGVuc2lvbiB3cml0ZXJzIGFuZCBwcm9ncmFtcyB0aGF0IGVtYmVkIFB5dGhvbnRyYy4AAFgUAAAAbWl4ZXItZGV2aWNlLW9iamVjdHNyZC4AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNtaXhlci1kZXZpY2Utb2JqZWN0c1gUAAAATWl4ZXIgRGV2aWNlIE9iamVjdHN0cmUuAABYDgAAAHR1dC1hcmdwYXNzaW5ncmYuAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnRlcnByZXRlci5odG1sI3R1dC1hcmdwYXNzaW5nWBAAAABBcmd1bWVudCBQYXNzaW5ndHJnLgAAWA0AAABpbWFwNC1vYmplY3RzcmguAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwNC1vYmplY3RzWA0AAABJTUFQNCBPYmplY3RzdHJpLgAAWBoAAABzdXBwb3J0aW5nLWN5Y2xlLWRldGVjdGlvbnJqLgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjc3VwcG9ydGluZy1jeWNsZS1kZXRlY3Rpb25YJAAAAFN1cHBvcnRpbmcgQ3ljbGljIEdhcmJhZ2UgQ29sbGVjdGlvbnRyay4AAFgNAAAAZGF0ZXRpbWUtdGltZXJsLgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLXRpbWVYDAAAAHRpbWUgT2JqZWN0c3RybS4AAFgQAAAAY3R5cGVzLXN1cnByaXNlc3JuLgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtc3VycHJpc2VzWAkAAABTdXJwcmlzZXN0cm8uAABYDQAAAG1vZHVsZS1zcWxpdGVycC4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZS1zcWxpdGVYEwAAAFRoZSBzcWxpdGUzIHBhY2thZ2V0cnEuAABYEgAAAGRvY3Rlc3QtZXhjZXB0aW9uc3JyLgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1leGNlcHRpb25zWBYAAABXaGF0IEFib3V0IEV4Y2VwdGlvbnM/dHJzLgAAWBUAAABuZXctc3RyaW5nLWZvcm1hdHRpbmdydC4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjbmV3LXN0cmluZy1mb3JtYXR0aW5nWBgAAABDdXN0b20gU3RyaW5nIEZvcm1hdHRpbmd0cnUuAABYFwAAAHBvc3RpbnN0YWxsYXRpb24tc2NyaXB0cnYuAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjcG9zdGluc3RhbGxhdGlvbi1zY3JpcHRYGwAAAFRoZSBQb3N0aW5zdGFsbGF0aW9uIHNjcmlwdHRydy4AAFgKAAAAc2V0b2JqZWN0c3J4LgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjc2V0b2JqZWN0c1gLAAAAU2V0IE9iamVjdHN0cnkuAABYHAAAAG5vbi1lc3NlbnRpYWwtYnVpbHQtaW4tZnVuY3Nyei4AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbm9uLWVzc2VudGlhbC1idWlsdC1pbi1mdW5jc1ggAAAATm9uLWVzc2VudGlhbCBCdWlsdC1pbiBGdW5jdGlvbnN0cnsuAABYFwAAAG9wZW5lci1kaXJlY3Rvci1vYmplY3RzcnwuAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNvcGVuZXItZGlyZWN0b3Itb2JqZWN0c1gWAAAAT3BlbmVyRGlyZWN0b3IgT2JqZWN0c3RyfS4AAFgPAAAAZGlzdHV0aWxzLWludHJvcn4uAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWwjZGlzdHV0aWxzLWludHJvWBwAAABBbiBJbnRyb2R1Y3Rpb24gdG8gRGlzdHV0aWxzdHJ/LgAAWAMAAABub3RygC4AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI25vdFgSAAAAQm9vbGVhbiBvcGVyYXRpb25zdHKBLgAAWAsAAABpbmRlbnRhdGlvbnKCLgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbmRlbnRhdGlvblgLAAAASW5kZW50YXRpb250coMuAABYLAAAAG9wdHBhcnNlLXF1ZXJ5aW5nLW1hbmlwdWxhdGluZy1vcHRpb24tcGFyc2VycoQuAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcXVlcnlpbmctbWFuaXB1bGF0aW5nLW9wdGlvbi1wYXJzZXJYLAAAAFF1ZXJ5aW5nIGFuZCBtYW5pcHVsYXRpbmcgeW91ciBvcHRpb24gcGFyc2VydHKFLgAAdVgMAAAAcHk6YXR0cmlidXRlcoYuAAB9cocuAAAoWCIAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQub3V0cHV0X2NvZGVjcoguAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQub3V0cHV0X2NvZGVjWAEAAAAtdHKJLgAAWBkAAABmaWxlY21wLmRpcmNtcC5yaWdodF9saXN0coouAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yaWdodF9saXN0WAEAAAAtdHKLLgAAWA4AAABpby5GaWxlSU8ubW9kZXKMLgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkZpbGVJTy5tb2RlWAEAAAAtdHKNLgAAWBEAAABzaGxleC5zaGxleC5kZWJ1Z3KOLgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LmRlYnVnWAEAAAAtdHKPLgAAWCEAAABjb29raWVsaWIuRmlsZUNvb2tpZUphci5kZWxheWxvYWRykC4AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkZpbGVDb29raWVKYXIuZGVsYXlsb2FkWAEAAAAtdHKRLgAAWCIAAABjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fZmllbGRzcpIuAAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2ZpZWxkc1gBAAAALXRyky4AAFgaAAAAc3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVylC4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVYAQAAAC10cpUuAABYFAAAAGZpbGVjbXAuZGlyY21wLnJpZ2h0cpYuAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yaWdodFgBAAAALXRyly4AAFgRAAAAcmUuTWF0Y2hPYmplY3QucmVymC4AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5yZVgBAAAALXRymS4AAFgYAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuc2Vjb25kcpouAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuc2Vjb25kWAEAAAAtdHKbLgAAWBEAAABkYXRldGltZS50aW1lLm1pbnKcLgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUubWluWAEAAAAtdHKdLgAAWA0AAABmaWxlLm5ld2xpbmVzcp4uAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5uZXdsaW5lc1gBAAAALXRyny4AAFgrAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X2RvbWFpbnKgLgAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfZG9tYWluWAEAAAAtdHKhLgAAWBQAAABzdWJwcm9jZXNzLlBvcGVuLnBpZHKiLgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5waWRYAQAAAC10cqMuAABYGwAAAGN0eXBlcy5fQ0RhdGEuX2JfbmVlZHNmcmVlX3KkLgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLl9iX25lZWRzZnJlZV9YAQAAAC10cqUuAABYNAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY2xpZW50X2FkZHJlc3Nypi4AAChqcwUAAGp0BQAAWGoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmNsaWVudF9hZGRyZXNzWAEAAAAtdHKnLgAAWBgAAABjdHlwZXMuX0Z1bmNQdHIuZXJyY2hlY2tyqC4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9GdW5jUHRyLmVycmNoZWNrWAEAAAAtdHKpLgAAWCsAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnJmaWxlcqouAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZmlsZVgBAAAALXRyqy4AAFgWAAAAcG9wZW4yLlBvcGVuMy5jaGlsZGVycnKsLgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIuUG9wZW4zLmNoaWxkZXJyWAEAAAAtdHKtLgAAWB8AAABjb29raWVsaWIuQ29va2llUG9saWN5Lm5ldHNjYXBlcq4uAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVQb2xpY3kubmV0c2NhcGVYAQAAAC10cq8uAABYHQAAAGRhdGV0aW1lLnRpbWVkZWx0YS5yZXNvbHV0aW9ucrAuAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhLnJlc29sdXRpb25YAQAAAC10crEuAABYMAAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdE5vRG90c3KyLgAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3ROb0RvdHNYAQAAAC10crMuAABYIQAAAG1pbWV0eXBlcy5NaW1lVHlwZXMudHlwZXNfbWFwX2ludnK0LgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcF9pbnZYAQAAAC10crUuAABYEwAAAHB5Y2xici5DbGFzcy5tb2R1bGVyti4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLm1vZHVsZVgBAAAALXRyty4AAFgdAAAAb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrX2FyZ3NyuC4AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uY2FsbGJhY2tfYXJnc1gBAAAALXRyuS4AAFglAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc3K6LgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNYAQAAAC10crsuAABYFQAAAGRhdGV0aW1lLmRhdGV0aW1lLm1heHK8LgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1heFgBAAAALXRyvS4AAFgTAAAAcmV4ZWMuUkV4ZWMub2tfcGF0aHK+LgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLm9rX3BhdGhYAQAAAC10cr8uAABYHAAAAGh0dHBsaWIuSFRUUFJlc3BvbnNlLnZlcnNpb25ywC4AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLnZlcnNpb25YAQAAAC10csEuAABYLQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FcnJvckNvbHVtbk51bWJlcnLCLgAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyWAEAAAAtdHLDLgAAWBIAAAByZXByLlJlcHIubWF4b3RoZXJyxC4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhvdGhlclgBAAAALXRyxS4AAFgUAAAAY21kLkNtZC51bmRvY19oZWFkZXJyxi4AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC51bmRvY19oZWFkZXJYAQAAAC10cscuAABYIwAAAGNvb2tpZWxpYi5Db29raWUuZG9tYWluX2luaXRpYWxfZG90csguAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuZG9tYWluX2luaXRpYWxfZG90WAEAAAAtdHLJLgAAWB0AAABleGNlcHRpb25zLlVuaWNvZGVFcnJvci5zdGFydHLKLgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3Iuc3RhcnRYAQAAAC10cssuAABYDQAAAHV1aWQuVVVJRC51cm5yzC4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC51cm5YAQAAAC10cs0uAABYEAAAAG1lbW9yeXZpZXcuc2hhcGVyzi4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LnNoYXBlWAEAAAAtdHLPLgAAWCYAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYWRkcmVzc3LQLgAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYWRkcmVzc1gBAAAALXRy0S4AAFgUAAAAb3B0cGFyc2UuT3B0aW9uLmRlc3Ry0i4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uZGVzdFgBAAAALXRy0y4AAFgWAAAAc2VsZWN0LnNlbGVjdC5QSVBFX0JVRnLULgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Quc2VsZWN0LlBJUEVfQlVGWAEAAAAtdHLVLgAAWBMAAABzZWxlY3Qua2V2ZW50LmlkZW50ctYuAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rZXZlbnQuaWRlbnRYAQAAAC10ctcuAABYIwAAAHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3Iub2Zmc2V0ctguAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLm9mZnNldFgBAAAALXRy2S4AAFgYAAAAY29va2llbGliLkNvb2tpZS5leHBpcmVzctouAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuZXhwaXJlc1gBAAAALXRy2y4AAFgUAAAAc2VsZWN0LmtldmVudC5maWx0ZXJy3C4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5maWx0ZXJYAQAAAC10ct0uAABYIQAAAG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIubW9kdWxlc3LeLgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyLm1vZHVsZXNYAQAAAC10ct8uAABYGAAAAHVybGxpYjIuSFRUUEVycm9yLnJlYXNvbnLgLgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRXJyb3IucmVhc29uWAEAAAAtdHLhLgAAWA4AAABjbWQuQ21kLnByb21wdHLiLgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLnByb21wdFgBAAAALXRy4y4AAFgkAAAAZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uLmV4Y19pbmZvcuQuAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24uZXhjX2luZm9YAQAAAC10cuUuAABYIwAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jaGFyc2V0cuYuAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaW5wdXRfY2hhcnNldFgBAAAALXRy5y4AAFgSAAAAcmVwci5SZXByLm1heGRlcXVlcuguAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIubWF4ZGVxdWVYAQAAAC10cukuAABYMAAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlc3LqLgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzWAEAAAAtdHLrLgAAWCUAAAB1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3IuY29va2llamFycuwuAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3IuY29va2llamFyWAEAAAAtdHLtLgAAWCMAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuYm9keV9lbmNvZGluZ3LuLgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2RpbmdYAQAAAC10cu8uAABYIAAAAHN1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZElucHV0cvAuAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmhTdGRJbnB1dFgBAAAALXRy8S4AAFgWAAAAZmlsZWNtcC5kaXJjbXAuc3ViZGlyc3LyLgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuc3ViZGlyc1gBAAAALXRy8y4AAFgOAAAAaW8uRmlsZUlPLm5hbWVy9C4AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5GaWxlSU8ubmFtZVgBAAAALXRy9S4AAFgTAAAAc29ja2V0LnNvY2tldC5wcm90b3L2LgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnByb3RvWAEAAAAtdHL3LgAAWBgAAABkYXRldGltZS50aW1lLnJlc29sdXRpb25y+C4AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnJlc29sdXRpb25YAQAAAC10cvkuAABYEQAAAGRhdGV0aW1lLmRhdGUubWlucvouAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5taW5YAQAAAC10cvsuAABYEwAAAGZpbGVjbXAuZGlyY21wLmxlZnRy/C4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmxlZnRYAQAAAC10cv0uAABYFgAAAHB5Y2xici5GdW5jdGlvbi5saW5lbm9y/i4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLmxpbmVub1gBAAAALXRy/y4AAFguAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlc3IALwAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlc1gBAAAALXRyAS8AAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGV4dHICLwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50ZXh0WAEAAAAtdHIDLwAAWB0AAAB6aXBmaWxlLlppcEluZm8uY3JlYXRlX3N5c3RlbXIELwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmNyZWF0ZV9zeXN0ZW1YAQAAAC10cgUvAABYFgAAAGNvb2tpZWxpYi5Db29raWUudmFsdWVyBi8AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS52YWx1ZVgBAAAALXRyBy8AAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGFpbHIILwAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50YWlsWAEAAAAtdHIJLwAAWCoAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfcnVuX29uY2VyCi8AAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9ydW5fb25jZVgBAAAALXRyCy8AAFgUAAAAc2VsZWN0LmtldmVudC5mZmxhZ3NyDC8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5mZmxhZ3NYAQAAAC10cg0vAABYFwAAAGRvY3Rlc3QuRXhhbXBsZS5leGNfbXNncg4vAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGUuZXhjX21zZ1gBAAAALXRyDy8AAFgWAAAAZG9jdGVzdC5FeGFtcGxlLmxpbmVub3IQLwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlLmxpbmVub1gBAAAALXRyES8AAFgeAAAAeG1sLmRvbS5Eb2N1bWVudFR5cGUubm90YXRpb25zchIvAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50VHlwZS5ub3RhdGlvbnNYAQAAAC10chMvAABYHgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5lcGlsb2d1ZXIULwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmVwaWxvZ3VlWAEAAAAtdHIVLwAAWBYAAABvcHRwYXJzZS5PcHRpb24uYWN0aW9uchYvAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmFjdGlvblgBAAAALXRyFy8AAFgbAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MucGlkchgvAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnBpZFgBAAAALXRyGS8AAFgRAAAAZGF0ZXRpbWUuZGF0ZS5kYXlyGi8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmRheVgBAAAALXRyGy8AAFgYAAAAdXJsbGliLlVSTG9wZW5lci52ZXJzaW9uchwvAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5VUkxvcGVuZXIudmVyc2lvblgBAAAALXRyHS8AAFgbAAAAdGFyZmlsZS5UYXJJbmZvLnBheF9oZWFkZXJzch4vAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8ucGF4X2hlYWRlcnNYAQAAAC10ch8vAABYGwAAAHNzbC5TU0xDb250ZXh0LnZlcmlmeV9mbGFnc3IgLwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NYAQAAAC10ciEvAABYFAAAAG51bWJlcnMuQ29tcGxleC5yZWFsciIvAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkNvbXBsZXgucmVhbFgBAAAALXRyIy8AAFgPAAAAY21kLkNtZC5sYXN0Y21kciQvAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQubGFzdGNtZFgBAAAALXRyJS8AAFgfAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuYXV0aGtleXImLwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5hdXRoa2V5WAEAAAAtdHInLwAAWB4AAABpbWFwbGliLklNQVA0LlBST1RPQ09MX1ZFUlNJT05yKC8AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuUFJPVE9DT0xfVkVSU0lPTlgBAAAALXRyKS8AAFgWAAAAVXNlckxpc3QuVXNlckxpc3QuZGF0YXIqLwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJMaXN0LlVzZXJMaXN0LmRhdGFYAQAAAC10cisvAABYJwAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIub3NfZW52aXJvbnIsLwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5vc19lbnZpcm9uWAEAAAAtdHItLwAAWDoAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmVycm9yX21lc3NhZ2VfZm9ybWF0ci4vAAAoanMFAABqdAUAAFhwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5lcnJvcl9tZXNzYWdlX2Zvcm1hdFgBAAAALXRyLy8AAFgSAAAAeG1sLmRvbS5BdHRyLnZhbHVlcjAvAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkF0dHIudmFsdWVYAQAAAC10cjEvAABYFgAAAGN0eXBlcy5fQ0RhdGEuX2JfYmFzZV9yMi8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5fYl9iYXNlX1gBAAAALXRyMy8AAFgVAAAAemlwZmlsZS5aaXBJbmZvLmV4dHJhcjQvAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZXh0cmFYAQAAAC10cjUvAABYKwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3NyNi8AAChqcwUAAGp0BQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuYWxsb3dfcmV1c2VfYWRkcmVzc1gBAAAALXRyNy8AAFgkAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuZHJvcF93aGl0ZXNwYWNlcjgvAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuZHJvcF93aGl0ZXNwYWNlWAEAAAAtdHI5LwAAWB4AAABFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5tYXh2YWxyOi8AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5tYXh2YWxYAQAAAC10cjsvAABYJgAAAHRleHR3cmFwLlRleHRXcmFwcGVyLnN1YnNlcXVlbnRfaW5kZW50cjwvAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuc3Vic2VxdWVudF9pbmRlbnRYAQAAAC10cj0vAABYFgAAAHJlcHIuUmVwci5tYXhmcm96ZW5zZXRyPi8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhmcm96ZW5zZXRYAQAAAC10cj8vAABYGAAAAGNvbGxlY3Rpb25zLmRlcXVlLm1heGxlbnJALwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLm1heGxlblgBAAAALXRyQS8AAFgLAAAAZmlsZS5jbG9zZWRyQi8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmNsb3NlZFgBAAAALXRyQy8AAFgVAAAAdGhyZWFkaW5nLlRocmVhZC5uYW1lckQvAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQubmFtZVgBAAAALXRyRS8AAFgUAAAAcHljbGJyLkZ1bmN0aW9uLmZpbGVyRi8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLmZpbGVYAQAAAC10ckcvAABYEAAAAHJlcHIuUmVwci5tYXhzZXRySC8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhzZXRYAQAAAC10ckkvAABYEgAAAHNlbGVjdC5rZXZlbnQuZGF0YXJKLwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LmRhdGFYAQAAAC10cksvAABYJwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfdGV4dHJMLwAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl90ZXh0WAEAAAAtdHJNLwAAWBcAAABvcHRwYXJzZS5PcHRpb24ubWV0YXZhcnJOLwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5tZXRhdmFyWAEAAAAtdHJPLwAAWBkAAABmaWxlY21wLmRpcmNtcC5yaWdodF9vbmx5clAvAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yaWdodF9vbmx5WAEAAAAtdHJRLwAAWCcAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3NpemVyUi8AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfc2l6ZVgBAAAALXRyUy8AAFgaAAAAdXJsbGliMi5CYXNlSGFuZGxlci5wYXJlbnRyVC8AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIucGFyZW50WAEAAAAtdHJVLwAAWB0AAABvcHRwYXJzZS5PcHRpb24uU1RPUkVfQUNUSU9OU3JWLwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5TVE9SRV9BQ1RJT05TWAEAAAAtdHJXLwAAWCEAAABjb29raWVsaWIuQ29va2llLmRvbWFpbl9zcGVjaWZpZWRyWC8AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5kb21haW5fc3BlY2lmaWVkWAEAAAAtdHJZLwAAWBIAAABzb2NrZXQuc29ja2V0LnR5cGVyWi8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC50eXBlWAEAAAAtdHJbLwAAWBcAAABjb29raWVsaWIuQ29va2llLnNlY3VyZXJcLwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnNlY3VyZVgBAAAALXRyXS8AAFgRAAAAc2hsZXguc2hsZXgudG9rZW5yXi8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC50b2tlblgBAAAALXRyXy8AAFgVAAAAdGFyZmlsZS5UYXJJbmZvLnVuYW1lcmAvAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8udW5hbWVYAQAAAC10cmEvAABYFQAAAGZpbGVjbXAuZGlyY21wLmNvbW1vbnJiLwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuY29tbW9uWAEAAAAtdHJjLwAAWCEAAAB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLmNvZGVyZC8AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3IuY29kZVgBAAAALXRyZS8AAFgTAAAAeG1sLmRvbS5BdHRyLnByZWZpeHJmLwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLnByZWZpeFgBAAAALXRyZy8AAFgRAAAAcG9wZW4yLlBvcGVuMy5waWRyaC8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy5waWRYAQAAAC10cmkvAABYHwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnRpbWVvdXRyai8AAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudGltZW91dFgBAAAALXRyay8AAFgZAAAAemlwZmlsZS5aaXBJbmZvLmZsYWdfYml0c3JsLwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmZsYWdfYml0c1gBAAAALXRybS8AAFgVAAAAb3B0cGFyc2UuT3B0aW9uLm5hcmdzcm4vAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLm5hcmdzWAEAAAAtdHJvLwAAWB4AAAB6aXBmaWxlLlppcEluZm8uY3JlYXRlX3ZlcnNpb25ycC8AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5jcmVhdGVfdmVyc2lvblgBAAAALXRycS8AAFgfAAAAc3FsaXRlMy5Db25uZWN0aW9uLnRleHRfZmFjdG9yeXJyLwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLnRleHRfZmFjdG9yeVgBAAAALXRycy8AAFgrAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLnJldHVybnNfdW5pY29kZXJ0LwAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLnJldHVybnNfdW5pY29kZVgBAAAALXRydS8AAFgVAAAAcmUuTWF0Y2hPYmplY3Quc3RyaW5ncnYvAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3Quc3RyaW5nWAEAAAAtdHJ3LwAAWBIAAABzaGxleC5zaGxleC5lc2NhcGVyeC8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lc2NhcGVYAQAAAC10cnkvAABYIAAAAHN1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZEVycm9ycnovAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmhTdGRFcnJvclgBAAAALXRyey8AAFgYAAAAY3R5cGVzLl9GdW5jUHRyLmFyZ3R5cGVzcnwvAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fRnVuY1B0ci5hcmd0eXBlc1gBAAAALXRyfS8AAFgRAAAAZGF0ZXRpbWUuZGF0ZS5tYXhyfi8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLm1heFgBAAAALXRyfy8AAFgiAAAAdW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbnKALwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb25YAQAAAC10coEvAABYEgAAAGNzdi5EaWFsZWN0LnN0cmljdHKCLwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5zdHJpY3RYAQAAAC10coMvAABYDQAAAGNtZC5DbWQucnVsZXJyhC8AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5ydWxlclgBAAAALXRyhS8AAFgOAAAAZmlsZS5zb2Z0c3BhY2Vyhi8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnNvZnRzcGFjZVgBAAAALXRyhy8AAFgbAAAAemxpYi5EZWNvbXByZXNzLnVudXNlZF9kYXRhcogvAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MudW51c2VkX2RhdGFYAQAAAC10cokvAABYFgAAAGNzdi5EaWFsZWN0LmVzY2FwZWNoYXJyii8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpYWxlY3QuZXNjYXBlY2hhclgBAAAALXRyiy8AAFg0AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJfdmVyc2lvbnKMLwAAKGpzBQAAanQFAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVyX3ZlcnNpb25YAQAAAC10co0vAABYEwAAAHNzbC5TU0xFcnJvci5yZWFzb25yji8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTEVycm9yLnJlYXNvblgBAAAALXRyjy8AAFgvAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRDb2x1bW5OdW1iZXJykC8AAChqcwUAAGp0BQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50Q29sdW1uTnVtYmVyWAEAAAAtdHKRLwAAWCMAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5pbml0aWFsX2luZGVudHKSLwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmluaXRpYWxfaW5kZW50WAEAAAAtdHKTLwAAWBYAAAB1cmxsaWIyLkhUVFBFcnJvci5jb2RlcpQvAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBFcnJvci5jb2RlWAEAAAAtdHKVLwAAWBQAAABkYXRldGltZS50aW1lLm1pbnV0ZXKWLwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUubWludXRlWAEAAAAtdHKXLwAAWBgAAABmaWxlY21wLmRpcmNtcC5sZWZ0X29ubHlymC8AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmxlZnRfb25seVgBAAAALXRymS8AAFgJAAAAZmlsZS5uYW1lcpovAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5uYW1lWAEAAAAtdHKbLwAAWB8AAAB6bGliLkRlY29tcHJlc3MudW5jb25zdW1lZF90YWlscpwvAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MudW5jb25zdW1lZF90YWlsWAEAAAAtdHKdLwAAWBMAAABjc3YuRGlhbGVjdC5xdW90aW5ncp4vAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LnF1b3RpbmdYAQAAAC10cp8vAABYEgAAAHN0cnVjdC5TdHJ1Y3Quc2l6ZXKgLwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnNpemVYAQAAAC10cqEvAABYGAAAAHJlLk1hdGNoT2JqZWN0Lmxhc3RpbmRleHKiLwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0Lmxhc3RpbmRleFgBAAAALXRyoy8AAFgdAAAAdW5pdHRlc3QuVGVzdENhc2UubG9uZ01lc3NhZ2VypC8AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZVgBAAAALXRypS8AAFgSAAAAb2JqZWN0Ll9fbWV0aG9kc19fcqYvAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjb2JqZWN0Ll9fbWV0aG9kc19fWAEAAAAtdHKnLwAAWBcAAABjdHlwZXMuX0Z1bmNQdHIucmVzdHlwZXKoLwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0Z1bmNQdHIucmVzdHlwZVgBAAAALXRyqS8AAFgWAAAAaW8uVGV4dElPQmFzZS5uZXdsaW5lc3KqLwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UubmV3bGluZXNYAQAAAC10cqsvAABYGAAAAHhtbC5kb20uTm9kZS5uZXh0U2libGluZ3KsLwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5leHRTaWJsaW5nWAEAAAAtdHKtLwAAWBIAAABkYXRldGltZS5kYXRlLnllYXJyri8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnllYXJYAQAAAC10cq8vAABYIAAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFyLmZpbGVuYW1lcrAvAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5GaWxlQ29va2llSmFyLmZpbGVuYW1lWAEAAAAtdHKxLwAAWBwAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWxmYXN0crIvAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5mYWlsZmFzdFgBAAAALXRysy8AAFgRAAAAcmZjODIyLk1lc3NhZ2UuZnBytC8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZnBYAQAAAC10crUvAABYHwAAAHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLmhlYWRlcnNyti8AAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlByb3RvY29sRXJyb3IuaGVhZGVyc1gBAAAALXRyty8AAFgqAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0crgvAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdFgBAAAALXRyuS8AAFgtAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX211bHRpdGhyZWFkcrovAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfbXVsdGl0aHJlYWRYAQAAAC10crsvAABYKwAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmFkZHJlc3NyvC8AAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWRkcmVzc1gBAAAALXRyvS8AAFgfAAAAeG1scnBjbGliLlByb3RvY29sRXJyb3IuZXJyY29kZXK+LwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuUHJvdG9jb2xFcnJvci5lcnJjb2RlWAEAAAAtdHK/LwAAWBUAAABvcHRwYXJzZS5PcHRpb24uVFlQRVNywC8AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uVFlQRVNYAQAAAC10csEvAABYIwAAAGRvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGFtcGxlcsIvAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24uZXhhbXBsZVgBAAAALXRywy8AAFgdAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmFyY2hpdmVyxC8AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLmFyY2hpdmVYAQAAAC10csUvAABYGQAAAGN0eXBlcy5fU2ltcGxlQ0RhdGEudmFsdWVyxi8AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9TaW1wbGVDRGF0YS52YWx1ZVgBAAAALXRyxy8AAFgZAAAAemlwZmlsZS5aaXBJbmZvLmZpbGVfc2l6ZXLILwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmZpbGVfc2l6ZVgBAAAALXRyyS8AAFg1AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZXF1ZXN0X3ZlcnNpb25yyi8AAChqcwUAAGp0BQAAWGsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnJlcXVlc3RfdmVyc2lvblgBAAAALXRyyy8AAFgqAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQnl0ZUluZGV4cswvAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JCeXRlSW5kZXhYAQAAAC10cs0vAABYFgAAAGRhdGV0aW1lLnRpbWVkZWx0YS5taW5yzi8AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEubWluWAEAAAAtdHLPLwAAWBAAAABjbWQuQ21kLmNtZHF1ZXVlctAvAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuY21kcXVldWVYAQAAAC10ctEvAABYHAAAAHppcGltcG9ydC56aXBpbXBvcnRlci5wcmVmaXhy0i8AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLnByZWZpeFgBAAAALXRy0y8AAFgZAAAAQ29va2llLk1vcnNlbC5jb2RlZF92YWx1ZXLULwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLmNvZGVkX3ZhbHVlWAEAAAAtdHLVLwAAWCgAAAB1bml0dGVzdC5UZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nctYvAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZ1gBAAAALXRy1y8AAFgbAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2Uuc3RhdHVzctgvAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5zdGF0dXNYAQAAAC10ctkvAABYFgAAAHNobGV4LnNobGV4LmNvbW1lbnRlcnNy2i8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5jb21tZW50ZXJzWAEAAAAtdHLbLwAAWA8AAABzaGxleC5zaGxleC5lb2Zy3C8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lb2ZYAQAAAC10ct0vAABYGwAAAGV4Y2VwdGlvbnMuVW5pY29kZUVycm9yLmVuZHLeLwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3IuZW5kWAEAAAAtdHLfLwAAWB4AAABjb29raWVsaWIuQ29va2llUG9saWN5LnJmYzI5NjVy4C8AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5yZmMyOTY1WAEAAAAtdHLhLwAAWCEAAABtaW1ldHlwZXMuTWltZVR5cGVzLmVuY29kaW5nc19tYXBy4i8AAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5lbmNvZGluZ3NfbWFwWAEAAAAtdHLjLwAAWBcAAAB4bWwuZG9tLk5vZGUuY2hpbGROb2Rlc3LkLwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmNoaWxkTm9kZXNYAQAAAC10cuUvAABYHQAAAHppcGZpbGUuWmlwSW5mby5leHRlcm5hbF9hdHRycuYvAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZXh0ZXJuYWxfYXR0clgBAAAALXRy5y8AAFgWAAAAcmZjODIyLk1lc3NhZ2UuaGVhZGVyc3LoLwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5oZWFkZXJzWAEAAAAtdHLpLwAAWDgAAABTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJfdmVyc2lvbnLqLwAAKGpzBQAAanQFAABYcAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWwjU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVyX3ZlcnNpb25YAQAAAC10cusvAABYFAAAAHhtbC5kb20uQ29tbWVudC5kYXRhcuwvAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkNvbW1lbnQuZGF0YVgBAAAALXRy7S8AAFgVAAAAY3N2LmNzdnJlYWRlci5kaWFsZWN0cu4vAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3ZyZWFkZXIuZGlhbGVjdFgBAAAALXRy7y8AAFgZAAAAcmV4ZWMuUkV4ZWMub2tfZmlsZV90eXBlc3LwLwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLm9rX2ZpbGVfdHlwZXNYAQAAAC10cvEvAABYFwAAAGNzdi5EaWFsZWN0LmRvdWJsZXF1b3RlcvIvAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRvdWJsZXF1b3RlWAEAAAAtdHLzLwAAWBYAAAB4bWwuZG9tLk5vZGUubG9jYWxOYW1lcvQvAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubG9jYWxOYW1lWAEAAAAtdHL1LwAAWCIAAAB4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5kYXRhcvYvAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5kYXRhWAEAAAAtdHL3LwAAWCsAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5MaWJlcmFscvgvAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpbkxpYmVyYWxYAQAAAC10cvkvAABYIAAAAHhtbC5kb20uRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50cvovAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmRvY3VtZW50RWxlbWVudFgBAAAALXRy+y8AAFgWAAAAeG1sLmRvbS5BdHRyLmxvY2FsTmFtZXL8LwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLmxvY2FsTmFtZVgBAAAALXRy/S8AAFgsAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJy/i8AAChqcwUAAGp0BQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlcnZlclgBAAAALXRy/y8AAFgZAAAAeG1scnBjbGliLkZhdWx0LmZhdWx0Q29kZXIAMAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuRmF1bHQuZmF1bHRDb2RlWAEAAAAtdHIBMAAAWDEAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnN5c192ZXJzaW9ucgIwAAAoanMFAABqdAUAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zeXNfdmVyc2lvblgBAAAALXRyAzAAAFgWAAAAc2hsZXguc2hsZXgud2hpdGVzcGFjZXIEMAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LndoaXRlc3BhY2VYAQAAAC10cgUwAABYGAAAAG9wdHBhcnNlLk9wdGlvbi5jYWxsYmFja3IGMAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5jYWxsYmFja1gBAAAALXRyBzAAAFgdAAAAemlwZmlsZS5aaXBJbmZvLmhlYWRlcl9vZmZzZXRyCDAAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5oZWFkZXJfb2Zmc2V0WAEAAAAtdHIJMAAAWBoAAABmaWxlY21wLmRpcmNtcC5mdW5ueV9maWxlc3IKMAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuZnVubnlfZmlsZXNYAQAAAC10cgswAABYHgAAAHJleGVjLlJFeGVjLm9rX2J1aWx0aW5fbW9kdWxlc3IMMAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLm9rX2J1aWx0aW5fbW9kdWxlc1gBAAAALXRyDTAAAFgXAAAAb3B0cGFyc2UuT3B0aW9uLkFDVElPTlNyDjAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uQUNUSU9OU1gBAAAALXRyDzAAAFgaAAAAbnVtYmVycy5SYXRpb25hbC5udW1lcmF0b3JyEDAAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuUmF0aW9uYWwubnVtZXJhdG9yWAEAAAAtdHIRMAAAWCQAAAB1bml0dGVzdC5UZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXhyEjAAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXhYAQAAAC10chMwAABYGwAAAGRvY3Rlc3QuRG9jVGVzdEZhaWx1cmUudGVzdHIUMAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS50ZXN0WAEAAAAtdHIVMAAAWBMAAABjbWQuQ21kLm1pc2NfaGVhZGVychYwAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQubWlzY19oZWFkZXJYAQAAAC10chcwAABYEQAAAHJlcHIuUmVwci5tYXhkaWN0chgwAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIubWF4ZGljdFgBAAAALXRyGTAAAFgPAAAAbWVtb3J5dmlldy5uZGltchowAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5uZGltWAEAAAAtdHIbMAAAWBUAAABwb3BlbjIuUG9wZW4zLnRvY2hpbGRyHDAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy50b2NoaWxkWAEAAAAtdHIdMAAAWBoAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLndyaXRlcnIeMAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLndyaXRlclgBAAAALXRyHzAAAFgbAAAAeG1sLmRvbS5OYW1lZE5vZGVNYXAubGVuZ3RociAwAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5hbWVkTm9kZU1hcC5sZW5ndGhYAQAAAC10ciEwAABYFwAAAGRvY3Rlc3QuRXhhbXBsZS5vcHRpb25zciIwAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGUub3B0aW9uc1gBAAAALXRyIzAAAFggAAAAc3FsaXRlMy5Db25uZWN0aW9uLnRvdGFsX2NoYW5nZXNyJDAAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi50b3RhbF9jaGFuZ2VzWAEAAAAtdHIlMAAAWA0AAABmaWxlLmVuY29kaW5nciYwAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5lbmNvZGluZ1gBAAAALXRyJzAAAFgSAAAAdXVpZC5VVUlELmJ5dGVzX2xlcigwAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuYnl0ZXNfbGVYAQAAAC10cikwAABYPgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkciowAAAoanMFAABqdAUAAFh4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkWAEAAAAtdHIrMAAAWB4AAAB4bWxycGNsaWIuUHJvdG9jb2xFcnJvci5lcnJtc2dyLDAAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlByb3RvY29sRXJyb3IuZXJybXNnWAEAAAAtdHItMAAAWB4AAABVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0LmRhdGFyLjAAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0LmRhdGFYAQAAAC10ci8wAABYIQAAAHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLmNtZHIwMAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IuY21kWAEAAAAtdHIxMAAAWBUAAABzY2hlZC5zY2hlZHVsZXIucXVldWVyMjAAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2NoZWQuaHRtbCNzY2hlZC5zY2hlZHVsZXIucXVldWVYAQAAAC10cjMwAABYIAAAAGRvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi50ZXN0cjQwAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24udGVzdFgBAAAALXRyNTAAAFgTAAAAY3R5cGVzLkFycmF5Ll90eXBlX3I2MAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJyYXkuX3R5cGVfWAEAAAAtdHI3MAAAWB0AAABtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcHI4MAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcFgBAAAALXRyOTAAAFgcAAAAY3R5cGVzLlN0cnVjdHVyZS5fYW5vbnltb3VzX3I6MAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJlLl9hbm9ueW1vdXNfWAEAAAAtdHI7MAAAWBYAAABpby5UZXh0SU9CYXNlLmVuY29kaW5ncjwwAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5lbmNvZGluZ1gBAAAALXRyPTAAAFgSAAAAYXN0LkFTVC5jb2xfb2Zmc2V0cj4wAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1QuY29sX29mZnNldFgBAAAALXRyPzAAAFgSAAAAcmVwci5SZXByLm1heGFycmF5ckAwAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIubWF4YXJyYXlYAQAAAC10ckEwAABYOgAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19zZXRfaW5pdGlhbF9kb2xsYXJyQjAAAChqcwUAAGp0BQAAWGsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3NldF9pbml0aWFsX2RvbGxhclgBAAAALXRyQzAAAFgUAAAAdGFyZmlsZS5UYXJJbmZvLnR5cGVyRDAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby50eXBlWAEAAAAtdHJFMAAAWBUAAABkb2N0ZXN0LkRvY1Rlc3QuZ2xvYnNyRjAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5nbG9ic1gBAAAALXRyRzAAAFgZAAAAc2hsZXguc2hsZXguZXNjYXBlZHF1b3Rlc3JIMAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LmVzY2FwZWRxdW90ZXNYAQAAAC10ckkwAABYHQAAAHhtbC5kb20uRG9jdW1lbnRUeXBlLnB1YmxpY0lkckowAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50VHlwZS5wdWJsaWNJZFgBAAAALXRySzAAAFgXAAAAcG9wZW4yLlBvcGVuMy5mcm9tY2hpbGRyTDAAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy5mcm9tY2hpbGRYAQAAAC10ck0wAABYDQAAAHV1aWQuVVVJRC5pbnRyTjAAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC5pbnRYAQAAAC10ck8wAABYJwAAAGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0LmRlZmF1bHRfZmFjdG9yeXJQMAAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlZmF1bHRkaWN0LmRlZmF1bHRfZmFjdG9yeVgBAAAALXRyUTAAAFgnAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzclIwAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzWAEAAAAtdHJTMAAAWCkAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5maXhfc2VudGVuY2VfZW5kaW5nc3JUMAAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmZpeF9zZW50ZW5jZV9lbmRpbmdzWAEAAAAtdHJVMAAAWC0AAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhlYWRlcnNyVjAAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhlYWRlcnNYAQAAAC10clcwAABYMAAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblJGQzI5NjVNYXRjaHJYMAAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5SRkMyOTY1TWF0Y2hYAQAAAC10clkwAABYHQAAAHJleGVjLlJFeGVjLm5va19idWlsdGluX25hbWVzclowAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMubm9rX2J1aWx0aW5fbmFtZXNYAQAAAC10clswAABYIQAAAHN1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZE91dHB1dHJcMAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkT3V0cHV0WAEAAAAtdHJdMAAAWB0AAAB4bWwuZG9tLkRvY3VtZW50VHlwZS5zeXN0ZW1JZHJeMAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUuc3lzdGVtSWRYAQAAAC10cl8wAABYHQAAAHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lcmAwAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lWAEAAAAtdHJhMAAAWBMAAAB0YXJmaWxlLlRhckluZm8uZ2lkcmIwAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uZ2lkWAEAAAAtdHJjMAAAWCQAAAB4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi50YXJnZXRyZDAAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uLnRhcmdldFgBAAAALXRyZTAAAFgZAAAAZmlsZWNtcC5kaXJjbXAuc2FtZV9maWxlc3JmMAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuc2FtZV9maWxlc1gBAAAALXRyZzAAAFgUAAAAbnVtYmVycy5Db21wbGV4LmltYWdyaDAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuQ29tcGxleC5pbWFnWAEAAAAtdHJpMAAAWBsAAABmaWxlY21wLmRpcmNtcC5jb21tb25fZmlsZXNyajAAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmNvbW1vbl9maWxlc1gBAAAALXRyazAAAFgVAAAAcmUuTWF0Y2hPYmplY3QuZW5kcG9zcmwwAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3QuZW5kcG9zWAEAAAAtdHJtMAAAWB4AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UucHJlYW1ibGVybjAAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5wcmVhbWJsZVgBAAAALXRybzAAAFgZAAAAaHRtbGxpYi5IVE1MUGFyc2VyLm5vZmlsbHJwMAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLm5vZmlsbFgBAAAALXRycTAAAFgUAAAAdGFyZmlsZS5UYXJJbmZvLm5hbWVycjAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5uYW1lWAEAAAAtdHJzMAAAWBQAAABzaGxleC5zaGxleC5pbnN0cmVhbXJ0MAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4Lmluc3RyZWFtWAEAAAAtdHJ1MAAAWBIAAABtZW1vcnl2aWV3LnN0cmlkZXNydjAAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LnN0cmlkZXNYAQAAAC10cncwAABYEwAAAGRhdGV0aW1lLmRhdGUubW9udGhyeDAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLm1vbnRoWAEAAAAtdHJ5MAAAWDMAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3ROb25Eb21haW5yejAAAChqcwUAAGp0BQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9uRG9tYWluWAEAAAAtdHJ7MAAAWBMAAABDb29raWUuTW9yc2VsLnZhbHVlcnwwAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwudmFsdWVYAQAAAC10cn0wAABYEQAAAENvb2tpZS5Nb3JzZWwua2V5cn4wAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwua2V5WAEAAAAtdHJ/MAAAWCUAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kaW5ncoAwAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kaW5nWAEAAAAtdHKBMAAAWBYAAABkb2N0ZXN0LkV4YW1wbGUuc291cmNlcoIwAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGUuc291cmNlWAEAAAAtdHKDMAAAWBgAAAB0YXJmaWxlLlRhckluZm8ubGlua25hbWVyhDAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5saW5rbmFtZVgBAAAALXRyhTAAAFgSAAAAbmV0cmMubmV0cmMubWFjcm9zcoYwAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMubWFjcm9zWAEAAAAtdHKHMAAAWBUAAABzaGxleC5zaGxleC53b3JkY2hhcnNyiDAAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC53b3JkY2hhcnNYAQAAAC10cokwAABYHwAAAGNvb2tpZWxpYi5Db29raWUucG9ydF9zcGVjaWZpZWRyijAAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5wb3J0X3NwZWNpZmllZFgBAAAALXRyizAAAFgPAAAAYXN0LkFTVC5fZmllbGRzcowwAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1QuX2ZpZWxkc1gBAAAALXRyjTAAAFgTAAAAc2VsZWN0LmtldmVudC51ZGF0YXKOMAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LnVkYXRhWAEAAAAtdHKPMAAAWBYAAABkb2N0ZXN0LkRvY1Rlc3QubGluZW5vcpAwAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3QubGluZW5vWAEAAAAtdHKRMAAAWBAAAAB1dWlkLlVVSUQuZmllbGRzcpIwAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuZmllbGRzWAEAAAAtdHKTMAAAWCQAAABvcHRwYXJzZS5PcHRpb24uQUxXQVlTX1RZUEVEX0FDVElPTlNylDAAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uQUxXQVlTX1RZUEVEX0FDVElPTlNYAQAAAC10cpUwAABYLAAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50Qnl0ZUluZGV4cpYwAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ3VycmVudEJ5dGVJbmRleFgBAAAALXRylzAAAFgaAAAAcmV4ZWMuUkV4ZWMub2tfcG9zaXhfbmFtZXNymDAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5va19wb3NpeF9uYW1lc1gBAAAALXRymTAAAFgnAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIucmVwbGFjZV93aGl0ZXNwYWNlcpowAAAoanMFAABqdAUAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIucmVwbGFjZV93aGl0ZXNwYWNlWAEAAAAtdHKbMAAAWBMAAABtZW1vcnl2aWV3LnJlYWRvbmx5cpwwAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5yZWFkb25seVgBAAAALXRynTAAAFgeAAAAc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5kd0ZsYWdzcp4wAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmR3RmxhZ3NYAQAAAC10cp8wAABYGAAAAGRhdGV0aW1lLmRhdGUucmVzb2x1dGlvbnKgMAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUucmVzb2x1dGlvblgBAAAALXRyoTAAAFgUAAAAZG9jdGVzdC5FeGFtcGxlLndhbnRyojAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS53YW50WAEAAAAtdHKjMAAAWA4AAABhc3QuQVNULmxpbmVub3KkMAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNULmxpbmVub1gBAAAALXRypTAAAFgjAAAAeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5saW5lbm9ypjAAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3IubGluZW5vWAEAAAAtdHKnMAAAWBoAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmVycm9yc3KoMAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuZXJyb3JzWAEAAAAtdHKpMAAAWBIAAABjdHlwZXMuUHlETEwuX25hbWVyqjAAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlB5RExMLl9uYW1lWAEAAAAtdHKrMAAAWBwAAABodG1sbGliLkhUTUxQYXJzZXIuZm9ybWF0dGVycqwwAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZXIuZm9ybWF0dGVyWAEAAAAtdHKtMAAAWCoAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhdGhyrjAAAChqcwUAAGp0BQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhdGhYAQAAAC10cq8wAABYLAAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIudHJhY2ViYWNrX2xpbWl0crAwAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnRyYWNlYmFja19saW1pdFgBAAAALXRysTAAAFgXAAAAemlwZmlsZS5aaXBJbmZvLmNvbW1lbnRysjAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5jb21tZW50WAEAAAAtdHKzMAAAWBoAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmJ1ZmZlcnK0MAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYnVmZmVyWAEAAAAtdHK1MAAAWBQAAABkb2N0ZXN0LkRvY1Rlc3QubmFtZXK2MAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0Lm5hbWVYAQAAAC10crcwAABYHwAAAG9wdHBhcnNlLk9wdGlvbi5jYWxsYmFja19rd2FyZ3NyuDAAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uY2FsbGJhY2tfa3dhcmdzWAEAAAAtdHK5MAAAWBYAAABzc2wuU1NMQ29udGV4dC5vcHRpb25zcrowAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0Lm9wdGlvbnNYAQAAAC10crswAABYFwAAAG9wdHBhcnNlLk9wdGlvbi5kZWZhdWx0crwwAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmRlZmF1bHRYAQAAAC10cr0wAABYGAAAAGRhdGV0aW1lLmRhdGV0aW1lLm1pbnV0ZXK+MAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1pbnV0ZVgBAAAALXRyvzAAAFgdAAAAVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nLmRhdGFywDAAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyU3RyaW5nLk11dGFibGVTdHJpbmcuZGF0YVgBAAAALXRywTAAAFgVAAAAeG1sLmRvbS5Ob2RlLm5vZGVUeXBlcsIwAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubm9kZVR5cGVYAQAAAC10csMwAABYFQAAAHRhcmZpbGUuVGFySW5mby5nbmFtZXLEMAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmduYW1lWAEAAAAtdHLFMAAAWBAAAABpby5JT0Jhc2UuY2xvc2VkcsYwAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmNsb3NlZFgBAAAALXRyxzAAAFguAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX2RvbWFpbnLIMAAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfZG9tYWluWAEAAAAtdHLJMAAAWBkAAABzcWxpdGUzLkN1cnNvci5jb25uZWN0aW9ucsowAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5jb25uZWN0aW9uWAEAAAAtdHLLMAAAWBMAAAB6aXBmaWxlLlppcEluZm8uQ1JDcswwAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uQ1JDWAEAAAAtdHLNMAAAWA8AAAB1dWlkLlVVSUQuYnl0ZXNyzjAAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC5ieXRlc1gBAAAALXRyzzAAAFghAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGFnctAwAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnRhZ1gBAAAALXRy0TAAAFgLAAAAZmlsZS5lcnJvcnNy0jAAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmVycm9yc1gBAAAALXRy0zAAAFgaAAAAZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS5nb3Ry1DAAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdEZhaWx1cmUuZ290WAEAAAAtdHLVMAAAWBgAAABkYXRldGltZS5kYXRldGltZS50emluZm9y1jAAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50emluZm9YAQAAAC10ctcwAABYGAAAAGNvb2tpZWxpYi5Db29raWUudmVyc2lvbnLYMAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnZlcnNpb25YAQAAAC10ctkwAABYFwAAAHhtbC5kb20uRWxlbWVudC50YWdOYW1lctowAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQudGFnTmFtZVgBAAAALXRy2zAAAFgRAAAAcHljbGJyLkNsYXNzLm5hbWVy3DAAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLm5hbWVYAQAAAC10ct0wAABYGQAAAG11bHRpZmlsZS5NdWx0aUZpbGUubGV2ZWxy3jAAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5sZXZlbFgBAAAALXRy3zAAAFgYAAAAcmV4ZWMuUkV4ZWMub2tfc3lzX25hbWVzcuAwAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMub2tfc3lzX25hbWVzWAEAAAAtdHLhMAAAWBYAAABkYXRldGltZS50aW1lZGVsdGEubWF4cuIwAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhLm1heFgBAAAALXRy4zAAAFgaAAAAY3N2LkRpYWxlY3QubGluZXRlcm1pbmF0b3Jy5DAAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpYWxlY3QubGluZXRlcm1pbmF0b3JYAQAAAC10cuUwAABYGgAAAHRleHR3cmFwLlRleHRXcmFwcGVyLndpZHRocuYwAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIud2lkdGhYAQAAAC10cucwAABYEgAAAG9iamVjdC5fX21lbWJlcnNfX3LoMAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI29iamVjdC5fX21lbWJlcnNfX1gBAAAALXRy6TAAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLm10aW1lcuowAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8ubXRpbWVYAQAAAC10cuswAABYHAAAAGRhdGV0aW1lLmRhdGV0aW1lLnJlc29sdXRpb25y7DAAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5yZXNvbHV0aW9uWAEAAAAtdHLtMAAAWB4AAABtaW1ldHlwZXMuTWltZVR5cGVzLnN1ZmZpeF9tYXBy7jAAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5zdWZmaXhfbWFwWAEAAAAtdHLvMAAAWBQAAABjdHlwZXMuUHlETEwuX2hhbmRsZXLwMAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUHlETEwuX2hhbmRsZVgBAAAALXRy8TAAAFgdAAAAemlwZmlsZS5aaXBJbmZvLmNvbXByZXNzX3NpemVy8jAAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5jb21wcmVzc19zaXplWAEAAAAtdHLzMAAAWDcAAABTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIucnBjX3BhdGhzcvQwAAAoanMFAABqdAUAAFhxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5ycGNfcGF0aHNYAQAAAC10cvUwAABYFgAAAGRhdGV0aW1lLmRhdGV0aW1lLmhvdXJy9jAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5ob3VyWAEAAAAtdHL3MAAAWC4AAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVycvgwAAAoanMFAABqdAUAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVyWAEAAAAtdHL5MAAAWBgAAABzcWxpdGUzLkN1cnNvci5sYXN0cm93aWRy+jAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmxhc3Ryb3dpZFgBAAAALXRy+zAAAFgbAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5za2lwcGVkcvwwAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5za2lwcGVkWAEAAAAtdHL9MAAAWBUAAAB4bWwuZG9tLk5vZGUubm9kZU5hbWVy/jAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5ub2RlTmFtZVgBAAAALXRy/zAAAFgdAAAAZGF0ZXRpbWUuZGF0ZXRpbWUubWljcm9zZWNvbmRyADEAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5taWNyb3NlY29uZFgBAAAALXRyATEAAFgVAAAAY29va2llbGliLkNvb2tpZS5wYXRocgIxAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUucGF0aFgBAAAALXRyAzEAAFgqAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIucmVxdWVzdF9xdWV1ZV9zaXplcgQxAAAoanMFAABqdAUAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLnJlcXVlc3RfcXVldWVfc2l6ZVgBAAAALXRyBTEAAFgNAAAAY21kLkNtZC5pbnRyb3IGMQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmludHJvWAEAAAAtdHIHMQAAWBQAAAB0YXJmaWxlLlRhckluZm8uc2l6ZXIIMQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnNpemVYAQAAAC10cgkxAABYHAAAAGNzdi5EaWFsZWN0LnNraXBpbml0aWFsc3BhY2VyCjEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZVgBAAAALXRyCzEAAFgYAAAAY29va2llbGliLkNvb2tpZS5jb21tZW50cgwxAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuY29tbWVudFgBAAAALXRyDTEAAFgYAAAAY29va2llbGliLkNvb2tpZS5yZmMyMTA5cg4xAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUucmZjMjEwOVgBAAAALXRyDzEAAFgUAAAAc29ja2V0LnNvY2tldC5mYW1pbHlyEDEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5mYW1pbHlYAQAAAC10chExAABYHQAAAHppcGZpbGUuWmlwSW5mby5jb21wcmVzc190eXBlchIxAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY29tcHJlc3NfdHlwZVgBAAAALXRyEzEAAFg5AAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X3JmYzI5NjVfdW52ZXJpZmlhYmxlchQxAAAoanMFAABqdAUAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9yZmMyOTY1X3VudmVyaWZpYWJsZVgBAAAALXRyFTEAAFgXAAAAdXJsbGliMi5VUkxFcnJvci5yZWFzb25yFjEAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuVVJMRXJyb3IucmVhc29uWAEAAAAtdHIXMQAAWBEAAABweWNsYnIuQ2xhc3MuZmlsZXIYMQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MuZmlsZVgBAAAALXRyGTEAAFgYAAAAemlwZmlsZS5aaXBJbmZvLmZpbGVuYW1lchoxAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZmlsZW5hbWVYAQAAAC10chsxAABYEgAAAHJlcHIuUmVwci5tYXhsZXZlbHIcMQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGxldmVsWAEAAAAtdHIdMQAAWBkAAAB1bml0dGVzdC5UZXN0Q2FzZS5tYXhEaWZmch4xAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UubWF4RGlmZlgBAAAALXRyHzEAAFgWAAAAZGF0ZXRpbWUuZGF0ZXRpbWUueWVhcnIgMQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnllYXJYAQAAAC10ciExAABYGAAAAGNvb2tpZWxpYi5Db29raWUuZGlzY2FyZHIiMQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmRpc2NhcmRYAQAAAC10ciMxAABYLAAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuc2VydmVyX3NvZnR3YXJlciQxAAAoanMFAABqdAUAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNlcnZlcl9zb2Z0d2FyZVgBAAAALXRyJTEAAFgeAAAAc3FsaXRlMy5Db25uZWN0aW9uLnJvd19mYWN0b3J5ciYxAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24ucm93X2ZhY3RvcnlYAQAAAC10cicxAABYHAAAAG51bWJlcnMuUmF0aW9uYWwuZGVub21pbmF0b3JyKDEAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuUmF0aW9uYWwuZGVub21pbmF0b3JYAQAAAC10cikxAABYKQAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuaHR0cF92ZXJzaW9ucioxAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmh0dHBfdmVyc2lvblgBAAAALXRyKzEAAFgRAAAAdXVpZC5VVUlELnZhcmlhbnRyLDEAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC52YXJpYW50WAEAAAAtdHItMQAAWC8AAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnJlc3BvbnNlc3IuMQAAKGpzBQAAanQFAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmVzcG9uc2VzWAEAAAAtdHIvMQAAWBMAAABzZWxlY3Qua2V2ZW50LmZsYWdzcjAxAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rZXZlbnQuZmxhZ3NYAQAAAC10cjExAABYHgAAAGV4Y2VwdGlvbnMuVW5pY29kZUVycm9yLm9iamVjdHIyMQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3Iub2JqZWN0WAEAAAAtdHIzMQAAWBIAAABzaGxleC5zaGxleC5xdW90ZXNyNDEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5xdW90ZXNYAQAAAC10cjUxAABYHAAAAGNvb2tpZWxpYi5Db29raWUuY29tbWVudF91cmxyNjEAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5jb21tZW50X3VybFgBAAAALXRyNzEAAFgRAAAAcmVwci5SZXByLm1heGxpc3RyODEAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhsaXN0WAEAAAAtdHI5MQAAWCAAAABtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5leGl0Y29kZXI6MQAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5leGl0Y29kZVgBAAAALXRyOzEAAFggAAAAZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3IuZW5jb2RpbmdyPDEAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVW5pY29kZUVycm9yLmVuY29kaW5nWAEAAAAtdHI9MQAAWCAAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5leHBhbmRfdGFic3I+MQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmV4cGFuZF90YWJzWAEAAAAtdHI/MQAAWBgAAABkb2N0ZXN0LkRvY1Rlc3QuZXhhbXBsZXNyQDEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5leGFtcGxlc1gBAAAALXRyQTEAAFgcAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MubmFtZXJCMQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5uYW1lWAEAAAAtdHJDMQAAWBsAAABodHRwbGliLkhUVFBSZXNwb25zZS5yZWFzb25yRDEAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLnJlYXNvblgBAAAALXRyRTEAAFgUAAAAcHljbGJyLkZ1bmN0aW9uLm5hbWVyRjEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLm5hbWVYAQAAAC10ckcxAABYJwAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3JfYm9keXJIMQAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9ib2R5WAEAAAAtdHJJMQAAWBQAAABhcnJheS5hcnJheS5pdGVtc2l6ZXJKMQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5Lml0ZW1zaXplWAEAAAAtdHJLMQAAWBgAAABzdHJpbmcuVGVtcGxhdGUudGVtcGxhdGVyTDEAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLlRlbXBsYXRlLnRlbXBsYXRlWAEAAAAtdHJNMQAAWBcAAABjdHlwZXMuU3RydWN0dXJlLl9wYWNrX3JOMQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJlLl9wYWNrX1gBAAAALXRyTzEAAFgUAAAAY21kLkNtZC51c2VfcmF3aW5wdXRyUDEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC51c2VfcmF3aW5wdXRYAQAAAC10clExAABYJAAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5vdXRwdXRfY2hhcnNldHJSMQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0Lm91dHB1dF9jaGFyc2V0WAEAAAAtdHJTMQAAWBEAAAB4bWwuZG9tLlRleHQuZGF0YXJUMQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5UZXh0LmRhdGFYAQAAAC10clUxAABYDQAAAHV1aWQuVVVJRC5oZXhyVjEAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC5oZXhYAQAAAC10clcxAABYFwAAAGRhdGV0aW1lLmRhdGV0aW1lLm1vbnRoclgxAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubW9udGhYAQAAAC10clkxAABYHQAAAGV4Y2VwdGlvbnMuQmFzZUV4Y2VwdGlvbi5hcmdzcloxAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkJhc2VFeGNlcHRpb24uYXJnc1gBAAAALXRyWzEAAFgbAAAAc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlclwxAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGVYAQAAAC10cl0xAABYIgAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5pc29sYXRpb25fbGV2ZWxyXjEAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5pc29sYXRpb25fbGV2ZWxYAQAAAC10cl8xAABYGwAAAGZpbGVjbXAuZGlyY21wLmNvbW1vbl9mdW5ueXJgMQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuY29tbW9uX2Z1bm55WAEAAAAtdHJhMQAAWBcAAABzdWJwcm9jZXNzLlBvcGVuLnN0ZG91dHJiMQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5zdGRvdXRYAQAAAC10cmMxAABYEwAAAHRhcmZpbGUuVGFySW5mby51aWRyZDEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby51aWRYAQAAAC10cmUxAABYFwAAAHJmYzgyMi5NZXNzYWdlLnVuaXhmcm9tcmYxAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLnVuaXhmcm9tWAEAAAAtdHJnMQAAWBYAAABkb2N0ZXN0LkV4YW1wbGUuaW5kZW50cmgxAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGUuaW5kZW50WAEAAAAtdHJpMQAAWC0AAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmNvbW1hbmRyajEAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmNvbW1hbmRYAQAAAC10cmsxAABYGAAAAGN0eXBlcy5fUG9pbnRlci5jb250ZW50c3JsMQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1BvaW50ZXIuY29udGVudHNYAQAAAC10cm0xAABYFAAAAHJlLlJlZ2V4T2JqZWN0LmZsYWdzcm4xAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3QuZmxhZ3NYAQAAAC10cm8xAABYLgAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9tdWx0aXByb2Nlc3NycDEAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9tdWx0aXByb2Nlc3NYAQAAAC10cnExAABYHgAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc2hvdWxkU3RvcHJyMQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc2hvdWxkU3RvcFgBAAAALXRyczEAAFgRAAAAeG1sLmRvbS5BdHRyLm5hbWVydDEAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uQXR0ci5uYW1lWAEAAAAtdHJ1MQAAWBkAAABkYXRldGltZS50aW1lLm1pY3Jvc2Vjb25kcnYxAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5taWNyb3NlY29uZFgBAAAALXRydzEAAFgUAAAAZGF0ZXRpbWUudGltZS5zZWNvbmRyeDEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnNlY29uZFgBAAAALXRyeTEAAFgWAAAAY3R5cGVzLl9DRGF0YS5fb2JqZWN0c3J6MQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLl9vYmplY3RzWAEAAAAtdHJ7MQAAWBIAAABzaGxleC5zaGxleC5zb3VyY2VyfDEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5zb3VyY2VYAQAAAC10cn0xAABYEgAAAGNtZC5DbWQuZG9jX2hlYWRlcnJ+MQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmRvY19oZWFkZXJYAQAAAC10cn8xAABYHQAAAHppcGZpbGUuWmlwSW5mby5pbnRlcm5hbF9hdHRycoAxAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uaW50ZXJuYWxfYXR0clgBAAAALXRygTEAAFgTAAAAeG1sLmRvbS5Ob2RlLnByZWZpeHKCMQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLnByZWZpeFgBAAAALXRygzEAAFgZAAAAeG1sLmRvbS5Eb2N1bWVudFR5cGUubmFtZXKEMQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUubmFtZVgBAAAALXRyhTEAAFgWAAAAcHljbGJyLkZ1bmN0aW9uLm1vZHVsZXKGMQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuRnVuY3Rpb24ubW9kdWxlWAEAAAAtdHKHMQAAWBgAAABjc3YuY3N2cmVhZGVyLmZpZWxkbmFtZXNyiDEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmNzdnJlYWRlci5maWVsZG5hbWVzWAEAAAAtdHKJMQAAWCUAAABpby5CbG9ja2luZ0lPRXJyb3IuY2hhcmFjdGVyc193cml0dGVucooxAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQmxvY2tpbmdJT0Vycm9yLmNoYXJhY3RlcnNfd3JpdHRlblgBAAAALXRyizEAAFgWAAAAcmUuUmVnZXhPYmplY3QucGF0dGVybnKMMQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnBhdHRlcm5YAQAAAC10co0xAABYJAAAAHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLm91dHB1dHKOMQAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3Iub3V0cHV0WAEAAAAtdHKPMQAAWBYAAAB0aHJlYWRpbmcuVGhyZWFkLmlkZW50cpAxAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaWRlbnRYAQAAAC10cpExAABYFAAAAHB5Y2xici5DbGFzcy5tZXRob2RzcpIxAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5tZXRob2RzWAEAAAAtdHKTMQAAWBkAAAB4bWwuZG9tLk5vZGUubmFtZXNwYWNlVVJJcpQxAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubmFtZXNwYWNlVVJJWAEAAAAtdHKVMQAAWBMAAABpbWFwbGliLklNQVA0LmRlYnVncpYxAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmRlYnVnWAEAAAAtdHKXMQAAWBIAAABzaGxleC5zaGxleC5pbmZpbGVymDEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5pbmZpbGVYAQAAAC10cpkxAABYGAAAAGZpbGVjbXAuZGlyY21wLmxlZnRfbGlzdHKaMQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAubGVmdF9saXN0WAEAAAAtdHKbMQAAWBoAAABmaWxlY21wLmRpcmNtcC5jb21tb25fZGlyc3KcMQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuY29tbW9uX2RpcnNYAQAAAC10cp0xAABYFAAAAHNzbC5TU0xFcnJvci5saWJyYXJ5cp4xAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xFcnJvci5saWJyYXJ5WAEAAAAtdHKfMQAAWBYAAAB6aXBmaWxlLlppcEluZm8udm9sdW1lcqAxAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8udm9sdW1lWAEAAAAtdHKhMQAAWBEAAABkYXRldGltZS50aW1lLm1heHKiMQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUubWF4WAEAAAAtdHKjMQAAWBYAAABjc3YuY3N2cmVhZGVyLmxpbmVfbnVtcqQxAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3ZyZWFkZXIubGluZV9udW1YAQAAAC10cqUxAABYMgAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuTWVzc2FnZUNsYXNzcqYxAAAoanMFAABqdAUAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3NYAQAAAC10cqcxAABYFAAAAGlvLlRleHRJT0Jhc2UuZXJyb3JzcqgxAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5lcnJvcnNYAQAAAC10cqkxAABYEgAAAHNobGV4LnNobGV4LmxpbmVub3KqMQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LmxpbmVub1gBAAAALXRyqzEAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9oZWFkZXJzcqwxAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX2hlYWRlcnNYAQAAAC10cq0xAABYFwAAAHhtbC5kb20uTm9kZS5wYXJlbnROb2Rlcq4xAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucGFyZW50Tm9kZVgBAAAALXRyrzEAAFgUAAAAb3B0cGFyc2UuT3B0aW9uLnR5cGVysDEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24udHlwZVgBAAAALXRysTEAAFgsAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLmFkZHJlc3NysjEAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLmFkZHJlc3NYAQAAAC10crMxAABYEQAAAG5ldHJjLm5ldHJjLmhvc3RzcrQxAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMuaG9zdHNYAQAAAC10crUxAABYOAAAAFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmV4dGVuc2lvbnNfbWFwcrYxAAAoanMFAABqdAUAAFhwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZWh0dHBzZXJ2ZXIuaHRtbCNTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5leHRlbnNpb25zX21hcFgBAAAALXRytzEAAFgjAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTJyuDEAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTJYAQAAAC10crkxAABYKAAAAHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLnJldHVybmNvZGVyujEAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLnJldHVybmNvZGVYAQAAAC10crsxAABYFQAAAGNzdi5EaWFsZWN0LnF1b3RlY2hhcnK8MQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5xdW90ZWNoYXJYAQAAAC10cr0xAABYGAAAAGh0dHBsaWIuSFRUUFJlc3BvbnNlLm1zZ3K+MQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQUmVzcG9uc2UubXNnWAEAAAAtdHK/MQAAWBcAAAB6aXBmaWxlLlppcEZpbGUuY29tbWVudHLAMQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmNvbW1lbnRYAQAAAC10csExAABYFAAAAGRhdGV0aW1lLnRpbWUudHppbmZvcsIxAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS50emluZm9YAQAAAC10csMxAABYFQAAAGRhdGV0aW1lLmRhdGV0aW1lLm1pbnLEMQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1pblgBAAAALXRyxTEAAFgWAAAAeG1sLmRvbS5Ob2RlLmxhc3RDaGlsZHLGMQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmxhc3RDaGlsZFgBAAAALXRyxzEAAFgrAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuUmVxdWVzdEhhbmRsZXJDbGFzc3LIMQAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5SZXF1ZXN0SGFuZGxlckNsYXNzWAEAAAAtdHLJMQAAWBEAAAByZXByLlJlcHIubWF4bG9uZ3LKMQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGxvbmdYAQAAAC10cssxAABYHgAAAGRvY3Rlc3QuRG9jVGVzdEZhaWx1cmUuZXhhbXBsZXLMMQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS5leGFtcGxlWAEAAAAtdHLNMQAAWBUAAABjb29raWVsaWIuQ29va2llLnBvcnRyzjEAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5wb3J0WAEAAAAtdHLPMQAAWCEAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaW5wdXRfY29kZWNy0DEAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jb2RlY1gBAAAALXRy0TEAAFg0AAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3VudmVyaWZpYWJsZXLSMQAAKGpzBQAAanQFAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfdW52ZXJpZmlhYmxlWAEAAAAtdHLTMQAAWBcAAABzcWxpdGUzLkN1cnNvci5yb3djb3VudHLUMQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3Iucm93Y291bnRYAQAAAC10ctUxAABYFQAAAGRhdGV0aW1lLmRhdGV0aW1lLmRheXLWMQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmRheVgBAAAALXRy1zEAAFgWAAAAc3VicHJvY2Vzcy5Qb3Blbi5zdGRpbnLYMQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5zdGRpblgBAAAALXRy2TEAAFgXAAAAeG1sLmRvbS5Ob2RlLmZpcnN0Q2hpbGRy2jEAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5maXJzdENoaWxkWAEAAAAtdHLbMQAAWBkAAABkb2N0ZXN0LkRvY1Rlc3QuZG9jc3RyaW5nctwxAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3QuZG9jc3RyaW5nWAEAAAAtdHLdMQAAWDEAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5yZmMyMTA5X2FzX25ldHNjYXBlct4xAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnJmYzIxMDlfYXNfbmV0c2NhcGVYAQAAAC10ct8xAABYGQAAAGN0eXBlcy5TdHJ1Y3R1cmUuX2ZpZWxkc19y4DEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlN0cnVjdHVyZS5fZmllbGRzX1gBAAAALXRy4TEAAFgUAAAAc3RydWN0LlN0cnVjdC5mb3JtYXRy4jEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC5mb3JtYXRYAQAAAC10cuMxAABYFwAAAHN1YnByb2Nlc3MuUG9wZW4uc3RkZXJycuQxAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnN0ZGVyclgBAAAALXRy5TEAAFglAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfb25faHlwaGVuc3LmMQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmJyZWFrX29uX2h5cGhlbnNYAQAAAC10cucxAABYMQAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmxhc3RfYWNjZXB0ZWRy6DEAAChqcwUAAGp0BQAAWGgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIubGFzdF9hY2NlcHRlZFgBAAAALXRy6TEAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuYWRkcmVzc19mYW1pbHly6jEAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuYWRkcmVzc19mYW1pbHlYAQAAAC10cusxAABYHQAAAHhtbC5kb20uRG9jdW1lbnRUeXBlLmVudGl0aWVzcuwxAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50VHlwZS5lbnRpdGllc1gBAAAALXRy7TEAAFgrAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci53ZmlsZXLuMQAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIud2ZpbGVYAQAAAC10cu8xAABYGgAAAGZ1bmN0b29scy5wYXJ0aWFsLmtleXdvcmRzcvAxAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5wYXJ0aWFsLmtleXdvcmRzWAEAAAAtdHLxMQAAWBwAAABvcHRwYXJzZS5PcHRpb24uVFlQRV9DSEVDS0VScvIxAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLlRZUEVfQ0hFQ0tFUlgBAAAALXRy8zEAAFgfAAAAemlwZmlsZS5aaXBJbmZvLmV4dHJhY3RfdmVyc2lvbnL0MQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmV4dHJhY3RfdmVyc2lvblgBAAAALXRy9TEAAFgZAAAAcmUuUmVnZXhPYmplY3QuZ3JvdXBpbmRleHL2MQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0Lmdyb3VwaW5kZXhYAQAAAC10cvcxAABYGQAAAGZpbGVjbXAuZGlyY21wLmRpZmZfZmlsZXNy+DEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmRpZmZfZmlsZXNYAQAAAC10cvkxAABYFgAAAGZ1bmN0b29scy5wYXJ0aWFsLmFyZ3Ny+jEAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnBhcnRpYWwuYXJnc1gBAAAALXRy+zEAAFgUAAAAYXJyYXkuYXJyYXkudHlwZWNvZGVy/DEAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS50eXBlY29kZVgBAAAALXRy/TEAAFgiAAAAY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5zdHJpcHNwYWNlc3L+MQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LnN0cmlwc3BhY2VzWAEAAAAtdHL/MQAAWBsAAAB0YXJmaWxlLlRhckZpbGUucGF4X2hlYWRlcnNyADIAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5wYXhfaGVhZGVyc1gBAAAALXRyATIAAFgVAAAAaW8uQnVmZmVyZWRJT0Jhc2UucmF3cgIyAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2UucmF3WAEAAAAtdHIDMgAAWCMAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRfdHlwZXIEMgAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRfdHlwZVgBAAAALXRyBTIAAFgWAAAAY3R5cGVzLl9Qb2ludGVyLl90eXBlX3IGMgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1BvaW50ZXIuX3R5cGVfWAEAAAAtdHIHMgAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLmxhc3RyCDIAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5sYXN0WAEAAAAtdHIJMgAAWBgAAABkb2N0ZXN0LkRvY1Rlc3QuZmlsZW5hbWVyCjIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5maWxlbmFtZVgBAAAALXRyCzIAAFgTAAAAcmVwci5SZXByLm1heHN0cmluZ3IMMgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heHN0cmluZ1gBAAAALXRyDTIAAFgiAAAAc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy53U2hvd1dpbmRvd3IOMgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy53U2hvd1dpbmRvd1gBAAAALXRyDzIAAFglAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQ29kZXIQMgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQ29kZVgBAAAALXRyETIAAFgUAAAAaW8uVGV4dElPQmFzZS5idWZmZXJyEjIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLmJ1ZmZlclgBAAAALXRyEzIAAFgJAAAAZmlsZS5tb2RlchQyAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5tb2RlWAEAAAAtdHIVMgAAWDMAAABDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXNyFjIAAChqcwUAAGp0BQAAWGgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpaHR0cHNlcnZlci5odG1sI0NHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLmNnaV9kaXJlY3Rvcmllc1gBAAAALXRyFzIAAFgTAAAAbWVtb3J5dmlldy5pdGVtc2l6ZXIYMgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuaXRlbXNpemVYAQAAAC10chkyAABYEgAAAHJlLk1hdGNoT2JqZWN0LnBvc3IaMgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LnBvc1gBAAAALXRyGzIAAFgVAAAAY3R5cGVzLkFycmF5Ll9sZW5ndGhfchwyAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5BcnJheS5fbGVuZ3RoX1gBAAAALXRyHTIAAFgVAAAAb3B0cGFyc2UuT3B0aW9uLmNvbnN0ch4yAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNvbnN0WAEAAAAtdHIfMgAAWCsAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JMaW5lTnVtYmVyciAyAAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JMaW5lTnVtYmVyWAEAAAAtdHIhMgAAWBEAAABtZW1vcnl2aWV3LmZvcm1hdHIiMgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuZm9ybWF0WAEAAAAtdHIjMgAAWBcAAAB4bWwuZG9tLk5vZGVMaXN0Lmxlbmd0aHIkMgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlTGlzdC5sZW5ndGhYAQAAAC10ciUyAABYEgAAAGRhdGV0aW1lLnRpbWUuaG91cnImMgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuaG91clgBAAAALXRyJzIAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5vcmlnaW5fc2VydmVycigyAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLm9yaWdpbl9zZXJ2ZXJYAQAAAC10cikyAABYGwAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcHIqMgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wWAEAAAAtdHIrMgAAWBcAAAB0aHJlYWRpbmcuVGhyZWFkLmRhZW1vbnIsMgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLmRhZW1vblgBAAAALXRyLTIAAFgYAAAAemlwZmlsZS5aaXBJbmZvLnJlc2VydmVkci4yAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8ucmVzZXJ2ZWRYAQAAAC10ci8yAABYHQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5kZWZlY3RzcjAyAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVmZWN0c1gBAAAALXRyMTIAAFgTAAAAZGVmaW5pdGlvbi5fX25hbWVfX3IyMgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RlZmluaXRpb24uX19uYW1lX19YAQAAAC10cjMyAABYEQAAAHV1aWQuVVVJRC52ZXJzaW9ucjQyAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQudmVyc2lvblgBAAAALXRyNTIAAFgVAAAAY3N2LmNzdndyaXRlci5kaWFsZWN0cjYyAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIuZGlhbGVjdFgBAAAALXRyNzIAAFgZAAAAemlwZmlsZS5aaXBJbmZvLmRhdGVfdGltZXI4MgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmRhdGVfdGltZVgBAAAALXRyOTIAAFgSAAAAaW5zdGFuY2UuX19jbGFzc19fcjoyAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjaW5zdGFuY2UuX19jbGFzc19fWAEAAAAtdHI7MgAAWA8AAABjbGFzcy5fX2Jhc2VzX19yPDIAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjbGFzcy5fX2Jhc2VzX19YAQAAAC10cj0yAABYEgAAAGNtZC5DbWQuaWRlbnRjaGFyc3I+MgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmlkZW50Y2hhcnNYAQAAAC10cj8yAABYFQAAAHRhcmZpbGUuVGFyRmlsZS5wb3NpeHJAMgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLnBvc2l4WAEAAAAtdHJBMgAAWCEAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm1vZGVyQjIAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm1vZGVYAQAAAC10ckMyAABYIwAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuY2xvc2VkckQyAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5jbG9zZWRYAQAAAC10ckUyAABYIQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubmFtZXJGMgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubmFtZVgBAAAALXRyRzIAAFgwAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3NldF9wYXRockgyAAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19zZXRfcGF0aFgBAAAALXRySTIAAFgpAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9zdGF0dXNySjIAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3Jfc3RhdHVzWAEAAAAtdHJLMgAAWBoAAABzcWxpdGUzLkN1cnNvci5kZXNjcmlwdGlvbnJMMgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZGVzY3JpcHRpb25YAQAAAC10ck0yAABYHQAAAG9wdHBhcnNlLk9wdGlvbi5UWVBFRF9BQ1RJT05Tck4yAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLlRZUEVEX0FDVElPTlNYAQAAAC10ck8yAABYFQAAAHppcGZpbGUuWmlwRmlsZS5kZWJ1Z3JQMgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmRlYnVnWAEAAAAtdHJRMgAAWBoAAABmdHBsaWIuRlRQX1RMUy5zc2xfdmVyc2lvbnJSMgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5zc2xfdmVyc2lvblgBAAAALXRyUzIAAFgVAAAAY29va2llbGliLkNvb2tpZS5uYW1lclQyAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUubmFtZVgBAAAALXRyVTIAAFgeAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIuY3VydmFsclYyAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIuY3VydmFsWAEAAAAtdHJXMgAAWBQAAABvcHRwYXJzZS5PcHRpb24uaGVscHJYMgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5oZWxwWAEAAAAtdHJZMgAAWCcAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3VzZWRyWjIAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfdXNlZFgBAAAALXRyWzIAAFgfAAAAaW8uVGV4dElPV3JhcHBlci5saW5lX2J1ZmZlcmluZ3JcMgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT1dyYXBwZXIubGluZV9idWZmZXJpbmdYAQAAAC10cl0yAABYFwAAAG9wdHBhcnNlLk9wdGlvbi5jaG9pY2Vzcl4yAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNob2ljZXNYAQAAAC10cl8yAABYHwAAAFNjcm9sbGVkVGV4dC5TY3JvbGxlZFRleHQuZnJhbWVyYDIAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2Nyb2xsZWR0ZXh0Lmh0bWwjU2Nyb2xsZWRUZXh0LlNjcm9sbGVkVGV4dC5mcmFtZVgBAAAALXRyYTIAAFgeAAAAZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3IucmVhc29ucmIyAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVFcnJvci5yZWFzb25YAQAAAC10cmMyAABYGAAAAHJlLk1hdGNoT2JqZWN0Lmxhc3Rncm91cHJkMgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0Lmxhc3Rncm91cFgBAAAALXRyZTIAAFgbAAAAeG1scnBjbGliLkZhdWx0LmZhdWx0U3RyaW5ncmYyAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5GYXVsdC5mYXVsdFN0cmluZ1gBAAAALXRyZzIAAFgVAAAAeG1scnBjbGliLkJpbmFyeS5kYXRhcmgyAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5CaW5hcnkuZGF0YVgBAAAALXRyaTIAAFgVAAAAY3N2LkRpYWxlY3QuZGVsaW1pdGVycmoyAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRlbGltaXRlclgBAAAALXRyazIAAFgtAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVycmwyAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ3VycmVudExpbmVOdW1iZXJYAQAAAC10cm0yAABYDQAAAGNsYXNzLl9fbXJvX19ybjIAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjbGFzcy5fX21yb19fWAEAAAAtdHJvMgAAWCQAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5hdHRyaWJycDIAAChqcwUAAGp0BQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuYXR0cmliWAEAAAAtdHJxMgAAWB4AAABtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5kYWVtb25ycjIAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuZGFlbW9uWAEAAAAtdHJzMgAAWBQAAAB0YXJmaWxlLlRhckluZm8ubW9kZXJ0MgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLm1vZGVYAQAAAC10cnUyAABYFgAAAHhtbC5kb20uTm9kZS5ub2RlVmFsdWVydjIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5ub2RlVmFsdWVYAQAAAC10cncyAABYEwAAAHB5Y2xici5DbGFzcy5saW5lbm9yeDIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLmxpbmVub1gBAAAALXRyeTIAAFgSAAAAcHljbGJyLkNsYXNzLnN1cGVycnoyAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5zdXBlclgBAAAALXRyezIAAFgXAAAAc3NsLlNTTENvbnRleHQucHJvdG9jb2xyfDIAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQucHJvdG9jb2xYAQAAAC10cn0yAABYJAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc3J+MgAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1gBAAAALXRyfzIAAFgiAAAAZGlzdHV0aWxzLmNtZC5Db21tYW5kLnN1Yl9jb21tYW5kc3KAMgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jbWQuQ29tbWFuZC5zdWJfY29tbWFuZHNYAQAAAC10coEyAABYHAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuZmFpbHVyZXNygjIAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWx1cmVzWAEAAAAtdHKDMgAAWBgAAABsb2dnaW5nLkxvZ2dlci5wcm9wYWdhdGVyhDIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLnByb3BhZ2F0ZVgBAAAALXRyhTIAAFgcAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC50ZXN0c1J1bnKGMgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQudGVzdHNSdW5YAQAAAC10cocyAABYHgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5hZGRyZXNzbGlzdHKIMgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuQWRkcmVzc0xpc3QuYWRkcmVzc2xpc3RYAQAAAC10cokyAABYFQAAAHJlLlJlZ2V4T2JqZWN0Lmdyb3Vwc3KKMgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0Lmdyb3Vwc1gBAAAALXRyizIAAFgVAAAAc3NsLlNTTFNvY2tldC5jb250ZXh0cowyAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuY29udGV4dFgBAAAALXRyjTIAAFgWAAAAZnVuY3Rvb2xzLnBhcnRpYWwuZnVuY3KOMgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMucGFydGlhbC5mdW5jWAEAAAAtdHKPMgAAWDYAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnByb3RvY29sX3ZlcnNpb25ykDIAAChqcwUAAGp0BQAAWGwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnByb3RvY29sX3ZlcnNpb25YAQAAAC10cpEyAABYEgAAAHJlcHIuUmVwci5tYXh0dXBsZXKSMgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heHR1cGxlWAEAAAAtdHKTMgAAWB4AAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRylDIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc29ja2V0WAEAAAAtdHKVMgAAWBwAAABzaGxleC5zaGxleC53aGl0ZXNwYWNlX3NwbGl0cpYyAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXgud2hpdGVzcGFjZV9zcGxpdFgBAAAALXRylzIAAFgcAAAAeG1sLmRvbS5Ob2RlLnByZXZpb3VzU2libGluZ3KYMgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLnByZXZpb3VzU2libGluZ1gBAAAALXRymTIAAFgbAAAAeG1scnBjbGliLlByb3RvY29sRXJyb3IudXJscpoyAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5Qcm90b2NvbEVycm9yLnVybFgBAAAALXRymzIAAFgXAAAAeG1sLmRvbS5Ob2RlLmF0dHJpYnV0ZXNynDIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5hdHRyaWJ1dGVzWAEAAAAtdHKdMgAAWDgAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmVycm9yX2NvbnRlbnRfdHlwZXKeMgAAKGpzBQAAanQFAABYbgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfY29udGVudF90eXBlWAEAAAAtdHKfMgAAWB4AAABTY3JvbGxlZFRleHQuU2Nyb2xsZWRUZXh0LnZiYXJyoDIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2Nyb2xsZWR0ZXh0Lmh0bWwjU2Nyb2xsZWRUZXh0LlNjcm9sbGVkVGV4dC52YmFyWAEAAAAtdHKhMgAAWA8AAABvYmplY3QuX19kaWN0X19yojIAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNvYmplY3QuX19kaWN0X19YAQAAAC10cqMyAABYHgAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIuc3VpdGVDbGFzc3KkMgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuc3VpdGVDbGFzc1gBAAAALXRypTIAAFgjAAAAeG1sLmRvbS5Eb2N1bWVudFR5cGUuaW50ZXJuYWxTdWJzZXRypjIAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLmludGVybmFsU3Vic2V0WAEAAAAtdHKnMgAAdVgHAAAAcHk6ZGF0YXKoMgAAfXKpMgAAKFgZAAAAaHRtbGVudGl0eWRlZnMuZW50aXR5ZGVmc3KqMgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGVudGl0eWRlZnMuZW50aXR5ZGVmc1gBAAAALXRyqzIAAFgbAAAAdW5pY29kZWRhdGEudW5pZGF0YV92ZXJzaW9ucqwyAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEudW5pZGF0YV92ZXJzaW9uWAEAAAAtdHKtMgAAWA8AAABtYXJzaGFsLnZlcnNpb25yrjIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwudmVyc2lvblgBAAAALXRyrzIAAFgLAAAAb3MuT19ESVJFQ1RysDIAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0RJUkVDVFgBAAAALXRysTIAAFgNAAAAc3RyaW5nLmRpZ2l0c3KyMgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuZGlnaXRzWAEAAAAtdHKzMgAAWBYAAAB0YXJmaWxlLkRFRkFVTFRfRk9STUFUcrQyAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkRFRkFVTFRfRk9STUFUWAEAAAAtdHK1MgAAWBoAAAB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcnK2MgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyWAEAAAAtdHK3MgAAWBkAAABfd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UcrgyAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UWAEAAAAtdHK5MgAAWBcAAAB0eXBlcy5CdWlsdGluTWV0aG9kVHlwZXK6MgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJ1aWx0aW5NZXRob2RUeXBlWAEAAAAtdHK7MgAAWBIAAAB3ZWFrcmVmLlByb3h5VHlwZXNyvDIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuUHJveHlUeXBlc1gBAAAALXRyvTIAAFgTAAAAc3NsLlBST1RPQ09MX1NTTHYyM3K+MgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfU1NMdjIzWAEAAAAtdHK/MgAAWBEAAABtYWNvc3Rvb2xzLkJVRlNJWnLAMgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbWFjb3N0b29scy5CVUZTSVpYAQAAAC10csEyAABYDAAAAE1FVEhfT0xEQVJHU3LCMgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfT0xEQVJHU1gBAAAALXRywzIAAFgaAAAAUHlfVFBGTEFHU19IQVZFX0lOUExBQ0VPUFNyxDIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0hBVkVfSU5QTEFDRU9QU1gBAAAALXRyxTIAAFgOAAAAc3RhdHZmcy5GX0ZMQUdyxjIAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9GTEFHWAEAAAAtdHLHMgAAWBMAAAB0eXBlcy5UcmFjZWJhY2tUeXBlcsgyAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuVHJhY2ViYWNrVHlwZVgBAAAALXRyyTIAAFgSAAAAdXVpZC5OQU1FU1BBQ0VfRE5TcsoyAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9ETlNYAQAAAC10cssyAABYEAAAAGRvY3Rlc3QuRUxMSVBTSVNyzDIAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRUxMSVBTSVNYAQAAAC10cs0yAABYEwAAAHJlc291cmNlLlJMSU1JVF9DUFVyzjIAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfQ1BVWAEAAAAtdHLPMgAAWA8AAABlcnJuby5FREVBRExPQ0ty0DIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FREVBRExPQ0tYAQAAAC10ctEyAABYGQAAAHRlc3Quc3VwcG9ydC5oYXZlX3VuaWNvZGVy0jIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5oYXZlX3VuaWNvZGVYAQAAAC10ctMyAABYDAAAAHN0YXQuU19JWE9USHLUMgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lYT1RIWAEAAAAtdHLVMgAAWA4AAABlcnJuby5FTk9UQ09OTnLWMgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RDT05OWAEAAAAtdHLXMgAAWAwAAABzdGF0LlNfSUVYRUNy2DIAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRVhFQ1gBAAAALXRy2TIAAFgPAAAAdG9rZW4uTEVGVFNISUZUctoyAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTEVGVFNISUZUWAEAAAAtdHLbMgAAWA0AAABlcnJuby5FVU5BVENIctwyAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVVOQVRDSFgBAAAALXRy3TIAAFgPAAAAc3NsLk9QX05PX1RMU3Yxct4yAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9OT19UTFN2MVgBAAAALXRy3zIAAFgNAAAAbWltaWZ5Lk1BWExFTnLgMgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1pZnkuaHRtbCNtaW1pZnkuTUFYTEVOWAEAAAAtdHLhMgAAWAwAAABlcnJuby5FWEZVTExy4jIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FWEZVTExYAQAAAC10cuMyAABYCwAAAG9zLk9fUkFORE9NcuQyAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19SQU5ET01YAQAAAC10cuUyAABYDgAAAG1pbWlmeS5DSEFSU0VUcuYyAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21pbWlmeS5DSEFSU0VUWAEAAAAtdHLnMgAAWA8AAABjb2RlY3MuQk9NX1VURjhy6DIAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9VVEY4WAEAAAAtdHLpMgAAWAwAAABlcnJuby5FQkFERkRy6jIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQkFERkRYAQAAAC10cusyAABYDAAAAGVycm5vLkVGQVVMVHLsMgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVGQVVMVFgBAAAALXRy7TIAAFgNAAAAb3MuRVhfREFUQUVSUnLuMgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX0RBVEFFUlJYAQAAAC10cu8yAABYDwAAAG1kNS5kaWdlc3Rfc2l6ZXLwMgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tZDUuaHRtbCNtZDUuZGlnZXN0X3NpemVYAQAAAC10cvEyAABYCwAAAG9zLlNFRUtfU0VUcvIyAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuU0VFS19TRVRYAQAAAC10cvMyAABYDwAAAGxvY2FsZS5DUk5DWVNUUnL0MgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuQ1JOQ1lTVFJYAQAAAC10cvUyAABYDwAAAHNzbC5PUF9OT19TU0x2MnL2MgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fU1NMdjJYAQAAAC10cvcyAABYDwAAAHNzbC5PUF9OT19TU0x2M3L4MgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fU1NMdjNYAQAAAC10cvkyAABYCgAAAGNkLlBMQVlJTkdy+jIAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5QTEFZSU5HWAEAAAAtdHL7MgAAWA8AAABhcnJheS5BcnJheVR5cGVy/DIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5BcnJheVR5cGVYAQAAAC10cv0yAABYDAAAAGVycm5vLkVDSElMRHL+MgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVDSElMRFgBAAAALXRy/zIAAFgOAAAAX3dpbnJlZy5SRUdfU1pyADMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX1NaWAEAAAAtdHIBMwAAWA8AAAB0b2tlbi5OVF9PRkZTRVRyAjMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5OVF9PRkZTRVRYAQAAAC10cgMzAABYDwAAAHR5cGVzLkNsYXNzVHlwZXIEMwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkNsYXNzVHlwZVgBAAAALXRyBTMAAFgVAAAAcmVzb3VyY2UuUkxJTUlUX05QUk9DcgYzAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX05QUk9DWAEAAAAtdHIHMwAAWAYAAABvcy5zZXByCDMAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXBYAQAAAC10cgkzAABYDAAAAHRva2VuLkxCUkFDRXIKMwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkxCUkFDRVgBAAAALXRyCzMAAFgTAAAAX3dpbnJlZy5LRVlfRVhFQ1VURXIMMwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfRVhFQ1VURVgBAAAALXRyDTMAAFgGAAAATUVUSF9Pcg4zAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9PWAEAAAAtdHIPMwAAWBQAAAB0YXJmaWxlLlVTVEFSX0ZPUk1BVHIQMwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5VU1RBUl9GT1JNQVRYAQAAAC10chEzAABYDAAAAHN0YXQuU1RfU0laRXISMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9TSVpFWAEAAAAtdHITMwAAWA8AAABlcnJuby5FU0hVVERPV05yFDMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU0hVVERPV05YAQAAAC10chUzAABYEQAAAHN5cy5leGNfdHJhY2ViYWNrchYzAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGNfdHJhY2ViYWNrWAEAAAAtdHIXMwAAWAkAAAByZS5ET1RBTExyGDMAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5ET1RBTExYAQAAAC10chkzAABYEAAAAGdjLkRFQlVHX1NBVkVBTExyGjMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19TQVZFQUxMWAEAAAAtdHIbMwAAWBoAAABfd2lucmVnLktFWV9DUkVBVEVfU1VCX0tFWXIcMwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfQ1JFQVRFX1NVQl9LRVlYAQAAAC10ch0zAABYCwAAAG9zLkVYX1VTQUdFch4zAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfVVNBR0VYAQAAAC10ch8zAABYCwAAAGVycm5vLkVUSU1FciAzAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVRJTUVYAQAAAC10ciEzAABYFQAAAHNpdGUuRU5BQkxFX1VTRVJfU0lURXIiMwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5FTkFCTEVfVVNFUl9TSVRFWAEAAAAtdHIjMwAAWBUAAABfd2lucmVnLlJFR19FWFBBTkRfU1pyJDMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0VYUEFORF9TWlgBAAAALXRyJTMAAFgIAAAAc3lzLmFyZ3ZyJjMAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmFyZ3ZYAQAAAC10ciczAABYDwAAAGZvcm1hdHRlci5BU19JU3IoMwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuQVNfSVNYAQAAAC10cikzAABYEAAAAHN0cmluZy5oZXhkaWdpdHNyKjMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmhleGRpZ2l0c1gBAAAALXRyKzMAAFgQAAAAc3RyaW5nLmxvd2VyY2FzZXIsMwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcubG93ZXJjYXNlWAEAAAAtdHItMwAAWAQAAABUcnVlci4zAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI1RydWVYAQAAAC10ci8zAABYDAAAAHNzbC5IQVNfQUxQTnIwMwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX0FMUE5YAQAAAC10cjEzAABYEQAAAGxvY2FsZS5BTFRfRElHSVRTcjIzAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5BTFRfRElHSVRTWAEAAAAtdHIzMwAAWBEAAABzdGF0LlVGX0lNTVVUQUJMRXI0MwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9JTU1VVEFCTEVYAQAAAC10cjUzAABYCwAAAG9zLlBfTk9XQUlUcjYzAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuUF9OT1dBSVRYAQAAAC10cjczAABYEAAAAHRva2VuLlJJR0hUU0hJRlRyODMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SSUdIVFNISUZUWAEAAAAtdHI5MwAAWBAAAABzdGF0LlNGX1NOQVBTSE9UcjozAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNGX1NOQVBTSE9UWAEAAAAtdHI7MwAAWCIAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV92YWxpZGF0aW9ucjwzAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5mZWF0dXJlX3ZhbGlkYXRpb25YAQAAAC10cj0zAABYFwAAAGRvY3Rlc3QuUkVQT1JUSU5HX0ZMQUdTcj4zAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVElOR19GTEFHU1gBAAAALXRyPzMAAFgOAAAAc3lzLmxhc3RfdmFsdWVyQDMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmxhc3RfdmFsdWVYAQAAAC10ckEzAABYDAAAAGVycm5vLkVOT1RUWXJCMwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RUWVgBAAAALXRyQzMAAFgLAAAAZXJybm8uRUlEUk1yRDMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSURSTVgBAAAALXRyRTMAAFgKAAAAc3lzLnN0ZGVycnJGMwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc3RkZXJyWAEAAAAtdHJHMwAAWBcAAABfd2lucmVnLktFWV9RVUVSWV9WQUxVRXJIMwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfUVVFUllfVkFMVUVYAQAAAC10ckkzAABYCgAAAHRva2VuLlBMVVNySjMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5QTFVTWAEAAAAtdHJLMwAAWBcAAABfd2lucmVnLktFWV9DUkVBVEVfTElOS3JMMwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfQ1JFQVRFX0xJTktYAQAAAC10ck0zAABYDgAAAG9zLkVYX1BST1RPQ09Mck4zAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfUFJPVE9DT0xYAQAAAC10ck8zAABYDAAAAHN0YXQuU19JRkRJUnJQMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGRElSWAEAAAAtdHJRMwAAWAsAAABzeXMubWF4c2l6ZXJSMwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubWF4c2l6ZVgBAAAALXRyUzMAAFgOAAAAc2l0ZS5VU0VSX0JBU0VyVDMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuVVNFUl9CQVNFWAEAAAAtdHJVMwAAWAgAAABjZC5SRUFEWXJWMwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLlJFQURZWAEAAAAtdHJXMwAAWBMAAABQeV9UUEZMQUdTX0hFQVBUWVBFclgzAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IRUFQVFlQRVgBAAAALXRyWTMAAFgOAAAAc3RhdC5TRl9BUFBFTkRyWjMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU0ZfQVBQRU5EWAEAAAAtdHJbMwAAWBQAAAByZXNvdXJjZS5SVVNBR0VfU0VMRnJcMwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJVU0FHRV9TRUxGWAEAAAAtdHJdMwAAWBUAAABlcnJuby5FU09DS1ROT1NVUFBPUlRyXjMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU09DS1ROT1NVUFBPUlRYAQAAAC10cl8zAABYEQAAAGxvY2FsZS5MQ19OVU1FUklDcmAzAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19OVU1FUklDWAEAAAAtdHJhMwAAWAkAAAB0b2tlbi5ET1RyYjMAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ET1RYAQAAAC10cmMzAABYCgAAAHRva2VuLkxQQVJyZDMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MUEFSWAEAAAAtdHJlMwAAWAwAAABvcy5FWF9OT1VTRVJyZjMAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT1VTRVJYAQAAAC10cmczAABYDQAAAGNvZGVjcy5CT01fTEVyaDMAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9MRVgBAAAALXRyaTMAAFgMAAAAZXJybm8uRUwySExUcmozAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUwySExUWAEAAAAtdHJrMwAAWAwAAABvcy5FWF9OT0hPU1RybDMAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT0hPU1RYAQAAAC10cm0zAABYEQAAAHNzbC5DRVJUX09QVElPTkFMcm4zAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5DRVJUX09QVElPTkFMWAEAAAAtdHJvMwAAWAsAAABlcnJuby5FQkFERXJwMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURFWAEAAAAtdHJxMwAAWAsAAABlcnJuby5FQkFERnJyMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURGWAEAAAAtdHJzMwAAWBAAAABfd2lucmVnLktFWV9SRUFEcnQzAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLktFWV9SRUFEWAEAAAAtdHJ1MwAAWBEAAABsb2NhbGUuVF9GTVRfQU1QTXJ2MwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuVF9GTVRfQU1QTVgBAAAALXRydzMAAFgRAAAAdXJsbGliLl91cmxvcGVuZXJyeDMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLl91cmxvcGVuZXJYAQAAAC10cnkzAABYEwAAAHdpbnNvdW5kLlNORF9OT1dBSVRyejMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5TTkRfTk9XQUlUWAEAAAAtdHJ7MwAAWAwAAABzdGF0LlNfSUZCTEtyfDMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRkJMS1gBAAAALXRyfTMAAFgQAAAAbWltZXR5cGVzLmluaXRlZHJ+MwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuaW5pdGVkWAEAAAAtdHJ/MwAAWAsAAABlcnJuby5FQkFEUnKAMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURSWAEAAAAtdHKBMwAAWA0AAABlcnJuby5FVUNMRUFOcoIzAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVVDTEVBTlgBAAAALXRygzMAAFgkAAAAX3dpbnJlZy5SRUdfRlVMTF9SRVNPVVJDRV9ERVNDUklQVE9ScoQzAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19GVUxMX1JFU09VUkNFX0RFU0NSSVBUT1JYAQAAAC10coUzAABYDwAAAHRva2VuLkVORE1BUktFUnKGMwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkVORE1BUktFUlgBAAAALXRyhzMAAFgUAAAAd2luc291bmQuTUJfSUNPTkhBTkRyiDMAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5NQl9JQ09OSEFORFgBAAAALXRyiTMAAFgEAAAAZXhpdHKKMwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25zdGFudHMuaHRtbCNleGl0WAEAAAAtdHKLMwAAWB0AAABodG1sZW50aXR5ZGVmcy5uYW1lMmNvZGVwb2ludHKMMwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGVudGl0eWRlZnMubmFtZTJjb2RlcG9pbnRYAQAAAC10co0zAABYCgAAAHRva2VuLkxTUUJyjjMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MU1FCWAEAAAAtdHKPMwAAWAwAAABlcnJuby5FQ0hSTkdykDMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ0hSTkdYAQAAAC10cpEzAABYEwAAAFB5X1RQRkxBR1NfQkFTRVRZUEVykjMAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0JBU0VUWVBFWAEAAAAtdHKTMwAAWAkAAABjb3B5cmlnaHRylDMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjY29weXJpZ2h0WAEAAAAtdHKVMwAAWAwAAABzdGF0LlNfSVJXWEdyljMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUldYR1gBAAAALXRylzMAAFgNAAAAZXJybm8uRUxJQk1BWHKYMwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMSUJNQVhYAQAAAC10cpkzAABYDAAAAHN0YXQuU19JUldYVXKaMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lSV1hVWAEAAAAtdHKbMwAAWA4AAABsb2NhbGUuWUVTRVhQUnKcMwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuWUVTRVhQUlgBAAAALXRynTMAAFgLAAAAb3MuT19TSExPQ0tynjMAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1NITE9DS1gBAAAALXRynzMAAFgSAAAAc3lzLl9fZXhjZXB0aG9va19fcqAzAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX2V4Y2VwdGhvb2tfX1gBAAAALXRyoTMAAFgSAAAAZXJybm8uRURFU1RBRERSUkVRcqIzAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRURFU1RBRERSUkVRWAEAAAAtdHKjMwAAWAwAAABzdGF0LlNfSVdPVEhypDMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JV09USFgBAAAALXRypTMAAFgTAAAAc3lzLl9fZGlzcGxheWhvb2tfX3KmMwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuX19kaXNwbGF5aG9va19fWAEAAAAtdHKnMwAAWBEAAABodHRwbGliLkhUVFBfUE9SVHKoMwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQX1BPUlRYAQAAAC10cqkzAABYFAAAAHNzbC5QUk9UT0NPTF9UTFN2MV8ycqozAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9UTFN2MV8yWAEAAAAtdHKrMwAAWBQAAABzc2wuUFJPVE9DT0xfVExTdjFfMXKsMwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTdjFfMVgBAAAALXRyrTMAAFgIAAAAcmUuREVCVUdyrjMAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5ERUJVR1gBAAAALXRyrzMAAFgWAAAAc3VuYXUuQVVESU9fRklMRV9NQUdJQ3KwMwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfTUFHSUNYAQAAAC10crEzAABYDAAAAHN0YXQuU19JU1ZUWHKyMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTVlRYWAEAAAAtdHKzMwAAWA8AAAB0b2tlbi5MRVNTRVFVQUxytDMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRVNTRVFVQUxYAQAAAC10crUzAABYEwAAAGVycm5vLkVBRERSTk9UQVZBSUxytjMAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQUREUk5PVEFWQUlMWAEAAAAtdHK3MwAAWBQAAAB0ZXN0LnN1cHBvcnQudmVyYm9zZXK4MwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnZlcmJvc2VYAQAAAC10crkzAABYDwAAAHR5cGVzLkZyYW1lVHlwZXK6MwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZyYW1lVHlwZVgBAAAALXRyuzMAAFgNAAAAc3lzLmxvbmdfaW5mb3K8MwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubG9uZ19pbmZvWAEAAAAtdHK9MwAAWAoAAABNRVRIX0NMQVNTcr4zAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9DTEFTU1gBAAAALXRyvzMAAFgJAAAAb3MuYWx0c2VwcsAzAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuYWx0c2VwWAEAAAAtdHLBMwAAWAsAAABkaXMuaGFzZnJlZXLCMwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzZnJlZVgBAAAALXRywzMAAFgUAAAAZ2MuREVCVUdfQ09MTEVDVEFCTEVyxDMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19DT0xMRUNUQUJMRVgBAAAALXRyxTMAAFgNAAAAaW1wLlBZX0ZST1pFTnLGMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuUFlfRlJPWkVOWAEAAAAtdHLHMwAAWBwAAABfd2lucmVnLlJFR19EV09SRF9CSUdfRU5ESUFOcsgzAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19EV09SRF9CSUdfRU5ESUFOWAEAAAAtdHLJMwAAWAwAAAByZS5NVUxUSUxJTkVyyjMAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NVUxUSUxJTkVYAQAAAC10csszAABYCgAAAG9zLk9fUlNZTkNyzDMAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JTWU5DWAEAAAAtdHLNMwAAWAwAAABlcnJuby5FTk9DU0lyzjMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9DU0lYAQAAAC10cs8zAABYEAAAAG1zdmNydC5MS19OQlJMQ0ty0DMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LkxLX05CUkxDS1gBAAAALXRy0TMAAFgJAAAAX19kZWJ1Z19fctIzAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI19fZGVidWdfX1gBAAAALXRy0zMAAFgbAAAAc3VicHJvY2Vzcy5TVERfRVJST1JfSEFORExFctQzAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURF9FUlJPUl9IQU5ETEVYAQAAAC10ctUzAABYCwAAAHRva2VuLkFNUEVSctYzAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQU1QRVJYAQAAAC10ctczAABYDgAAAHN5cy5fX3N0ZG91dF9fctgzAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX3N0ZG91dF9fWAEAAAAtdHLZMwAAWAcAAABjbWF0aC5lctozAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguZVgBAAAALXRy2zMAAFgNAAAAZXJybm8uRUxJQkJBRHLcMwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMSUJCQURYAQAAAC10ct0zAABYEAAAAHN0YXR2ZnMuRl9GUlNJWkVy3jMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9GUlNJWkVYAQAAAC10ct8zAABYGgAAAGhhc2hsaWIuaGFzaGxpYi5hbGdvcml0aG1zcuAzAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmhhc2hsaWIuYWxnb3JpdGhtc1gBAAAALXRy4TMAAFgRAAAAc29ja2V0LlNvY2tldFR5cGVy4jMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNvY2tldFR5cGVYAQAAAC10cuMzAABYGgAAAHR5cGVzLk1lbWJlckRlc2NyaXB0b3JUeXBlcuQzAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTWVtYmVyRGVzY3JpcHRvclR5cGVYAQAAAC10cuUzAABYEgAAAGxvY2FsZS5MQ19NRVNTQUdFU3LmMwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuTENfTUVTU0FHRVNYAQAAAC10cuczAABYDwAAAG1zdmNydC5MS19VTkxDS3LoMwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfVU5MQ0tYAQAAAC10cukzAABYFwAAAHJlc291cmNlLlJMSU1JVF9NRU1MT0NLcuozAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX01FTUxPQ0tYAQAAAC10cuszAABYDAAAAHRva2VuLlNUUklOR3LsMwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNUUklOR1gBAAAALXRy7TMAAFgWAAAAc3NsLlZFUklGWV9YNTA5X1NUUklDVHLuMwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX1g1MDlfU1RSSUNUWAEAAAAtdHLvMwAAWAoAAABjb2RlY3MuQk9NcvAzAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01YAQAAAC10cvEzAABYDAAAAHN0YXQuU19JU0dJRHLyMwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTR0lEWAEAAAAtdHLzMwAAWBYAAABpby5ERUZBVUxUX0JVRkZFUl9TSVpFcvQzAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uREVGQVVMVF9CVUZGRVJfU0laRVgBAAAALXRy9TMAAFgcAAAAZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRXL2MwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRVgBAAAALXRy9zMAAFgYAAAAd2luc291bmQuTUJfSUNPTkFTVEVSSVNLcvgzAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfSUNPTkFTVEVSSVNLWAEAAAAtdHL5MwAAWA4AAAB0eXBlcy5UeXBlVHlwZXL6MwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlR5cGVUeXBlWAEAAAAtdHL7MwAAWAwAAABzdGF0LlNfRU5GTVRy/DMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19FTkZNVFgBAAAALXRy/TMAAFgOAAAAc3RhdC5VRl9BUFBFTkRy/jMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfQVBQRU5EWAEAAAAtdHL/MwAAWAoAAABjdXJzZXMuRVJScgA0AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5FUlJYAQAAAC10cgE0AABYDQAAAHRva2VuLkdSRUFURVJyAjQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5HUkVBVEVSWAEAAAAtdHIDNAAAWA4AAABOb3RJbXBsZW1lbnRlZHIENAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25zdGFudHMuaHRtbCNOb3RJbXBsZW1lbnRlZFgBAAAALXRyBTQAAFgRAAAAbG9jYWxlLkxDX0NPTExBVEVyBjQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX0NPTExBVEVYAQAAAC10cgc0AABYFAAAAGRvY3Rlc3QuUkVQT1JUX05ESUZGcgg0AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVF9ORElGRlgBAAAALXRyCTQAAFgRAAAAc3NsLk9QX05PX1RMU3YxXzFyCjQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RMU3YxXzFYAQAAAC10cgs0AABYHgAAAF93aW5yZWcuS0VZX0VOVU1FUkFURV9TVUJfS0VZU3IMNAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfRU5VTUVSQVRFX1NVQl9LRVlTWAEAAAAtdHINNAAAWBEAAABvcy5wYXRoY29uZl9uYW1lc3IONAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBhdGhjb25mX25hbWVzWAEAAAAtdHIPNAAAWBcAAABtaW1ldHlwZXMuZW5jb2RpbmdzX21hcHIQNAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuZW5jb2RpbmdzX21hcFgBAAAALXRyETQAAFgTAAAAd2luc291bmQuU05EX01FTU9SWXISNAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9NRU1PUllYAQAAAC10chM0AABYEQAAAGh0dHBsaWIucmVzcG9uc2VzchQ0AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLnJlc3BvbnNlc1gBAAAALXRyFTQAAFgjAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMjRyFjQAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8yNFgBAAAALXRyFzQAAFgLAAAAc3NsLkhBU19OUE5yGDQAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19OUE5YAQAAAC10chk0AABYEwAAAGNvZGVjcy5CT01fVVRGMzJfTEVyGjQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9VVEYzMl9MRVgBAAAALXRyGzQAAFgLAAAAZXJybm8uRVBFUk1yHDQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUEVSTVgBAAAALXRyHTQAAFgSAAAAc3NsLlBST1RPQ09MX1NTTHYych40AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9TU0x2MlgBAAAALXRyHzQAAFgSAAAAc3NsLlBST1RPQ09MX1NTTHYzciA0AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9TU0x2M1gBAAAALXRyITQAAFgOAAAAZXJybm8uRU5PVFNPQ0tyIjQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UU09DS1gBAAAALXRyIzQAAFgVAAAAUHlfVFBGTEFHU19DSEVDS1RZUEVTciQ0AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19DSEVDS1RZUEVTWAEAAAAtdHIlNAAAWAoAAABzeXMuc3Rkb3V0ciY0AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zdGRvdXRYAQAAAC10cic0AABYDQAAAGVycm5vLkVCQURSUUNyKDQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQkFEUlFDWAEAAAAtdHIpNAAAWBMAAABjU3RyaW5nSU8uSW5wdXRUeXBlcio0AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjY1N0cmluZ0lPLklucHV0VHlwZVgBAAAALXRyKzQAAFgSAAAAdHlwZXMuSW5zdGFuY2VUeXBlciw0AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuSW5zdGFuY2VUeXBlWAEAAAAtdHItNAAAWBQAAABkb2N0ZXN0LlJFUE9SVF9DRElGRnIuNAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5SRVBPUlRfQ0RJRkZYAQAAAC10ci80AABYCgAAAGRpcy5vcG5hbWVyMDQAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLm9wbmFtZVgBAAAALXRyMTQAAFgNAAAAb3MuV0NPTlRJTlVFRHIyNAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLldDT05USU5VRURYAQAAAC10cjM0AABYDQAAAGVycm5vLkVUWFRCU1lyNDQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVFhUQlNZWAEAAAAtdHI1NAAAWBAAAABkYXRldGltZS5NQVhZRUFScjY0AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuTUFYWUVBUlgBAAAALXRyNzQAAFgMAAAAZXJybm8uRVNUQUxFcjg0AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNUQUxFWAEAAAAtdHI5NAAAWBoAAABzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTnI6NAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTlgBAAAALXRyOzQAAFgkAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIxcjw0AAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIxWAEAAAAtdHI9NAAAWCQAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjJyPjQAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjJYAQAAAC10cj80AABYDQAAAGVycm5vLkVOT1RESVJyQDQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9URElSWAEAAAAtdHJBNAAAWBAAAABvcy5PX1NIT1JUX0xJVkVEckI0AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19TSE9SVF9MSVZFRFgBAAAALXRyQzQAAFgRAAAAY2FsZW5kYXIuZGF5X25hbWVyRDQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5kYXlfbmFtZVgBAAAALXRyRTQAAFgEAAAAcmUuTXJGNAAAKGpzBQAAanQFAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1YAQAAAC10ckc0AABYCQAAAG9zLk9fVEVYVHJINAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fVEVYVFgBAAAALXRySTQAAFgQAAAAc3RyaW5nLm9jdGRpZ2l0c3JKNAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcub2N0ZGlnaXRzWAEAAAAtdHJLNAAAWAsAAABvcy5PX1dST05MWXJMNAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fV1JPTkxZWAEAAAAtdHJNNAAAWBAAAABlcnJuby5FQ09OTlJFU0VUck40AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNPTk5SRVNFVFgBAAAALXRyTzQAAFgLAAAAZXJybm8uRVNSQ0hyUDQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1JDSFgBAAAALXRyUTQAAFgXAAAAc3FsaXRlMy5QQVJTRV9ERUNMVFlQRVNyUjQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUEFSU0VfREVDTFRZUEVTWAEAAAAtdHJTNAAAWAwAAABzc2wuSEFTX0VDREhyVDQAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19FQ0RIWAEAAAAtdHJVNAAAWBAAAABQeV9UUEZMQUdTX1JFQURZclY0AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19SRUFEWVgBAAAALXRyVzQAAFgMAAAAdG9rZW4uUkJSQUNFclg0AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUkJSQUNFWAEAAAAtdHJZNAAAWA0AAABzeXMuY29weXJpZ2h0clo0AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5jb3B5cmlnaHRYAQAAAC10cls0AABYBAAAAHJlLlVyXDQAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5VWAEAAAAtdHJdNAAAWAQAAAByZS5Tcl40AAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuU1gBAAAALXRyXzQAAFgXAAAAdHlwZXMuVW5ib3VuZE1ldGhvZFR5cGVyYDQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5VbmJvdW5kTWV0aG9kVHlwZVgBAAAALXRyYTQAAFgfAAAAeG1sLmRvbS5wdWxsZG9tLmRlZmF1bHRfYnVmc2l6ZXJiNAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uZGVmYXVsdF9idWZzaXplWAEAAAAtdHJjNAAAWBAAAAB0b2tlbi5BTVBFUkVRVUFMcmQ0AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQU1QRVJFUVVBTFgBAAAALXRyZTQAAFgOAAAAc2lnbmFsLlNJR19JR05yZjQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR19JR05YAQAAAC10cmc0AABYCgAAAGRpcy5jbXBfb3ByaDQAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmNtcF9vcFgBAAAALXRyaTQAAFgXAAAAdXVpZC5SRVNFUlZFRF9NSUNST1NPRlRyajQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuUkVTRVJWRURfTUlDUk9TT0ZUWAEAAAAtdHJrNAAAWBQAAAByZXNvdXJjZS5STElNSVRfREFUQXJsNAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9EQVRBWAEAAAAtdHJtNAAAWAwAAABlcnJuby5FUFJPVE9ybjQAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUFJPVE9YAQAAAC10cm80AABYEgAAAHdpbnNvdW5kLlNORF9BTElBU3JwNAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9BTElBU1gBAAAALXRycTQAAFgRAAAAdHlwZXMuU3RyaW5nVHlwZXNycjQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5TdHJpbmdUeXBlc1gBAAAALXRyczQAAFgPAAAAbXNpbGliLnNlcXVlbmNlcnQ0AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5zZXF1ZW5jZVgBAAAALXRydTQAAFgNAAAAc2hhLmJsb2Nrc2l6ZXJ2NAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuYmxvY2tzaXplWAEAAAAtdHJ3NAAAWBEAAABjYWxlbmRhci5kYXlfYWJicnJ4NAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmRheV9hYmJyWAEAAAAtdHJ5NAAAWBQAAABzc2wuT1BfU0lOR0xFX0RIX1VTRXJ6NAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfU0lOR0xFX0RIX1VTRVgBAAAALXRyezQAAFgLAAAAb3MuT19CSU5BUllyfDQAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0JJTkFSWVgBAAAALXRyfTQAAFgfAAAAeG1sLnBhcnNlcnMuZXhwYXQuWE1MUGFyc2VyVHlwZXJ+NAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuWE1MUGFyc2VyVHlwZVgBAAAALXRyfzQAAFgOAAAAbG9jYWxlLlRIT1VTRVBygDQAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLlRIT1VTRVBYAQAAAC10coE0AABYGAAAAHJlc291cmNlLlJVU0FHRV9DSElMRFJFTnKCNAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJVU0FHRV9DSElMRFJFTlgBAAAALXRygzQAAFgPAAAAbXN2Y3J0LkxLX05CTENLcoQ0AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5MS19OQkxDS1gBAAAALXRyhTQAAFgNAAAAY3N2LlFVT1RFX0FMTHKGNAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuUVVPVEVfQUxMWAEAAAAtdHKHNAAAWAsAAABzc2wuSEFTX1NOSXKINAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX1NOSVgBAAAALXRyiTQAAFgLAAAAZXJybm8uRU5YSU9yijQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTlhJT1gBAAAALXRyizQAAFgLAAAAc3lzLm1vZHVsZXNyjDQAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLm1vZHVsZXNYAQAAAC10co00AABYDwAAAHR5cGVzLlNsaWNlVHlwZXKONAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlNsaWNlVHlwZVgBAAAALXRyjzQAAFgcAAAAeG1sLnNheC5oYW5kbGVyLmFsbF9mZWF0dXJlc3KQNAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuYWxsX2ZlYXR1cmVzWAEAAAAtdHKRNAAAWCQAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9leHRlcm5hbF9wZXNykjQAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfZXh0ZXJuYWxfcGVzWAEAAAAtdHKTNAAAWAwAAABzdGF0LlNUX01PREVylDQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfTU9ERVgBAAAALXRylTQAAFgPAAAAZXJybm8uRU1VTFRJSE9QcpY0AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU1VTFRJSE9QWAEAAAAtdHKXNAAAWBEAAAB1dWlkLlJFU0VSVkVEX05DU3KYNAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5SRVNFUlZFRF9OQ1NYAQAAAC10cpk0AABYDwAAAHNvY2tldC5TT0NLX1JBV3KaNAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19SQVdYAQAAAC10cps0AABYDQAAAGNvZGVjcy5CT01fQkVynDQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9CRVgBAAAALXRynTQAAFgFAAAARmFsc2VynjQAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjRmFsc2VYAQAAAC10cp80AABYCwAAAHRva2VuLk1JTlVTcqA0AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTUlOVVNYAQAAAC10cqE0AABYDAAAAGVycm5vLkVOT05FVHKiNAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT05FVFgBAAAALXRyozQAAFgSAAAAc3RhdC5VRl9DT01QUkVTU0VEcqQ0AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX0NPTVBSRVNTRURYAQAAAC10cqU0AABYEAAAAHN0YXR2ZnMuRl9CQVZBSUxypjQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9CQVZBSUxYAQAAAC10cqc0AABYDQAAAGVycm5vLkVMSUJTQ05yqDQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTElCU0NOWAEAAAAtdHKpNAAAWBAAAABvcy5zeXNjb25mX25hbWVzcqo0AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3lzY29uZl9uYW1lc1gBAAAALXRyqzQAAFgJAAAAZXJybm8uRUlPcqw0AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlPWAEAAAAtdHKtNAAAWBAAAABkYXRldGltZS5NSU5ZRUFScq40AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuTUlOWUVBUlgBAAAALXRyrzQAAFgOAAAAdG9rZW4uTl9UT0tFTlNysDQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5OX1RPS0VOU1gBAAAALXRysTQAAFgNAAAAc3RhdC5TX0lGU09DS3KyNAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGU09DS1gBAAAALXRyszQAAFgJAAAAcmUuTE9DQUxFcrQ0AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTE9DQUxFWAEAAAAtdHK1NAAAWBcAAABzc2wuUHVycG9zZS5DTElFTlRfQVVUSHK2NAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUHVycG9zZS5DTElFTlRfQVVUSFgBAAAALXRytzQAAFgUAAAAc3FsaXRlMy52ZXJzaW9uX2luZm9yuDQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMudmVyc2lvbl9pbmZvWAEAAAAtdHK5NAAAWA0AAABzeXMuYnl0ZW9yZGVycro0AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5ieXRlb3JkZXJYAQAAAC10crs0AABYCgAAAGxvY2FsZS5FUkFyvDQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVSQVgBAAAALXRyvTQAAFgMAAAAc3RhdC5TX0lTVUlEcr40AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNVSURYAQAAAC10cr80AABYDgAAAG9zLkVYX1RFTVBGQUlMcsA0AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfVEVNUEZBSUxYAQAAAC10csE0AABYDgAAAGVycm5vLkVNU0dTSVpFcsI0AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU1TR1NJWkVYAQAAAC10csM0AABYDQAAAGxvY2FsZS5OT0VYUFJyxDQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLk5PRVhQUlgBAAAALXRyxTQAAFgPAAAAc3lzLmV4ZWNfcHJlZml4csY0AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGVjX3ByZWZpeFgBAAAALXRyxzQAAFgLAAAAc3RhdC5TVF9HSURyyDQAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfR0lEWAEAAAAtdHLJNAAAWBIAAABNYWNPUy5ydW50aW1lbW9kZWxyyjQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5ydW50aW1lbW9kZWxYAQAAAC10css0AABYDAAAAE1FVEhfQ09FWElTVHLMNAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfQ09FWElTVFgBAAAALXRyzTQAAFgKAAAAdG9rZW4uTEVTU3LONAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkxFU1NYAQAAAC10cs80AABYCAAAAGNkLmluZGV4ctA0AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuaW5kZXhYAQAAAC10ctE0AABYDAAAAHN0YXQuU19JRklGT3LSNAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGSUZPWAEAAAAtdHLTNAAAWAwAAABzdGF0LlNfSVJPVEhy1DQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUk9USFgBAAAALXRy1TQAAFgMAAAAb3MuT19OT0FUSU1FctY0AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19OT0FUSU1FWAEAAAAtdHLXNAAAWA4AAABzaWduYWwuU0lHX0RGTHLYNAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHX0RGTFgBAAAALXRy2TQAAFgSAAAAUHlfVFBGTEFHU19ERUZBVUxUcto0AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19ERUZBVUxUWAEAAAAtdHLbNAAAWAoAAABjZC5jYXRhbG9nctw0AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuY2F0YWxvZ1gBAAAALXRy3TQAAFgWAAAAZ2MuREVCVUdfVU5DT0xMRUNUQUJMRXLeNAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLkRFQlVHX1VOQ09MTEVDVEFCTEVYAQAAAC10ct80AABYEAAAAGNvZGVjcy5CT01fVVRGMTZy4DQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9VVEYxNlgBAAAALXRy4TQAAFgVAAAAX3dpbnJlZy5LRVlfU0VUX1ZBTFVFcuI0AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLktFWV9TRVRfVkFMVUVYAQAAAC10cuM0AABYFAAAAHppcGZpbGUuWklQX0RFRkxBVEVEcuQ0AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlpJUF9ERUZMQVRFRFgBAAAALXRy5TQAAFgOAAAAb3MuRVhfTk9URk9VTkRy5jQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT1RGT1VORFgBAAAALXRy5zQAAFgTAAAAY29kZWNzLkJPTV9VVEYxNl9MRXLoNAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2X0xFWAEAAAAtdHLpNAAAWAsAAABzdGF0LlNUX1VJRHLqNAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9VSURYAQAAAC10cus0AABYCAAAAHN5cy5wYXRocuw0AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5wYXRoWAEAAAAtdHLtNAAAWAoAAABjZC5jb250cm9scu40AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuY29udHJvbFgBAAAALXRy7zQAAFgOAAAAb3MuT19OT0lOSEVSSVRy8DQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX05PSU5IRVJJVFgBAAAALXRy8TQAAFgKAAAAZ2MuZ2FyYmFnZXLyNAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdhcmJhZ2VYAQAAAC10cvM0AABYEgAAAHBvc2l4ZmlsZS5TRUVLX0NVUnL0NAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbCNwb3NpeGZpbGUuU0VFS19DVVJYAQAAAC10cvU0AABYIgAAAG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXNy9jQAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXNYAQAAAC10cvc0AABYFgAAAHJlc291cmNlLlJMSU1fSU5GSU5JVFly+DQAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNX0lORklOSVRZWAEAAAAtdHL5NAAAWAsAAABtc2lsaWIudGV4dHL6NAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIudGV4dFgBAAAALXRy+zQAAFgbAAAAd2luc291bmQuTUJfSUNPTkVYQ0xBTUFUSU9Ocvw0AAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfSUNPTkVYQ0xBTUFUSU9OWAEAAAAtdHL9NAAAWA8AAABsb2NhbGUuQ0hBUl9NQVhy/jQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkNIQVJfTUFYWAEAAAAtdHL/NAAAWA4AAABsb2NhbGUuQ09ERVNFVHIANQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuQ09ERVNFVFgBAAAALXRyATUAAFgSAAAAdXVpZC5OQU1FU1BBQ0VfVVJMcgI1AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9VUkxYAQAAAC10cgM1AABYGwAAAGltYWdlb3AuYmFja3dhcmRfY29tcGF0aWJsZXIENQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5iYWNrd2FyZF9jb21wYXRpYmxlWAEAAAAtdHIFNQAAWAwAAABlcnJuby5FTk9TUENyBjUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9TUENYAQAAAC10cgc1AABYDgAAAGVycm5vLkVBTFJFQURZcgg1AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFMUkVBRFlYAQAAAC10cgk1AABYDQAAAGxvY2FsZS5MQ19BTExyCjUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX0FMTFgBAAAALXRyCzUAAFgqAAAAeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlX3ByZWZpeGVzcgw1AAAoanMFAABqdAUAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5mZWF0dXJlX25hbWVzcGFjZV9wcmVmaXhlc1gBAAAALXRyDTUAAFgJAAAAb3MuT19SRFdScg41AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19SRFdSWAEAAAAtdHIPNQAAWAgAAABjZC5FUlJPUnIQNQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLkVSUk9SWAEAAAAtdHIRNQAAWA4AAABzaXRlLlVTRVJfU0lURXISNQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5VU0VSX1NJVEVYAQAAAC10chM1AABYFQAAAFB5X1RQRkxBR1NfSEFWRV9DTEFTU3IUNQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9DTEFTU1gBAAAALXRyFTUAAFgRAAAAdGVtcGZpbGUudGVtcGxhdGVyFjUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS50ZW1wbGF0ZVgBAAAALXRyFzUAAFgPAAAAb3MuT19TRVFVRU5USUFMchg1AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19TRVFVRU5USUFMWAEAAAAtdHIZNQAAWBgAAABkb2N0ZXN0LkNPTVBBUklTT05fRkxBR1NyGjUAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuQ09NUEFSSVNPTl9GTEFHU1gBAAAALXRyGzUAAFgPAAAAc3RhdHZmcy5GX0JGUkVFchw1AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfQkZSRUVYAQAAAC10ch01AABYCQAAAG9zLk9fRVhDTHIeNQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fRVhDTFgBAAAALXRyHzUAAFgLAAAAZXJybm8uRUlOVFJyIDUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSU5UUlgBAAAALXRyITUAAFgMAAAAbG9jYWxlLlRfRk1UciI1AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5UX0ZNVFgBAAAALXRyIzUAAFgdAAAAaHRtbGVudGl0eWRlZnMuY29kZXBvaW50Mm5hbWVyJDUAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI2h0bWxlbnRpdHlkZWZzLmNvZGVwb2ludDJuYW1lWAEAAAAtdHIlNQAAWBIAAABsb2NhbGUuRVJBX0RfVF9GTVRyJjUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVSQV9EX1RfRk1UWAEAAAAtdHInNQAAWA4AAAB0eXBlcy5GaWxlVHlwZXIoNQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZpbGVUeXBlWAEAAAAtdHIpNQAAWBMAAAB1dWlkLk5BTUVTUEFDRV9YNTAwcio1AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9YNTAwWAEAAAAtdHIrNQAAWBYAAABzc2wuT1BfU0lOR0xFX0VDREhfVVNFciw1AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9TSU5HTEVfRUNESF9VU0VYAQAAAC10ci01AABYEQAAAHRva2VuLkRPVUJMRVNMQVNIci41AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU0xBU0hYAQAAAC10ci81AABYCgAAAHRva2VuLlJTUUJyMDUAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SU1FCWAEAAAAtdHIxNQAAWAsAAABlcnJuby5FUk9GU3IyNQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVST0ZTWAEAAAAtdHIzNQAAWBYAAABzcWxpdGUzLlBBUlNFX0NPTE5BTUVTcjQ1AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLlBBUlNFX0NPTE5BTUVTWAEAAAAtdHI1NQAAWCgAAAB4bWwuc2F4LmhhbmRsZXIucHJvcGVydHlfbGV4aWNhbF9oYW5kbGVycjY1AAAoanMFAABqdAUAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9sZXhpY2FsX2hhbmRsZXJYAQAAAC10cjc1AABYEwAAAHJlc291cmNlLlJMSU1JVF9SU1NyODUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfUlNTWAEAAAAtdHI5NQAAWA4AAABtc3ZjcnQuTEtfTE9DS3I6NQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfTE9DS1gBAAAALXRyOzUAAFgSAAAAdG9rZW4uUEVSQ0VOVEVRVUFMcjw1AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUEVSQ0VOVEVRVUFMWAEAAAAtdHI9NQAAWBIAAABfd2lucmVnLktFWV9OT1RJRllyPjUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX05PVElGWVgBAAAALXRyPzUAAFgRAAAAc3RyaW5nLndoaXRlc3BhY2VyQDUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLndoaXRlc3BhY2VYAQAAAC10ckE1AABYGgAAAGRpc3R1dGlscy5zeXNjb25maWcuUFJFRklYckI1AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5QUkVGSVhYAQAAAC10ckM1AABYEAAAAF93aW5yZWcuUkVHX05PTkVyRDUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX05PTkVYAQAAAC10ckU1AABYHQAAAHN1YnByb2Nlc3MuQ1JFQVRFX05FV19DT05TT0xFckY1AAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNSRUFURV9ORVdfQ09OU09MRVgBAAAALXRyRzUAAFgSAAAAZXJybm8uRU5BTUVUT09MT05Hckg1AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5BTUVUT09MT05HWAEAAAAtdHJJNQAAWBUAAAB0b2tlbi5SSUdIVFNISUZURVFVQUxySjUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SSUdIVFNISUZURVFVQUxYAQAAAC10cks1AABYDgAAAHdpbnNvdW5kLk1CX09Lckw1AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfT0tYAQAAAC10ck01AABYDAAAAGVycm5vLkVMM1JTVHJONQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMM1JTVFgBAAAALXRyTzUAAFgRAAAAc29ja2V0LlNPQ0tfREdSQU1yUDUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfREdSQU1YAQAAAC10clE1AABYJAAAAENvbmZpZ1BhcnNlci5NQVhfSU5URVJQT0xBVElPTl9ERVBUSHJSNQAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuTUFYX0lOVEVSUE9MQVRJT05fREVQVEhYAQAAAC10clM1AABYEwAAAFB5X1RQRkxBR1NfUkVBRFlJTkdyVDUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX1JFQURZSU5HWAEAAAAtdHJVNQAAWA0AAABlcnJuby5FTk9MSU5LclY1AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTElOS1gBAAAALXRyVzUAAFgPAAAAZXJybm8uRU5PVEVNUFRZclg1AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PVEVNUFRZWAEAAAAtdHJZNQAAWBEAAABzdWJwcm9jZXNzLlNURE9VVHJaNQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVERPVVRYAQAAAC10cls1AABYEQAAAFRraW50ZXIuRVhDRVBUSU9Oclw1AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbCNUa2ludGVyLkVYQ0VQVElPTlgBAAAALXRyXTUAAFgTAAAAbWltZXR5cGVzLnR5cGVzX21hcHJeNQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMudHlwZXNfbWFwWAEAAAAtdHJfNQAAWAoAAAB0b2tlbi5SUEFScmA1AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUlBBUlgBAAAALXRyYTUAAFgLAAAATUVUSF9OT0FSR1NyYjUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX05PQVJHU1gBAAAALXRyYzUAAFgOAAAAc29ja2V0LkFGX1VOSVhyZDUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX1VOSVhYAQAAAC10cmU1AABYDwAAAHN5bWJvbC5zeW1fbmFtZXJmNQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW1ib2wuaHRtbCNzeW1ib2wuc3ltX25hbWVYAQAAAC10cmc1AABYHwAAAHRhcmZpbGUuVGFyRmlsZUNvbXBhdC5UQVJfUExBSU5yaDUAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZUNvbXBhdC5UQVJfUExBSU5YAQAAAC10cmk1AABYCwAAAHRva2VuLkNPTE9Ocmo1AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09MT05YAQAAAC10cms1AABYJAAAAHNzbC5BTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUnJsNQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JYAQAAAC10cm01AABYCQAAAG9zLlBfV0FJVHJuNQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlBfV0FJVFgBAAAALXRybzUAAFgLAAAAb3MuT19FWExPQ0tycDUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0VYTE9DS1gBAAAALXRycTUAAFgPAAAAdG9rZW4uU1RBUkVRVUFMcnI1AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU1RBUkVRVUFMWAEAAAAtdHJzNQAAWAwAAABlcnJuby5FUkFOR0VydDUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkFOR0VYAQAAAC10cnU1AABYEQAAAGltcC5QS0dfRElSRUNUT1JZcnY1AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5QS0dfRElSRUNUT1JZWAEAAAAtdHJ3NQAAWAQAAABxdWl0cng1AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI3F1aXRYAQAAAC10cnk1AABYDQAAAGVycm5vLkVJU0NPTk5yejUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSVNDT05OWAEAAAAtdHJ7NQAAWBAAAABsb2NhbGUuRVJBX0RfRk1Ucnw1AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5FUkFfRF9GTVRYAQAAAC10cn01AABYHwAAAF93aW5yZWcuUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU5yfjUAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU5YAQAAAC10cn81AABYDwAAAG9zLkVYX0NBTlRDUkVBVHKANQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX0NBTlRDUkVBVFgBAAAALXRygTUAAFgMAAAAZXJybm8uRU5PUEtHcoI1AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PUEtHWAEAAAAtdHKDNQAAWBMAAABjYWxlbmRhci5tb250aF9uYW1lcoQ1AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIubW9udGhfbmFtZVgBAAAALXRyhTUAAFgPAAAATWFjT1MubGlua21vZGVscoY1AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MubGlua21vZGVsWAEAAAAtdHKHNQAAWCcAAABzc2wuQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVyiDUAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFWAEAAAAtdHKJNQAAWAkAAABjZC5OT0RJU0NyijUAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5OT0RJU0NYAQAAAC10cos1AABYCwAAAGRpcy5oYXNqcmVscow1AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNqcmVsWAEAAAAtdHKNNQAAWB4AAAB4bWwuc2F4LmhhbmRsZXIuYWxsX3Byb3BlcnRpZXNyjjUAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmFsbF9wcm9wZXJ0aWVzWAEAAAAtdHKPNQAAWBAAAABlcnJuby5FUFJPVE9UWVBFcpA1AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBST1RPVFlQRVgBAAAALXRykTUAAFgHAAAAbGljZW5zZXKSNQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25zdGFudHMuaHRtbCNsaWNlbnNlWAEAAAAtdHKTNQAAWAoAAABzeXMubWF4aW50cpQ1AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5tYXhpbnRYAQAAAC10cpU1AABYDgAAAHN0YXQuVUZfTk9EVU1QcpY1AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX05PRFVNUFgBAAAALXRylzUAAFgMAAAAc3RhdC5TX0lYR1JQcpg1AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVhHUlBYAQAAAC10cpk1AABYEAAAAGltcC5TRUFSQ0hfRVJST1JymjUAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLlNFQVJDSF9FUlJPUlgBAAAALXRymzUAAFgXAAAAX3dpbnJlZy5LRVlfV09XNjRfNjRLRVlynDUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX1dPVzY0XzY0S0VZWAEAAAAtdHKdNQAAWAsAAABlcnJuby5FWERFVnKeNQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVYREVWWAEAAAAtdHKfNQAAWBEAAABlcnJuby5FTkVUVU5SRUFDSHKgNQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVORVRVTlJFQUNIWAEAAAAtdHKhNQAAWA4AAABzeXMubWF4dW5pY29kZXKiNQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubWF4dW5pY29kZVgBAAAALXRyozUAAFgRAAAAdHlwZXMuVW5pY29kZVR5cGVypDUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5Vbmljb2RlVHlwZVgBAAAALXRypTUAAFgJAAAAc3lzLmZsYWdzcqY1AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5mbGFnc1gBAAAALXRypzUAAFgSAAAAd2luc291bmQuU05EX1BVUkdFcqg1AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX1BVUkdFWAEAAAAtdHKpNQAAWA0AAABlcnJuby5FTk9CVUZTcqo1AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PQlVGU1gBAAAALXRyqzUAAFgWAAAAc3RyaW5nLmFzY2lpX3VwcGVyY2FzZXKsNQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuYXNjaWlfdXBwZXJjYXNlWAEAAAAtdHKtNQAAWBAAAABsb2NhbGUuUkFESVhDSEFScq41AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5SQURJWENIQVJYAQAAAC10cq81AABYIAAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQUxBV184crA1AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BTEFXXzhYAQAAAC10crE1AABYEAAAAF93aW5yZWcuUkVHX0xJTktysjUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0xJTktYAQAAAC10crM1AABYFwAAAHhtbC5kb20uWE1MTlNfTkFNRVNQQUNFcrQ1AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlhNTE5TX05BTUVTUEFDRVgBAAAALXRytTUAAFgQAAAAdG9rZW5pemUuQ09NTUVOVHK2NQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLkNPTU1FTlRYAQAAAC10crc1AABYDAAAAHN0YXQuU19JRkNIUnK4NQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGQ0hSWAEAAAAtdHK5NQAAWBUAAABzc2wuT1BfTk9fQ09NUFJFU1NJT05yujUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX0NPTVBSRVNTSU9OWAEAAAAtdHK7NQAAWA0AAABvcy5PX05PRk9MTE9Xcrw1AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19OT0ZPTExPV1gBAAAALXRyvTUAAFgLAAAAZXJybm8uRUJVU1lyvjUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQlVTWVgBAAAALXRyvzUAAFgLAAAAb3MuU0VFS19DVVJywDUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5TRUVLX0NVUlgBAAAALXRywTUAAFgMAAAAc3RhdC5TX0lXVVNScsI1AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVdVU1JYAQAAAC10csM1AABYCwAAAGVycm5vLkVMT09QcsQ1AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxPT1BYAQAAAC10csU1AABYEAAAAHR5cGVzLlhSYW5nZVR5cGVyxjUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5YUmFuZ2VUeXBlWAEAAAAtdHLHNQAAWA0AAAByZS5JR05PUkVDQVNFcsg1AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuSUdOT1JFQ0FTRVgBAAAALXRyyTUAAFgQAAAAdG9rZW4uRE9VQkxFU1RBUnLKNQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRPVUJMRVNUQVJYAQAAAC10css1AABYDAAAAHN5cy5leGNfdHlwZXLMNQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhjX3R5cGVYAQAAAC10cs01AABYEwAAAHR5cGVzLkRpY3RQcm94eVR5cGVyzjUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5EaWN0UHJveHlUeXBlWAEAAAAtdHLPNQAAWBAAAAB0b2tlbi5DSVJDVU1GTEVYctA1AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ0lSQ1VNRkxFWFgBAAAALXRy0TUAAFgUAAAAdXVpZC5SRVNFUlZFRF9GVVRVUkVy0jUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuUkVTRVJWRURfRlVUVVJFWAEAAAAtdHLTNQAAWBIAAABzdHJpbmcucHVuY3R1YXRpb25y1DUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnB1bmN0dWF0aW9uWAEAAAAtdHLVNQAAWA8AAABzdGF0dmZzLkZfQlNJWkVy1jUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9CU0laRVgBAAAALXRy1zUAAFgMAAAAZG9jdGVzdC5TS0lQctg1AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlNLSVBYAQAAAC10ctk1AABYHQAAAF93aW5yZWcuSEtFWV9QRVJGT1JNQU5DRV9EQVRBcto1AAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfUEVSRk9STUFOQ0VfREFUQVgBAAAALXRy2zUAAFgOAAAAc3lzLmZsb2F0X2luZm9y3DUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmZsb2F0X2luZm9YAQAAAC10ct01AABYEgAAAHNzbC5WRVJJRllfREVGQVVMVHLeNQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX0RFRkFVTFRYAQAAAC10ct81AABYBAAAAHJlLkxy4DUAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5MWAEAAAAtdHLhNQAAWB8AAABzc2wuT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFcuI1AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0VYAQAAAC10cuM1AABYGwAAAF93aW5yZWcuSEtFWV9DVVJSRU5UX0NPTkZJR3LkNQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX0NVUlJFTlRfQ09ORklHWAEAAAAtdHLlNQAAWBIAAAB0eXBlcy5FbGxpcHNpc1R5cGVy5jUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5FbGxpcHNpc1R5cGVYAQAAAC10cuc1AABYDAAAAGVycm5vLkVNRklMRXLoNQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVNRklMRVgBAAAALXRy6TUAAFgQAAAAc3RyaW5nLnVwcGVyY2FzZXLqNQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcudXBwZXJjYXNlWAEAAAAtdHLrNQAAWA4AAABlcnJuby5FUkVTVEFSVHLsNQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVSRVNUQVJUWAEAAAAtdHLtNQAAWBoAAABfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORXLuNQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkVYAQAAAC10cu81AABYCgAAAHN5cy53aW52ZXJy8DUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLndpbnZlclgBAAAALXRy8TUAAFgJAAAAc3lzLnN0ZGlucvI1AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zdGRpblgBAAAALXRy8zUAAFgMAAAAdG9rZW4uREVERU5UcvQ1AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uREVERU5UWAEAAAAtdHL1NQAAWBQAAABzeXMuZmxvYXRfcmVwcl9zdHlsZXL2NQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZmxvYXRfcmVwcl9zdHlsZVgBAAAALXRy9zUAAFgIAAAAY21hdGgucGly+DUAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5waVgBAAAALXRy+TUAAFgMAAAAc3RhdC5TX0lSRUFEcvo1AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJFQURYAQAAAC10cvs1AABYDgAAAGVycm5vLkVMSUJFWEVDcvw1AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQkVYRUNYAQAAAC10cv01AABYBAAAAHJlLkly/jUAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5JWAEAAAAtdHL/NQAAWBAAAABzdGF0dmZzLkZfRkFWQUlMcgA2AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfRkFWQUlMWAEAAAAtdHIBNgAAWAsAAABzdGF0LlNUX0RFVnICNgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9ERVZYAQAAAC10cgM2AABYDAAAAHN0YXQuU19JWFVTUnIENgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lYVVNSWAEAAAAtdHIFNgAAWA8AAABlcnJuby5FUkVNT1RFSU9yBjYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVNT1RFSU9YAQAAAC10cgc2AABYFgAAAF93aW5yZWcuS0VZX0FMTF9BQ0NFU1NyCDYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX0FMTF9BQ0NFU1NYAQAAAC10cgk2AABYDgAAAHNvY2tldC5BRl9JTkVUcgo2AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9JTkVUWAEAAAAtdHILNgAAWBEAAABlcnJuby5FTk9QUk9UT09QVHIMNgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1BST1RPT1BUWAEAAAAtdHINNgAAWA4AAABzeXMucGF0aF9ob29rc3IONgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucGF0aF9ob29rc1gBAAAALXRyDzYAAFgMAAAAZXJybm8uRURRVU9UchA2AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRURRVU9UWAEAAAAtdHIRNgAAWA0AAABlcnJuby5FTElCQUNDchI2AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQkFDQ1gBAAAALXRyEzYAAFgOAAAAdHlwZXMuTGlzdFR5cGVyFDYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5MaXN0VHlwZVgBAAAALXRyFTYAAFgUAAAAZG9jdGVzdC5SRVBPUlRfVURJRkZyFjYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX1VESUZGWAEAAAAtdHIXNgAAWAoAAABvcy5UTVBfTUFYchg2AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuVE1QX01BWFgBAAAALXRyGTYAAFgMAAAAc3RhdC5TX0lSR1JQcho2AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJHUlBYAQAAAC10chs2AABYDAAAAHN0YXQuU19JV0dSUHIcNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lXR1JQWAEAAAAtdHIdNgAAWAkAAABjdXJzZXMuT0tyHjYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLk9LWAEAAAAtdHIfNgAAWAsAAAB0b2tlbi5TTEFTSHIgNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNMQVNIWAEAAAAtdHIhNgAAWBEAAABzc2wuQ0VSVF9SRVFVSVJFRHIiNgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuQ0VSVF9SRVFVSVJFRFgBAAAALXRyIzYAAFgYAAAAaGFzaGxpYi5oYXNoLmRpZ2VzdF9zaXplciQ2AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmhhc2guZGlnZXN0X3NpemVYAQAAAC10ciU2AABYCwAAAGRsLlJUTERfTk9XciY2AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjZGwuUlRMRF9OT1dYAQAAAC10cic2AABYEgAAAGVycm5vLkVDT05OQUJPUlRFRHIoNgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVDT05OQUJPUlRFRFgBAAAALXRyKTYAAFgMAAAAZXJybm8uRUlOVkFMcio2AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOVkFMWAEAAAAtdHIrNgAAWAsAAABlcnJuby5FUElQRXIsNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVQSVBFWAEAAAAtdHItNgAAWBEAAABjc3YuUVVPVEVfTUlOSU1BTHIuNgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuUVVPVEVfTUlOSU1BTFgBAAAALXRyLzYAAFgHAAAAY2QucG51bXIwNgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLnBudW1YAQAAAC10cjE2AABYDAAAAGVycm5vLkVOT0VOVHIyNgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0VOVFgBAAAALXRyMzYAAFgoAAAAeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfc3RyaW5nX2ludGVybmluZ3I0NgAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9zdHJpbmdfaW50ZXJuaW5nWAEAAAAtdHI1NgAAWBEAAAB0eXBlcy5Cb29sZWFuVHlwZXI2NgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJvb2xlYW5UeXBlWAEAAAAtdHI3NgAAWBIAAAByZXNvdXJjZS5STElNSVRfQVNyODYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfQVNYAQAAAC10cjk2AABYDgAAAHN5cy5fX3N0ZGVycl9fcjo2AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX3N0ZGVycl9fWAEAAAAtdHI7NgAAWA4AAABvcy5FWF9TT0ZUV0FSRXI8NgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX1NPRlRXQVJFWAEAAAAtdHI9NgAAWB8AAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0ZMT0FUcj42AAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19GTE9BVFgBAAAALXRyPzYAAFgIAAAAdG9rZW4uT1ByQDYAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5PUFgBAAAALXRyQTYAAFgNAAAAZXJybm8uRVJFTU9URXJCNgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVSRU1PVEVYAQAAAC10ckM2AABYFAAAAFB5X1RQRkxBR1NfSEFWRV9JVEVSckQ2AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX0lURVJYAQAAAC10ckU2AABYBAAAAHJlLlhyRjYAAChqcwUAAGp0BQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5YWAEAAAAtdHJHNgAAWBIAAABzeXMudHJhY2ViYWNrbGltaXRySDYAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnRyYWNlYmFja2xpbWl0WAEAAAAtdHJJNgAAWBQAAABtaW1ldHlwZXMua25vd25maWxlc3JKNgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMua25vd25maWxlc1gBAAAALXRySzYAAFgNAAAAaW1wLkNfQlVJTFRJTnJMNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuQ19CVUlMVElOWAEAAAAtdHJNNgAAWAwAAABzeXMuZXhpdGZ1bmNyTjYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4aXRmdW5jWAEAAAAtdHJPNgAAWA4AAABzdHJpbmcubGV0dGVyc3JQNgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcubGV0dGVyc1gBAAAALXRyUTYAAFgPAAAAZXJybm8uRU9WRVJGTE9XclI2AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU9WRVJGTE9XWAEAAAAtdHJTNgAAWA4AAABkaXMuaGFzY29tcGFyZXJUNgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzY29tcGFyZVgBAAAALXRyVTYAAFgSAAAAemlwZmlsZS5aSVBfU1RPUkVEclY2AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlpJUF9TVE9SRURYAQAAAC10clc2AABYIwAAAHhtbC5zYXguaGFuZGxlci5wcm9wZXJ0eV94bWxfc3RyaW5nclg2AAAoanMFAABqdAUAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5wcm9wZXJ0eV94bWxfc3RyaW5nWAEAAAAtdHJZNgAAWCIAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl84clo2AAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfOFgBAAAALXRyWzYAAFgXAAAAc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhyXDYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhYAQAAAC10cl02AABYEAAAAFRraW50ZXIuUkVBREFCTEVyXjYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuUkVBREFCTEVYAQAAAC10cl82AABYDAAAAHRpbWUuYWx0em9uZXJgNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5hbHR6b25lWAEAAAAtdHJhNgAAWBcAAABwaWNrbGUuSElHSEVTVF9QUk9UT0NPTHJiNgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuSElHSEVTVF9QUk9UT0NPTFgBAAAALXRyYzYAAFgSAAAAc3NsLlBST1RPQ09MX1RMU3YxcmQ2AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9UTFN2MVgBAAAALXRyZTYAAFgMAAAAZXJybm8uRU5PQU5PcmY2AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PQU5PWAEAAAAtdHJnNgAAWBIAAABQeV9UUEZMQUdTX0hBVkVfR0NyaDYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0hBVkVfR0NYAQAAAC10cmk2AABYDwAAAHNvY2tldC5oYXNfaXB2NnJqNgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaGFzX2lwdjZYAQAAAC10cms2AABYDgAAAHR5cGVzLk5vbmVUeXBlcmw2AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTm9uZVR5cGVYAQAAAC10cm02AABYDgAAAHR5cGVzLkRpY3RUeXBlcm42AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuRGljdFR5cGVYAQAAAC10cm82AABYDQAAAG1zaWxpYi5zY2hlbWFycDYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnNjaGVtYVgBAAAALXRycTYAAFgfAAAAc3VicHJvY2Vzcy5TVEFSVEZfVVNFU0hPV1dJTkRPV3JyNgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVEZfVVNFU0hPV1dJTkRPV1gBAAAALXRyczYAAFgPAAAAc3FsaXRlMy52ZXJzaW9ucnQ2AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnZlcnNpb25YAQAAAC10cnU2AABYDQAAAHV1aWQuUkZDXzQxMjJydjYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuUkZDXzQxMjJYAQAAAC10cnc2AABYBwAAAGNyZWRpdHNyeDYAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjY3JlZGl0c1gBAAAALXRyeTYAAFgZAAAAX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUnJ6NgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUlgBAAAALXRyezYAAFgPAAAAc3VicHJvY2Vzcy5QSVBFcnw2AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBJUEVYAQAAAC10cn02AABYEAAAAHRhYm5hbm55LnZlcmJvc2VyfjYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFibmFubnkuaHRtbCN0YWJuYW5ueS52ZXJib3NlWAEAAAAtdHJ/NgAAWBUAAAByZXNvdXJjZS5STElNSVRfT0ZJTEVygDYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfT0ZJTEVYAQAAAC10coE2AABYFAAAAF93aW5yZWcuUkVHX01VTFRJX1NacoI2AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19NVUxUSV9TWlgBAAAALXRygzYAAFgbAAAAc3VicHJvY2Vzcy5TVERfSU5QVVRfSEFORExFcoQ2AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURF9JTlBVVF9IQU5ETEVYAQAAAC10coU2AABYCgAAAG9zLmxpbmVzZXByhjYAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5saW5lc2VwWAEAAAAtdHKHNgAAWAgAAABjZC5pZGVudHKINgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLmlkZW50WAEAAAAtdHKJNgAAWBIAAABodHRwbGliLkhUVFBTX1BPUlRyijYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFNfUE9SVFgBAAAALXRyizYAAFgJAAAAb3MucGFyZGlycow2AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucGFyZGlyWAEAAAAtdHKNNgAAWAwAAABzeXMucGxhdGZvcm1yjjYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnBsYXRmb3JtWAEAAAAtdHKPNgAAWA4AAABjdXJzZXMudmVyc2lvbnKQNgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudmVyc2lvblgBAAAALXRykTYAAFgVAAAAdG9rZW4uQ0lSQ1VNRkxFWEVRVUFMcpI2AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ0lSQ1VNRkxFWEVRVUFMWAEAAAAtdHKTNgAAWAsAAABvcy5PX0FQUEVORHKUNgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fQVBQRU5EWAEAAAAtdHKVNgAAWBMAAAB0ZXN0LnN1cHBvcnQuVEVTVEZOcpY2AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVEZOWAEAAAAtdHKXNgAAWBEAAABvcy5FWF9VTkFWQUlMQUJMRXKYNgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX1VOQVZBSUxBQkxFWAEAAAAtdHKZNgAAWAsAAAB0b2tlbi5USUxERXKaNgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlRJTERFWAEAAAAtdHKbNgAAWAwAAABvcy5XVU5UUkFDRURynDYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XVU5UUkFDRURYAQAAAC10cp02AABYFQAAAHRva2VuLkRPVUJMRVNUQVJFUVVBTHKeNgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRPVUJMRVNUQVJFUVVBTFgBAAAALXRynzYAAFgNAAAAdGltZS5kYXlsaWdodHKgNgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5kYXlsaWdodFgBAAAALXRyoTYAAFgKAAAAdG9rZW4uU0VNSXKiNgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNFTUlYAQAAAC10cqM2AABYDAAAAGRsLlJUTERfTEFaWXKkNgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLlJUTERfTEFaWVgBAAAALXRypTYAAFgIAAAAdG9rZW4uQVRypjYAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5BVFgBAAAALXRypzYAAFgQAAAAc3RhdC5TRl9OT1VOTElOS3KoNgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9OT1VOTElOS1gBAAAALXRyqTYAAFgYAAAAc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzcqo2AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5idWlsdGluX21vZHVsZV9uYW1lc1gBAAAALXRyqzYAAFgOAAAAbG9jYWxlLkxDX1RJTUVyrDYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX1RJTUVYAQAAAC10cq02AABYEQAAAGVycm5vLkVJTlBST0dSRVNTcq42AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOUFJPR1JFU1NYAQAAAC10cq82AABYCgAAAHJlcHIuYVJlcHJysDYAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuYVJlcHJYAQAAAC10crE2AABYDQAAAGdjLkRFQlVHX0xFQUtysjYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19MRUFLWAEAAAAtdHKzNgAAWAoAAABzeXMucHJlZml4crQ2AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5wcmVmaXhYAQAAAC10crU2AABYDQAAAHN0YXQuU19JV1JJVEVytjYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JV1JJVEVYAQAAAC10crc2AABYDAAAAGxvY2FsZS5EX0ZNVHK4NgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRF9GTVRYAQAAAC10crk2AABYEgAAAHRhcmZpbGUuR05VX0ZPUk1BVHK6NgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5HTlVfRk9STUFUWAEAAAAtdHK7NgAAWBUAAAB1bmljb2RlZGF0YS51Y2RfM18yXzByvDYAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS51Y2RfM18yXzBYAQAAAC10cr02AABYIQAAAHRhcmZpbGUuVGFyRmlsZUNvbXBhdC5UQVJfR1pJUFBFRHK+NgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlQ29tcGF0LlRBUl9HWklQUEVEWAEAAAAtdHK/NgAAWAgAAABjZC5wdGltZXLANgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLnB0aW1lWAEAAAAtdHLBNgAAWA0AAABzeXMubWV0YV9wYXRocsI2AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5tZXRhX3BhdGhYAQAAAC10csM2AABYCgAAAG9zLmVudmlyb25yxDYAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5lbnZpcm9uWAEAAAAtdHLFNgAAWBEAAABzdGF0LlNGX0lNTVVUQUJMRXLGNgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9JTU1VVEFCTEVYAQAAAC10csc2AABYDwAAAGltcC5QWV9DT01QSUxFRHLINgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuUFlfQ09NUElMRURYAQAAAC10csk2AABYGQAAAHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUZyyjYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRlgBAAAALXRyyzYAAFgXAAAAc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlRyzDYAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlRYAQAAAC10cs02AABYCgAAAG9zLmRlZnBhdGhyzjYAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5kZWZwYXRoWAEAAAAtdHLPNgAAWA0AAABlcnJuby5FTkFWQUlMctA2AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5BVkFJTFgBAAAALXRy0TYAAFgOAAAAZXJybm8uRUwyTlNZTkNy0jYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTDJOU1lOQ1gBAAAALXRy0zYAAFgRAAAAX3dpbnJlZy5SRUdfRFdPUkRy1DYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0RXT1JEWAEAAAAtdHLVNgAAWAkAAABjZC5QQVVTRURy1jYAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5QQVVTRURYAQAAAC10ctc2AABYDgAAAG9zLk9fVEVNUE9SQVJZctg2AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19URU1QT1JBUllYAQAAAC10ctk2AABYGQAAAHNzbC5DSEFOTkVMX0JJTkRJTkdfVFlQRVNy2jYAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNIQU5ORUxfQklORElOR19UWVBFU1gBAAAALXRy2zYAAFgsAAAAeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXJy3DYAAChqcwUAAGp0BQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXJYAQAAAC10ct02AABYEAAAAHNvY2tldC5TT01BWENPTk5y3jYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPTUFYQ09OTlgBAAAALXRy3zYAAFgOAAAAdHlwZXMuQ29kZVR5cGVy4DYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5Db2RlVHlwZVgBAAAALXRy4TYAAFgSAAAAZXJybm8uRUFGTk9TVVBQT1JUcuI2AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFGTk9TVVBQT1JUWAEAAAAtdHLjNgAAWCYAAABhc3luY2hhdC5hc3luY19jaGF0LmFjX291dF9idWZmZXJfc2l6ZXLkNgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuYWNfb3V0X2J1ZmZlcl9zaXplWAEAAAAtdHLlNgAAWCMAAABzdWJwcm9jZXNzLkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUHLmNgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DUkVBVEVfTkVXX1BST0NFU1NfR1JPVVBYAQAAAC10cuc2AABYFwAAAHN5cy5kb250X3dyaXRlX2J5dGVjb2Rlcug2AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5kb250X3dyaXRlX2J5dGVjb2RlWAEAAAAtdHLpNgAAWA8AAAB0b2tlbi5QTFVTRVFVQUxy6jYAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5QTFVTRVFVQUxYAQAAAC10cus2AABYDgAAAHRva2VuLk5PVEVRVUFMcuw2AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTk9URVFVQUxYAQAAAC10cu02AABYFgAAAHRhYm5hbm55LmZpbGVuYW1lX29ubHly7jYAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFibmFubnkuaHRtbCN0YWJuYW5ueS5maWxlbmFtZV9vbmx5WAEAAAAtdHLvNgAAWA0AAABzaXRlLlBSRUZJWEVTcvA2AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLlBSRUZJWEVTWAEAAAAtdHLxNgAAWAsAAABzdGF0LlNUX0lOT3LyNgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9JTk9YAQAAAC10cvM2AABYEQAAAHdlYWtyZWYuUHJveHlUeXBlcvQ2AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLlByb3h5VHlwZVgBAAAALXRy9TYAAFghAAAAZG9jdGVzdC5SRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFcvY2AAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkVYAQAAAC10cvc2AABYDgAAAHN0YXQuVUZfSElEREVOcvg2AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX0hJRERFTlgBAAAALXRy+TYAAFgOAAAAc3lzLnN1YnZlcnNpb25y+jYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnN1YnZlcnNpb25YAQAAAC10cvs2AABYCAAAAGNkLmF0aW1lcvw2AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuYXRpbWVYAQAAAC10cv02AABYDwAAAHNzbC5IQVNfVExTdjFfM3L+NgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX1RMU3YxXzNYAQAAAC10cv82AABYEwAAAGNvZGVjcy5CT01fVVRGMzJfQkVyADcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9VVEYzMl9CRVgBAAAALXRyATcAAFgKAAAAb3MuV05PSEFOR3ICNwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLldOT0hBTkdYAQAAAC10cgM3AABYEAAAAHN0YXQuU0ZfQVJDSElWRURyBDcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU0ZfQVJDSElWRURYAQAAAC10cgU3AABYFAAAAGNzdi5RVU9URV9OT05OVU1FUklDcgY3AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9OT05OVU1FUklDWAEAAAAtdHIHNwAAWA8AAAB0eXBlcy5GbG9hdFR5cGVyCDcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5GbG9hdFR5cGVYAQAAAC10cgk3AABYCwAAAHRva2VuLkVRVUFMcgo3AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRVFVQUxYAQAAAC10cgs3AABYHwAAAGRpc3R1dGlscy5zeXNjb25maWcuRVhFQ19QUkVGSVhyDDcAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLkVYRUNfUFJFRklYWAEAAAAtdHINNwAAWA0AAAB0eXBlcy5JbnRUeXBlcg43AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuSW50VHlwZVgBAAAALXRyDzcAAFgQAAAAZXJybm8uRUFERFJJTlVTRXIQNwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBRERSSU5VU0VYAQAAAC10chE3AABYCgAAAHRva2VuLlZCQVJyEjcAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5WQkFSWAEAAAAtdHITNwAAWBMAAAB0eXBlcy5HZW5lcmF0b3JUeXBlchQ3AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuR2VuZXJhdG9yVHlwZVgBAAAALXRyFTcAAFgNAAAAZXJybm8uRURPVERPVHIWNwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVET1RET1RYAQAAAC10chc3AABYEgAAAHNpZ25hbC5JVElNRVJfUFJPRnIYNwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1BST0ZYAQAAAC10chk3AABYIwAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzMycho3AAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMzJYAQAAAC10chs3AABYCwAAAHN5cy52ZXJzaW9uchw3AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy52ZXJzaW9uWAEAAAAtdHIdNwAAWBIAAABsb2NhbGUuTENfTU9ORVRBUllyHjcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX01PTkVUQVJZWAEAAAAtdHIfNwAAWA8AAABlcnJuby5FTkVUUkVTRVRyIDcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkVUUkVTRVRYAQAAAC10ciE3AABYCgAAAHRva2VuLlNUQVJyIjcAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5TVEFSWAEAAAAtdHIjNwAAWA0AAABzeXMubGFzdF90eXBlciQ3AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5sYXN0X3R5cGVYAQAAAC10ciU3AABYHQAAAFB5X1RQRkxBR1NfSEFWRV9HRVRDSEFSQlVGRkVSciY3AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX0dFVENIQVJCVUZGRVJYAQAAAC10cic3AABYDwAAAHRva2VuLlZCQVJFUVVBTHIoNwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlZCQVJFUVVBTFgBAAAALXRyKTcAAFgNAAAAZXJybm8uRU5PVEJMS3IqNwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RCTEtYAQAAAC10cis3AABYBwAAAG9zLkZfT0tyLDcAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5GX09LWAEAAAAtdHItNwAAWB0AAABkb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORXIuNwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkVYAQAAAC10ci83AABYCgAAAG9zLk9fQVNZTkNyMDcAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0FTWU5DWAEAAAAtdHIxNwAAWCQAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9leHRlcm5hbF9nZXNyMjcAAChqcwUAAGp0BQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfZXh0ZXJuYWxfZ2VzWAEAAAAtdHIzNwAAWBEAAABzc2wuT1BfTk9fVExTdjFfM3I0NwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fVExTdjFfM1gBAAAALXRyNTcAAFgRAAAAc3NsLk9QX05PX1RMU3YxXzJyNjcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RMU3YxXzJYAQAAAC10cjc3AABYDAAAAGVycm5vLkVVU0VSU3I4NwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVVU0VSU1gBAAAALXRyOTcAAFgWAAAAbWltZXR5cGVzLmNvbW1vbl90eXBlc3I6NwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuY29tbW9uX3R5cGVzWAEAAAAtdHI7NwAAWBAAAABzeXMudmVyc2lvbl9pbmZvcjw3AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy52ZXJzaW9uX2luZm9YAQAAAC10cj03AABYCQAAAG9zLk9fU1lOQ3I+NwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fU1lOQ1gBAAAALXRyPzcAAFggAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19ET1VCTEVyQDcAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0RPVUJMRVgBAAAALXRyQTcAAFgcAAAAaGFzaGxpYi5hbGdvcml0aG1zX2F2YWlsYWJsZXJCNwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5hbGdvcml0aG1zX2F2YWlsYWJsZVgBAAAALXRyQzcAAFgIAAAAY2QuYXVkaW9yRDcAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5hdWRpb1gBAAAALXRyRTcAAFgXAAAAX3dpbnJlZy5LRVlfV09XNjRfMzJLRVlyRjcAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX1dPVzY0XzMyS0VZWAEAAAAtdHJHNwAAWBAAAABnYy5ERUJVR19PQkpFQ1RTckg3AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfT0JKRUNUU1gBAAAALXRySTcAAFgMAAAAc3RhdC5TX0lGUkVHcko3AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSUZSRUdYAQAAAC10cks3AABYFgAAAHJlc291cmNlLlJMSU1JVF9OT0ZJTEVyTDcAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfTk9GSUxFWAEAAAAtdHJNNwAAWA8AAABzaGEuZGlnZXN0X3NpemVyTjcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWwjc2hhLmRpZ2VzdF9zaXplWAEAAAAtdHJPNwAAWAwAAABvcy5FWF9PU0ZJTEVyUDcAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9PU0ZJTEVYAQAAAC10clE3AABYFwAAAHhtbC5kb20uWEhUTUxfTkFNRVNQQUNFclI3AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlhIVE1MX05BTUVTUEFDRVgBAAAALXRyUzcAAFgQAAAAdG9rZW4uU0xBU0hFUVVBTHJUNwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNMQVNIRVFVQUxYAQAAAC10clU3AABYCgAAAG9zLk9fQ1JFQVRyVjcAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0NSRUFUWAEAAAAtdHJXNwAAWCUAAABhc3luY2hhdC5hc3luY19jaGF0LmFjX2luX2J1ZmZlcl9zaXplclg3AAAoanMFAABqdAUAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5hY19pbl9idWZmZXJfc2l6ZVgBAAAALXRyWTcAAFghAAAAeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RvbV9ub2Rlclo3AAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9kb21fbm9kZVgBAAAALXRyWzcAAFgWAAAAdGVzdC5zdXBwb3J0LmlzX2p5dGhvbnJcNwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmlzX2p5dGhvblgBAAAALXRyXTcAAFgOAAAAZXJybm8uRVNUUlBJUEVyXjcAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1RSUElQRVgBAAAALXRyXzcAAFgOAAAAc3lzLmhleHZlcnNpb25yYDcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmhleHZlcnNpb25YAQAAAC10cmE3AABYIQAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOHJiNwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOFgBAAAALXRyYzcAAFgNAAAAc3RhdC5TVF9DVElNRXJkNwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9DVElNRVgBAAAALXRyZTcAAFgIAAAARWxsaXBzaXNyZjcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjRWxsaXBzaXNYAQAAAC10cmc3AABYCgAAAG9zLmRldm51bGxyaDcAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5kZXZudWxsWAEAAAAtdHJpNwAAWBYAAAB3aW5zb3VuZC5TTkRfTk9ERUZBVUxUcmo3AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX05PREVGQVVMVFgBAAAALXRyazcAAFgIAAAAb3MuRVhfT0tybDcAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9PS1gBAAAALXRybTcAAFgMAAAAZXJybm8uRU5PU1RScm43AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PU1RSWAEAAAAtdHJvNwAAWBUAAABlcnJuby5FUFJPVE9OT1NVUFBPUlRycDcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUFJPVE9OT1NVUFBPUlRYAQAAAC10cnE3AABYDQAAAGVycm5vLkVOT0VYRUNycjcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9FWEVDWAEAAAAtdHJzNwAAWA4AAABsb2NhbGUuRF9UX0ZNVHJ0NwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRF9UX0ZNVFgBAAAALXRydTcAAFgPAAAAbG9jYWxlLkxDX0NUWVBFcnY3AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19DVFlQRVgBAAAALXRydzcAAFgmAAAAX3dpbnJlZy5SRUdfUkVTT1VSQ0VfUkVRVUlSRU1FTlRTX0xJU1RyeDcAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX1JFU09VUkNFX1JFUVVJUkVNRU5UU19MSVNUWAEAAAAtdHJ5NwAAWBQAAABtaW1ldHlwZXMuc3VmZml4X21hcHJ6NwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuc3VmZml4X21hcFgBAAAALXRyezcAAFgUAAAAcmVzb3VyY2UuUkxJTUlUX1ZNRU1yfDcAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfVk1FTVgBAAAALXRyfTcAAFgQAAAAdG9rZW4uRVJST1JUT0tFTnJ+NwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkVSUk9SVE9LRU5YAQAAAC10cn83AABYDAAAAGVycm5vLkVJU05BTXKANwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJU05BTVgBAAAALXRygTcAAFgfAAAAc3VicHJvY2Vzcy5TVEFSVEZfVVNFU1RESEFORExFU3KCNwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVEZfVVNFU1RESEFORExFU1gBAAAALXRygzcAAFgOAAAAbXN2Y3J0LkxLX1JMQ0tyhDcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LkxLX1JMQ0tYAQAAAC10coU3AABYEQAAAHdpbnNvdW5kLlNORF9MT09QcoY3AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0xPT1BYAQAAAC10coc3AABYDAAAAGRpcy5oYXNsb2NhbHKINwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzbG9jYWxYAQAAAC10cok3AABYFAAAAHRva2VuLkxFRlRTSElGVEVRVUFMcoo3AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTEVGVFNISUZURVFVQUxYAQAAAC10cos3AABYDQAAAHRva2VuLkVRRVFVQUxyjDcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5FUUVRVUFMWAEAAAAtdHKNNwAAWBIAAAB3aW5zb3VuZC5TTkRfQVNZTkNyjjcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5TTkRfQVNZTkNYAQAAAC10co83AABYDQAAAG9zLkVYX05PSU5QVVRykDcAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT0lOUFVUWAEAAAAtdHKRNwAAWBIAAABlcnJuby5FSE9TVFVOUkVBQ0hykjcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSE9TVFVOUkVBQ0hYAQAAAC10cpM3AABYDwAAAHN5cy53YXJub3B0aW9uc3KUNwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMud2Fybm9wdGlvbnNYAQAAAC10cpU3AABYCgAAAG9zLk9fVFJVTkNyljcAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1RSVU5DWAEAAAAtdHKXNwAAWA8AAAB0b2tlbi5CQUNLUVVPVEVymDcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5CQUNLUVVPVEVYAQAAAC10cpk3AABYDAAAAGNkLkJMT0NLU0laRXKaNwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLkJMT0NLU0laRVgBAAAALXRymzcAAFgPAAAAc3RhdHZmcy5GX0ZJTEVTcpw3AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfRklMRVNYAQAAAC10cp03AABYDgAAAHR5cGVzLkxvbmdUeXBlcp43AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTG9uZ1R5cGVYAQAAAC10cp83AABYEAAAAHR5cGVzLk1ldGhvZFR5cGVyoDcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NZXRob2RUeXBlWAEAAAAtdHKhNwAAWBEAAAB0aW1lLmFjY2VwdDJkeWVhcnKiNwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5hY2NlcHQyZHllYXJYAQAAAC10cqM3AABYDAAAAGVycm5vLkVOT01TR3KkNwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT01TR1gBAAAALXRypTcAAFgQAAAAVGtpbnRlci5XUklUQUJMRXKmNwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjVGtpbnRlci5XUklUQUJMRVgBAAAALXRypzcAAFgYAAAAUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTcqg3AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTWAEAAAAtdHKpNwAAWAcAAABvcy5XX09Lcqo3AAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV19PS1gBAAAALXRyqzcAAFgVAAAAcmVzb3VyY2UuUkxJTUlUX1NUQUNLcqw3AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX1NUQUNLWAEAAAAtdHKtNwAAWBkAAABjdXJzZXMuYXNjaWkuY29udHJvbG5hbWVzcq43AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5jb250cm9sbmFtZXNYAQAAAC10cq83AABYCAAAAGNkLkNEUk9NcrA3AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuQ0RST01YAQAAAC10crE3AABYIwAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzE2crI3AAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMTZYAQAAAC10crM3AABYEgAAAHV1aWQuTkFNRVNQQUNFX09JRHK0NwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5OQU1FU1BBQ0VfT0lEWAEAAAAtdHK1NwAAWBAAAAB0eXBlcy5CdWZmZXJUeXBlcrY3AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQnVmZmVyVHlwZVgBAAAALXRytzcAAFgPAAAAdHlwZXMuVHVwbGVUeXBlcrg3AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuVHVwbGVUeXBlWAEAAAAtdHK5NwAAWBAAAABzdGF0LlVGX05PVU5MSU5Lcro3AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX05PVU5MSU5LWAEAAAAtdHK7NwAAWBMAAABjYWxlbmRhci5tb250aF9hYmJycrw3AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIubW9udGhfYWJiclgBAAAALXRyvTcAAFgYAAAAdHlwZXMuTm90SW1wbGVtZW50ZWRUeXBlcr43AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTm90SW1wbGVtZW50ZWRUeXBlWAEAAAAtdHK/NwAAWAwAAABlcnJuby5FQUdBSU5ywDcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQUdBSU5YAQAAAC10csE3AABYFAAAAHJlc291cmNlLlJMSU1JVF9DT1JFcsI3AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX0NPUkVYAQAAAC10csM3AABYDQAAAHBvc2l4LmVudmlyb25yxDcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXguaHRtbCNwb3NpeC5lbnZpcm9uWAEAAAAtdHLFNwAAWBIAAABzb2NrZXQuU09DS19TVFJFQU1yxjcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfU1RSRUFNWAEAAAAtdHLHNwAAWA0AAAB0aW1lLnRpbWV6b25lcsg3AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnRpbWV6b25lWAEAAAAtdHLJNwAAWBYAAAB0b2tlbi5ET1VCTEVTTEFTSEVRVUFMcso3AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU0xBU0hFUVVBTFgBAAAALXRyyzcAAFgQAAAAc3NsLlBST1RPQ09MX1RMU3LMNwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTWAEAAAAtdHLNNwAAWAwAAABlcnJuby5FTUxJTktyzjcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTUxJTktYAQAAAC10cs83AABYGAAAAHdpbnNvdW5kLk1CX0lDT05RVUVTVElPTnLQNwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1CX0lDT05RVUVTVElPTlgBAAAALXRy0TcAAFgLAAAAb3MuT19OREVMQVly0jcAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX05ERUxBWVgBAAAALXRy0zcAAFgLAAAAb3MuRVhfSU9FUlJy1DcAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9JT0VSUlgBAAAALXRy1TcAAFgXAAAAaGFzaGxpYi5oYXNoLmJsb2NrX3NpemVy1jcAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC5ibG9ja19zaXplWAEAAAAtdHLXNwAAWA0AAABlcnJuby5FQkFETVNHctg3AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBRE1TR1gBAAAALXRy2TcAAFgSAAAAX3dpbnJlZy5SRUdfQklOQVJZcto3AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19CSU5BUllYAQAAAC10cts3AABYEQAAAHR5cGVzLkNvbXBsZXhUeXBlctw3AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQ29tcGxleFR5cGVYAQAAAC10ct03AABYEAAAAHN0YXR2ZnMuRl9CTE9DS1Ny3jcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9CTE9DS1NYAQAAAC10ct83AABYDgAAAGNzdi5RVU9URV9OT05FcuA3AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9OT05FWAEAAAAtdHLhNwAAWA8AAABzb2NrZXQuQUZfSU5FVDZy4jcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX0lORVQ2WAEAAAAtdHLjNwAAWBUAAAByZXNvdXJjZS5STElNSVRfRlNJWkVy5DcAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfRlNJWkVYAQAAAC10cuU3AABYFAAAAHR5cGVzLkRpY3Rpb25hcnlUeXBlcuY3AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuRGljdGlvbmFyeVR5cGVYAQAAAC10cuc3AABYCwAAAGNkLkRBVEFTSVpFcug3AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuREFUQVNJWkVYAQAAAC10cuk3AABYDAAAAGltZ2hkci50ZXN0c3LqNwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdoZHIuaHRtbCNpbWdoZHIudGVzdHNYAQAAAC10cus3AABYCwAAAGRpcy5oYXNqYWJzcuw3AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNqYWJzWAEAAAAtdHLtNwAAWBYAAABzcWxpdGUzLnNxbGl0ZV92ZXJzaW9ucu43AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uWAEAAAAtdHLvNwAAWA8AAABzeXMuYXBpX3ZlcnNpb25y8DcAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmFwaV92ZXJzaW9uWAEAAAAtdHLxNwAAWBoAAAB0eXBlcy5HZXRTZXREZXNjcmlwdG9yVHlwZXLyNwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkdldFNldERlc2NyaXB0b3JUeXBlWAEAAAAtdHLzNwAAWBIAAABlcnJuby5FQ09OTlJFRlVTRURy9DcAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ09OTlJFRlVTRURYAQAAAC10cvU3AABYDAAAAGVycm5vLkVCRk9OVHL2NwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCRk9OVFgBAAAALXRy9zcAAFgNAAAAZXJybm8uRU5PVE5BTXL4NwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1ROQU1YAQAAAC10cvk3AABYCwAAAG9zLlBfREVUQUNIcvo3AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuUF9ERVRBQ0hYAQAAAC10cvs3AABYFwAAAHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFcvw3AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVNUFRZX05BTUVTUEFDRVgBAAAALXRy/TcAAFgMAAAAb3MuRVhfQ09ORklHcv43AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfQ09ORklHWAEAAAAtdHL/NwAAWBoAAABzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUnIAOAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUlgBAAAALXRyATgAAFgPAAAAdGhyZWFkLkxvY2tUeXBlcgI4AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5Mb2NrVHlwZVgBAAAALXRyAzgAAFgMAAAAZXJybm8uRU5PTUVNcgQ4AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTUVNWAEAAAAtdHIFOAAAWA4AAABlcnJuby5FTk9UVU5JUXIGOAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RVTklRWAEAAAAtdHIHOAAAWA0AAABzeXMuZGxsaGFuZGxlcgg4AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5kbGxoYW5kbGVYAQAAAC10cgk4AABYEgAAAHN1YnByb2Nlc3MuU1dfSElERXIKOAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TV19ISURFWAEAAAAtdHILOAAAWAoAAABlcnJuby5FRE9Ncgw4AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRURPTVgBAAAALXRyDTgAAFgLAAAAZXJybm8uRUNPTU1yDjgAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ09NTVgBAAAALXRyDzgAAFgRAAAAZnRwbGliLmFsbF9lcnJvcnNyEDgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLmFsbF9lcnJvcnNYAQAAAC10chE4AABYDAAAAGVycm5vLkVJTFNFUXISOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJTFNFUVgBAAAALXRyEzgAAFgPAAAAc3RhdHZmcy5GX0ZGUkVFchQ4AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfRkZSRUVYAQAAAC10chU4AABYCwAAAE1FVEhfU1RBVElDchY4AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9TVEFUSUNYAQAAAC10chc4AABYEgAAAHBvc2l4ZmlsZS5TRUVLX0VORHIYOAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbCNwb3NpeGZpbGUuU0VFS19FTkRYAQAAAC10chk4AABYCwAAAG9zLlNFRUtfRU5Echo4AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuU0VFS19FTkRYAQAAAC10chs4AABYCQAAAF9fc2xvdHNfX3IcOAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI19fc2xvdHNfX1gBAAAALXRyHTgAAFgOAAAAZXJybm8uRU5FVERPV05yHjgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkVURE9XTlgBAAAALXRyHzgAAFgNAAAATUVUSF9LRVlXT1JEU3IgOAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfS0VZV09SRFNYAQAAAC10ciE4AABYDAAAAHRva2VuLk5VTUJFUnIiOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5VTUJFUlgBAAAALXRyIzgAAFgQAAAAdHlwZXMuTGFtYmRhVHlwZXIkOAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkxhbWJkYVR5cGVYAQAAAC10ciU4AABYEwAAAHNpZ25hbC5DVFJMX0NfRVZFTlRyJjgAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLkNUUkxfQ19FVkVOVFgBAAAALXRyJzgAAFgSAAAAcG9zaXhmaWxlLlNFRUtfU0VUcig4AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5TRUVLX1NFVFgBAAAALXRyKTgAAFgJAAAAZGlzLm9wbWFwcio4AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5vcG1hcFgBAAAALXRyKzgAAFgbAAAAUHlfVFBGTEFHU19IQVZFX1JJQ0hDT01QQVJFciw4AAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX1JJQ0hDT01QQVJFWAEAAAAtdHItOAAAWBwAAABzdWJwcm9jZXNzLlNURF9PVVRQVVRfSEFORExFci44AAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURF9PVVRQVVRfSEFORExFWAEAAAAtdHIvOAAAWBEAAABlcnJuby5FV09VTERCTE9DS3IwOAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVXT1VMREJMT0NLWAEAAAAtdHIxOAAAWA0AAABfX21ldGFjbGFzc19fcjI4AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjX19tZXRhY2xhc3NfX1gBAAAALXRyMzgAAFgGAAAAbWF0aC5lcjQ4AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmVYAQAAAC10cjU4AABYEQAAAF93aW5yZWcuS0VZX1dSSVRFcjY4AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLktFWV9XUklURVgBAAAALXRyNzgAAFgRAAAAc3RhdHZmcy5GX05BTUVNQVhyODgAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9OQU1FTUFYWAEAAAAtdHI5OAAAWBUAAAB3ZWFrcmVmLlJlZmVyZW5jZVR5cGVyOjgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuUmVmZXJlbmNlVHlwZVgBAAAALXRyOzgAAFgLAAAAb3MuT19SRE9OTFlyPDgAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JET05MWVgBAAAALXRyPTgAAFgZAAAAd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZXI+OAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZVgBAAAALXRyPzgAAFgMAAAAc3RhdC5TX0lSVVNSckA4AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJVU1JYAQAAAC10ckE4AABYHwAAAGRvY3Rlc3QuSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxyQjgAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxYAQAAAC10ckM4AABYEAAAAHR5cGVzLk1vZHVsZVR5cGVyRDgAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5Nb2R1bGVUeXBlWAEAAAAtdHJFOAAAWAsAAABzaWduYWwuTlNJR3JGOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuTlNJR1gBAAAALXRyRzgAAFgSAAAAZXJybm8uRVBGTk9TVVBQT1JUckg4AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBGTk9TVVBQT1JUWAEAAAAtdHJJOAAAWAwAAABzdGF0LlNfSVJXWE9ySjgAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUldYT1gBAAAALXRySzgAAFgMAAAAb3MuUF9OT1dBSVRPckw4AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuUF9OT1dBSVRPWAEAAAAtdHJNOAAAWAwAAABlcnJuby5FTkZJTEVyTjgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkZJTEVYAQAAAC10ck84AABYDAAAAGVycm5vLkVJU0RJUnJQOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJU0RJUlgBAAAALXRyUTgAAFgMAAAAZXJybm8uRVNQSVBFclI4AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNQSVBFWAEAAAAtdHJTOAAAWBMAAAB3aW5zb3VuZC5TTkRfTk9TVE9QclQ4AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX05PU1RPUFgBAAAALXRyVTgAAFgNAAAAc3RhdC5TVF9NVElNRXJWOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9NVElNRVgBAAAALXRyVzgAAFgQAAAAdHlwZXMuU3RyaW5nVHlwZXJYOAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlN0cmluZ1R5cGVYAQAAAC10clk4AABYCQAAAG9zLmN1cmRpcnJaOAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmN1cmRpclgBAAAALXRyWzgAAFgHAAAAb3MuWF9PS3JcOAAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlhfT0tYAQAAAC10cl04AABYEgAAAHRhcmZpbGUuUEFYX0ZPUk1BVHJeOAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5QQVhfRk9STUFUWAEAAAAtdHJfOAAAWB0AAABoYXNobGliLmFsZ29yaXRobXNfZ3VhcmFudGVlZHJgOAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5hbGdvcml0aG1zX2d1YXJhbnRlZWRYAQAAAC10cmE4AABYDAAAAGVycm5vLkVBQ0NFU3JiOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBQ0NFU1gBAAAALXRyYzgAAFgKAAAAcmUuVkVSQk9TRXJkOAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlZFUkJPU0VYAQAAAC10cmU4AABYCwAAAGRibS5saWJyYXJ5cmY4AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RibS5odG1sI2RibS5saWJyYXJ5WAEAAAAtdHJnOAAAWBAAAAB0ZW1wZmlsZS50ZW1wZGlycmg4AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUudGVtcGRpclgBAAAALXRyaTgAAFgdAAAAc3NsLlZFUklGWV9YNTA5X1RSVVNURURfRklSU1RyajgAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZFUklGWV9YNTA5X1RSVVNURURfRklSU1RYAQAAAC10cms4AABYDQAAAHBhcnNlci5TVFR5cGVybDgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlNUVHlwZVgBAAAALXRybTgAAFgTAAAAc3NsLk9QRU5TU0xfVkVSU0lPTnJuOAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OWAEAAAAtdHJvOAAAWAwAAABlcnJuby5FTk9ERVZycDgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9ERVZYAQAAAC10cnE4AABYEgAAAHRva2VuLkdSRUFURVJFUVVBTHJyOAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkdSRUFURVJFUVVBTFgBAAAALXRyczgAAFgNAAAAc3lzLmV4Y192YWx1ZXJ0OAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhjX3ZhbHVlWAEAAAAtdHJ1OAAAWBAAAABvcy5jb25mc3RyX25hbWVzcnY4AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY29uZnN0cl9uYW1lc1gBAAAALXRydzgAAFgOAAAAdG9rZW4uTUlORVFVQUxyeDgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5NSU5FUVVBTFgBAAAALXRyeTgAAFgPAAAAc29ja2V0LlNPQ0tfUkRNcno4AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5TT0NLX1JETVgBAAAALXRyezgAAFgHAAAAc3lzLnBzMnJ8OAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucHMyWAEAAAAtdHJ9OAAAWA8AAABlcnJuby5lcnJvcmNvZGVyfjgAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5lcnJvcmNvZGVYAQAAAC10cn84AABYDAAAAE1FVEhfVkFSQVJHU3KAOAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfVkFSQVJHU1gBAAAALXRygTgAAFgbAAAAc3FsaXRlMy5zcWxpdGVfdmVyc2lvbl9pbmZvcoI4AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uX2luZm9YAQAAAC10coM4AABYDAAAAHN0YXQuU19JRkxOS3KEOAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGTE5LWAEAAAAtdHKFOAAAWBAAAABjb2RlY3MuQk9NX1VURjMycoY4AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGMzJYAQAAAC10coc4AABYCwAAAG9zLk9fTk9DVFRZcog4AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19OT0NUVFlYAQAAAC10cok4AABYDQAAAG9zLk9fTk9OQkxPQ0tyijgAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX05PTkJMT0NLWAEAAAAtdHKLOAAAWA8AAABlcnJuby5FSE9TVERPV05yjDgAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSE9TVERPV05YAQAAAC10co04AABYDgAAAHN5cy5leGVjdXRhYmxlco44AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGVjdXRhYmxlWAEAAAAtdHKPOAAAWAoAAABlcnJuby5FQURWcpA4AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFEVlgBAAAALXRykTgAAFgTAAAAY29kZWNzLkJPTV9VVEYxNl9CRXKSOAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2X0JFWAEAAAAtdHKTOAAAWAsAAABlcnJuby5FTk9TUnKUOAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1NSWAEAAAAtdHKVOAAAWB4AAABkb2N0ZXN0LkRPTlRfQUNDRVBUX1RSVUVfRk9SXzFyljgAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMVgBAAAALXRylzgAAFgLAAAAZXJybm8uRTJCSUdymDgAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FMkJJR1gBAAAALXRymTgAAFgSAAAAZXJybm8uRVRPT01BTllSRUZTcpo4AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVRPT01BTllSRUZTWAEAAAAtdHKbOAAAWA0AAABzdGF0LlNUX05MSU5Lcpw4AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX05MSU5LWAEAAAAtdHKdOAAAWCYAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjNfM3KeOAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyM18zWAEAAAAtdHKfOAAAWA0AAABzdGF0LlNUX0FUSU1FcqA4AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX0FUSU1FWAEAAAAtdHKhOAAAWCYAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjNfNXKiOAAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyM181WAEAAAAtdHKjOAAAWA0AAABpbXAuUFlfU09VUkNFcqQ4AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5QWV9TT1VSQ0VYAQAAAC10cqU4AABYEgAAAHNpZ25hbC5JVElNRVJfUkVBTHKmOAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1JFQUxYAQAAAC10cqc4AABYDAAAAGVycm5vLkVOT1NZU3KoOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1NZU1gBAAAALXRyqTgAAFgSAAAAX3dpbnJlZy5IS0VZX1VTRVJTcqo4AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfVVNFUlNYAQAAAC10cqs4AABYDQAAAGVycm5vLkVOT0RBVEFyrDgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9EQVRBWAEAAAAtdHKtOAAAWBUAAABfd2lucmVnLkhLRVlfRFlOX0RBVEFyrjgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuSEtFWV9EWU5fREFUQVgBAAAALXRyrzgAAFgKAAAAc3NsLk9QX0FMTHKwOAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfQUxMWAEAAAAtdHKxOAAAWA0AAABzeXMuX19zdGRpbl9fcrI4AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX3N0ZGluX19YAQAAAC10crM4AABYDAAAAGVycm5vLkVMM0hMVHK0OAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMM0hMVFgBAAAALXRytTgAAFgKAAAAdG9rZW4uTkFNRXK2OAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5BTUVYAQAAAC10crc4AABYFQAAAHNpZ25hbC5JVElNRVJfVklSVFVBTHK4OAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1ZJUlRVQUxYAQAAAC10crk4AABYFAAAAHJlc291cmNlLlJVU0FHRV9CT1RIcro4AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUlVTQUdFX0JPVEhYAQAAAC10crs4AABYGwAAAFB5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTnK8OAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTlgBAAAALXRyvTgAAFgLAAAAdG9rZW4uQ09NTUFyvjgAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5DT01NQVgBAAAALXRyvzgAAFgNAAAAdG9rZW4uTkVXTElORXLAOAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5FV0xJTkVYAQAAAC10csE4AABYDQAAAGVycm5vLkVERUFETEtywjgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FREVBRExLWAEAAAAtdHLDOAAAWAQAAABOb25lcsQ4AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI05vbmVYAQAAAC10csU4AABYDAAAAG9zLlBfT1ZFUkxBWXLGOAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlBfT1ZFUkxBWVgBAAAALXRyxzgAAFgOAAAAc3RhdC5VRl9PUEFRVUVyyDgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfT1BBUVVFWAEAAAAtdHLJOAAAWA0AAAB0b2tlbi5QRVJDRU5Ucso4AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUEVSQ0VOVFgBAAAALXRyyzgAAFgVAAAAeG1sLmRvbS5YTUxfTkFNRVNQQUNFcsw4AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlhNTF9OQU1FU1BBQ0VYAQAAAC10cs04AABYIgAAAHhtbC5zYXguaGFuZGxlci5mZWF0dXJlX25hbWVzcGFjZXNyzjgAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlc1gBAAAALXRyzzgAAFgKAAAAcmUuVU5JQ09ERXLQOAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlVOSUNPREVYAQAAAC10ctE4AABYCgAAAG9zLnBhdGhzZXBy0jgAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wYXRoc2VwWAEAAAAtdHLTOAAAWA4AAAB0b2tlbi50b2tfbmFtZXLUOAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLnRva19uYW1lWAEAAAAtdHLVOAAAWAsAAABkaXMuaGFzbmFtZXLWOAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzbmFtZVgBAAAALXRy1zgAAFgPAAAAc3lzLnB5M2t3YXJuaW5nctg4AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5weTNrd2FybmluZ1gBAAAALXRy2TgAAFgLAAAAdG9rZW5pemUuTkxy2jgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS5OTFgBAAAALXRy2zgAAFgNAAAAZXJybm8uRVJFTUNIR3LcOAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVSRU1DSEdYAQAAAC10ct04AABYDAAAAGVycm5vLkVFWElTVHLeOAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVFWElTVFgBAAAALXRy3zgAAFgLAAAAdGltZS50em5hbWVy4DgAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUudHpuYW1lWAEAAAAtdHLhOAAAWAcAAABzeXMucHMxcuI4AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5wczFYAQAAAC10cuM4AABYEAAAAHRhcmZpbGUuRU5DT0RJTkdy5DgAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuRU5DT0RJTkdYAQAAAC10cuU4AABYFwAAAHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlcuY4AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5wYXRoX2ltcG9ydGVyX2NhY2hlWAEAAAAtdHLnOAAAWA4AAABvcy5PX0RJUkVDVE9SWXLoOAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fRElSRUNUT1JZWAEAAAAtdHLpOAAAWAsAAABvcy5FWF9PU0VSUnLqOAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX09TRVJSWAEAAAAtdHLrOAAAWBkAAAB0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlcuw4AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZVgBAAAALXRy7TgAAFgUAAAAc3RyaW5nLmFzY2lpX2xldHRlcnNy7jgAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmFzY2lpX2xldHRlcnNYAQAAAC10cu84AABYBwAAAG1hdGgucGly8DgAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgucGlYAQAAAC10cvE4AABYBwAAAG9zLlJfT0ty8jgAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5SX09LWAEAAAAtdHLzOAAAWA4AAABnYy5ERUJVR19TVEFUU3L0OAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLkRFQlVHX1NUQVRTWAEAAAAtdHL1OAAAWAcAAABvcy5uYW1lcvY4AAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubmFtZVgBAAAALXRy9zgAAFgKAAAAb3MuT19EU1lOQ3L4OAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fRFNZTkNYAQAAAC10cvk4AABYCQAAAG9zLmV4dHNlcHL6OAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmV4dHNlcFgBAAAALXRy+zgAAFgVAAAAd2luc291bmQuU05EX0ZJTEVOQU1Fcvw4AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0ZJTEVOQU1FWAEAAAAtdHL9OAAAWAwAAABlcnJuby5FU1JNTlRy/jgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1JNTlRYAQAAAC10cv84AABYEgAAAGdjLkRFQlVHX0lOU1RBTkNFU3IAOQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLkRFQlVHX0lOU1RBTkNFU1gBAAAALXRyATkAAFgUAAAAY1N0cmluZ0lPLk91dHB1dFR5cGVyAjkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5naW8uaHRtbCNjU3RyaW5nSU8uT3V0cHV0VHlwZVgBAAAALXRyAzkAAFgWAAAAc3RyaW5nLmFzY2lpX2xvd2VyY2FzZXIEOQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuYXNjaWlfbG93ZXJjYXNlWAEAAAAtdHIFOQAAWBkAAABfd2lucmVnLlJFR19SRVNPVVJDRV9MSVNUcgY5AAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19SRVNPVVJDRV9MSVNUWAEAAAAtdHIHOQAAWA8AAABlcnJuby5FVElNRURPVVRyCDkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVElNRURPVVRYAQAAAC10cgk5AABYDQAAAHNzbC5DRVJUX05PTkVyCjkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNFUlRfTk9ORVgBAAAALXRyCzkAAFgQAAAAZXJybm8uRU9QTk9UU1VQUHIMOQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVPUE5PVFNVUFBYAQAAAC10cg05AABYDAAAAGVycm5vLkVMTlJOR3IOOQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMTlJOR1gBAAAALXRyDzkAAFgNAAAAZXJybm8uRUJBRFNMVHIQOQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURTTFRYAQAAAC10chE5AABYFQAAAHNvY2tldC5TT0NLX1NFUVBBQ0tFVHISOQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19TRVFQQUNLRVRYAQAAAC10chM5AABYDAAAAGRpcy5oYXNjb25zdHIUOQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzY29uc3RYAQAAAC10chU5AABYEgAAAHR5cGVzLkZ1bmN0aW9uVHlwZXIWOQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZ1bmN0aW9uVHlwZVgBAAAALXRyFzkAAFgYAAAAc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPchg5AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUEVOU1NMX1ZFUlNJT05fSU5GT1gBAAAALXRyGTkAAFgNAAAAUHlfVFBGTEFHU19HQ3IaOQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfR0NYAQAAAC10chs5AABYEAAAAGxvY2FsZS5FUkFfVF9GTVRyHDkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVSQV9UX0ZNVFgBAAAALXRyHTkAAFgOAAAAa2V5d29yZC5rd2xpc3RyHjkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkva2V5d29yZC5odG1sI2tleXdvcmQua3dsaXN0WAEAAAAtdHIfOQAAWAgAAABjZC5TVElMTHIgOQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLlNUSUxMWAEAAAAtdHIhOQAAWAwAAABvcy5FWF9OT1BFUk1yIjkAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT1BFUk1YAQAAAC10ciM5AABYDAAAAGVycm5vLkVOT0xDS3IkOQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0xDS1gBAAAALXRyJTkAAFgSAAAAc3lzLmxhc3RfdHJhY2ViYWNrciY5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5sYXN0X3RyYWNlYmFja1gBAAAALXRyJzkAAFgMAAAAdG9rZW4uSU5ERU5Ucig5AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uSU5ERU5UWAEAAAAtdHIpOQAAWAsAAABlcnJuby5FRkJJR3IqOQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVGQklHWAEAAAAtdHIrOQAAWA8AAABpbXAuQ19FWFRFTlNJT05yLDkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLkNfRVhURU5TSU9OWAEAAAAtdHItOQAAWBAAAABzdHJpbmcucHJpbnRhYmxlci45AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5wcmludGFibGVYAQAAAC10ci85AAB1WAYAAABjOnR5cGVyMDkAAH1yMTkAAChYCAAAAF9pbml0dGFicjI5AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLl9pbml0dGFiWAEAAAAtdHIzOQAAWAsAAABQeUNGdW5jdGlvbnI0OQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlDRnVuY3Rpb25YAQAAAC10cjU5AABYDAAAAFB5X3RyYWNlZnVuY3I2OQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfdHJhY2VmdW5jWAEAAAAtdHI3OQAAWAsAAABQeVZhck9iamVjdHI4OQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlWYXJPYmplY3RYAQAAAC10cjk5AABYCQAAAFB5Q2Fwc3VsZXI6OQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlWAEAAAAtdHI7OQAAWA0AAABQeVR1cGxlT2JqZWN0cjw5AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZU9iamVjdFgBAAAALXRyPTkAAFgOAAAAUHlTdHJpbmdPYmplY3RyPjkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdPYmplY3RYAQAAAC10cj85AABYDwAAAFB5VW5pY29kZU9iamVjdHJAOQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlT2JqZWN0WAEAAAAtdHJBOQAAWA8AAABQeUNvbXBsZXhPYmplY3RyQjkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleE9iamVjdFgBAAAALXRyQzkAAFgMAAAAUHlEaWN0T2JqZWN0ckQ5AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RPYmplY3RYAQAAAC10ckU5AABYCwAAAFB5U2V0T2JqZWN0ckY5AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0T2JqZWN0WAEAAAAtdHJHOQAAWA0AAABQeUJ1ZmZlclByb2Nzckg5AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUJ1ZmZlclByb2NzWAEAAAAtdHJJOQAAWAwAAABQeVR5cGVPYmplY3RySjkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZU9iamVjdFgBAAAALXRySzkAAFgRAAAAUHlCeXRlQXJyYXlPYmplY3RyTDkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlPYmplY3RYAQAAAC10ck05AABYCwAAAFB5TWV0aG9kRGVmck45AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU1ldGhvZERlZlgBAAAALXRyTzkAAFgOAAAAcmVhZGJ1ZmZlcnByb2NyUDkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLnJlYWRidWZmZXJwcm9jWAEAAAAtdHJROQAAWBQAAABQeUNhcHN1bGVfRGVzdHJ1Y3RvcnJSOQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0Rlc3RydWN0b3JYAQAAAC10clM5AABYCwAAAFB5TWVtYmVyRGVmclQ5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU1lbWJlckRlZlgBAAAALXRyVTkAAFgHAAAAX2Zyb3plbnJWOQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fZnJvemVuWAEAAAAtdHJXOQAAWA8AAAB3cml0ZWJ1ZmZlcnByb2NyWDkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLndyaXRlYnVmZmVycHJvY1gBAAAALXRyWTkAAFgRAAAAUHlTZXF1ZW5jZU1ldGhvZHNyWjkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzWAEAAAAtdHJbOQAAWAwAAABQeUNlbGxPYmplY3RyXDkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbE9iamVjdFgBAAAALXRyXTkAAFgLAAAAUHlHZXRTZXREZWZyXjkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5R2V0U2V0RGVmWAEAAAAtdHJfOQAAWAkAAABQeUNPYmplY3RyYDkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvYmplY3QuaHRtbCNjLlB5Q09iamVjdFgBAAAALXRyYTkAAFgNAAAAUHlDbGFzc09iamVjdHJiOQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5Q2xhc3NPYmplY3RYAQAAAC10cmM5AABYEAAAAFB5TWFwcGluZ01ldGhvZHNyZDkAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TWFwcGluZ01ldGhvZHNYAQAAAC10cmU5AABYDAAAAFB5TGlzdE9iamVjdHJmOQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0T2JqZWN0WAEAAAAtdHJnOQAAWAwAAABQeUxvbmdPYmplY3RyaDkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ09iamVjdFgBAAAALXRyaTkAAFgQAAAAUHlGdW5jdGlvbk9iamVjdHJqOQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25PYmplY3RYAQAAAC10cms5AABYDAAAAHNlZ2NvdW50cHJvY3JsOQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2Muc2VnY291bnRwcm9jWAEAAAAtdHJtOQAAWA8AAABQeUNvbXBpbGVyRmxhZ3NybjkAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUNvbXBpbGVyRmxhZ3NYAQAAAC10cm85AABYCQAAAFB5X2J1ZmZlcnJwOQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXJYAQAAAC10cnE5AABYCwAAAFB5SW50T2JqZWN0cnI5AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50T2JqZWN0WAEAAAAtdHJzOQAAWA0AAABQeUZsb2F0T2JqZWN0cnQ5AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdE9iamVjdFgBAAAALXRydTkAAFgOAAAAUHlCdWZmZXJPYmplY3RydjkAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJPYmplY3RYAQAAAC10cnc5AABYDAAAAFB5RmlsZU9iamVjdHJ4OQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlT2JqZWN0WAEAAAAtdHJ5OQAAWAwAAABQeUNvZGVPYmplY3RyejkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZU9iamVjdFgBAAAALXRyezkAAFgHAAAAaW5xdWlyeXJ8OQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5pbnF1aXJ5WAEAAAAtdHJ9OQAAWAgAAABQeU9iamVjdHJ+OQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlPYmplY3RYAQAAAC10cn85AABYCwAAAFB5R2VuT2JqZWN0coA5AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nZW4uaHRtbCNjLlB5R2VuT2JqZWN0WAEAAAAtdHKBOQAAWAkAAAB2aXNpdHByb2NygjkAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MudmlzaXRwcm9jWAEAAAAtdHKDOQAAWBIAAABQeUludGVycHJldGVyU3RhdGVyhDkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZVgBAAAALXRyhTkAAFgKAAAAUHlfVU5JQ09ERXKGOQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERVgBAAAALXRyhzkAAFgPAAAAUHlOdW1iZXJNZXRob2Rzcog5AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHNYAQAAAC10cok5AABYDAAAAHRyYXZlcnNlcHJvY3KKOQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy50cmF2ZXJzZXByb2NYAQAAAC10cos5AABYDgAAAGNoYXJidWZmZXJwcm9jcow5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5jaGFyYnVmZmVycHJvY1gBAAAALXRyjTkAAFgNAAAAUHlUaHJlYWRTdGF0ZXKOOQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZVgBAAAALXRyjzkAAFgKAAAAUHlfY29tcGxleHKQOQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlfY29tcGxleFgBAAAALXRykTkAAHVYCQAAAHB5Om1vZHVsZX1ykjkAAChYBwAAAGluc3BlY3RykzkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI21vZHVsZS1pbnNwZWN0WAEAAAAtdHKUOQAAWAYAAABsb2NhbGVylTkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbW9kdWxlLWxvY2FsZVgBAAAALXRyljkAAFgGAAAAc3RydWN0cpc5AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI21vZHVsZS1zdHJ1Y3RYAQAAAC10cpg5AABYDwAAAGVtYWlsLml0ZXJhdG9yc3KZOQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNtb2R1bGUtZW1haWwuaXRlcmF0b3JzWAEAAAAtdHKaOQAAWBcAAABkaXN0dXRpbHMuY29tbWFuZC5iZGlzdHKbOQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5iZGlzdFgBAAAALXRynDkAAFgGAAAAcG9wbGlicp05AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI21vZHVsZS1wb3BsaWJYAQAAAC10cp45AABYDAAAAGVtYWlsLmVycm9yc3KfOQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbCNtb2R1bGUtZW1haWwuZXJyb3JzWAEAAAAtdHKgOQAAWAoAAABVc2VyU3RyaW5ncqE5AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWwjbW9kdWxlLVVzZXJTdHJpbmdYAQAAAC10cqI5AABYCAAAAGNQcm9maWxlcqM5AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNtb2R1bGUtY1Byb2ZpbGVYAQAAAC10cqQ5AABYCwAAAF9fYnVpbHRpbl9fcqU5AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L19fYnVpbHRpbl9fLmh0bWwjbW9kdWxlLV9fYnVpbHRpbl9fWAEAAAAtdHKmOQAAWAcAAABhdWRpb29wcqc5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNtb2R1bGUtYXVkaW9vcFgBAAAALXRyqDkAAFgDAAAAYXN0cqk5AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI21vZHVsZS1hc3RYAQAAAC10cqo5AABYEgAAAGRpc3R1dGlscy5kZXBfdXRpbHKrOQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGVwX3V0aWxYAQAAAC10cqw5AABYCwAAAFNVTkFVRElPREVWcq05AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1ZGlvLmh0bWwjbW9kdWxlLVNVTkFVRElPREVWWAEAAAAtdHKuOQAAWAcAAABtYXJzaGFscq85AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hcnNoYWwuaHRtbCNtb2R1bGUtbWFyc2hhbFgBAAAALXRysDkAAFgTAAAAQ2FyYm9uLkNhcmJvbkV2ZW50c3KxOQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNhcmJvbkV2ZW50c1gBAAAALXRysjkAAFghAAAAZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9zY3JpcHRzcrM5AAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfc2NyaXB0c1gBAAAALXRytDkAAFgHAAAAYWV0b29sc3K1OQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjbW9kdWxlLWFldG9vbHNYAQAAAC10crY5AABYCQAAAGNvb2tpZWxpYnK3OQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNtb2R1bGUtY29va2llbGliWAEAAAAtdHK4OQAAWAcAAABpbWFwbGlicrk5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNtb2R1bGUtaW1hcGxpYlgBAAAALXRyujkAAFgHAAAAZHVtYmRibXK7OQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjbW9kdWxlLWR1bWJkYm1YAQAAAC10crw5AABYCQAAAENhcmJvbi5URXK9OQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlRFWAEAAAAtdHK+OQAAWAkAAABmaWxlaW5wdXRyvzkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjbW9kdWxlLWZpbGVpbnB1dFgBAAAALXRywDkAAFgFAAAAcmV4ZWNywTkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNtb2R1bGUtcmV4ZWNYAQAAAC10csI5AABYDgAAAGVuY29kaW5ncy5pZG5hcsM5AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI21vZHVsZS1lbmNvZGluZ3MuaWRuYVgBAAAALXRyxDkAAFgOAAAAQ2FyYm9uLkRpYWxvZ3NyxTkAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5EaWFsb2dzWAEAAAAtdHLGOQAAWAQAAAB3YXZlcsc5AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCNtb2R1bGUtd2F2ZVgBAAAALXRyyDkAAFgHAAAAZ2V0dGV4dHLJOQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjbW9kdWxlLWdldHRleHRYAQAAAC10cso5AABYAwAAAGJ6MnLLOQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNtb2R1bGUtYnoyWAEAAAAtdHLMOQAAWAYAAABmdHBsaWJyzTkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjbW9kdWxlLWZ0cGxpYlgBAAAALXRyzjkAAFgNAAAAUGl4TWFwV3JhcHBlcnLPOQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1QaXhNYXBXcmFwcGVyWAEAAAAtdHLQOQAAWA4AAABkaXN0dXRpbHMudXRpbHLROQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMudXRpbFgBAAAALXRy0jkAAFgGAAAAdXJsbGlictM5AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI21vZHVsZS11cmxsaWJYAQAAAC10ctQ5AABYBAAAAHV1aWRy1TkAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI21vZHVsZS11dWlkWAEAAAAtdHLWOQAAWAcAAABoYXNobGlictc5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbCNtb2R1bGUtaGFzaGxpYlgBAAAALXRy2DkAAFgKAAAAQ2FyYm9uLkRsZ3LZOQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkRsZ1gBAAAALXRy2jkAAFgTAAAAZW5jb2RpbmdzLnV0Zl84X3NpZ3LbOQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNtb2R1bGUtZW5jb2RpbmdzLnV0Zl84X3NpZ1gBAAAALXRy3DkAAFgHAAAAaG90c2hvdHLdOQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjbW9kdWxlLWhvdHNob3RYAQAAAC10ct45AABYBgAAAGN0eXBlc3LfOQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNtb2R1bGUtY3R5cGVzWAEAAAAtdHLgOQAAWAgAAABkYXRldGltZXLhOQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI21vZHVsZS1kYXRldGltZVgBAAAALXRy4jkAAFgVAAAAbXVsdGlwcm9jZXNzaW5nLmR1bW15cuM5AAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmcuZHVtbXlYAQAAAC10cuQ5AABYBAAAAHNldHNy5TkAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2V0cy5odG1sI21vZHVsZS1zZXRzWAEAAAAtdHLmOQAAWBUAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWVy5zkAAChqcwUAAGp0BQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjbW9kdWxlLXhtbC5ldHJlZS5FbGVtZW50VHJlZVgBAAAALXRy6DkAAFgfAAAAZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0c3LpOQAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5idWlsZF9zY3JpcHRzWAEAAAAtdHLqOQAAWAcAAABodG1sbGlicus5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNtb2R1bGUtaHRtbGxpYlgBAAAALXRy7DkAAFgJAAAAQ2FyYm9uLkFIcu05AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQUhYAQAAAC10cu45AABYCAAAAHdhcm5pbmdzcu85AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjbW9kdWxlLXdhcm5pbmdzWAEAAAAtdHLwOQAAWAcAAABrZXl3b3JkcvE5AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2tleXdvcmQuaHRtbCNtb2R1bGUta2V5d29yZFgBAAAALXRy8jkAAFgGAAAAc3RyaW5ncvM5AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI21vZHVsZS1zdHJpbmdYAQAAAC10cvQ5AABYAwAAAFRpeHL1OQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNtb2R1bGUtVGl4WAEAAAAtdHL2OQAAWAkAAABDYXJib24uRm1y9zkAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5GbVgBAAAALXRy+DkAAFgGAAAAcmFuZG9tcvk5AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI21vZHVsZS1yYW5kb21YAQAAAC10cvo5AABYEgAAAFNpbXBsZVhNTFJQQ1NlcnZlcnL7OQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNtb2R1bGUtU2ltcGxlWE1MUlBDU2VydmVyWAEAAAAtdHL8OQAAWAgAAABVc2VyRGljdHL9OQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI21vZHVsZS1Vc2VyRGljdFgBAAAALXRy/jkAAFgWAAAAZGlzdHV0aWxzLm1zdmNjb21waWxlcnL/OQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMubXN2Y2NvbXBpbGVyWAEAAAAtdHIAOgAAWAUAAABoZWFwcXIBOgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oZWFwcS5odG1sI21vZHVsZS1oZWFwcVgBAAAALXRyAjoAAFgMAAAAY3Vyc2VzLmFzY2lpcgM6AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI21vZHVsZS1jdXJzZXMuYXNjaWlYAQAAAC10cgQ6AABYAgAAAGdscgU6AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjbW9kdWxlLWdsWAEAAAAtdHIGOgAAWAsAAABvc3NhdWRpb2RldnIHOgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI21vZHVsZS1vc3NhdWRpb2RldlgBAAAALXRyCDoAAFgCAAAAZ2NyCToAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNtb2R1bGUtZ2NYAQAAAC10cgo6AABYAwAAAHN5c3ILOgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNtb2R1bGUtc3lzWAEAAAAtdHIMOgAAWAYAAAB4ZHJsaWJyDToAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjbW9kdWxlLXhkcmxpYlgBAAAALXRyDjoAAFgLAAAAdmlkZW9yZWFkZXJyDzoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtdmlkZW9yZWFkZXJYAQAAAC10chA6AABYEwAAAENhcmJvbi5Db3JlR3JhcGhpY3NyEToAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Db3JlR3JhcGhpY3NYAQAAAC10chI6AABYCQAAAHhtbHJwY2xpYnITOgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCNtb2R1bGUteG1scnBjbGliWAEAAAAtdHIUOgAAWBQAAABDYXJib24uQ29yZUZvdW5hdGlvbnIVOgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNvcmVGb3VuYXRpb25YAQAAAC10chY6AABYBwAAAHByb2ZpbGVyFzoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI21vZHVsZS1wcm9maWxlWAEAAAAtdHIYOgAAWAoAAABDYXJib24uU25kchk6AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uU25kWAEAAAAtdHIaOgAAWAYAAABkYmhhc2hyGzoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjbW9kdWxlLWRiaGFzaFgBAAAALXRyHDoAAFgCAAAAR0xyHToAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNtb2R1bGUtR0xYAQAAAC10ch46AABYBgAAAGdldG9wdHIfOgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRvcHQuaHRtbCNtb2R1bGUtZ2V0b3B0WAEAAAAtdHIgOgAAWAcAAABzcWxpdGUzciE6AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNtb2R1bGUtc3FsaXRlM1gBAAAALXRyIjoAAFgTAAAAZGlzdHV0aWxzLmZpbGVfdXRpbHIjOgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZmlsZV91dGlsWAEAAAAtdHIkOgAAWAUAAABzaGxleHIlOgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI21vZHVsZS1zaGxleFgBAAAALXRyJjoAAFgLAAAAbWFjcmVzb3VyY2VyJzoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtbWFjcmVzb3VyY2VYAQAAAC10cig6AABYBQAAAGNyeXB0cik6AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NyeXB0Lmh0bWwjbW9kdWxlLWNyeXB0WAEAAAAtdHIqOgAAWBwAAABkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1icis6AAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWJYAQAAAC10ciw6AABYAwAAAGRpc3ItOgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNtb2R1bGUtZGlzWAEAAAAtdHIuOgAAWBsAAABkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHRyLzoAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0WAEAAAAtdHIwOgAAWAgAAABjb2xvcnN5c3IxOgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI21vZHVsZS1jb2xvcnN5c1gBAAAALXRyMjoAAFgFAAAAc3VuYXVyMzoAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNtb2R1bGUtc3VuYXVYAQAAAC10cjQ6AABYCgAAAENhcmJvbi5DdGxyNToAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5DdGxYAQAAAC10cjY6AABYEQAAAENhcmJvbi5Db21wb25lbnRzcjc6AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ29tcG9uZW50c1gBAAAALXRyODoAAFgIAAAAYXJncGFyc2VyOToAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNtb2R1bGUtYXJncGFyc2VYAQAAAC10cjo6AABYCQAAAG1pbWV0b29sc3I7OgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtb2R1bGUtbWltZXRvb2xzWAEAAAAtdHI8OgAAWAsAAABybGNvbXBsZXRlcnI9OgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ybGNvbXBsZXRlci5odG1sI21vZHVsZS1ybGNvbXBsZXRlclgBAAAALXRyPjoAAFgFAAAAUXVldWVyPzoAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNtb2R1bGUtUXVldWVYAQAAAC10ckA6AABYAgAAAGNkckE6AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjbW9kdWxlLWNkWAEAAAAtdHJCOgAAWAQAAABtbWFwckM6AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtb2R1bGUtbW1hcFgBAAAALXRyRDoAAFgIAAAAYXN5bmNoYXRyRToAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNtb2R1bGUtYXN5bmNoYXRYAQAAAC10ckY6AABYCgAAAF9fZnV0dXJlX19yRzoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX19mdXR1cmVfXy5odG1sI21vZHVsZS1fX2Z1dHVyZV9fWAEAAAAtdHJIOgAAWA8AAAB3c2dpcmVmLmhlYWRlcnNySToAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLmhlYWRlcnNYAQAAAC10cko6AABYAwAAAHB0eXJLOgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbCNtb2R1bGUtcHR5WAEAAAAtdHJMOgAAWAoAAAB3ZWJicm93c2Vyck06AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCNtb2R1bGUtd2ViYnJvd3NlclgBAAAALXRyTjoAAFgRAAAAZGlzdHV0aWxzLmNvbW1hbmRyTzoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmRYAQAAAC10clA6AABYDwAAAHhtbC5zYXguaGFuZGxlcnJROgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCNtb2R1bGUteG1sLnNheC5oYW5kbGVyWAEAAAAtdHJSOgAAWA4AAABkaXN0dXRpbHMuY29yZXJTOgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29yZVgBAAAALXRyVDoAAFgWAAAAZGlzdHV0aWxzLmJjcHBjb21waWxlcnJVOgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuYmNwcGNvbXBpbGVyWAEAAAAtdHJWOgAAWAkAAABtaW1ldHlwZXNyVzoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbW9kdWxlLW1pbWV0eXBlc1gBAAAALXRyWDoAAFgLAAAAZmluZGVydG9vbHNyWToAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI21vZHVsZS1maW5kZXJ0b29sc1gBAAAALXRyWjoAAFgGAAAAcHN0YXRzcls6AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNtb2R1bGUtcHN0YXRzWAEAAAAtdHJcOgAAWAkAAAB0aHJlYWRpbmdyXToAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjbW9kdWxlLXRocmVhZGluZ1gBAAAALXRyXjoAAFgNAAAAZGlzdHV0aWxzLmNtZHJfOgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY21kWAEAAAAtdHJgOgAAWAUAAABmY250bHJhOgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sI21vZHVsZS1mY250bFgBAAAALXRyYjoAAFgIAAAAdG9rZW5pemVyYzoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbCNtb2R1bGUtdG9rZW5pemVYAQAAAC10cmQ6AABYCwAAAENhcmJvbi5JY25zcmU6AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uSWNuc1gBAAAALXRyZjoAAFgGAAAAYmluaGV4cmc6AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmhleC5odG1sI21vZHVsZS1iaW5oZXhYAQAAAC10cmg6AABYBgAAAGNvZGVjc3JpOgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNtb2R1bGUtY29kZWNzWAEAAAAtdHJqOgAAWAoAAABjb250ZXh0bGlicms6AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNtb2R1bGUtY29udGV4dGxpYlgBAAAALXRybDoAAFgQAAAAeG1sLnNheC5zYXh1dGlsc3JtOgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjbW9kdWxlLXhtbC5zYXguc2F4dXRpbHNYAQAAAC10cm46AABYCQAAAGVuc3VyZXBpcHJvOgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNtb2R1bGUtZW5zdXJlcGlwWAEAAAAtdHJwOgAAWAcAAABwa2d1dGlscnE6AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNtb2R1bGUtcGtndXRpbFgBAAAALXRycjoAAFgDAAAAZGJtcnM6AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RibS5odG1sI21vZHVsZS1kYm1YAQAAAC10cnQ6AABYHgAAAGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YXJ1OgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGFYAQAAAC10cnY6AABYCQAAAG1hY2Vycm9yc3J3OgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1tYWNlcnJvcnNYAQAAAC10cng6AABYDAAAAGVtYWlsLnBhcnNlcnJ5OgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNtb2R1bGUtZW1haWwucGFyc2VyWAEAAAAtdHJ6OgAAWAgAAABvcGVyYXRvcnJ7OgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI21vZHVsZS1vcGVyYXRvclgBAAAALXRyfDoAAFgZAAAAZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbHJ9OgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsWAEAAAAtdHJ+OgAAWAcAAABkZWNpbWFscn86AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNtb2R1bGUtZGVjaW1hbFgBAAAALXRygDoAAFgDAAAAYmRicoE6AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI21vZHVsZS1iZGJYAQAAAC10coI6AABYCAAAAHBsaXN0bGlicoM6AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjbW9kdWxlLXBsaXN0bGliWAEAAAAtdHKEOgAAWAMAAABhYmNyhToAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWJjLmh0bWwjbW9kdWxlLWFiY1gBAAAALXRyhjoAAFgGAAAAcHByaW50coc6AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI21vZHVsZS1wcHJpbnRYAQAAAC10cog6AABYCAAAAHRlbXBmaWxlcok6AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjbW9kdWxlLXRlbXBmaWxlWAEAAAAtdHKKOgAAWBcAAABkaXN0dXRpbHMuY29tbWFuZC5zZGlzdHKLOgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5zZGlzdFgBAAAALXRyjDoAAFgKAAAAZW1haWwubWltZXKNOgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjbW9kdWxlLWVtYWlsLm1pbWVYAQAAAC10co46AABYDwAAAHhtbC5kb20ucHVsbGRvbXKPOgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCNtb2R1bGUteG1sLmRvbS5wdWxsZG9tWAEAAAAtdHKQOgAAWAcAAABfd2lucmVncpE6AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNtb2R1bGUtX3dpbnJlZ1gBAAAALXRykjoAAFgJAAAARnJhbWVXb3JrcpM6AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI21vZHVsZS1GcmFtZVdvcmtYAQAAAC10cpQ6AABYCAAAAGNhbGVuZGFycpU6AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjbW9kdWxlLWNhbGVuZGFyWAEAAAAtdHKWOgAAWAQAAABzaXRlcpc6AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNtb2R1bGUtc2l0ZVgBAAAALXRymDoAAFgLAAAAQ2FyYm9uLkxpc3RymToAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5MaXN0WAEAAAAtdHKaOgAAWA4AAABjdXJzZXMudGV4dHBhZHKbOgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNtb2R1bGUtY3Vyc2VzLnRleHRwYWRYAQAAAC10cpw6AABYEAAAAFNpbXBsZUhUVFBTZXJ2ZXJynToAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sI21vZHVsZS1TaW1wbGVIVFRQU2VydmVyWAEAAAAtdHKeOgAAWAsAAABDYXJib24uRHJhZ3KfOgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkRyYWdYAQAAAC10cqA6AABYFgAAAENhcmJvbi5Db250cm9sQWNjZXNzb3JyoToAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Db250cm9sQWNjZXNzb3JYAQAAAC10cqI6AABYEwAAAGRpc3R1dGlscy5jY29tcGlsZXJyozoAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNjb21waWxlclgBAAAALXRypDoAAFgFAAAAY21hdGhypToAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNtb2R1bGUtY21hdGhYAQAAAC10cqY6AABYBwAAAEJhc3Rpb25ypzoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzdGlvbi5odG1sI21vZHVsZS1CYXN0aW9uWAEAAAAtdHKoOgAAWA8AAABDYXJib24uT1NBY29uc3RyqToAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5PU0Fjb25zdFgBAAAALXRyqjoAAFggAAAAZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcGFja2FnZXJyqzoAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcGFja2FnZXJYAQAAAC10cqw6AABYIQAAAGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVyc3KtOgAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2hlYWRlcnNYAQAAAC10cq46AABYBQAAAGFycmF5cq86AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjbW9kdWxlLWFycmF5WAEAAAAtdHKwOgAAWAkAAABsaW5lY2FjaGVysToAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbGluZWNhY2hlLmh0bWwjbW9kdWxlLWxpbmVjYWNoZVgBAAAALXRysjoAAFgEAAAAZ2RibXKzOgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjbW9kdWxlLWdkYm1YAQAAAC10crQ6AABYBwAAAG1haWxib3hytToAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21vZHVsZS1tYWlsYm94WAEAAAAtdHK2OgAAWAwAAABjb21waWxlci5hc3RytzoAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNtb2R1bGUtY29tcGlsZXIuYXN0WAEAAAAtdHK4OgAAWAwAAABDYXJib24uRmlsZXNyuToAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5GaWxlc1gBAAAALXRyujoAAFgJAAAAY1N0cmluZ0lPcrs6AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjbW9kdWxlLWNTdHJpbmdJT1gBAAAALXRyvDoAAFgKAAAAZXhjZXB0aW9uc3K9OgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjbW9kdWxlLWV4Y2VwdGlvbnNYAQAAAC10cr46AABYBgAAAHNoZWx2ZXK/OgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNtb2R1bGUtc2hlbHZlWAEAAAAtdHLAOgAAWA4AAABkaXN0dXRpbHMuZGlzdHLBOgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGlzdFgBAAAALXRywjoAAFgRAAAAeG1sLnNheC54bWxyZWFkZXJywzoAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCNtb2R1bGUteG1sLnNheC54bWxyZWFkZXJYAQAAAC10csQ6AABYCAAAAHVuaXR0ZXN0csU6AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjbW9kdWxlLXVuaXR0ZXN0WAEAAAAtdHLGOgAAWAQAAABtYXRocsc6AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtb2R1bGUtbWF0aFgBAAAALXRyyDoAAFgXAAAAZGlzdHV0aWxzLmNvbW1hbmQuY2xlYW5yyToAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuY2xlYW5YAQAAAC10cso6AABYBwAAAGFldHlwZXNyyzoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI21vZHVsZS1hZXR5cGVzWAEAAAAtdHLMOgAAWAcAAAB3ZWFrcmVmcs06AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCNtb2R1bGUtd2Vha3JlZlgBAAAALXRyzjoAAFgQAAAAQ2FyYm9uLlF1aWNrVGltZXLPOgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlF1aWNrVGltZVgBAAAALXRy0DoAAFgFAAAAcHlkb2Ny0ToAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlkb2MuaHRtbCNtb2R1bGUtcHlkb2NYAQAAAC10ctI6AABYCgAAAENhcmJvbi5XaW5y0zoAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5XaW5YAQAAAC10ctQ6AABYDwAAAGZ1dHVyZV9idWlsdGluc3LVOgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNtb2R1bGUtZnV0dXJlX2J1aWx0aW5zWAEAAAAtdHLWOgAAWAgAAABiaW5hc2NpaXLXOgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI21vZHVsZS1iaW5hc2NpaVgBAAAALXRy2DoAAFgIAAAAc3ltdGFibGVy2ToAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNtb2R1bGUtc3ltdGFibGVYAQAAAC10cto6AABYBgAAAGNvZGVvcHLbOgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbCNtb2R1bGUtY29kZW9wWAEAAAAtdHLcOgAAWAcAAABtYWlsY2Fwct06AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbCNtb2R1bGUtbWFpbGNhcFgBAAAALXRy3joAAFgGAAAAYXRleGl0ct86AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F0ZXhpdC5odG1sI21vZHVsZS1hdGV4aXRYAQAAAC10cuA6AABYBwAAAGltZ2ZpbGVy4ToAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI21vZHVsZS1pbWdmaWxlWAEAAAAtdHLiOgAAWAkAAABpbXBvcnRsaWJy4zoAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjbW9kdWxlLWltcG9ydGxpYlgBAAAALXRy5DoAAFgLAAAAcGlja2xldG9vbHNy5ToAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNtb2R1bGUtcGlja2xldG9vbHNYAQAAAC10cuY6AABYAgAAAG9zcuc6AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjbW9kdWxlLW9zWAEAAAAtdHLoOgAAWAMAAABjc3Zy6ToAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjbW9kdWxlLWNzdlgBAAAALXRy6joAAFgMAAAAQ2FyYm9uLlNjcmFwcus6AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uU2NyYXBYAQAAAC10cuw6AABYAgAAAHJlcu06AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjbW9kdWxlLXJlWAEAAAAtdHLuOgAAWAsAAABlbWFpbC51dGlsc3LvOgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlsLmh0bWwjbW9kdWxlLWVtYWlsLnV0aWxzWAEAAAAtdHLwOgAAWA0AAABDYXJib24uUWRvZmZzcvE6AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUWRvZmZzWAEAAAAtdHLyOgAAWAYAAABiYXNlNjRy8zoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjbW9kdWxlLWJhc2U2NFgBAAAALXRy9DoAAFgYAAAAZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlncvU6AAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNvbmZpZ1gBAAAALXRy9joAAFgRAAAAZGlzdHV0aWxzLnZlcnNpb25y9zoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnZlcnNpb25YAQAAAC10cvg6AABYDQAAAGVtYWlsLmNoYXJzZXRy+ToAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI21vZHVsZS1lbWFpbC5jaGFyc2V0WAEAAAAtdHL6OgAAWAcAAABpbWFnZW9wcvs6AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNtb2R1bGUtaW1hZ2VvcFgBAAAALXRy/DoAAFgPAAAAQ2FyYm9uLkNvbnRyb2xzcv06AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ29udHJvbHNYAQAAAC10cv46AABYDQAAAGRpc3R1dGlscy5sb2dy/zoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmxvZ1gBAAAALXRyADsAAFgCAAAAdXVyATsAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXUuaHRtbCNtb2R1bGUtdXVYAQAAAC10cgI7AABYBwAAAHNnbWxsaWJyAzsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI21vZHVsZS1zZ21sbGliWAEAAAAtdHIEOwAAWAgAAABVc2VyTGlzdHIFOwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI21vZHVsZS1Vc2VyTGlzdFgBAAAALXRyBjsAAFgDAAAAbmlzcgc7AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25pcy5odG1sI21vZHVsZS1uaXNYAQAAAC10cgg7AABYBwAAAHdoaWNoZGJyCTsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2hpY2hkYi5odG1sI21vZHVsZS13aGljaGRiWAEAAAAtdHIKOwAAWAsAAABDYXJib24uTWVudXILOwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLk1lbnVYAQAAAC10cgw7AABYFwAAAGRpc3R1dGlscy5jb21tYW5kLmNoZWNrcg07AAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNoZWNrWAEAAAAtdHIOOwAAWAUAAABzY2hlZHIPOwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI21vZHVsZS1zY2hlZFgBAAAALXRyEDsAAFgIAAAAdGV4dHdyYXByETsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCNtb2R1bGUtdGV4dHdyYXBYAQAAAC10chI7AABYCwAAAENhcmJvbi5NbHRlchM7AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTWx0ZVgBAAAALXRyFDsAAFgDAAAAc3NschU7AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI21vZHVsZS1zc2xYAQAAAC10chY7AABYBwAAAHdzZ2lyZWZyFzsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmWAEAAAAtdHIYOwAAWAwAAABtb2R1bGVmaW5kZXJyGTsAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlLW1vZHVsZWZpbmRlclgBAAAALXRyGjsAAFgHAAAAbWFjcGF0aHIbOwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNwYXRoLmh0bWwjbW9kdWxlLW1hY3BhdGhYAQAAAC10chw7AABYCwAAAENhcmJvbi5GaWxlch07AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRmlsZVgBAAAALXRyHjsAAFgPAAAAbXVsdGlwcm9jZXNzaW5nch87AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmdYAQAAAC10ciA7AABYBgAAAHBpY2tsZXIhOwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNtb2R1bGUtcGlja2xlWAEAAAAtdHIiOwAAWBYAAABDYXJib24uSUJDYXJib25SdW50aW1lciM7AAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uSUJDYXJib25SdW50aW1lWAEAAAAtdHIkOwAAWAoAAABDYXJib24uQXBwciU7AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQXBwWAEAAAAtdHImOwAAWBEAAABDYXJib24uTWVkaWFEZXNjcnInOwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLk1lZGlhRGVzY3JYAQAAAC10cig7AABYCQAAAHN5c2NvbmZpZ3IpOwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNtb2R1bGUtc3lzY29uZmlnWAEAAAAtdHIqOwAAWA0AAABDYXJib24uRm9sZGVycis7AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRm9sZGVyWAEAAAAtdHIsOwAAWAQAAAB6bGlici07AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCNtb2R1bGUtemxpYlgBAAAALXRyLjsAAFgGAAAAbWltaWZ5ci87AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21vZHVsZS1taW1pZnlYAQAAAC10cjA7AABYGwAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaXIxOwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2lYAQAAAC10cjI7AABYBAAAAGNvZGVyMzsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI21vZHVsZS1jb2RlWAEAAAAtdHI0OwAAWBAAAABjb21waWxlci52aXNpdG9ycjU7AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjbW9kdWxlLWNvbXBpbGVyLnZpc2l0b3JYAQAAAC10cjY7AABYCAAAAF9fbWFpbl9fcjc7AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L19fbWFpbl9fLmh0bWwjbW9kdWxlLV9fbWFpbl9fWAEAAAAtdHI4OwAAWA0AAABDYXJib24uRXZlbnRzcjk7AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRXZlbnRzWAEAAAAtdHI6OwAAWA0AAABDYXJib24uTGF1bmNocjs7AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTGF1bmNoWAEAAAAtdHI8OwAAWBAAAABDYXJib24uQ2FyYm9uRXZ0cj07AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ2FyYm9uRXZ0WAEAAAAtdHI+OwAAWAUAAABwb3NpeHI/OwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeC5odG1sI21vZHVsZS1wb3NpeFgBAAAALXRyQDsAAFgMAAAAQ2FyYm9uLk1lbnVzckE7AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTWVudXNYAQAAAC10ckI7AABYDwAAAENhcmJvbi5UZXh0RWRpdHJDOwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlRleHRFZGl0WAEAAAAtdHJEOwAAWBsAAABkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9ycG1yRTsAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtWAEAAAAtdHJGOwAAWAsAAAByb2JvdHBhcnNlcnJHOwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sI21vZHVsZS1yb2JvdHBhcnNlclgBAAAALXRySDsAAFgGAAAAc29ja2V0ckk7AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI21vZHVsZS1zb2NrZXRYAQAAAC10cko7AABYBAAAAHN0YXRySzsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI21vZHVsZS1zdGF0WAEAAAAtdHJMOwAAWBoAAABkaXN0dXRpbHMuY29tbWFuZC5yZWdpc3RlcnJNOwAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5yZWdpc3RlclgBAAAALXRyTjsAAFgKAAAAbWFjb3N0b29sc3JPOwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbW9kdWxlLW1hY29zdG9vbHNYAQAAAC10clA7AABYCQAAAGZvcm1hdHRlcnJROwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNtb2R1bGUtZm9ybWF0dGVyWAEAAAAtdHJSOwAAWAYAAABzaWduYWxyUzsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjbW9kdWxlLXNpZ25hbFgBAAAALXRyVDsAAFgGAAAAcmZjODIyclU7AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI21vZHVsZS1yZmM4MjJYAQAAAC10clY7AABYAwAAAGdycHJXOwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ncnAuaHRtbCNtb2R1bGUtZ3JwWAEAAAAtdHJYOwAAWAYAAABhbnlkYm1yWTsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYW55ZGJtLmh0bWwjbW9kdWxlLWFueWRibVgBAAAALXRyWjsAAFgFAAAAcnVucHlyWzsAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcnVucHkuaHRtbCNtb2R1bGUtcnVucHlYAQAAAC10clw7AABYBQAAAHBpcGVzcl07AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjbW9kdWxlLXBpcGVzWAEAAAAtdHJeOwAAWAYAAAB0aHJlYWRyXzsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjbW9kdWxlLXRocmVhZFgBAAAALXRyYDsAAFgFAAAAbWhsaWJyYTsAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtb2R1bGUtbWhsaWJYAQAAAC10cmI7AABYAgAAAGFscmM7AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjbW9kdWxlLWFsWAEAAAAtdHJkOwAAWAkAAAB0cmFjZWJhY2tyZTsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjbW9kdWxlLXRyYWNlYmFja1gBAAAALXRyZjsAAFgKAAAAYnVpbGR0b29sc3JnOwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1idWlsZHRvb2xzWAEAAAAtdHJoOwAAWAYAAABERVZJQ0VyaTsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNtb2R1bGUtREVWSUNFWAEAAAAtdHJqOwAAWAoAAABNaW1lV3JpdGVycms7AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNtb2R1bGUtTWltZVdyaXRlclgBAAAALXRybDsAAFgOAAAAQ2FyYm9uLldpbmRvd3NybTsAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5XaW5kb3dzWAEAAAAtdHJuOwAAWAwAAABDYXJib24uRm9udHNybzsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Gb250c1gBAAAALXRycDsAAFgMAAAAQ2FyYm9uLkxpc3RzcnE7AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTGlzdHNYAQAAAC10cnI7AABYBgAAAGJpc2VjdHJzOwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNtb2R1bGUtYmlzZWN0WAEAAAAtdHJ0OwAAWAgAAAByZXNvdXJjZXJ1OwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI21vZHVsZS1yZXNvdXJjZVgBAAAALXRydjsAAFgDAAAAY2dpcnc7AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI21vZHVsZS1jZ2lYAQAAAC10cng7AABYCAAAAGRpcmNhY2hlcnk7AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWwjbW9kdWxlLWRpcmNhY2hlWAEAAAAtdHJ6OwAAWAcAAAB1cmxsaWIycns7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNtb2R1bGUtdXJsbGliMlgBAAAALXRyfDsAAFgaAAAAZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHlyfTsAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHlYAQAAAC10cn47AABYDAAAAGN1cnNlcy5wYW5lbHJ/OwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNtb2R1bGUtY3Vyc2VzLnBhbmVsWAEAAAAtdHKAOwAAWAIAAABkbHKBOwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI21vZHVsZS1kbFgBAAAALXRygjsAAFgVAAAAQ2FyYm9uLkxhdW5jaFNlcnZpY2VzcoM7AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTGF1bmNoU2VydmljZXNYAQAAAC10coQ7AABYHAAAAGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2NsaWJyhTsAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfY2xpYlgBAAAALXRyhjsAAFgMAAAAU2Nyb2xsZWRUZXh0coc7AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Njcm9sbGVkdGV4dC5odG1sI21vZHVsZS1TY3JvbGxlZFRleHRYAQAAAC10cog7AABYBAAAAHVzZXJyiTsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlci5odG1sI21vZHVsZS11c2VyWAEAAAAtdHKKOwAAWAcAAAB4bWwuZG9tcos7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNtb2R1bGUteG1sLmRvbVgBAAAALXRyjDsAAFgDAAAAaW1wco07AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI21vZHVsZS1pbXBYAQAAAC10co47AABYEQAAAHhtbC5wYXJzZXJzLmV4cGF0co87AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCNtb2R1bGUteG1sLnBhcnNlcnMuZXhwYXRYAQAAAC10cpA7AABYBwAAAGltcHV0aWxykTsAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI21vZHVsZS1pbXB1dGlsWAEAAAAtdHKSOwAAWAcAAABhdXRvR0lMcpM7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1dG9naWwuaHRtbCNtb2R1bGUtYXV0b0dJTFgBAAAALXRylDsAAFgIAAAAZnBmb3JtYXRylTsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBmb3JtYXQuaHRtbCNtb2R1bGUtZnBmb3JtYXRYAQAAAC10cpY7AABYAgAAAEFMcpc7AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjbW9kdWxlLUFMWAEAAAAtdHKYOwAAWAcAAAB0YXJmaWxlcpk7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCNtb2R1bGUtdGFyZmlsZVgBAAAALXRymjsAAFgGAAAAcGFyc2Vycps7AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI21vZHVsZS1wYXJzZXJYAQAAAC10cpw7AABYCAAAAFN0cmluZ0lPcp07AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjbW9kdWxlLVN0cmluZ0lPWAEAAAAtdHKeOwAAWAMAAAB0dHlynzsAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHR5Lmh0bWwjbW9kdWxlLXR0eVgBAAAALXRyoDsAAFgDAAAAdHRrcqE7AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI21vZHVsZS10dGtYAQAAAC10cqI7AABYEgAAAGRpc3R1dGlscy5maWxlbGlzdHKjOwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZmlsZWxpc3RYAQAAAC10cqQ7AABYBgAAAHNuZGhkcnKlOwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbmRoZHIuaHRtbCNtb2R1bGUtc25kaGRyWAEAAAAtdHKmOwAAWBMAAABkaXN0dXRpbHMudGV4dF9maWxlcqc7AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy50ZXh0X2ZpbGVYAQAAAC10cqg7AABYBAAAAGdsb2JyqTsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2xvYi5odG1sI21vZHVsZS1nbG9iWAEAAAAtdHKqOwAAWAkAAABkaXN0dXRpbHNyqzsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzdHV0aWxzLmh0bWwjbW9kdWxlLWRpc3R1dGlsc1gBAAAALXRyrDsAAFgJAAAAQ2FyYm9uLlF0cq07AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUXRYAQAAAC10cq47AABYFgAAAGRpc3R1dGlscy5lbXhjY29tcGlsZXJyrzsAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmVteGNjb21waWxlclgBAAAALXRysDsAAFgHAAAAZG9jdGVzdHKxOwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjbW9kdWxlLWRvY3Rlc3RYAQAAAC10crI7AABYDgAAAGxvZ2dpbmcuY29uZmlncrM7AAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbW9kdWxlLWxvZ2dpbmcuY29uZmlnWAEAAAAtdHK0OwAAWAcAAAB6aXBmaWxlcrU7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCNtb2R1bGUtemlwZmlsZVgBAAAALXRytjsAAFgKAAAAY29tcGlsZWFsbHK3OwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjbW9kdWxlLWNvbXBpbGVhbGxYAQAAAC10crg7AABYDwAAAGRpc3R1dGlscy5kZWJ1Z3K5OwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGVidWdYAQAAAC10cro7AABYBAAAAHRpbWVyuzsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI21vZHVsZS10aW1lWAEAAAAtdHK8OwAAWB8AAABkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF93aW5pbnN0cr07AAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3dpbmluc3RYAQAAAC10cr47AABYCQAAAENhcmJvbi5DbXK/OwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNtWAEAAAAtdHLAOwAAWAUAAABlcnJub3LBOwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI21vZHVsZS1lcnJub1gBAAAALXRywjsAAFgIAAAAY29weV9yZWdywzsAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weV9yZWcuaHRtbCNtb2R1bGUtY29weV9yZWdYAQAAAC10csQ7AABYDQAAAGVtYWlsLm1lc3NhZ2VyxTsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI21vZHVsZS1lbWFpbC5tZXNzYWdlWAEAAAAtdHLGOwAAWBQAAABtdWx0aXByb2Nlc3NpbmcucG9vbHLHOwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nLnBvb2xYAQAAAC10csg7AABYDgAAAENhcmJvbi5Gb2xkZXJzcsk7AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRm9sZGVyc1gBAAAALXRyyjsAAFgQAAAAZGlzdHV0aWxzLmVycm9yc3LLOwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZXJyb3JzWAEAAAAtdHLMOwAAWAcAAABsaWIydG8zcs07AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCNtb2R1bGUtbGliMnRvM1gBAAAALXRyzjsAAFgJAAAAQ2FyYm9uLkNGcs87AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ0ZYAQAAAC10ctA7AABYCQAAAENhcmJvbi5DR3LROwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNHWAEAAAAtdHLSOwAAWBcAAABkaXN0dXRpbHMuY29tbWFuZC5idWlsZHLTOwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5idWlsZFgBAAAALXRy1DsAAFgJAAAAbXVsdGlmaWxlctU7AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI21vZHVsZS1tdWx0aWZpbGVYAQAAAC10ctY7AABYDQAAAGhvdHNob3Quc3RhdHNy1zsAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sI21vZHVsZS1ob3RzaG90LnN0YXRzWAEAAAAtdHLYOwAAWAgAAABwbGF0Zm9ybXLZOwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI21vZHVsZS1wbGF0Zm9ybVgBAAAALXRy2jsAAFgJAAAAQ2FyYm9uLkFFcts7AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQUVYAQAAAC10ctw7AABYAwAAAGNtZHLdOwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNtb2R1bGUtY21kWAEAAAAtdHLeOwAAWBUAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXJy3zsAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLnNpbXBsZV9zZXJ2ZXJYAQAAAC10cuA7AABYCAAAAGNvbW1hbmRzcuE7AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWwjbW9kdWxlLWNvbW1hbmRzWAEAAAAtdHLiOwAAWAcAAAB0ZXJtaW9zcuM7AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCNtb2R1bGUtdGVybWlvc1gBAAAALXRy5DsAAFgSAAAAQ2FyYm9uLlFET2Zmc2NyZWVucuU7AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUURPZmZzY3JlZW5YAQAAAC10cuY7AABYBgAAAGljb3BlbnLnOwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1pY29wZW5YAQAAAC10cug7AABYAwAAAHB3ZHLpOwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wd2QuaHRtbCNtb2R1bGUtcHdkWAEAAAAtdHLqOwAAWAMAAABtZDVy6zsAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbW9kdWxlLW1kNVgBAAAALXRy7DsAAFgHAAAAaHR0cGxpYnLtOwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjbW9kdWxlLWh0dHBsaWJYAQAAAC10cu47AABYDAAAAENvbmZpZ1BhcnNlcnLvOwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNtb2R1bGUtQ29uZmlnUGFyc2VyWAEAAAAtdHLwOwAAWAQAAAB0ZXN0cvE7AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCNtb2R1bGUtdGVzdFgBAAAALXRy8jsAAFgJAAAAaXRlcnRvb2xzcvM7AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI21vZHVsZS1pdGVydG9vbHNYAQAAAC10cvQ7AABYBAAAAGFpZmNy9TsAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI21vZHVsZS1haWZjWAEAAAAtdHL2OwAAWAsAAABDb2xvclBpY2tlcnL3OwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnBpY2tlci5odG1sI21vZHVsZS1Db2xvclBpY2tlclgBAAAALXRy+DsAAFgNAAAAQ0dJSFRUUFNlcnZlcnL5OwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2lodHRwc2VydmVyLmh0bWwjbW9kdWxlLUNHSUhUVFBTZXJ2ZXJYAQAAAC10cvo7AABYBQAAAE1hY09Tcvs7AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjbW9kdWxlLU1hY09TWAEAAAAtdHL8OwAAWAcAAABmaWxlY21wcv07AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNtb2R1bGUtZmlsZWNtcFgBAAAALXRy/jsAAFgGAAAAcHljbGJycv87AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI21vZHVsZS1weWNsYnJYAQAAAC10cgA8AABYHAAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXNyATwAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXNYAQAAAC10cgI8AABYFgAAAGRpc3R1dGlscy5hcmNoaXZlX3V0aWxyAzwAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmFyY2hpdmVfdXRpbFgBAAAALXRyBDwAAFgGAAAAcXVvcHJpcgU8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1b3ByaS5odG1sI21vZHVsZS1xdW9wcmlYAQAAAC10cgY8AABYCgAAAEhUTUxQYXJzZXJyBzwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI21vZHVsZS1IVE1MUGFyc2VyWAEAAAAtdHIIPAAAWA4AAABlbWFpbC5lbmNvZGVyc3IJPAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lbmNvZGVycy5odG1sI21vZHVsZS1lbWFpbC5lbmNvZGVyc1gBAAAALXRyCjwAAFgKAAAAc3RyaW5ncHJlcHILPAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjbW9kdWxlLXN0cmluZ3ByZXBYAQAAAC10cgw8AABYEAAAAHdzZ2lyZWYuaGFuZGxlcnNyDTwAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLmhhbmRsZXJzWAEAAAAtdHIOPAAAWAwAAABDYXJib24uSWNvbnNyDzwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5JY29uc1gBAAAALXRyEDwAAFgIAAAAd2luc291bmRyETwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCNtb2R1bGUtd2luc291bmRYAQAAAC10chI8AABYCwAAAGNvbGxlY3Rpb25zchM8AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjbW9kdWxlLWNvbGxlY3Rpb25zWAEAAAAtdHIUPAAAWAYAAABpbWdoZHJyFTwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1naGRyLmh0bWwjbW9kdWxlLWltZ2hkclgBAAAALXRyFjwAAFgHAAAAbG9nZ2luZ3IXPAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbW9kdWxlLWxvZ2dpbmdYAQAAAC10chg8AABYBQAAAHR5cGVzchk8AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjbW9kdWxlLXR5cGVzWAEAAAAtdHIaPAAAWAwAAABDYXJib24uU291bmRyGzwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Tb3VuZFgBAAAALXRyHDwAAFgHAAAAc210cGxpYnIdPAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjbW9kdWxlLXNtdHBsaWJYAQAAAC10ch48AABYBQAAAHNtdHBkch88AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBkLmh0bWwjbW9kdWxlLXNtdHBkWAEAAAAtdHIgPAAAWAcAAABmbm1hdGNociE8AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNtb2R1bGUtZm5tYXRjaFgBAAAALXRyIjwAAFgHAAAAY2ZtZmlsZXIjPAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1jZm1maWxlWAEAAAAtdHIkPAAAWBMAAABkaXN0dXRpbHMuZXh0ZW5zaW9uciU8AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5leHRlbnNpb25YAQAAAC10ciY8AABYCQAAAGZ1bmN0b29sc3InPAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNtb2R1bGUtZnVuY3Rvb2xzWAEAAAAtdHIoPAAAWAMAAABzaGFyKTwAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWwjbW9kdWxlLXNoYVgBAAAALXRyKjwAAFgGAAAAcG9wZW4ycis8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI21vZHVsZS1wb3BlbjJYAQAAAC10ciw8AABYDwAAAHhtbC5kb20ubWluaWRvbXItPAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCNtb2R1bGUteG1sLmRvbS5taW5pZG9tWAEAAAAtdHIuPAAAWAcAAABubnRwbGlici88AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNtb2R1bGUtbm50cGxpYlgBAAAALXRyMDwAAFgDAAAAZmxwcjE8AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjbW9kdWxlLWZscFgBAAAALXRyMjwAAFgLAAAATWluaUFFRnJhbWVyMzwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWluaWFlZnJhbWUuaHRtbCNtb2R1bGUtTWluaUFFRnJhbWVYAQAAAC10cjQ8AABYDgAAAEJhc2VIVFRQU2VydmVycjU8AAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjbW9kdWxlLUJhc2VIVFRQU2VydmVyWAEAAAAtdHI2PAAAWAcAAABudW1iZXJzcjc8AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNtb2R1bGUtbnVtYmVyc1gBAAAALXRyODwAAFgGAAAAbXNpbGlicjk8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21vZHVsZS1tc2lsaWJYAQAAAC10cjo8AABYEAAAAGxvZ2dpbmcuaGFuZGxlcnNyOzwAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI21vZHVsZS1sb2dnaW5nLmhhbmRsZXJzWAEAAAAtdHI8PAAAWAYAAABzeW1ib2xyPTwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltYm9sLmh0bWwjbW9kdWxlLXN5bWJvbFgBAAAALXRyPjwAAFgGAAAAY3Vyc2Vzcj88AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI21vZHVsZS1jdXJzZXNYAQAAAC10ckA8AABYBwAAAFRraW50ZXJyQTwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI21vZHVsZS1Ua2ludGVyWAEAAAAtdHJCPAAAWAYAAAB0dXJ0bGVyQzwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjbW9kdWxlLXR1cnRsZVgBAAAALXRyRDwAAFgEAAAAaG1hY3JFPAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWwjbW9kdWxlLWhtYWNYAQAAAC10ckY8AABYDwAAAGVtYWlsLmdlbmVyYXRvcnJHPAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNtb2R1bGUtZW1haWwuZ2VuZXJhdG9yWAEAAAAtdHJIPAAAWAMAAABuZXdySTwAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbW9kdWxlLW5ld1gBAAAALXRySjwAAFgMAAAAdGVzdC5zdXBwb3J0cks8AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCNtb2R1bGUtdGVzdC5zdXBwb3J0WAEAAAAtdHJMPAAAWAUAAAB0b2tlbnJNPAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI21vZHVsZS10b2tlblgBAAAALXRyTjwAAFgOAAAAQ2FyYm9uLk1hY0hlbHByTzwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5NYWNIZWxwWAEAAAAtdHJQPAAAWAQAAABzcHdkclE8AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Nwd2QuaHRtbCNtb2R1bGUtc3B3ZFgBAAAALXRyUjwAAFgCAAAAZm1yUzwAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNtb2R1bGUtZm1YAQAAAC10clQ8AABYAgAAAGZsclU8AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjbW9kdWxlLWZsWAEAAAAtdHJWPAAAWBAAAABDYXJib24uUmVzb3VyY2Vzclc8AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUmVzb3VyY2VzWAEAAAAtdHJYPAAAWA8AAABkaXN0dXRpbHMuc3Bhd25yWTwAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnNwYXduWAEAAAAtdHJaPAAAWAoAAABzdWJwcm9jZXNzcls8AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNtb2R1bGUtc3VicHJvY2Vzc1gBAAAALXRyXDwAAFgFAAAAbmV0cmNyXTwAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0cmMuaHRtbCNtb2R1bGUtbmV0cmNYAQAAAC10cl48AABYAwAAAHBkYnJfPAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNtb2R1bGUtcGRiWAEAAAAtdHJgPAAAWAkAAABDYXJib24uUWRyYTwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5RZFgBAAAALXRyYjwAAFgOAAAAaHRtbGVudGl0eWRlZnNyYzwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI21vZHVsZS1odG1sZW50aXR5ZGVmc1gBAAAALXRyZDwAAFgZAAAAZGlzdHV0aWxzLmN5Z3dpbmNjb21waWxlcnJlPAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyWAEAAAAtdHJmPAAAWAgAAABjb21waWxlcnJnPAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI21vZHVsZS1jb21waWxlclgBAAAALXRyaDwAAFgGAAAAc2VsZWN0cmk8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI21vZHVsZS1zZWxlY3RYAQAAAC10cmo8AABYBQAAAGVtYWlscms8AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmh0bWwjbW9kdWxlLWVtYWlsWAEAAAAtdHJsPAAAWAIAAABGTHJtPAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI21vZHVsZS1GTFgBAAAALXRybjwAAFgCAAAAaWNybzwAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNtb2R1bGUtaWNYAQAAAC10cnA8AABYCgAAAENhcmJvbi5PU0FycTwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5PU0FYAQAAAC10cnI8AABYAgAAAGlvcnM8AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjbW9kdWxlLWlvWAEAAAAtdHJ0PAAAWBAAAABDYXJib24uUXVpY2tEcmF3cnU8AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUXVpY2tEcmF3WAEAAAAtdHJ2PAAAWAkAAAB6aXBpbXBvcnRydzwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjbW9kdWxlLXppcGltcG9ydFgBAAAALXRyeDwAAFgHAAAAY1BpY2tsZXJ5PAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNtb2R1bGUtY1BpY2tsZVgBAAAALXRyejwAAFgGAAAAYWVwYWNrcns8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FlcGFjay5odG1sI21vZHVsZS1hZXBhY2tYAQAAAC10cnw8AABYCwAAAEVhc3lEaWFsb2dzcn08AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjbW9kdWxlLUVhc3lEaWFsb2dzWAEAAAAtdHJ+PAAAWAYAAABmcGVjdGxyfzwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBlY3RsLmh0bWwjbW9kdWxlLWZwZWN0bFgBAAAALXRygDwAAFgFAAAAdHJhY2VygTwAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNtb2R1bGUtdHJhY2VYAQAAAC10coI8AABYCwAAAGFwcGxlc2luZ2xlcoM8AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjbW9kdWxlLWFwcGxlc2luZ2xlWAEAAAAtdHKEPAAAWBAAAAB3c2dpcmVmLnZhbGlkYXRlcoU8AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZi52YWxpZGF0ZVgBAAAALXRyhjwAAFgGAAAAc2h1dGlscoc8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI21vZHVsZS1zaHV0aWxYAQAAAC10cog8AABYCAAAAHVybHBhcnNlcok8AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjbW9kdWxlLXVybHBhcnNlWAEAAAAtdHKKPAAAWAUAAABjZ2l0YnKLPAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2l0Yi5odG1sI21vZHVsZS1jZ2l0YlgBAAAALXRyjDwAAFgXAAAAZGlzdHV0aWxzLnVuaXhjY29tcGlsZXJyjTwAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnVuaXhjY29tcGlsZXJYAQAAAC10co48AABYCQAAAHBvc2l4ZmlsZXKPPAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbCNtb2R1bGUtcG9zaXhmaWxlWAEAAAAtdHKQPAAAWA8AAABkdW1teV90aHJlYWRpbmdykTwAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLmh0bWwjbW9kdWxlLWR1bW15X3RocmVhZGluZ1gBAAAALXRykjwAAFgIAAAAcmVhZGxpbmVykzwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNtb2R1bGUtcmVhZGxpbmVYAQAAAC10cpQ8AABYGgAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9ucpU8AAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvblgBAAAALXRyljwAAFgIAAAAb3B0cGFyc2VylzwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNtb2R1bGUtb3B0cGFyc2VYAQAAAC10cpg8AABYAwAAAHhtbHKZPAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuaHRtbCNtb2R1bGUteG1sWAEAAAAtdHKaPAAAWAcAAABvcy5wYXRocps8AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNtb2R1bGUtb3MucGF0aFgBAAAALXRynDwAAFgGAAAAbXN2Y3J0cp08AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21vZHVsZS1tc3ZjcnRYAQAAAC10cp48AABYBAAAAGNvcHlynzwAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weS5odG1sI21vZHVsZS1jb3B5WAEAAAAtdHKgPAAAWAYAAABzeXNsb2dyoTwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzbG9nLmh0bWwjbW9kdWxlLXN5c2xvZ1gBAAAALXRyojwAAFgHAAAAeG1sLnNheHKjPAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjbW9kdWxlLXhtbC5zYXhYAQAAAC10cqQ8AABYEwAAAGRpc3R1dGlscy5zeXNjb25maWdypTwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnN5c2NvbmZpZ1gBAAAALXRypjwAAFgHAAAAZGlmZmxpYnKnPAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjbW9kdWxlLWRpZmZsaWJYAQAAAC10cqg8AABYBQAAAGNodW5rcqk8AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjbW9kdWxlLWNodW5rWAEAAAAtdHKqPAAAWAwAAAB3c2dpcmVmLnV0aWxyqzwAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLnV0aWxYAQAAAC10cqw8AABYCAAAAHRhYm5hbm55cq08AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhYm5hbm55Lmh0bWwjbW9kdWxlLXRhYm5hbm55WAEAAAAtdHKuPAAAWA8AAABDYXJib24uSUJDYXJib25yrzwAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5JQkNhcmJvblgBAAAALXRysDwAAFgFAAAAYnNkZGJysTwAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNtb2R1bGUtYnNkZGJYAQAAAC10crI8AABYDAAAAGR1bW15X3RocmVhZHKzPAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1teV90aHJlYWQuaHRtbCNtb2R1bGUtZHVtbXlfdGhyZWFkWAEAAAAtdHK0PAAAWAEAAABXKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1XWAEAAAAtdHK1PAAAWAMAAABOYXZytjwAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtTmF2WAEAAAAtdHK3PAAAWA4AAABnZW5zdWl0ZW1vZHVsZXK4PAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZW5zdWl0ZW1vZHVsZS5odG1sI21vZHVsZS1nZW5zdWl0ZW1vZHVsZVgBAAAALXRyuTwAAFgMAAAAU29ja2V0U2VydmVycro8AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI21vZHVsZS1Tb2NrZXRTZXJ2ZXJYAQAAAC10crs8AABYDAAAAGVtYWlsLmhlYWRlcnK8PAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNtb2R1bGUtZW1haWwuaGVhZGVyWAEAAAAtdHK9PAAAWB0AAABkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYnK+PAAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYlgBAAAALXRyvzwAAFgLAAAAdW5pY29kZWRhdGFywDwAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCNtb2R1bGUtdW5pY29kZWRhdGFYAQAAAC10csE8AABYCQAAAGZyYWN0aW9uc3LCPAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNtb2R1bGUtZnJhY3Rpb25zWAEAAAAtdHLDPAAAWAsAAABzdW5hdWRpb2RldnLEPAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sI21vZHVsZS1zdW5hdWRpb2RldlgBAAAALXRyxTwAAFgKAAAAQ2FyYm9uLlJlc3LGPAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlJlc1gBAAAALXRyxzwAAFgWAAAAZGlzdHV0aWxzLmZhbmN5X2dldG9wdHLIPAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZmFuY3lfZ2V0b3B0WAEAAAAtdHLJPAAAWAoAAABweV9jb21waWxlcso8AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNtb2R1bGUtcHlfY29tcGlsZVgBAAAALXRyyzwAAFgGAAAAdGltZWl0csw8AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI21vZHVsZS10aW1laXRYAQAAAC10cs08AABYGAAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vyc3LOPAAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzWAEAAAAtdHLPPAAAWBAAAABDYXJib24uRHJhZ2NvbnN0ctA8AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRHJhZ2NvbnN0WAEAAAAtdHLRPAAAWAkAAAB0ZWxuZXRsaWJy0jwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjbW9kdWxlLXRlbG5ldGxpYlgBAAAALXRy0zwAAFgKAAAAQ2FyYm9uLkV2dHLUPAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkV2dFgBAAAALXRy1TwAAFgEAAAAZ3ppcHLWPAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nemlwLmh0bWwjbW9kdWxlLWd6aXBYAQAAAC10ctc8AABYBQAAAG11dGV4ctg8AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211dGV4Lmh0bWwjbW9kdWxlLW11dGV4WAEAAAAtdHLZPAAAWAYAAABDb29raWVy2jwAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjbW9kdWxlLUNvb2tpZVgBAAAALXRy2zwAAFgHAAAAZ2V0cGFzc3LcPAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRwYXNzLmh0bWwjbW9kdWxlLWdldHBhc3NYAQAAAC10ct08AABYBAAAAGpwZWdy3jwAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI21vZHVsZS1qcGVnWAEAAAAtdHLfPAAAWAsAAABDYXJib24uSGVscHLgPAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkhlbHBYAQAAAC10cuE8AABYBwAAAHN0YXR2ZnNy4jwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI21vZHVsZS1zdGF0dmZzWAEAAAAtdHLjPAAAWAgAAABhc3luY29yZXLkPAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI21vZHVsZS1hc3luY29yZVgBAAAALXRy5TwAAFgPAAAARG9jWE1MUlBDU2VydmVycuY8AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI21vZHVsZS1Eb2NYTUxSUENTZXJ2ZXJYAQAAAC10cuc8AABYEQAAAENhcmJvbi5BcHBlYXJhbmNlcug8AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQXBwZWFyYW5jZVgBAAAALXRy6TwAAFgEAAAAanNvbnLqPAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjbW9kdWxlLWpzb25YAQAAAC10cus8AABYEgAAAGRpc3R1dGlscy5kaXJfdXRpbHLsPAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGlyX3V0aWxYAQAAAC10cu08AAB1WA0AAABzdGQ6Y21kb3B0aW9ucu48AAB9cu88AAAoWCMAAAB1bml0dGVzdC1kaXNjb3Zlci4tLXN0YXJ0LWRpcmVjdG9yeXLwPAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci1zWAEAAAAtdHLxPAAAWBMAAAB1bml0dGVzdC4tLWZhaWxmYXN0cvI8AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWZYAQAAAC10cvM8AABYDQAAAHRpbWVpdC4tLXRpbWVy9DwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC10WAEAAAAtdHL1PAAAWBUAAAB0cmFjZS4tLWlnbm9yZS1tb2R1bGVy9jwAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtaWdub3JlLW1vZHVsZVgBAAAALXRy9zwAAFgDAAAALU9Pcvg8AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLW9vWAEAAAAtdHL5PAAAWA4AAAB0cmFjZS4tLXRpbWluZ3L6PAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1nWAEAAAAtdHL7PAAAWA8AAAB0cmFjZS4tLXN1bW1hcnly/DwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2Utc1gBAAAALXRy/TwAAFgCAAAALT9y/jwAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb25YAQAAAC10cv88AABYEQAAAHRyYWNlLi0tbm8tcmVwb3J0cgA9AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLW5vLXJlcG9ydFgBAAAALXRyAT0AAFgCAAAALTNyAj0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tM1gBAAAALXRyAz0AAFgCAAAALUpyBD0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24talgBAAAALXRyBT0AAFgCAAAALU9yBj0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tb1gBAAAALXRyBz0AAFgCAAAALUJyCD0AAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNpZDFYAQAAAC10cgk9AABYDwAAAHRpbWVpdC4tLXJlcGVhdHIKPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXJYAQAAAC10cgs9AABYAgAAAC1Fcgw9AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWVYAQAAAC10cg09AABYAgAAAC1Ycg49AAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjaWQ1WAEAAAAtdHIPPQAAWAIAAAAtUnIQPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1yWAEAAAAtdHIRPQAAWAIAAAAtU3ISPQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2lkMlgBAAAALXRyEz0AAFgPAAAAdHJhY2UuLS12ZXJzaW9uchQ9AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXZlcnNpb25YAQAAAC10chU9AABYAgAAAC1WchY9AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXZYAQAAAC10chc9AABYAgAAAC1Xchg9AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXdYAQAAAC10chk9AABYAgAAAC1Vcho9AAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjaWQ0WAEAAAAtdHIbPQAAWAIAAAAtaHIcPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1oWAEAAAAtdHIdPQAAWAIAAAAtaXIePQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1pWAEAAAAtdHIfPQAAWAIAAAAtbXIgPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1tWAEAAAAtdHIhPQAAWAIAAAAtYnIiPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1iWAEAAAAtdHIjPQAAWAIAAAAtY3IkPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1jWAEAAAAtdHIlPQAAWAwAAAB0cmFjZS4tLWhlbHByJj0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtaGVscFgBAAAALXRyJz0AAFgQAAAAdW5pdHRlc3QuLS1jYXRjaHIoPQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1jWAEAAAAtdHIpPQAAWAIAAAAtZHIqPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1kWAEAAAAtdHIrPQAAWA8AAABjb21waWxlYWxsLmZpbGVyLD0AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWFyZy1maWxlWAEAAAAtdHItPQAAWAIAAAAteHIuPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi14WAEAAAAtdHIvPQAAWAIAAAAtc3IwPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1zWAEAAAAtdHIxPQAAWAIAAAAtdnIyPQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2lkM1gBAAAALXRyMz0AAFgCAAAALXRyND0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tdFgBAAAALXRyNT0AAFgCAAAALXVyNj0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tdVgBAAAALXRyNz0AAFgNAAAAY29tcGlsZWFsbC4teHI4PQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwteFgBAAAALXRyOT0AAFgQAAAAc2l0ZS4tLXVzZXItc2l0ZXI6PQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjY21kb3B0aW9uLXNpdGUtdXNlci1zaXRlWAEAAAAtdHI7PQAAWA0AAABjb21waWxlYWxsLi1xcjw9AAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1xWAEAAAAtdHI9PQAAWBIAAAB0cmFjZS4tLXRyYWNrY2FsbHNyPj0AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtdHJhY2tjYWxsc1gBAAAALXRyPz0AAFgNAAAAY29tcGlsZWFsbC4taXJAPQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtaVgBAAAALXRyQT0AAFgNAAAAY29tcGlsZWFsbC4tbHJCPQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtbFgBAAAALXRyQz0AAFgNAAAAY29tcGlsZWFsbC4tZnJEPQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtZlgBAAAALXRyRT0AAFgNAAAAY29tcGlsZWFsbC4tZHJGPQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtZFgBAAAALXRyRz0AAFgQAAAAc2l0ZS4tLXVzZXItYmFzZXJIPQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjY21kb3B0aW9uLXNpdGUtdXNlci1iYXNlWAEAAAAtdHJJPQAAWBsAAAB1bml0dGVzdC1kaXNjb3Zlci4tLXZlcmJvc2VySj0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdlgBAAAALXRySz0AAFgSAAAAdHJhY2UuLS1pZ25vcmUtZGlyckw9AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWlnbm9yZS1kaXJYAQAAAC10ck09AABYEAAAAHRpbWVpdC4tLXZlcmJvc2VyTj0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC12WAEAAAAtdHJPPQAAWA4AAAB0cmFjZS4tLXJlcG9ydHJQPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1yWAEAAAAtdHJRPQAAWAkAAAB0aW1laXQuLWNyUj0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1jWAEAAAAtdHJTPQAAWAkAAAB0aW1laXQuLW5yVD0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1uWAEAAAAtdHJVPQAAWA4AAAB0aW1laXQuLS1zZXR1cHJWPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXNYAQAAAC10clc9AABYCQAAAHRpbWVpdC4taHJYPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LWhYAQAAAC10clk9AABYEAAAAHRyYWNlLi0tY292ZXJkaXJyWj0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY292ZXJkaXJYAQAAAC10cls9AABYCQAAAHRpbWVpdC4tdnJcPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXZYAQAAAC10cl09AABYCQAAAHRpbWVpdC4tdHJePQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXRYAQAAAC10cl89AABYCQAAAHRpbWVpdC4tc3JgPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXNYAQAAAC10cmE9AABYCQAAAHRpbWVpdC4tcnJiPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXJYAQAAAC10cmM9AABYDQAAAHRyYWNlLi0tdHJhY2VyZD0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtdFgBAAAALXRyZT0AAFgnAAAAdW5pdHRlc3QtZGlzY292ZXIuLS10b3AtbGV2ZWwtZGlyZWN0b3J5cmY9AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXRYAQAAAC10cmc9AABYBgAAAC0taGVscHJoPQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1oZWxwWAEAAAAtdHJpPQAAWBsAAAB1bml0dGVzdC1kaXNjb3Zlci4tLXBhdHRlcm5yaj0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItcFgBAAAALXRyaz0AAFgUAAAAdW5pdHRlc3QtZGlzY292ZXIuLXBybD0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItcFgBAAAALXRybT0AAFgUAAAAdW5pdHRlc3QtZGlzY292ZXIuLXNybj0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItc1gBAAAALXRybz0AAFgUAAAAdW5pdHRlc3QtZGlzY292ZXIuLXRycD0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdFgBAAAALXRycT0AAFgUAAAAdW5pdHRlc3QtZGlzY292ZXIuLXZycj0AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdlgBAAAALXRycz0AAFgPAAAAdGltZWl0Li0tbnVtYmVycnQ9AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtblgBAAAALXRydT0AAFgLAAAAdW5pdHRlc3QuLWNydj0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtY1gBAAAALXRydz0AAFgLAAAAdW5pdHRlc3QuLWJyeD0AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtYlgBAAAALXRyeT0AAFgUAAAAY29tcGlsZWFsbC5kaXJlY3Rvcnlyej0AAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWFyZy1kaXJlY3RvcnlYAQAAAC10cns9AABYCwAAAHVuaXR0ZXN0Li1mcnw9AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWZYAQAAAC10cn09AABYDQAAAHRpbWVpdC4tLWhlbHByfj0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1oWAEAAAAtdHJ/PQAAWAkAAAAtLXZlcnNpb25ygD0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tdmVyc2lvblgBAAAALXRygT0AAFgOAAAAdGltZWl0Li0tY2xvY2tygj0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1jWAEAAAAtdHKDPQAAWAwAAAB0cmFjZS4tLWZpbGVyhD0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtZlgBAAAALXRyhT0AAFgIAAAAdHJhY2UuLUNyhj0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY292ZXJkaXJYAQAAAC10coc9AABYEQAAAHRyYWNlLi0tbGlzdGZ1bmNzcog9AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWxYAQAAAC10cok9AABYCAAAAHRyYWNlLi1Ucoo9AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXRyYWNrY2FsbHNYAQAAAC10cos9AABYCAAAAHRyYWNlLi1Scow9AAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLW5vLXJlcG9ydFgBAAAALXRyjT0AAFgNAAAAdHJhY2UuLS1jb3VudHKOPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1jWAEAAAAtdHKPPQAAWAgAAAB0cmFjZS4tbXKQPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1tWAEAAAAtdHKRPQAAWAgAAAB0cmFjZS4tbHKSPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1sWAEAAAAtdHKTPQAAWAoAAAB6aXBmaWxlLi1jcpQ9AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCNjbWRvcHRpb24temlwZmlsZS1jWAEAAAAtdHKVPQAAWAgAAAB0cmFjZS4tZ3KWPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1nWAEAAAAtdHKXPQAAWAgAAAB0cmFjZS4tZnKYPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1mWAEAAAAtdHKZPQAAWAgAAAB0cmFjZS4tY3KaPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1jWAEAAAAtdHKbPQAAWAoAAAB6aXBmaWxlLi10cpw9AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCNjbWRvcHRpb24temlwZmlsZS10WAEAAAAtdHKdPQAAWAgAAAB0cmFjZS4tdHKePQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS10WAEAAAAtdHKfPQAAWAgAAAB0cmFjZS4tc3KgPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1zWAEAAAAtdHKhPQAAWAgAAAB0cmFjZS4tcnKiPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1yWAEAAAAtdHKjPQAAWAoAAAB6aXBmaWxlLi1lcqQ9AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCNjbWRvcHRpb24temlwZmlsZS1lWAEAAAAtdHKlPQAAWBEAAAB1bml0dGVzdC4tLWJ1ZmZlcnKmPQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1iWAEAAAAtdHKnPQAAWAIAAAAtUXKoPQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1xWAEAAAAtdHKpPQAAWA8AAAB0cmFjZS4tLW1pc3Npbmdyqj0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtbVgBAAAALXRyqz0AAFgKAAAAemlwZmlsZS4tbHKsPQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjY21kb3B0aW9uLXppcGZpbGUtbFgBAAAALXRyrT0AAHVYCwAAAHB5OmZ1bmN0aW9ufXKuPQAAKFgLAAAAYXVkaW9vcC5ybXNyrz0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3Aucm1zWAEAAAAtdHKwPQAAWAsAAABvcGVyYXRvci5lcXKxPQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmVxWAEAAAAtdHKyPQAAWAMAAAB6aXBysz0AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjemlwWAEAAAAtdHK0PQAAWBEAAABmbm1hdGNoLnRyYW5zbGF0ZXK1PQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWwjZm5tYXRjaC50cmFuc2xhdGVYAQAAAC10crY9AABYEgAAAHVybHBhcnNlLnVybGRlZnJhZ3K3PQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLnVybGRlZnJhZ1gBAAAALXRyuD0AAFgEAAAAb3BlbnK5PQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvcGVuWAEAAAAtdHK6PQAAWBIAAAB1cmxsaWIudXJscmV0cmlldmVyuz0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybHJldHJpZXZlWAEAAAAtdHK8PQAAWAsAAABjbWF0aC5hdGFuaHK9PQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmF0YW5oWAEAAAAtdHK+PQAAWAkAAABvcy5mY2hvd25yvz0AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mY2hvd25YAQAAAC10csA9AABYEAAAAHJmYzgyMi5wYXJzZWFkZHJywT0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLnBhcnNlYWRkclgBAAAALXRywj0AAFgRAAAAbWFpbGNhcC5maW5kbWF0Y2hywz0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGNhcC5odG1sI21haWxjYXAuZmluZG1hdGNoWAEAAAAtdHLEPQAAWBIAAABnZXR0ZXh0LmxkbmdldHRleHRyxT0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubGRuZ2V0dGV4dFgBAAAALXRyxj0AAFgXAAAAY29tcGlsZWFsbC5jb21waWxlX2ZpbGVyxz0AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NvbXBpbGVhbGwuY29tcGlsZV9maWxlWAEAAAAtdHLIPQAAWBIAAAB3aW5zb3VuZC5QbGF5U291bmRyyT0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5QbGF5U291bmRYAQAAAC10cso9AABYIQAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5tYWtlX3NlcnZlcnLLPQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLm1ha2Vfc2VydmVyWAEAAAAtdHLMPQAAWBAAAABzdHJpbmcudHJhbnNsYXRlcs09AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy50cmFuc2xhdGVYAQAAAC10cs49AABYCAAAAG1hdGgudGFucs89AAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRhblgBAAAALXRy0D0AAFgQAAAAYmFzZTY0LmIxNmVuY29kZXLRPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjE2ZW5jb2RlWAEAAAAtdHLSPQAAWAwAAAB0dXJ0bGUucmVzZXRy0z0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJlc2V0WAEAAAAtdHLUPQAAWBUAAABjb2RlY3MucmVnaXN0ZXJfZXJyb3Jy1T0AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLnJlZ2lzdGVyX2Vycm9yWAEAAAAtdHLWPQAAWB4AAABkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfZ3JvdXBy1z0AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfZ3JvdXBYAQAAAC10ctg9AABYEAAAAHR1cnRsZS5nZXRzY3JlZW5y2T0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldHNjcmVlblgBAAAALXRy2j0AAFgPAAAAaW5zcGVjdC5nZXRmaWxlcts9AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGZpbGVYAQAAAC10ctw9AABYEAAAAG9wZXJhdG9yLmlyc2hpZnRy3T0AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pcnNoaWZ0WAEAAAAtdHLePQAAWBMAAABpbnNwZWN0LmlzZ2VuZXJhdG9yct89AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZ2VuZXJhdG9yWAEAAAAtdHLgPQAAWBQAAABkaWZmbGliLmNvbnRleHRfZGlmZnLhPQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5jb250ZXh0X2RpZmZYAQAAAC10cuI9AABYGQAAAHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW1y4z0AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtWAEAAAAtdHLkPQAAWBIAAAByZXNvdXJjZS5nZXRybGltaXRy5T0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5nZXRybGltaXRYAQAAAC10cuY9AABYGAAAAGVuY29kaW5ncy5pZG5hLlRvVW5pY29kZXLnPQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3MuaWRuYS5Ub1VuaWNvZGVYAQAAAC10cug9AABYEAAAAHNpZ25hbC5nZXRpdGltZXJy6T0AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLmdldGl0aW1lclgBAAAALXRy6j0AAFgLAAAAbG9jYWxlLmF0b2Zy6z0AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmF0b2ZYAQAAAC10cuw9AABYFgAAAGVtYWlsLnV0aWxzLmZvcm1hdGRhdGVy7T0AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbC5odG1sI2VtYWlsLnV0aWxzLmZvcm1hdGRhdGVYAQAAAC10cu49AABYDwAAAG9zLnBhdGgucmVscGF0aHLvPQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5yZWxwYXRoWAEAAAAtdHLwPQAAWBIAAAByZXNvdXJjZS5zZXRybGltaXRy8T0AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5zZXRybGltaXRYAQAAAC10cvI9AABYEgAAAGJpc2VjdC5pbnNvcnRfbGVmdHLzPQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0X2xlZnRYAQAAAC10cvQ9AABYCwAAAGxvY2FsZS5hdG9pcvU9AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5hdG9pWAEAAAAtdHL2PQAAWAoAAAB0dXJ0bGUucGVucvc9AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW5YAQAAAC10cvg9AABYDQAAAGdjLmlzX3RyYWNrZWRy+T0AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5pc190cmFja2VkWAEAAAAtdHL6PQAAWBAAAABfd2lucmVnLlNldFZhbHVlcvs9AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlNldFZhbHVlWAEAAAAtdHL8PQAAWBMAAABoYXNobGliLnBia2RmMl9obWFjcv09AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLnBia2RmMl9obWFjWAEAAAAtdHL+PQAAWBEAAABvcGVyYXRvci5mbG9vcmRpdnL/PQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmZsb29yZGl2WAEAAAAtdHIAPgAAWBoAAABzcWxpdGUzLnJlZ2lzdGVyX2NvbnZlcnRlcnIBPgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5yZWdpc3Rlcl9jb252ZXJ0ZXJYAQAAAC10cgI+AABYDAAAAGdjLmdldF9kZWJ1Z3IDPgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9kZWJ1Z1gBAAAALXRyBD4AAFgVAAAAdGVzdC5zdXBwb3J0LmZpbmRmaWxlcgU+AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuZmluZGZpbGVYAQAAAC10cgY+AABYDwAAAGdkYm0ucmVvcmdhbml6ZXIHPgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5yZW9yZ2FuaXplWAEAAAAtdHIIPgAAWBIAAABzaHV0aWwuY29weWZpbGVvYmpyCT4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHlmaWxlb2JqWAEAAAAtdHIKPgAAWA0AAABvcGVyYXRvci5pYW5kcgs+AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaWFuZFgBAAAALXRyDD4AAFgIAAAAZGJtLm9wZW5yDT4AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWwjZGJtLm9wZW5YAQAAAC10cg4+AABYDQAAAGRpZmZsaWIubmRpZmZyDz4AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIubmRpZmZYAQAAAC10chA+AABYDgAAAGN0eXBlcy5wb2ludGVychE+AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5wb2ludGVyWAEAAAAtdHISPgAAWA0AAABmbC5zaG93X2lucHV0chM+AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2hvd19pbnB1dFgBAAAALXRyFD4AAFgZAAAAbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZ3IVPgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmcuY29uZmlnLmZpbGVDb25maWdYAQAAAC10chY+AABYDQAAAGN1cnNlcy5ub2VjaG9yFz4AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5vZWNob1gBAAAALXRyGD4AAFgPAAAAbXN2Y3J0LnVuZ2V0d2Nochk+AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC51bmdldHdjaFgBAAAALXRyGj4AAFgJAAAAY3Vyc2VzLm5schs+AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ubFgBAAAALXRyHD4AAFgVAAAAZW1haWwudXRpbHMucGFyc2VkYXRlch0+AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5wYXJzZWRhdGVYAQAAAC10ch4+AABYCQAAAHR1cnRsZS51cHIfPgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudXBYAQAAAC10ciA+AABYFAAAAGFzdC5pbmNyZW1lbnRfbGluZW5vciE+AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5pbmNyZW1lbnRfbGluZW5vWAEAAAAtdHIiPgAAWBQAAABvcy5wYXRoLmNvbW1vbnByZWZpeHIjPgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5jb21tb25wcmVmaXhYAQAAAC10ciQ+AABYEgAAAHBsYXRmb3JtLnByb2Nlc3NvcnIlPgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnByb2Nlc3NvclgBAAAALXRyJj4AAFgTAAAAY29sb3JzeXMuaGxzX3RvX3JnYnInPgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLmhsc190b19yZ2JYAQAAAC10cig+AABYDAAAAG9zLnRjc2V0cGdycHIpPgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRjc2V0cGdycFgBAAAALXRyKj4AAFgRAAAAbG9nZ2luZy5leGNlcHRpb25yKz4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZXhjZXB0aW9uWAEAAAAtdHIsPgAAWBIAAAByZWFkbGluZS5yZWRpc3BsYXlyLT4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5yZWRpc3BsYXlYAQAAAC10ci4+AABYIAAAAGRpc3R1dGlscy5mYW5jeV9nZXRvcHQud3JhcF90ZXh0ci8+AAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC53cmFwX3RleHRYAQAAAC10cjA+AABYFAAAAHNvY2tldC5nZXRzZXJ2YnluYW1lcjE+AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRzZXJ2YnluYW1lWAEAAAAtdHIyPgAAWBkAAAByZWFkbGluZS5zZXRfc3RhcnR1cF9ob29rcjM+AAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X3N0YXJ0dXBfaG9va1gBAAAALXRyND4AAFgIAAAAb3MubWtkaXJyNT4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ta2RpclgBAAAALXRyNj4AAFgfAAAAc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZXI3PgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lWAEAAAAtdHI4PgAAWB8AAABjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3Jzcjk+AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy54bWxjaGFycmVmcmVwbGFjZV9lcnJvcnNYAQAAAC10cjo+AABYFQAAAGZsLnNob3dfZmlsZV9zZWxlY3RvcnI7PgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnNob3dfZmlsZV9zZWxlY3RvclgBAAAALXRyPD4AAFgLAAAAYXVkaW9vcC5hZGRyPT4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWRkWAEAAAAtdHI+PgAAWBEAAAB0b2tlbml6ZS50b2tlbml6ZXI/PgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLnRva2VuaXplWAEAAAAtdHJAPgAAWBEAAABrZXl3b3JkLmlza2V5d29yZHJBPgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9rZXl3b3JkLmh0bWwja2V5d29yZC5pc2tleXdvcmRYAQAAAC10ckI+AABYFAAAAGFzdC5pdGVyX2NoaWxkX25vZGVzckM+AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5pdGVyX2NoaWxkX25vZGVzWAEAAAAtdHJEPgAAWAkAAAB0dXJ0bGUucHVyRT4AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnB1WAEAAAAtdHJGPgAAWAsAAAB0dXJ0bGUudW5kb3JHPgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudW5kb1gBAAAALXRySD4AAFgSAAAAaW1hZ2VvcC5ncmV5NDJncmV5ckk+AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmdyZXk0MmdyZXlYAQAAAC10cko+AABYDAAAAHNzbC5SQU5EX2VnZHJLPgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUkFORF9lZ2RYAQAAAC10ckw+AABYCQAAAHR1cnRsZS5ia3JNPgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmtYAQAAAC10ck4+AABYCAAAAG9zLmxzdGF0ck8+AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubHN0YXRYAQAAAC10clA+AABYCwAAAG9zLldURVJNU0lHclE+AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV1RFUk1TSUdYAQAAAC10clI+AABYEwAAAEVhc3lEaWFsb2dzLk1lc3NhZ2VyUz4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5NZXNzYWdlWAEAAAAtdHJUPgAAWA4AAABpbnNwZWN0LmlzY29kZXJVPgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2NvZGVYAQAAAC10clY+AABYFQAAAEVhc3lEaWFsb2dzLkFza1N0cmluZ3JXPgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza1N0cmluZ1gBAAAALXRyWD4AAFgbAAAAZGlzdHV0aWxzLnV0aWwuY29udmVydF9wYXRoclk+AAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuY29udmVydF9wYXRoWAEAAAAtdHJaPgAAWBEAAABjdXJzZXMuaGFzX2NvbG9yc3JbPgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaGFzX2NvbG9yc1gBAAAALXRyXD4AAFgaAAAAZW1haWwuaXRlcmF0b3JzLl9zdHJ1Y3R1cmVyXT4AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaXRlcmF0b3JzLmh0bWwjZW1haWwuaXRlcmF0b3JzLl9zdHJ1Y3R1cmVYAQAAAC10cl4+AABYEQAAAGxpbmVjYWNoZS5nZXRsaW5lcl8+AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xpbmVjYWNoZS5odG1sI2xpbmVjYWNoZS5nZXRsaW5lWAEAAAAtdHJgPgAAWBAAAABsb2NhbGUuc2V0bG9jYWxlcmE+AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zZXRsb2NhbGVYAQAAAC10cmI+AABYDQAAAHdpbnNvdW5kLkJlZXByYz4AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5CZWVwWAEAAAAtdHJkPgAAWA8AAABwYXJzZXIuc3QydHVwbGVyZT4AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLnN0MnR1cGxlWAEAAAAtdHJmPgAAWBAAAABnYy5nZXRfdGhyZXNob2xkcmc+AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuZ2V0X3RocmVzaG9sZFgBAAAALXRyaD4AAFgIAAAAb3MudXRpbWVyaT4AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy51dGltZVgBAAAALXRyaj4AAFgiAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnJrPgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJYAQAAAC10cmw+AABYEgAAAGN0eXBlcy5XSU5GVU5DVFlQRXJtPgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuV0lORlVOQ1RZUEVYAQAAAC10cm4+AABYBwAAAG9zLmxpbmtybz4AAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5saW5rWAEAAAAtdHJwPgAAWA4AAAB0dXJ0bGUub250aW1lcnJxPgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUub250aW1lclgBAAAALXRycj4AAFgPAAAAX3dpbnJlZy5PcGVuS2V5cnM+AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLk9wZW5LZXlYAQAAAC10cnQ+AABYDAAAAG9wZXJhdG9yLmlvcnJ1PgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlvclgBAAAALXRydj4AAFgUAAAAbWltZXRvb2xzLmNvcHliaW5hcnlydz4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLmNvcHliaW5hcnlYAQAAAC10cng+AABYCwAAAGNsYXNzbWV0aG9kcnk+AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2NsYXNzbWV0aG9kWAEAAAAtdHJ6PgAAWCIAAABtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLlZhbHVlcns+AAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuVmFsdWVYAQAAAC10cnw+AABYIAAAAF93aW5yZWcuRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzcn0+AAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1gBAAAALXRyfj4AAFgQAAAAY3Vyc2VzLnRpZ2V0ZmxhZ3J/PgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGlnZXRmbGFnWAEAAAAtdHKAPgAAWAMAAABhbnlygT4AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYW55WAEAAAAtdHKCPgAAWB8AAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuaXRlcnBhcnNlcoM+AAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5pdGVycGFyc2VYAQAAAC10coQ+AABYFgAAAHdhcm5pbmdzLmZvcm1hdHdhcm5pbmdyhT4AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5mb3JtYXR3YXJuaW5nWAEAAAAtdHKGPgAAWA0AAABjdXJzZXMuZmlsdGVycoc+AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5maWx0ZXJYAQAAAC10cog+AABYCgAAAG9zLmV4ZWN2cGVyiT4AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjdnBlWAEAAAAtdHKKPgAAWBUAAAB0ZXN0LnN1cHBvcnQucmVxdWlyZXNyiz4AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5yZXF1aXJlc1gBAAAALXRyjD4AAFgTAAAAZnV0dXJlX2J1aWx0aW5zLnppcHKNPgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMuemlwWAEAAAAtdHKOPgAAWBUAAABjb2RlY3MucmVwbGFjZV9lcnJvcnNyjz4AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLnJlcGxhY2VfZXJyb3JzWAEAAAAtdHKQPgAAWA8AAABCYXN0aW9uLkJhc3Rpb25ykT4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzdGlvbi5odG1sI0Jhc3Rpb24uQmFzdGlvblgBAAAALXRykj4AAFgOAAAAYnoyLmRlY29tcHJlc3Nykz4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLmRlY29tcHJlc3NYAQAAAC10cpQ+AABYCgAAAHV1aWQudXVpZDNylT4AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDNYAQAAAC10cpY+AABYFQAAAGN1cnNlcy5hc2NpaS5pc3hkaWdpdHKXPgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXN4ZGlnaXRYAQAAAC10cpg+AABYCgAAAHV1aWQudXVpZDVymT4AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDVYAQAAAC10cpo+AABYIwAAAHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3Rocps+AAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGhYAQAAAC10cpw+AABYGgAAAGRpc3R1dGlscy51dGlsLmNoYW5nZV9yb290cp0+AAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuY2hhbmdlX3Jvb3RYAQAAAC10cp4+AABYDgAAAGxvY2FsZS5nZXR0ZXh0cp8+AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5nZXR0ZXh0WAEAAAAtdHKgPgAAWAoAAAB0dHkuc2V0cmF3cqE+AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0eS5odG1sI3R0eS5zZXRyYXdYAQAAAC10cqI+AABYDQAAAGNvZGUuaW50ZXJhY3Ryoz4AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuaW50ZXJhY3RYAQAAAC10cqQ+AABYGQAAAHN5c2NvbmZpZy5pc19weXRob25fYnVpbGRypT4AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZFgBAAAALXRypj4AAFgPAAAAYXN0Lml0ZXJfZmllbGRzcqc+AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5pdGVyX2ZpZWxkc1gBAAAALXRyqD4AAFgeAAAAd3NnaXJlZi5zaW1wbGVfc2VydmVyLmRlbW9fYXBwcqk+AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuZGVtb19hcHBYAQAAAC10cqo+AABYCQAAAGdjLmVuYWJsZXKrPgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmVuYWJsZVgBAAAALXRyrD4AAFgSAAAAaXRlcnRvb2xzLmNvbXByZXNzcq0+AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21wcmVzc1gBAAAALXRyrj4AAFgNAAAAcmFuZG9tLnJhbmRvbXKvPgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucmFuZG9tWAEAAAAtdHKwPgAAWA4AAABjdXJzZXMuc2F2ZXR0eXKxPgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuc2F2ZXR0eVgBAAAALXRysj4AAFgMAAAAb3MuZ2V0Z3JvdXBzcrM+AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Z3JvdXBzWAEAAAAtdHK0PgAAWA4AAABzb2NrZXQuZ2V0ZnFkbnK1PgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0ZnFkblgBAAAALXRytj4AAFgKAAAAb3MudGVtcG5hbXK3PgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRlbXBuYW1YAQAAAC10crg+AABYDAAAAHN0YXQuU19JU0RJUnK5PgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTRElSWAEAAAAtdHK6PgAAWA0AAABzeXNsb2cuc3lzbG9ncrs+AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2xvZy5odG1sI3N5c2xvZy5zeXNsb2dYAQAAAC10crw+AABYDQAAAHdhcm5pbmdzLndhcm5yvT4AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy53YXJuWAEAAAAtdHK+PgAAWBsAAABkaXN0dXRpbHMudXRpbC5nZXRfcGxhdGZvcm1yvz4AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5nZXRfcGxhdGZvcm1YAQAAAC10csA+AABYCQAAAG9zLmNocm9vdHLBPgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmNocm9vdFgBAAAALXRywj4AAFgGAAAAZGl2bW9kcsM+AAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Rpdm1vZFgBAAAALXRyxD4AAFgJAAAAYWlmYy5vcGVucsU+AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLm9wZW5YAQAAAC10csY+AABYBgAAAGNvZXJjZXLHPgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjb2VyY2VYAQAAAC10csg+AABYBwAAAGRlbGF0dHJyyT4AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZGVsYXR0clgBAAAALXRyyj4AAFgPAAAAZ2V0cGFzcy5nZXRwYXNzcss+AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHBhc3MuaHRtbCNnZXRwYXNzLmdldHBhc3NYAQAAAC10csw+AABYDgAAAHN5cy5zZXR0c2NkdW1wcs0+AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zZXR0c2NkdW1wWAEAAAAtdHLOPgAAWBoAAABFYXN5RGlhbG9ncy5Bc2tZZXNOb0NhbmNlbHLPPgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsWAEAAAAtdHLQPgAAWBQAAAB1bmljb2RlZGF0YS5taXJyb3JlZHLRPgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm1pcnJvcmVkWAEAAAAtdHLSPgAAWA8AAABzeXMuZ2V0cmVmY291bnRy0z4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldHJlZmNvdW50WAEAAAAtdHLUPgAAWBYAAABjdXJzZXMuaXNfdGVybV9yZXNpemVkctU+AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pc190ZXJtX3Jlc2l6ZWRYAQAAAC10ctY+AABYEgAAAHJhbmRvbS5nZXRyYW5kYml0c3LXPgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZ2V0cmFuZGJpdHNYAQAAAC10ctg+AABYFgAAAGN0eXBlcy5EbGxDYW5VbmxvYWROb3dy2T4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkRsbENhblVubG9hZE5vd1gBAAAALXRy2j4AAFgJAAAAZ2RibS5vcGVucts+AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dkYm0uaHRtbCNnZGJtLm9wZW5YAQAAAC10ctw+AABYCwAAAHNobGV4LnNwbGl0ct0+AAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc3BsaXRYAQAAAC10ct4+AABYDwAAAGN1cnNlcy5iYXVkcmF0ZXLfPgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuYmF1ZHJhdGVYAQAAAC10cuA+AABYCgAAAG9zLnRtcGZpbGVy4T4AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50bXBmaWxlWAEAAAAtdHLiPgAAWBMAAABnZXR0ZXh0LnRyYW5zbGF0aW9ucuM+AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LnRyYW5zbGF0aW9uWAEAAAAtdHLkPgAAWBIAAABzdHJpbmcuc3BsaXRmaWVsZHNy5T4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnNwbGl0ZmllbGRzWAEAAAAtdHLmPgAAWAwAAABtYXRoLmRlZ3JlZXNy5z4AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZGVncmVlc1gBAAAALXRy6D4AAFgSAAAAc3NsLm1hdGNoX2hvc3RuYW1lcuk+AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5tYXRjaF9ob3N0bmFtZVgBAAAALXRy6j4AAFgmAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5jdXN0b21pemVfY29tcGlsZXJy6z4AAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmN1c3RvbWl6ZV9jb21waWxlclgBAAAALXRy7D4AAFgHAAAAaW8ub3BlbnLtPgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLm9wZW5YAQAAAC10cu4+AABYCwAAAG9zLldTVE9QU0lHcu8+AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV1NUT1BTSUdYAQAAAC10cvA+AABYDwAAAGltcC5pbml0X2Zyb3plbnLxPgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuaW5pdF9mcm96ZW5YAQAAAC10cvI+AABYIAAAAGRpc3R1dGlscy5jY29tcGlsZXIubmV3X2NvbXBpbGVycvM+AAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5uZXdfY29tcGlsZXJYAQAAAC10cvQ+AABYDAAAAG5ldy5jbGFzc29ianL1PgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXcuaHRtbCNuZXcuY2xhc3NvYmpYAQAAAC10cvY+AABYEAAAAHR1cnRsZS5maWxsY29sb3Jy9z4AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZpbGxjb2xvclgBAAAALXRy+D4AAFgFAAAAcHJpbnRy+T4AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcHJpbnRYAQAAAC10cvo+AABYEQAAAGZ1bmN0b29scy5wYXJ0aWFscvs+AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5wYXJ0aWFsWAEAAAAtdHL8PgAAWBYAAAB0aHJlYWRpbmcuYWN0aXZlX2NvdW50cv0+AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5hY3RpdmVfY291bnRYAQAAAC10cv4+AABYCwAAAHBkYi5ydW5jYWxscv8+AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5ydW5jYWxsWAEAAAAtdHIAPwAAWBIAAAB6aXBmaWxlLmlzX3ppcGZpbGVyAT8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuaXNfemlwZmlsZVgBAAAALXRyAj8AAFgLAAAAdHVydGxlLmRvd25yAz8AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmRvd25YAQAAAC10cgQ/AABYDwAAAG1pbWlmeS51bm1pbWlmeXIFPwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1pZnkuaHRtbCNtaW1pZnkudW5taW1pZnlYAQAAAC10cgY/AABYEgAAAGRvY3Rlc3QudGVzdHNvdXJjZXIHPwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC50ZXN0c291cmNlWAEAAAAtdHIIPwAAWBgAAABmdW5jdG9vbHMudG90YWxfb3JkZXJpbmdyCT8AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nWAEAAAAtdHIKPwAAWAsAAABjbWF0aC5hc2luaHILPwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmFzaW5oWAEAAAAtdHIMPwAAWBMAAABvcGVyYXRvci5pc0NhbGxhYmxlcg0/AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNDYWxsYWJsZVgBAAAALXRyDj8AAFgSAAAAY29tbWFuZHMuZ2V0b3V0cHV0cg8/AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWwjY29tbWFuZHMuZ2V0b3V0cHV0WAEAAAAtdHIQPwAAWBIAAAB0aHJlYWRpbmcuc2V0dHJhY2VyET8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLnNldHRyYWNlWAEAAAAtdHISPwAAWAoAAABtYXRoLmZsb29ychM/AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZsb29yWAEAAAAtdHIUPwAAWBAAAABkaXJjYWNoZS5vcGVuZGlychU/AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWwjZGlyY2FjaGUub3BlbmRpclgBAAAALXRyFj8AAFgQAAAAb3MucGF0aC5zYW1lc3RhdHIXPwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zYW1lc3RhdFgBAAAALXRyGD8AAFgQAAAAZ2V0dGV4dC5kZ2V0dGV4dHIZPwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5kZ2V0dGV4dFgBAAAALXRyGj8AAFgQAAAAb3BlcmF0b3IuaW5kZXhPZnIbPwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmluZGV4T2ZYAQAAAC10chw/AABYDAAAAHN5cy5zZXR0cmFjZXIdPwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0dHJhY2VYAQAAAC10ch4/AABYCQAAAG9zLmV4ZWN2cHIfPwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmV4ZWN2cFgBAAAALXRyID8AAFgPAAAAaW1wLmxvYWRfc291cmNlciE/AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5sb2FkX3NvdXJjZVgBAAAALXRyIj8AAFgJAAAAb3MuZXhlY3ZlciM/AAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY3ZlWAEAAAAtdHIkPwAAWAoAAABnbG9iLmlnbG9iciU/AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbCNnbG9iLmlnbG9iWAEAAAAtdHImPwAAWBMAAAB3ZWFrcmVmLmdldHdlYWtyZWZzcic/AAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLmdldHdlYWtyZWZzWAEAAAAtdHIoPwAAWBMAAABjdXJzZXMuYXNjaWkuaXNtZXRhcik/AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc21ldGFYAQAAAC10cio/AABYEAAAAGNvbXBpbGVyLmNvbXBpbGVyKz8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5jb21waWxlWAEAAAAtdHIsPwAAWBkAAABzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nci0/AAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdYAQAAAC10ci4/AABYDAAAAGxvZ2dpbmcuaW5mb3IvPwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5pbmZvWAEAAAAtdHIwPwAAWAsAAABzdHJpbmcuam9pbnIxPwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuam9pblgBAAAALXRyMj8AAFgSAAAAcGFyc2VyLnNlcXVlbmNlMnN0cjM/AAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zZXF1ZW5jZTJzdFgBAAAALXRyND8AAFgRAAAAY3Vyc2VzLnJlc2l6ZXRlcm1yNT8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnJlc2l6ZXRlcm1YAQAAAC10cjY/AABYDwAAAGN1cnNlcy5sb25nbmFtZXI3PwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubG9uZ25hbWVYAQAAAC10cjg/AABYEwAAAHJmYzgyMi5wYXJzZWRhdGVfdHpyOT8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLnBhcnNlZGF0ZV90elgBAAAALXRyOj8AAFgbAAAAdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzcjs/AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuY2hlY2tfd2FybmluZ3NYAQAAAC10cjw/AABYEwAAAGNvbG9yc3lzLnJnYl90b19oc3ZyPT8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNjb2xvcnN5cy5yZ2JfdG9faHN2WAEAAAAtdHI+PwAAWBAAAABtaW1ldG9vbHMuZGVjb2Rlcj8/AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5kZWNvZGVYAQAAAC10ckA/AABYCgAAAG9zLnNldGVnaWRyQT8AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRlZ2lkWAEAAAAtdHJCPwAAWBEAAABvcGVyYXRvci5fX2lhZGRfX3JDPwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWFkZF9fWAEAAAAtdHJEPwAAWAgAAABvcy5jaG1vZHJFPwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmNobW9kWAEAAAAtdHJGPwAAWBIAAAByYW5kb20uYmV0YXZhcmlhdGVyRz8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmJldGF2YXJpYXRlWAEAAAAtdHJIPwAAWBQAAABzb2NrZXQuZ2V0aG9zdGJ5YWRkcnJJPwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0aG9zdGJ5YWRkclgBAAAALXRySj8AAFgOAAAAdHVydGxlLm9uY2xpY2tySz8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9uY2xpY2tYAQAAAC10ckw/AABYGgAAAGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yck0/AAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvclgBAAAALXRyTj8AAFgMAAAAb3Muc2V0cmVzdWlkck8/AAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cmVzdWlkWAEAAAAtdHJQPwAAWBEAAABvcGVyYXRvci5fX2ltb2RfX3JRPwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW1vZF9fWAEAAAAtdHJSPwAAWAwAAAB0dXJ0bGUuY29sb3JyUz8AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmNvbG9yWAEAAAAtdHJUPwAAWAwAAABwYXJzZXIuc3VpdGVyVT8AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLnN1aXRlWAEAAAAtdHJWPwAAWCAAAAB0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZXJXPwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGVYAQAAAC10clg/AABYCQAAAHJlcHIucmVwcnJZPwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5yZXByWAEAAAAtdHJaPwAAWBIAAABwb3NpeGZpbGUuZmlsZW9wZW5yWz8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLmZpbGVvcGVuWAEAAAAtdHJcPwAAWAoAAABpc2luc3RhbmNlcl0/AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2lzaW5zdGFuY2VYAQAAAC10cl4/AABYEQAAAHR1cnRsZS5iZWdpbl9wb2x5cl8/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZWdpbl9wb2x5WAEAAAAtdHJgPwAAWAgAAABtYXRoLmNvc3JhPwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5jb3NYAQAAAC10cmI/AABYDAAAAG5ldy5mdW5jdGlvbnJjPwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXcuaHRtbCNuZXcuZnVuY3Rpb25YAQAAAC10cmQ/AABYFAAAAHRocmVhZGluZy5zZXRwcm9maWxlcmU/AAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5zZXRwcm9maWxlWAEAAAAtdHJmPwAAWBsAAAByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGhyZz8AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGhYAQAAAC10cmg/AABYGwAAAHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbnJpPwAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvblgBAAAALXRyaj8AAFgRAAAAYWV0b29scy5lbnVtc3Vic3Ryaz8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMuZW51bXN1YnN0WAEAAAAtdHJsPwAAWBIAAABvcGVyYXRvci5pZmxvb3JkaXZybT8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pZmxvb3JkaXZYAQAAAC10cm4/AABYDQAAAG9zLnJlbW92ZWRpcnNybz8AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW1vdmVkaXJzWAEAAAAtdHJwPwAAWAsAAABmbC5tYXBjb2xvcnJxPwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLm1hcGNvbG9yWAEAAAAtdHJyPwAAWBQAAABtc3ZjcnQuZ2V0X29zZmhhbmRsZXJzPwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0X29zZmhhbmRsZVgBAAAALXRydD8AAFgTAAAAdW5pdHRlc3Quc2tpcFVubGVzc3J1PwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnNraXBVbmxlc3NYAQAAAC10cnY/AABYDgAAAGpwZWcuc2V0b3B0aW9ucnc/AAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pwZWcuaHRtbCNqcGVnLnNldG9wdGlvblgBAAAALXRyeD8AAFgPAAAAYXRleGl0LnJlZ2lzdGVycnk/AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F0ZXhpdC5odG1sI2F0ZXhpdC5yZWdpc3RlclgBAAAALXRyej8AAFgTAAAAdGVybWlvcy50Y3NlbmRicmVha3J7PwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y3NlbmRicmVha1gBAAAALXRyfD8AAFgQAAAAY3Vyc2VzLm5vcWlmbHVzaHJ9PwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubm9xaWZsdXNoWAEAAAAtdHJ+PwAAWBIAAABjb21tYW5kcy5nZXRzdGF0dXNyfz8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tbWFuZHMuaHRtbCNjb21tYW5kcy5nZXRzdGF0dXNYAQAAAC10coA/AABYCQAAAGNtYXRoLmxvZ3KBPwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmxvZ1gBAAAALXRygj8AAFgMAAAAaW1hZ2VvcC5jcm9wcoM/AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmNyb3BYAQAAAC10coQ/AABYFgAAAG9wZXJhdG9yLmlzTWFwcGluZ1R5cGVyhT8AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc01hcHBpbmdUeXBlWAEAAAAtdHKGPwAAWBIAAAByYW5kb20uZXhwb3ZhcmlhdGVyhz8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmV4cG92YXJpYXRlWAEAAAAtdHKIPwAAWA8AAABwcHJpbnQuc2FmZXJlcHJyiT8AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnNhZmVyZXByWAEAAAAtdHKKPwAAWAwAAAB0dXJ0bGUucGVudXByiz8AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBlbnVwWAEAAAAtdHKMPwAAWA4AAABvcy5wYXRoLmV4aXN0c3KNPwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5leGlzdHNYAQAAAC10co4/AABYEQAAAHdhcm5pbmdzLndhcm5weTNrco8/AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3Mud2FybnB5M2tYAQAAAC10cpA/AABYEAAAAG9wZXJhdG9yLmlsc2hpZnRykT8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbHNoaWZ0WAEAAAAtdHKSPwAAWCwAAAByZWFkbGluZS5zZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9va3KTPwAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rWAEAAAAtdHKUPwAAWCEAAABkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfcGFpcndpc2VylT8AAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfcGFpcndpc2VYAQAAAC10cpY/AABYDgAAAGN0eXBlcy5QT0lOVEVScpc/AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5QT0lOVEVSWAEAAAAtdHKYPwAAWBcAAABjdHlwZXMudXRpbC5maW5kX21zdmNydHKZPwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMudXRpbC5maW5kX21zdmNydFgBAAAALXRymj8AAFgQAAAAcGxhdGZvcm0ubWFjaGluZXKbPwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLm1hY2hpbmVYAQAAAC10cpw/AABYFgAAAGN1cnNlcy5wYW5lbC5uZXdfcGFuZWxynT8AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLm5ld19wYW5lbFgBAAAALXRynj8AAFgPAAAAb3BlcmF0b3IuX19lcV9fcp8/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19lcV9fWAEAAAAtdHKgPwAAWBAAAABwa2d1dGlsLmdldF9kYXRhcqE/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmdldF9kYXRhWAEAAAAtdHKiPwAAWBEAAABvcGVyYXRvci5fX2lzdWJfX3KjPwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faXN1Yl9fWAEAAAAtdHKkPwAAWBkAAABlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5ncqU/AAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmdYAQAAAC10cqY/AABYDQAAAHJhbmRvbS5jaG9pY2Vypz8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmNob2ljZVgBAAAALXRyqD8AAFgQAAAAb3BlcmF0b3IuaWNvbmNhdHKpPwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmljb25jYXRYAQAAAC10cqo/AABYEQAAAGN0eXBlcy53c3RyaW5nX2F0cqs/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy53c3RyaW5nX2F0WAEAAAAtdHKsPwAAWBAAAABsb2dnaW5nLmNyaXRpY2Fscq0/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmNyaXRpY2FsWAEAAAAtdHKuPwAAWAsAAAB0b2tlbi5JU0VPRnKvPwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLklTRU9GWAEAAAAtdHKwPwAAWAsAAABwYXJzZXIuZXhwcnKxPwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuZXhwclgBAAAALXRysj8AAFgRAAAAY2FsZW5kYXIubGVhcGRheXNysz8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5sZWFwZGF5c1gBAAAALXRytD8AAFgRAAAAYmRiLmNoZWNrZnVuY25hbWVytT8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLmNoZWNrZnVuY25hbWVYAQAAAC10crY/AABYFgAAAGVtYWlsLnV0aWxzLm1ha2VfbXNnaWRytz8AAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbC5odG1sI2VtYWlsLnV0aWxzLm1ha2VfbXNnaWRYAQAAAC10crg/AABYCwAAAHBpY2tsZS5sb2Fkcrk/AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5sb2FkWAEAAAAtdHK6PwAAWA8AAAB1bml0dGVzdC5za2lwSWZyuz8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5za2lwSWZYAQAAAC10crw/AABYDQAAAHR1cnRsZS51cGRhdGVyvT8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnVwZGF0ZVgBAAAALXRyvj8AAFgUAAAAb3BlcmF0b3IuX19pcnNoaWZ0X19yvz8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lyc2hpZnRfX1gBAAAALXRywD8AAFgPAAAAcGFyc2VyLnR1cGxlMnN0csE/AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci50dXBsZTJzdFgBAAAALXRywj8AAFgJAAAAbWF0aC5jZWlscsM/AAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNlaWxYAQAAAC10csQ/AABYFAAAAGRpZmZsaWIuSVNfTElORV9KVU5LcsU/AAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLklTX0xJTkVfSlVOS1gBAAAALXRyxj8AAFgaAAAAc3lzY29uZmlnLmdldF9zY2hlbWVfbmFtZXNyxz8AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9zY2hlbWVfbmFtZXNYAQAAAC10csg/AABYFQAAAG9wZXJhdG9yLl9fZGVsc2xpY2VfX3LJPwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZGVsc2xpY2VfX1gBAAAALXRyyj8AAFgSAAAAbmV3Lmluc3RhbmNlbWV0aG9kcss/AAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sI25ldy5pbnN0YW5jZW1ldGhvZFgBAAAALXRyzD8AAFgRAAAAc3RyaW5nLmV4cGFuZHRhYnNyzT8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmV4cGFuZHRhYnNYAQAAAC10cs4/AABYEAAAAG9zLnBhdGgucmVhbHBhdGhyzz8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgucmVhbHBhdGhYAQAAAC10ctA/AABYFQAAAG9wZXJhdG9yLl9faXRydWVkaXZfX3LRPwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faXRydWVkaXZfX1gBAAAALXRy0j8AAFgUAAAAcmVhZGxpbmUuYWRkX2hpc3Rvcnly0z8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5hZGRfaGlzdG9yeVgBAAAALXRy1D8AAFgUAAAAdHJhY2ViYWNrLmZvcm1hdF9leGNy1T8AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmZvcm1hdF9leGNYAQAAAC10ctY/AABYDwAAAHN5c2xvZy5jbG9zZWxvZ3LXPwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNsb2cuaHRtbCNzeXNsb2cuY2xvc2Vsb2dYAQAAAC10ctg/AABYFQAAAG9zc2F1ZGlvZGV2Lm9wZW5taXhlcnLZPwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9wZW5taXhlclgBAAAALXRy2j8AAFgRAAAAdHVydGxlLmhpZGV0dXJ0bGVy2z8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmhpZGV0dXJ0bGVYAQAAAC10ctw/AABYDQAAAGN0eXBlcy5tZW1zZXRy3T8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLm1lbXNldFgBAAAALXRy3j8AAFgOAAAAd2ViYnJvd3Nlci5nZXRy3z8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIuZ2V0WAEAAAAtdHLgPwAAWBEAAABhZXRvb2xzLnBhY2tldmVudHLhPwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjYWV0b29scy5wYWNrZXZlbnRYAQAAAC10cuI/AABYDgAAAG1zdmNydC5nZXR3Y2hlcuM/AAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXR3Y2hlWAEAAAAtdHLkPwAAWBcAAABvcGVyYXRvci5pc1NlcXVlbmNlVHlwZXLlPwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlzU2VxdWVuY2VUeXBlWAEAAAAtdHLmPwAAWBAAAABiYXNlNjQuYjY0ZGVjb2Rlcuc/AAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5iNjRkZWNvZGVYAQAAAC10cug/AABYEwAAAHRyYWNlYmFjay5wcmludF9leGNy6T8AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X2V4Y1gBAAAALXRy6j8AAFgSAAAAZGVjaW1hbC5zZXRjb250ZXh0cus/AAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLnNldGNvbnRleHRYAQAAAC10cuw/AABYCAAAAG9zLnVtYXNrcu0/AAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudW1hc2tYAQAAAC10cu4/AABYEAAAAGluc3BlY3QuaXNtb2R1bGVy7z8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNtb2R1bGVYAQAAAC10cvA/AABYBwAAAG9zLnJlYWRy8T8AAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5yZWFkWAEAAAAtdHLyPwAAWA8AAABzaHV0aWwuY29weWZpbGVy8z8AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHlmaWxlWAEAAAAtdHL0PwAAWA4AAABzbmRoZHIud2hhdGhkcnL1PwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbmRoZHIuaHRtbCNzbmRoZHIud2hhdGhkclgBAAAALXRy9j8AAFgVAAAAZW1haWwudXRpbHMubWt0aW1lX3R6cvc/AAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5ta3RpbWVfdHpYAQAAAC10cvg/AABYCwAAAHR1cnRsZS50aWx0cvk/AAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50aWx0WAEAAAAtdHL6PwAAWBAAAABhdWRpb29wLmxpbjJ1bGF3cvs/AAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmxpbjJ1bGF3WAEAAAAtdHL8PwAAWA0AAABtaW1pZnkubWltaWZ5cv0/AAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21pbWlmeS5taW1pZnlYAQAAAC10cv4/AABYCgAAAG1hdGgubG9nMXBy/z8AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgubG9nMXBYAQAAAC10cgBAAABYEAAAAGJhc2U2NC5iNjRlbmNvZGVyAUAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmI2NGVuY29kZVgBAAAALXRyAkAAAFgRAAAAc3RyaW5nLmNhcGl0YWxpemVyA0AAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmNhcGl0YWxpemVYAQAAAC10cgRAAABYGAAAAGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeXIFQAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMudXRpbC5maW5kX2xpYnJhcnlYAQAAAC10cgZAAABYEAAAAG9wZXJhdG9yLl9fbXVsX19yB0AAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX211bF9fWAEAAAAtdHIIQAAAWB8AAABzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lcglAAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWVYAQAAAC10cgpAAABYFgAAAHVybGxpYjIuaW5zdGFsbF9vcGVuZXJyC0AAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuaW5zdGFsbF9vcGVuZXJYAQAAAC10cgxAAABYGAAAAGRpc3R1dGlscy51dGlsLnN0cnRvYm9vbHINQAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLnN0cnRvYm9vbFgBAAAALXRyDkAAAFgMAAAAZ2wuZW5kc2VsZWN0cg9AAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wuZW5kc2VsZWN0WAEAAAAtdHIQQAAAWAwAAABzaHV0aWwuY29weTJyEUAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHkyWAEAAAAtdHISQAAAWB4AAAB4bWwucGFyc2Vycy5leHBhdC5QYXJzZXJDcmVhdGVyE0AAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LlBhcnNlckNyZWF0ZVgBAAAALXRyFEAAAFgRAAAAY29kZWNzLml0ZXJlbmNvZGVyFUAAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLml0ZXJlbmNvZGVYAQAAAC10chZAAABYDgAAAHR1cnRsZS5yYWRpYW5zchdAAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5yYWRpYW5zWAEAAAAtdHIYQAAAWAwAAAB0dXJ0bGUuZGVsYXlyGUAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmRlbGF5WAEAAAAtdHIaQAAAWAoAAABtYXRoLmxvZzEwchtAAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmxvZzEwWAEAAAAtdHIcQAAAWBUAAABwbGF0Zm9ybS5zeXN0ZW1fYWxpYXNyHUAAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5zeXN0ZW1fYWxpYXNYAQAAAC10ch5AAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzRyH0AAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzRYAQAAAC10ciBAAABYHAAAAGRvY3Rlc3Quc2NyaXB0X2Zyb21fZXhhbXBsZXNyIUAAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Quc2NyaXB0X2Zyb21fZXhhbXBsZXNYAQAAAC10ciJAAABYCwAAAGN1cnNlcy5tZXRhciNAAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5tZXRhWAEAAAAtdHIkQAAAWB4AAABtdWx0aXByb2Nlc3Npbmcuc2V0X2V4ZWN1dGFibGVyJUAAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNldF9leGVjdXRhYmxlWAEAAAAtdHImQAAAWAwAAABvcGVyYXRvci5uZWdyJ0AAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5uZWdYAQAAAC10cihAAABYEgAAAGltYXBsaWIuUGFyc2VGbGFnc3IpQAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5QYXJzZUZsYWdzWAEAAAAtdHIqQAAAWBEAAABzb2NrZXQuc29ja2V0cGFpcnIrQAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0cGFpclgBAAAALXRyLEAAAFgQAAAAYmluYXNjaWkuY3JjX2hxeHItQAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmNyY19ocXhYAQAAAC10ci5AAABYDQAAAHF1b3ByaS5kZWNvZGVyL0AAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmRlY29kZVgBAAAALXRyMEAAAFgNAAAAcmFuZG9tLnNhbXBsZXIxQAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uc2FtcGxlWAEAAAAtdHIyQAAAWBYAAABjdXJzZXMucGFuZWwudG9wX3BhbmVscjNAAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC50b3BfcGFuZWxYAQAAAC10cjRAAABYIwAAAHdzZ2lyZWYudXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzcjVAAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0c1gBAAAALXRyNkAAAFgnAAAAaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50cjdAAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudFgBAAAALXRyOEAAAFgaAAAAaW5zcGVjdC5pc2dldHNldGRlc2NyaXB0b3JyOUAAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9yWAEAAAAtdHI6QAAAWBAAAABnZXR0ZXh0Lm5nZXR0ZXh0cjtAAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lm5nZXR0ZXh0WAEAAAAtdHI8QAAAWAoAAABtYXRoLmZyZXhwcj1AAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZyZXhwWAEAAAAtdHI+QAAAWBoAAABFYXN5RGlhbG9ncy5Bc2tGaWxlRm9yU2F2ZXI/QAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza0ZpbGVGb3JTYXZlWAEAAAAtdHJAQAAAWAsAAABhdWRpb29wLm11bHJBQAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5tdWxYAQAAAC10ckJAAABYEQAAAHVybGxpYi5nZXRwcm94aWVzckNAAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5nZXRwcm94aWVzWAEAAAAtdHJEQAAAWAsAAABvcy5wYXRoY29uZnJFQAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBhdGhjb25mWAEAAAAtdHJGQAAAWBAAAABzdW5hdWRpb2Rldi5vcGVuckdAAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1ZGlvLmh0bWwjc3VuYXVkaW9kZXYub3BlblgBAAAALXRySEAAAFgWAAAAc3lzLmdldGRlZmF1bHRlbmNvZGluZ3JJQAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nWAEAAAAtdHJKQAAAWAwAAABvcy5XSUZFWElURURyS0AAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XSUZFWElURURYAQAAAC10ckxAAABYIAAAAGRvY3Rlc3Quc2V0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzck1AAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnNldF91bml0dGVzdF9yZXBvcnRmbGFnc1gBAAAALXRyTkAAAFgGAAAAeHJhbmdlck9AAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3hyYW5nZVgBAAAALXRyUEAAAFgMAAAAcHdkLmdldHB3dWlkclFAAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B3ZC5odG1sI3B3ZC5nZXRwd3VpZFgBAAAALXRyUkAAAFgcAAAAY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcnJTQAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyWAEAAAAtdHJUQAAAWAoAAABvcy5vcGVucHR5clVAAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mub3BlbnB0eVgBAAAALXRyVkAAAFgQAAAAZ2Muc2V0X3RocmVzaG9sZHJXQAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLnNldF90aHJlc2hvbGRYAQAAAC10clhAAABYEQAAAGltYWdlb3AubW9ubzJncmV5cllAAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLm1vbm8yZ3JleVgBAAAALXRyWkAAAFgNAAAAaW1hZ2VvcC5zY2FsZXJbQAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5zY2FsZVgBAAAALXRyXEAAAFgEAAAAZXZhbHJdQAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNldmFsWAEAAAAtdHJeQAAAWBEAAAB4bWxycGNsaWIuYm9vbGVhbnJfQAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuYm9vbGVhblgBAAAALXRyYEAAAFgIAAAAcmUuc3BsaXRyYUAAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5zcGxpdFgBAAAALXRyYkAAAFgJAAAAY21hdGguc2lucmNAAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguc2luWAEAAAAtdHJkQAAAWAoAAABzdW5hdS5vcGVucmVAAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUub3BlblgBAAAALXRyZkAAAFgQAAAAY29kZWNzLmdldHJlYWRlcnJnQAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0cmVhZGVyWAEAAAAtdHJoQAAAWAwAAABjZ2kucGFyc2VfcXNyaUAAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNlX3FzWAEAAAAtdHJqQAAAWAsAAABzdHJpbmcuYXRvaXJrQAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuYXRvaVgBAAAALXRybEAAAFgGAAAAbG9jYWxzcm1AAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2xvY2Fsc1gBAAAALXRybkAAAFgTAAAAdGVtcGZpbGUuZ2V0dGVtcGRpcnJvQAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLmdldHRlbXBkaXJYAQAAAC10cnBAAABYFgAAAHJlYWRsaW5lLnNldF9jb21wbGV0ZXJycUAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfY29tcGxldGVyWAEAAAAtdHJyQAAAWBMAAABfd2lucmVnLkRlbGV0ZVZhbHVlcnNAAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkRlbGV0ZVZhbHVlWAEAAAAtdHJ0QAAAWAwAAABzdHJpbmcuemZpbGxydUAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnpmaWxsWAEAAAAtdHJ2QAAAWA0AAABtYXJzaGFsLmR1bXBzcndAAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmR1bXBzWAEAAAAtdHJ4QAAAWA0AAABjdXJzZXMuZ2V0d2lucnlAAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXR3aW5YAQAAAC10cnpAAABYEQAAAGhlYXBxLmhlYXBwdXNocG9wcntAAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcHB1c2hwb3BYAQAAAC10cnxAAABYFAAAAGxpbmVjYWNoZS5jaGVja2NhY2hlcn1AAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xpbmVjYWNoZS5odG1sI2xpbmVjYWNoZS5jaGVja2NhY2hlWAEAAAAtdHJ+QAAAWBsAAABwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmdyf0AAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmdYAQAAAC10coBAAABYDwAAAGN0eXBlcy5XaW5FcnJvcnKBQAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuV2luRXJyb3JYAQAAAC10coJAAABYHQAAAGRpc3R1dGlscy5maWxlX3V0aWwubW92ZV9maWxlcoNAAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZpbGVfdXRpbC5tb3ZlX2ZpbGVYAQAAAC10coRAAABYEAAAAGZsLnNob3dfcXVlc3Rpb25yhUAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5zaG93X3F1ZXN0aW9uWAEAAAAtdHKGQAAAWBEAAABfd2lucmVnLk9wZW5LZXlFeHKHQAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5PcGVuS2V5RXhYAQAAAC10cohAAABYBwAAAG9zLmtpbGxyiUAAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5raWxsWAEAAAAtdHKKQAAAWA4AAABpbnNwZWN0LmdldGRvY3KLQAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRkb2NYAQAAAC10coxAAABYEgAAAHVuaWNvZGVkYXRhLmxvb2t1cHKNQAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmxvb2t1cFgBAAAALXRyjkAAAFgOAAAAb3BlcmF0b3IudHJ1dGhyj0AAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci50cnV0aFgBAAAALXRykEAAAFgHAAAAb3MuZHVwMnKRQAAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmR1cDJYAQAAAC10cpJAAABYEgAAAGltZ2ZpbGUucmVhZHNjYWxlZHKTQAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdmaWxlLmh0bWwjaW1nZmlsZS5yZWFkc2NhbGVkWAEAAAAtdHKUQAAAWA8AAABzc2wud3JhcF9zb2NrZXRylUAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLndyYXBfc29ja2V0WAEAAAAtdHKWQAAAWBMAAAB1cmxwYXJzZS51cmx1bnBhcnNlcpdAAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UudXJsdW5wYXJzZVgBAAAALXRymEAAAFgQAAAAdHVydGxlLmdldHR1cnRsZXKZQAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZ2V0dHVydGxlWAEAAAAtdHKaQAAAWAwAAABjdXJzZXMudHBhcm1ym0AAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRwYXJtWAEAAAAtdHKcQAAAWAoAAABpYy5tYXBmaWxlcp1AAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMubWFwZmlsZVgBAAAALXRynkAAAFgOAAAAb3MucGF0aC5pc2ZpbGVyn0AAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNmaWxlWAEAAAAtdHKgQAAAWBQAAABkaWZmbGliLnVuaWZpZWRfZGlmZnKhQAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi51bmlmaWVkX2RpZmZYAQAAAC10cqJAAABYBAAAAGl0ZXJyo0AAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjaXRlclgBAAAALXRypEAAAFgVAAAAdHJhY2ViYWNrLnByaW50X3N0YWNrcqVAAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5wcmludF9zdGFja1gBAAAALXRypkAAAFgQAAAAdW5pY29kZWRhdGEubmFtZXKnQAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm5hbWVYAQAAAC10cqhAAABYEgAAAGN1cnNlcy5yZXNpemVfdGVybXKpQAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucmVzaXplX3Rlcm1YAQAAAC10cqpAAABYDQAAAGNvcHkuZGVlcGNvcHlyq0AAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weS5odG1sI2NvcHkuZGVlcGNvcHlYAQAAAC10cqxAAABYBwAAAG9zLm5pY2VyrUAAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5uaWNlWAEAAAAtdHKuQAAAWAoAAABvcy5zeW1saW5rcq9AAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3ltbGlua1gBAAAALXRysEAAAFgIAAAAb3Mud2FpdDNysUAAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0M1gBAAAALXRyskAAAFgSAAAAX3dpbnJlZy5RdWVyeVZhbHVlcrNAAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlF1ZXJ5VmFsdWVYAQAAAC10crRAAABYCAAAAG9zLndhaXQ0crVAAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mud2FpdDRYAQAAAC10crZAAABYDQAAAG9wZXJhdG9yLmltb2Ryt0AAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbW9kWAEAAAAtdHK4QAAAWA8AAABjdXJzZXMubm9jYnJlYWtyuUAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5vY2JyZWFrWAEAAAAtdHK6QAAAWAkAAABtYXRoLmFzaW5yu0AAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguYXNpblgBAAAALXRyvEAAAFgKAAAAZ2MuZGlzYWJsZXK9QAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmRpc2FibGVYAQAAAC10cr5AAABYCwAAAGFsLm9wZW5wb3J0cr9AAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwub3BlbnBvcnRYAQAAAC10csBAAABYCQAAAG9zLmZkb3BlbnLBQAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZkb3BlblgBAAAALXRywkAAAFgaAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmR1bXByw0AAAChqcwUAAGp0BQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmR1bXBYAQAAAC10csRAAABYDgAAAGRpcy5maW5kbGFiZWxzcsVAAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5maW5kbGFiZWxzWAEAAAAtdHLGQAAAWCoAAABkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9wcmVwcm9jZXNzX29wdGlvbnNyx0AAAChqcwUAAGp0BQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9wcmVwcm9jZXNzX29wdGlvbnNYAQAAAC10cshAAABYEQAAAHR1cnRsZS50dXJ0bGVzaXplcslAAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50dXJ0bGVzaXplWAEAAAAtdHLKQAAAWBoAAABpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZXLLQAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGVYAQAAAC10csxAAABYEAAAAGN1cnNlcy5zZXR1cHRlcm1yzUAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnNldHVwdGVybVgBAAAALXRyzkAAAFgJAAAAb3MuZmNoZGlycs9AAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZmNoZGlyWAEAAAAtdHLQQAAAWBcAAAB3ZWJicm93c2VyLm9wZW5fbmV3X3RhYnLRQAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuX25ld190YWJYAQAAAC10ctJAAABYCQAAAGNtYXRoLmV4cHLTQAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmV4cFgBAAAALXRy1EAAAFgQAAAAb3BlcmF0b3IuX194b3JfX3LVQAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9feG9yX19YAQAAAC10ctZAAABYEAAAAG9wZXJhdG9yLl9fbW9kX19y10AAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX21vZF9fWAEAAAAtdHLYQAAAWAoAAABtYXRoLmlzaW5mctlAAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmlzaW5mWAEAAAAtdHLaQAAAWBAAAABsb2NhbGUuZ2V0bG9jYWxlcttAAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5nZXRsb2NhbGVYAQAAAC10ctxAAABYEAAAAGN1cnNlcy5pbml0X3BhaXJy3UAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmluaXRfcGFpclgBAAAALXRy3kAAAFgOAAAATWFjT1MuR2V0VGlja3Ny30AAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5HZXRUaWNrc1gBAAAALXRy4EAAAFgJAAAAb3Muc2V0dWlkcuFAAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0dWlkWAEAAAAtdHLiQAAAWAgAAABvcy5taW5vcnLjQAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm1pbm9yWAEAAAAtdHLkQAAAWA8AAABhdWRpb29wLmZpbmRmaXRy5UAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZmluZGZpdFgBAAAALXRy5kAAAFgJAAAAdHVydGxlLnBkcudAAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZFgBAAAALXRy6EAAAFgUAAAAYmluYXNjaWkucmxlY29kZV9ocXhy6UAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5ybGVjb2RlX2hxeFgBAAAALXRy6kAAAFgPAAAAYmluYXNjaWkuYTJiX3V1cutAAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYTJiX3V1WAEAAAAtdHLsQAAAWCIAAABkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jcu1AAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2luY1gBAAAALXRy7kAAAFgWAAAAcmVhZGxpbmUuZ2V0X2NvbXBsZXRlcnLvQAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0ZXJYAQAAAC10cvBAAABYDwAAAGN1cnNlcy50aWdldHN0cnLxQAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGlnZXRzdHJYAQAAAC10cvJAAABYGAAAAHNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlc3LzQAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzWAEAAAAtdHL0QAAAWA0AAABvcy5wYXRoLmlzYWJzcvVAAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmlzYWJzWAEAAAAtdHL2QAAAWBwAAABjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVycvdAAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXJYAQAAAC10cvhAAABYDQAAAHN5cy5leGNfY2xlYXJy+UAAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y19jbGVhclgBAAAALXRy+kAAAFgOAAAAaW1hcGxpYi5JbnQyQVBy+0AAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSW50MkFQWAEAAAAtdHL8QAAAWA8AAABpbnNwZWN0LmlzZnJhbWVy/UAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNmcmFtZVgBAAAALXRy/kAAAFgOAAAAcnVucHkucnVuX3BhdGhy/0AAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcnVucHkuaHRtbCNydW5weS5ydW5fcGF0aFgBAAAALXRyAEEAAFgRAAAARnJhbWVXb3JrLlN1Yk1lbnVyAUEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlN1Yk1lbnVYAQAAAC10cgJBAABYDAAAAHRhcmZpbGUub3BlbnIDQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5vcGVuWAEAAAAtdHIEQQAAWA8AAABmaWxlaW5wdXQuaW5wdXRyBUEAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmlucHV0WAEAAAAtdHIGQQAAWA4AAABpdGVydG9vbHMuaXppcHIHQQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuaXppcFgBAAAALXRyCEEAAFgOAAAAb3MuV0VYSVRTVEFUVVNyCUEAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XRVhJVFNUQVRVU1gBAAAALXRyCkEAAFgUAAAAc3lzLnNldGNoZWNraW50ZXJ2YWxyC0EAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldGNoZWNraW50ZXJ2YWxYAQAAAC10cgxBAABYEAAAAGl0ZXJ0b29scy5yZXBlYXRyDUEAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnJlcGVhdFgBAAAALXRyDkEAAFgVAAAAaW5zcGVjdC5nZXRtb2R1bGVuYW1lcg9BAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1vZHVsZW5hbWVYAQAAAC10chBBAABYEAAAAG9wZXJhdG9yLl9fbmVnX19yEUEAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX25lZ19fWAEAAAAtdHISQQAAWAoAAAB0aW1lLmNsb2NrchNBAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmNsb2NrWAEAAAAtdHIUQQAAWAwAAABhbC5zZXRwYXJhbXNyFUEAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNhbC5zZXRwYXJhbXNYAQAAAC10chZBAABYBgAAAHBkYi5wbXIXQQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIucG1YAQAAAC10chhBAABYFQAAAHNvY2tldC5nZXRwcm90b2J5bmFtZXIZQQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0cHJvdG9ieW5hbWVYAQAAAC10chpBAABYCwAAAG9wZXJhdG9yLmd0chtBAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZ3RYAQAAAC10chxBAABYDAAAAG9wZXJhdG9yLnN1YnIdQQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnN1YlgBAAAALXRyHkEAAFgZAAAAZGlmZmxpYi5IdG1sRGlmZi5fX2luaXRfX3IfQQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5IdG1sRGlmZi5fX2luaXRfX1gBAAAALXRyIEEAAFgKAAAAcmUuZmluZGFsbHIhQQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLmZpbmRhbGxYAQAAAC10ciJBAABYDQAAAG9wZXJhdG9yLmFuZF9yI0EAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5hbmRfWAEAAAAtdHIkQQAAWA8AAABnZXRwYXNzLmdldHVzZXJyJUEAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0cGFzcy5odG1sI2dldHBhc3MuZ2V0dXNlclgBAAAALXRyJkEAAFgKAAAAbWF0aC5pc25hbnInQQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5pc25hblgBAAAALXRyKEEAAFgTAAAAd2ViYnJvd3Nlci5yZWdpc3RlcnIpQQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5yZWdpc3RlclgBAAAALXRyKkEAAFgSAAAAYWJjLmFic3RyYWN0bWV0aG9kcitBAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5hYnN0cmFjdG1ldGhvZFgBAAAALXRyLEEAAFgZAAAAbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudHItQQAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50WAEAAAAtdHIuQQAAWBAAAAB0ZW1wZmlsZS5ta3N0ZW1wci9BAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUubWtzdGVtcFgBAAAALXRyMEEAAFgKAAAAdGltZS5jdGltZXIxQQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5jdGltZVgBAAAALXRyMkEAAFgQAAAAc2l0ZS5nZXR1c2VyYmFzZXIzQQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5nZXR1c2VyYmFzZVgBAAAALXRyNEEAAFgHAAAAdW5pY29kZXI1QQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN1bmljb2RlWAEAAAAtdHI2QQAAWBYAAABpbnNwZWN0LmdldHNvdXJjZWxpbmVzcjdBAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldHNvdXJjZWxpbmVzWAEAAAAtdHI4QQAAWA0AAABhc3luY29yZS5sb29wcjlBAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUubG9vcFgBAAAALXRyOkEAAFgOAAAAdHVydGxlLmZvcndhcmRyO0EAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZvcndhcmRYAQAAAC10cjxBAABYDAAAAG1zdmNydC5rYmhpdHI9QQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQua2JoaXRYAQAAAC10cj5BAABYCgAAAHRpbWUudHpzZXRyP0EAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUudHpzZXRYAQAAAC10ckBBAABYDgAAAGZubWF0Y2guZmlsdGVyckFBAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZpbHRlclgBAAAALXRyQkEAAFgRAAAAb3BlcmF0b3IuX19pcG93X19yQ0EAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lwb3dfX1gBAAAALXRyREEAAFgJAAAAb3MucHV0ZW52ckVBAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucHV0ZW52WAEAAAAtdHJGQQAAWA0AAABpbXAuaXNfZnJvemVuckdBAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5pc19mcm96ZW5YAQAAAC10ckhBAABYEwAAAGNhbGVuZGFyLm1vbnRocmFuZ2VySUEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5tb250aHJhbmdlWAEAAAAtdHJKQQAAWBEAAAB1cmxsaWIudXJsY2xlYW51cHJLQQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudXJsY2xlYW51cFgBAAAALXRyTEEAAFgYAAAARnJhbWVXb3JrLnNldHdhdGNoY3Vyc29yck1BAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5zZXR3YXRjaGN1cnNvclgBAAAALXRyTkEAAFgTAAAAY29kZWNzLmxvb2t1cF9lcnJvcnJPQQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MubG9va3VwX2Vycm9yWAEAAAAtdHJQQQAAWBwAAABlbWFpbC5lbmNvZGVycy5lbmNvZGVfYmFzZTY0clFBAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLmh0bWwjZW1haWwuZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NFgBAAAALXRyUkEAAFgGAAAAb3MuZHVwclNBAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZHVwWAEAAAAtdHJUQQAAWAUAAABhcHBseXJVQQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNhcHBseVgBAAAALXRyVkEAAFgQAAAAY29kZWNzLmdldHdyaXRlcnJXQQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0d3JpdGVyWAEAAAAtdHJYQQAAWAcAAABvcy53YWl0cllBAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mud2FpdFgBAAAALXRyWkEAAFgOAAAAZGlyY2FjaGUucmVzZXRyW0EAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlyY2FjaGUuaHRtbCNkaXJjYWNoZS5yZXNldFgBAAAALXRyXEEAAFgRAAAAdHVydGxlLmNsZWFyc3RhbXByXUEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmNsZWFyc3RhbXBYAQAAAC10cl5BAABYHgAAAGRpc3R1dGlscy5kaXJfdXRpbC5yZW1vdmVfdHJlZXJfQQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kaXJfdXRpbC5yZW1vdmVfdHJlZVgBAAAALXRyYEEAAFgNAAAAYmluaGV4LmJpbmhleHJhQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXguYmluaGV4WAEAAAAtdHJiQQAAWBAAAABvcGVyYXRvci5kZWxpdGVtcmNBAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZGVsaXRlbVgBAAAALXRyZEEAAFgPAAAAb3BlcmF0b3IubHNoaWZ0cmVBAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubHNoaWZ0WAEAAAAtdHJmQQAAWBYAAABDYXJib24uU2NyYXAuSW5mb1NjcmFwcmdBAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI0NhcmJvbi5TY3JhcC5JbmZvU2NyYXBYAQAAAC10cmhBAABYDwAAAGZ1bmN0b29scy53cmFwc3JpQQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMud3JhcHNYAQAAAC10cmpBAABYDwAAAGN1cnNlcy5mbHVzaGlucHJrQQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZmx1c2hpbnBYAQAAAC10cmxBAABYCgAAAHRpbWUuc2xlZXBybUEAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc2xlZXBYAQAAAC10cm5BAABYCAAAAGNnaS50ZXN0cm9BAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS50ZXN0WAEAAAAtdHJwQQAAWBMAAABxdW9wcmkuZW5jb2Rlc3RyaW5ncnFBAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1b3ByaS5odG1sI3F1b3ByaS5lbmNvZGVzdHJpbmdYAQAAAC10cnJBAABYDAAAAG9zLnBhdGguam9pbnJzQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5qb2luWAEAAAAtdHJ0QQAAWAoAAABjc3Yud3JpdGVycnVBAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi53cml0ZXJYAQAAAC10cnZBAABYCQAAAHV1LmRlY29kZXJ3QQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dS5odG1sI3V1LmRlY29kZVgBAAAALXRyeEEAAFgLAAAAY21hdGgucG9sYXJyeUEAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5wb2xhclgBAAAALXRyekEAAFgYAAAAc3NsLkRFUl9jZXJ0X3RvX1BFTV9jZXJ0cntBAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5ERVJfY2VydF90b19QRU1fY2VydFgBAAAALXRyfEEAAFgKAAAAdHVydGxlLmRvdHJ9QQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZG90WAEAAAAtdHJ+QQAAWA8AAAB3aGljaGRiLndoaWNoZGJyf0EAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2hpY2hkYi5odG1sI3doaWNoZGIud2hpY2hkYlgBAAAALXRygEEAAFgXAAAAY2dpLnByaW50X2Vudmlyb25fdXNhZ2VygUEAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Vudmlyb25fdXNhZ2VYAQAAAC10coJBAABYDAAAAHVybGxpYi5xdW90ZXKDQQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIucXVvdGVYAQAAAC10coRBAABYGQAAAGltYXBsaWIuVGltZTJJbnRlcm5hbGRhdGVyhUEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuVGltZTJJbnRlcm5hbGRhdGVYAQAAAC10coZBAABYEwAAAHRyYWNlYmFjay50Yl9saW5lbm9yh0EAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnRiX2xpbmVub1gBAAAALXRyiEEAAFgMAAAAbXN2Y3J0LnB1dGNocolBAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5wdXRjaFgBAAAALXRyikEAAFgKAAAAZ2wudm5hcnJheXKLQQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLnZuYXJyYXlYAQAAAC10coxBAABYDQAAAHRleHR3cmFwLndyYXByjUEAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC53cmFwWAEAAAAtdHKOQQAAWA0AAAB0dXJ0bGUudHJhY2Vyco9BAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50cmFjZXJYAQAAAC10cpBBAABYDQAAAHN0YXQuU19JU0ZJRk9ykUEAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0ZJRk9YAQAAAC10cpJBAABYEAAAAHR1cnRsZS5nZXRjYW52YXNyk0EAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldGNhbnZhc1gBAAAALXRylEEAAFgMAAAAc3RhdC5TX0lTTE5LcpVBAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNMTktYAQAAAC10cpZBAABYEQAAAHRocmVhZC5zdGFja19zaXplcpdBAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5zdGFja19zaXplWAEAAAAtdHKYQQAAWBYAAABsb2dnaW5nLmdldExvZ2dlckNsYXNzcplBAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmdldExvZ2dlckNsYXNzWAEAAAAtdHKaQQAAWBsAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MxMV9jMTJym0EAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzExX2MxMlgBAAAALXRynEEAAFgIAAAAb3MubHNlZWtynUEAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5sc2Vla1gBAAAALXRynkEAAFgJAAAAY21hdGgudGFucp9BAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgudGFuWAEAAAAtdHKgQQAAWBgAAABzc2wuY2VydF90aW1lX3RvX3NlY29uZHNyoUEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmNlcnRfdGltZV90b19zZWNvbmRzWAEAAAAtdHKiQQAAWAwAAABvcGVyYXRvci5hYnNyo0EAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5hYnNYAQAAAC10cqRBAABYDgAAAGhlYXBxLmhlYXBwdXNocqVBAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcHB1c2hYAQAAAC10cqZBAABYBwAAAGRpcy5kaXNyp0EAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmRpc1gBAAAALXRyqEEAAFgNAAAAb3MuV0lGU1RPUFBFRHKpQQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLldJRlNUT1BQRURYAQAAAC10cqpBAABYCgAAAG9zLnN5c2NvbmZyq0EAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zeXNjb25mWAEAAAAtdHKsQQAAWBcAAAB0aHJlYWRpbmcuY3VycmVudFRocmVhZHKtQQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuY3VycmVudFRocmVhZFgBAAAALXRyrkEAAFgNAAAAY29tcGlsZXIud2Fsa3KvQQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLndhbGtYAQAAAC10crBBAABYCgAAAGN1cnNlcy5yYXdysUEAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnJhd1gBAAAALXRyskEAAFgNAAAAY3Vyc2VzLm5ld3BhZHKzQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubmV3cGFkWAEAAAAtdHK0QQAAWBQAAABpbnNwZWN0LmdldGFyZ3ZhbHVlc3K1QQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRhcmd2YWx1ZXNYAQAAAC10crZBAABYEAAAAEZyYW1lV29yay5XaW5kb3dyt0EAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLldpbmRvd1gBAAAALXRyuEEAAFgVAAAAdHJhY2ViYWNrLmZvcm1hdF9saXN0crlBAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfbGlzdFgBAAAALXRyukEAAFgOAAAAbXN2Y3J0LnNldG1vZGVyu0EAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LnNldG1vZGVYAQAAAC10crxBAABYGQAAAGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXNyvUEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXNYAQAAAC10cr5BAABYEwAAAGN1cnNlcy5wYWlyX2NvbnRlbnRyv0EAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnBhaXJfY29udGVudFgBAAAALXRywEEAAFgPAAAAcGlja2xldG9vbHMuZGlzcsFBAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjcGlja2xldG9vbHMuZGlzWAEAAAAtdHLCQQAAWBoAAABfd2lucmVnLlF1ZXJ5UmVmbGVjdGlvbktleXLDQQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5RdWVyeVJlZmxlY3Rpb25LZXlYAQAAAC10csRBAABYDAAAAHR1cnRsZS5zcGVlZHLFQQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc3BlZWRYAQAAAC10csZBAABYFAAAAGN1cnNlcy5hc2NpaS5pc2FsbnVtcsdBAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2FsbnVtWAEAAAAtdHLIQQAAWAwAAABvcy5nZXRyZXN1aWRyyUEAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRyZXN1aWRYAQAAAC10cspBAABYDwAAAGN1cnNlcy5kb3VwZGF0ZXLLQQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZG91cGRhdGVYAQAAAC10csxBAABYEAAAAHBhcnNlci5jb21waWxlc3RyzUEAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLmNvbXBpbGVzdFgBAAAALXRyzkEAAFgMAAAAc3lzLmdldHRyYWNlcs9BAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXR0cmFjZVgBAAAALXRy0EEAAFgPAAAAX3dpbnJlZy5FbnVtS2V5ctFBAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkVudW1LZXlYAQAAAC10ctJBAABYEAAAAGN1cnNlcy5tb3VzZW1hc2ty00EAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm1vdXNlbWFza1gBAAAALXRy1EEAAFgXAAAAZW1haWwuY2hhcnNldC5hZGRfYWxpYXNy1UEAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuYWRkX2FsaWFzWAEAAAAtdHLWQQAAWBYAAABjYWxlbmRhci5tb250aGNhbGVuZGFyctdBAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIubW9udGhjYWxlbmRhclgBAAAALXRy2EEAAFgQAAAAb3BlcmF0b3IuX19hbmRfX3LZQQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fYW5kX19YAQAAAC10ctpBAABYDwAAAGpwZWcuZGVjb21wcmVzc3LbQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qcGVnLmh0bWwjanBlZy5kZWNvbXByZXNzWAEAAAAtdHLcQQAAWBAAAAB1cmxwYXJzZS51cmxqb2luct1BAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UudXJsam9pblgBAAAALXRy3kEAAFgVAAAAcmFuZG9tLndlaWJ1bGx2YXJpYXRlct9BAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS53ZWlidWxsdmFyaWF0ZVgBAAAALXRy4EEAAFgKAAAAb3Muc3Bhd25sZXLhQQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdubGVYAQAAAC10cuJBAABYEwAAAGZpbmRlcnRvb2xzLnJlc3RhcnRy40EAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI2ZpbmRlcnRvb2xzLnJlc3RhcnRYAQAAAC10cuRBAABYFgAAAGN1cnNlcy5yZXNldF9wcm9nX21vZGVy5UEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnJlc2V0X3Byb2dfbW9kZVgBAAAALXRy5kEAAFgRAAAAZW5zdXJlcGlwLnZlcnNpb25y50EAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW5zdXJlcGlwLmh0bWwjZW5zdXJlcGlwLnZlcnNpb25YAQAAAC10cuhBAABYCQAAAGZsLnFlbnRlcnLpQQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnFlbnRlclgBAAAALXRy6kEAAFgNAAAAY3Vyc2VzLmNicmVha3LrQQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuY2JyZWFrWAEAAAAtdHLsQQAAWA0AAABzb2NrZXQuZnJvbWZkcu1BAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5mcm9tZmRYAQAAAC10cu5BAABYDgAAAHJmYzgyMi51bnF1b3Rlcu9BAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi51bnF1b3RlWAEAAAAtdHLwQQAAWBcAAAB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5nc3LxQQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzWAEAAAAtdHLyQQAAWA8AAABvcy5XSUZDT05USU5VRURy80EAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XSUZDT05USU5VRURYAQAAAC10cvRBAABYDgAAAGluc3BlY3QuZ2V0bXJvcvVBAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1yb1gBAAAALXRy9kEAAFgYAAAAYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlcvdBAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC51cmxzYWZlX2I2NGVuY29kZVgBAAAALXRy+EEAAFgIAAAAb3MuY2xvc2Vy+UEAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jbG9zZVgBAAAALXRy+kEAAFgYAAAAZW1haWwuaGVhZGVyLm1ha2VfaGVhZGVycvtBAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5tYWtlX2hlYWRlclgBAAAALXRy/EEAAFgUAAAAd2FybmluZ3Muc2hvd3dhcm5pbmdy/UEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5zaG93d2FybmluZ1gBAAAALXRy/kEAAFgMAAAAdHVydGxlLnNoYXBlcv9BAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaGFwZVgBAAAALXRyAEIAAFgbAAAAbW9kdWxlZmluZGVyLlJlcGxhY2VQYWNrYWdlcgFCAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5SZXBsYWNlUGFja2FnZVgBAAAALXRyAkIAAFgOAAAAb3MuV0lGU0lHTkFMRURyA0IAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XSUZTSUdOQUxFRFgBAAAALXRyBEIAAFgEAAAAaGVscHIFQgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNoZWxwWAEAAAAtdHIGQgAAWBEAAABmaW5kZXJ0b29scy5zbGVlcHIHQgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMuc2xlZXBYAQAAAC10cghCAABYGQAAAGRpc3R1dGlscy51dGlsLnN1YnN0X3ZhcnNyCUIAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5zdWJzdF92YXJzWAEAAAAtdHIKQgAAWBMAAABiaXNlY3QuYmlzZWN0X3JpZ2h0cgtCAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5iaXNlY3RfcmlnaHRYAQAAAC10cgxCAABYCgAAAGNtYXRoLnJlY3RyDUIAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5yZWN0WAEAAAAtdHIOQgAAWAsAAABhdWRpb29wLmF2Z3IPQgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5hdmdYAQAAAC10chBCAABYCQAAAG1hdGguc2luaHIRQgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5zaW5oWAEAAAAtdHISQgAAWAgAAABmbC5jb2xvcnITQgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmNvbG9yWAEAAAAtdHIUQgAAWBQAAAB0aW1laXQuZGVmYXVsdF90aW1lcnIVQgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCN0aW1laXQuZGVmYXVsdF90aW1lclgBAAAALXRyFkIAAFgZAAAAdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdHIXQgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdFgBAAAALXRyGEIAAFgWAAAAbG9nZ2luZy5zZXRMb2dnZXJDbGFzc3IZQgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5zZXRMb2dnZXJDbGFzc1gBAAAALXRyGkIAAFgTAAAAYmluYXNjaWkuYTJiX2Jhc2U2NHIbQgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmEyYl9iYXNlNjRYAQAAAC10chxCAABYHAAAAHhtbC5kb20uZ2V0RE9NSW1wbGVtZW50YXRpb25yHUIAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uZ2V0RE9NSW1wbGVtZW50YXRpb25YAQAAAC10ch5CAABYCAAAAG1hdGgucG93ch9CAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnBvd1gBAAAALXRyIEIAAFgPAAAAaW5zcGVjdC5pc2NsYXNzciFCAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzY2xhc3NYAQAAAC10ciJCAABYEAAAAHRva2VuLklTVEVSTUlOQUxyI0IAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5JU1RFUk1JTkFMWAEAAAAtdHIkQgAAWA4AAABjb21waWxlci5wYXJzZXIlQgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLnBhcnNlWAEAAAAtdHImQgAAWBoAAAB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbnInQgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvblgBAAAALXRyKEIAAFgMAAAAb3Muc3RhcnRmaWxlcilCAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3RhcnRmaWxlWAEAAAAtdHIqQgAAWBgAAABzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnRyK0IAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0WAEAAAAtdHIsQgAAWAsAAABjbWF0aC5sb2cxMHItQgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmxvZzEwWAEAAAAtdHIuQgAAWBcAAABlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZXIvQgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZVgBAAAALXRyMEIAAFgMAAAAc3RhdC5TX0lTQ0hScjFCAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNDSFJYAQAAAC10cjJCAABYDgAAAGN1cnNlcy5xaWZsdXNocjNCAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5xaWZsdXNoWAEAAAAtdHI0QgAAWBwAAABlbWFpbC5lbmNvZGVycy5lbmNvZGVfcXVvcHJpcjVCAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLmh0bWwjZW1haWwuZW5jb2RlcnMuZW5jb2RlX3F1b3ByaVgBAAAALXRyNkIAAFgMAAAAb3BlcmF0b3IubW9kcjdCAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubW9kWAEAAAAtdHI4QgAAWBMAAABvcGVyYXRvci5pdGVtZ2V0dGVycjlCAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXRlbWdldHRlclgBAAAALXRyOkIAAFgTAAAAdXJscGFyc2UudXJsdW5zcGxpdHI7QgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLnVybHVuc3BsaXRYAQAAAC10cjxCAABYEgAAAF93aW5yZWcuU2V0VmFsdWVFeHI9QgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5TZXRWYWx1ZUV4WAEAAAAtdHI+QgAAWBMAAAB0aHJlYWRpbmcuZW51bWVyYXRlcj9CAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5lbnVtZXJhdGVYAQAAAC10ckBCAABYDQAAAGJpbmhleC5oZXhiaW5yQUIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LmhleGJpblgBAAAALXRyQkIAAFgVAAAAdGhyZWFkaW5nLmFjdGl2ZUNvdW50ckNCAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5hY3RpdmVDb3VudFgBAAAALXRyREIAAFgUAAAAY3N2LnJlZ2lzdGVyX2RpYWxlY3RyRUIAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LnJlZ2lzdGVyX2RpYWxlY3RYAQAAAC10ckZCAABYFQAAAG1zdmNydC5vcGVuX29zZmhhbmRsZXJHQgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQub3Blbl9vc2ZoYW5kbGVYAQAAAC10ckhCAABYFAAAAHVuaWNvZGVkYXRhLmNhdGVnb3J5cklCAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuY2F0ZWdvcnlYAQAAAC10ckpCAABYDAAAAGZsLmdldF9tb3VzZXJLQgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmdldF9tb3VzZVgBAAAALXRyTEIAAFgNAAAAY2dpdGIuaGFuZGxlcnJNQgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2l0Yi5odG1sI2NnaXRiLmhhbmRsZXJYAQAAAC10ck5CAABYEwAAAGNhbGVuZGFyLndlZWtoZWFkZXJyT0IAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci53ZWVraGVhZGVyWAEAAAAtdHJQQgAAWBAAAABpbnNwZWN0LmlzbWV0aG9kclFCAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWV0aG9kWAEAAAAtdHJSQgAAWA8AAABjdXJzZXMua2lsbGNoYXJyU0IAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmtpbGxjaGFyWAEAAAAtdHJUQgAAWBkAAABlbWFpbC51dGlscy5kZWNvZGVfcGFyYW1zclVCAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5kZWNvZGVfcGFyYW1zWAEAAAAtdHJWQgAAWBUAAAB3YXJuaW5ncy5zaW1wbGVmaWx0ZXJyV0IAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5zaW1wbGVmaWx0ZXJYAQAAAC10clhCAABYDQAAAHN5cy5nZXRzaXplb2ZyWUIAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldHNpemVvZlgBAAAALXRyWkIAAFgbAAAAZGlmZmxpYi5IdG1sRGlmZi5tYWtlX3RhYmxlcltCAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLkh0bWxEaWZmLm1ha2VfdGFibGVYAQAAAC10clxCAABYAwAAAGFsbHJdQgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNhbGxYAQAAAC10cl5CAABYFgAAAGl0ZXJ0b29scy5pZmlsdGVyZmFsc2VyX0IAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmlmaWx0ZXJmYWxzZVgBAAAALXRyYEIAAFgLAAAAc3RydWN0LnBhY2tyYUIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LnBhY2tYAQAAAC10cmJCAABYDgAAAHBhcnNlci5zdDJsaXN0cmNCAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zdDJsaXN0WAEAAAAtdHJkQgAAWA4AAAB0dXJ0bGUuaGVhZGluZ3JlQgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaGVhZGluZ1gBAAAALXRyZkIAAFgOAAAAY3R5cGVzLm1lbW1vdmVyZ0IAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLm1lbW1vdmVYAQAAAC10cmhCAABYFQAAAGxvY2FsZS5iaW5kdGV4dGRvbWFpbnJpQgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuYmluZHRleHRkb21haW5YAQAAAC10cmpCAABYEwAAAEZyYW1lV29yay5TZXBhcmF0b3Jya0IAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNlcGFyYXRvclgBAAAALXRybEIAAFgQAAAAaW1wLmdldF9zdWZmaXhlc3JtQgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuZ2V0X3N1ZmZpeGVzWAEAAAAtdHJuQgAAWAMAAABhYnNyb0IAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYWJzWAEAAAAtdHJwQgAAWAsAAABvcy5nZXRsb2dpbnJxQgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldGxvZ2luWAEAAAAtdHJyQgAAWBkAAABjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VycnNCAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyWAEAAAAtdHJ0QgAAWBEAAABwbGF0Zm9ybS5qYXZhX3ZlcnJ1QgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLmphdmFfdmVyWAEAAAAtdHJ2QgAAWBYAAABpdGVydG9vbHMuaXppcF9sb25nZXN0cndCAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5pemlwX2xvbmdlc3RYAQAAAC10cnhCAABYDQAAAHpsaWIuY29tcHJlc3NyeUIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuY29tcHJlc3NYAQAAAC10cnpCAABYDQAAAGZyYWN0aW9ucy5nY2Rye0IAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLmdjZFgBAAAALXRyfEIAAFgWAAAAZW1haWwudXRpbHMuZm9ybWF0YWRkcnJ9QgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlsLmh0bWwjZW1haWwudXRpbHMuZm9ybWF0YWRkclgBAAAALXRyfkIAAFgQAAAAYmluYXNjaWkuYjJhX2hleHJ/QgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9oZXhYAQAAAC10coBCAABYEAAAAGZ1bmN0b29scy5yZWR1Y2VygUIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnJlZHVjZVgBAAAALXRygkIAAFgRAAAAYXN0LmNvcHlfbG9jYXRpb25yg0IAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmNvcHlfbG9jYXRpb25YAQAAAC10coRCAABYDAAAAG1zdmNydC5nZXRjaHKFQgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0Y2hYAQAAAC10coZCAABYKQAAAGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lcodCAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWVYAQAAAC10cohCAABYCgAAAGdsLm52YXJyYXlyiUIAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNnbC5udmFycmF5WAEAAAAtdHKKQgAAWAwAAABmbC51bnFkZXZpY2Vyi0IAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC51bnFkZXZpY2VYAQAAAC10coxCAABYDQAAAHN0cmluZy5yaW5kZXhyjUIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnJpbmRleFgBAAAALXRyjkIAAFgKAAAAb3Muc3RhdHZmc3KPQgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN0YXR2ZnNYAQAAAC10cpBCAABYCAAAAG9zLmV4ZWNscpFCAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY2xYAQAAAC10cpJCAABYCAAAAG9zLmV4ZWN2cpNCAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY3ZYAQAAAC10cpRCAABYCwAAAG9zLmxjaGZsYWdzcpVCAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubGNoZmxhZ3NYAQAAAC10cpZCAABYEQAAAGdldHRleHQubG5nZXR0ZXh0cpdCAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmxuZ2V0dGV4dFgBAAAALXRymEIAAFgOAAAAcHJvZmlsZS5ydW5jdHhymUIAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUucnVuY3R4WAEAAAAtdHKaQgAAWA8AAABnZXR0ZXh0Lmluc3RhbGxym0IAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuaW5zdGFsbFgBAAAALXRynEIAAFgRAAAAdXJscGFyc2UudXJscGFyc2VynUIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS51cmxwYXJzZVgBAAAALXRynkIAAFgRAAAAdHVydGxlLmJlZ2luX2ZpbGxyn0IAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmJlZ2luX2ZpbGxYAQAAAC10cqBCAABYGwAAAHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZXKhQgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZVgBAAAALXRyokIAAFgQAAAAY3Vyc2VzLmVyYXNlY2hhcnKjQgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZXJhc2VjaGFyWAEAAAAtdHKkQgAAWBoAAABzaHV0aWwuZ2V0X2FyY2hpdmVfZm9ybWF0c3KlQgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuZ2V0X2FyY2hpdmVfZm9ybWF0c1gBAAAALXRypkIAAFgPAAAAcGRiLnBvc3RfbW9ydGVtcqdCAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5wb3N0X21vcnRlbVgBAAAALXRyqEIAAFgXAAAAX3dpbnJlZy5Db25uZWN0UmVnaXN0cnlyqUIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuQ29ubmVjdFJlZ2lzdHJ5WAEAAAAtdHKqQgAAWBUAAABGcmFtZVdvcmsuQXBwbGljYXRpb25yq0IAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uWAEAAAAtdHKsQgAAWBMAAAB0b2tlbml6ZS51bnRva2VuaXplcq1CAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuaXplLmh0bWwjdG9rZW5pemUudW50b2tlbml6ZVgBAAAALXRyrkIAAFgTAAAAYmFzZTY0LmVuY29kZXN0cmluZ3KvQgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuZW5jb2Rlc3RyaW5nWAEAAAAtdHKwQgAAWBkAAABiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlcrFCAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGVYAQAAAC10crJCAABYCwAAAHNuZGhkci53aGF0crNCAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NuZGhkci5odG1sI3NuZGhkci53aGF0WAEAAAAtdHK0QgAAWBIAAABnZXR0ZXh0LnRleHRkb21haW5ytUIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQudGV4dGRvbWFpblgBAAAALXRytkIAAFgQAAAAY3Vyc2VzLnR5cGVhaGVhZHK3QgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudHlwZWFoZWFkWAEAAAAtdHK4QgAAWCYAAABlbWFpbC5pdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvcnK5QgAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNlbWFpbC5pdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvclgBAAAALXRyukIAAFgKAAAAdXVpZC51dWlkMXK7QgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC51dWlkMVgBAAAALXRyvEIAAFgLAAAAdHVydGxlLm1vZGVyvUIAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm1vZGVYAQAAAC10cr5CAABYBwAAAG1kNS5tZDVyv0IAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNVgBAAAALXRywEIAAFgLAAAAc3RhdC5TX0lGTVRywUIAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRk1UWAEAAAAtdHLCQgAAWAoAAAB1dWlkLnV1aWQ0csNCAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLnV1aWQ0WAEAAAAtdHLEQgAAWBQAAABmdW5jdG9vbHMuY21wX3RvX2tleXLFQgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMuY21wX3RvX2tleVgBAAAALXRyxkIAAFgMAAAAbWFyc2hhbC5kdW1wcsdCAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmR1bXBYAQAAAC10cshCAABYCAAAAGFzdC5kdW1wcslCAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5kdW1wWAEAAAAtdHLKQgAAWAkAAABkaXMuZGlzY29yy0IAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmRpc2NvWAEAAAAtdHLMQgAAWA4AAABvcy5wYXRoLmlzbGlua3LNQgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5pc2xpbmtYAQAAAC10cs5CAABYEQAAAHRlcm1pb3MudGNzZXRhdHRycs9CAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjc2V0YXR0clgBAAAALXRy0EIAAFgKAAAAZ2RibS5jbG9zZXLRQgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5jbG9zZVgBAAAALXRy0kIAAFgNAAAAaW1wLmxvY2tfaGVsZHLTQgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAubG9ja19oZWxkWAEAAAAtdHLUQgAAWA0AAABwcHJpbnQucHByaW50ctVCAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnRYAQAAAC10ctZCAABYDwAAAGRpcy5kaXNhc3NlbWJsZXLXQgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuZGlzYXNzZW1ibGVYAQAAAC10cthCAABYEAAAAG9wZXJhdG9yLmlyZXBlYXRy2UIAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pcmVwZWF0WAEAAAAtdHLaQgAAWAYAAABmaWx0ZXJy20IAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZmlsdGVyWAEAAAAtdHLcQgAAWBQAAABkb2N0ZXN0LkRvY0ZpbGVTdWl0ZXLdQgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NGaWxlU3VpdGVYAQAAAC10ct5CAABYCQAAAGpzb24ubG9hZHLfQgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5sb2FkWAEAAAAtdHLgQgAAWB0AAABwbGlzdGxpYi53cml0ZVBsaXN0VG9SZXNvdXJjZXLhQgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLndyaXRlUGxpc3RUb1Jlc291cmNlWAEAAAAtdHLiQgAAWAkAAABvcy5nZXRjd2Ry40IAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRjd2RYAQAAAC10cuRCAABYDQAAAHR0eS5zZXRjYnJlYWty5UIAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHR5Lmh0bWwjdHR5LnNldGNicmVha1gBAAAALXRy5kIAAFgTAAAAX3dpbnJlZy5EZWxldGVLZXlFeHLnQgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5EZWxldGVLZXlFeFgBAAAALXRy6EIAAFgQAAAAcmFuZG9tLmp1bXBhaGVhZHLpQgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uanVtcGFoZWFkWAEAAAAtdHLqQgAAWBsAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MyMV9jMjJy60IAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzIxX2MyMlgBAAAALXRy7EIAAFgRAAAAYXN0LmdldF9kb2NzdHJpbmdy7UIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmdldF9kb2NzdHJpbmdYAQAAAC10cu5CAABYCgAAAG5ldy5tb2R1bGVy70IAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbmV3Lm1vZHVsZVgBAAAALXRy8EIAAFgPAAAAcmFuZG9tLnNldHN0YXRlcvFCAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5zZXRzdGF0ZVgBAAAALXRy8kIAAFgPAAAAZmwuc2hvd19tZXNzYWdlcvNCAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2hvd19tZXNzYWdlWAEAAAAtdHL0QgAAWAkAAABvcy5pc2F0dHly9UIAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5pc2F0dHlYAQAAAC10cvZCAABYDgAAAHRhYm5hbm55LmNoZWNrcvdCAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhYm5hbm55Lmh0bWwjdGFibmFubnkuY2hlY2tYAQAAAC10cvhCAABYCwAAAHR1cnRsZS54Y29ycvlCAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS54Y29yWAEAAAAtdHL6QgAAWBMAAABsb2dnaW5nLmJhc2ljQ29uZmlncvtCAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmJhc2ljQ29uZmlnWAEAAAAtdHL8QgAAWA8AAABzcWxpdGUzLmNvbm5lY3Ry/UIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuY29ubmVjdFgBAAAALXRy/kIAAFgUAAAAaW1hZ2VvcC5kaXRoZXIyZ3JleTJy/0IAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZGl0aGVyMmdyZXkyWAEAAAAtdHIAQwAAWCsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9ucgFDAAAoanMFAABqdAUAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25YAQAAAC10cgJDAABYDwAAAHR1cnRsZS5hZGRzaGFwZXIDQwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYWRkc2hhcGVYAQAAAC10cgRDAABYCwAAAG9wZXJhdG9yLm5lcgVDAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubmVYAQAAAC10cgZDAABYEgAAAG1pbWV0eXBlcy5hZGRfdHlwZXIHQwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuYWRkX3R5cGVYAQAAAC10cghDAABYGQAAAG1pbWV0eXBlcy5yZWFkX21pbWVfdHlwZXNyCUMAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLnJlYWRfbWltZV90eXBlc1gBAAAALXRyCkMAAFgiAAAAbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5BcnJheXILQwAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLkFycmF5WAEAAAAtdHIMQwAAWAoAAABvcy5nZXRjd2R1cg1DAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Y3dkdVgBAAAALXRyDkMAAFgPAAAAb3BlcmF0b3IuX19ndF9fcg9DAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19ndF9fWAEAAAAtdHIQQwAAWBMAAABFYXN5RGlhbG9ncy5HZXRBcmd2chFDAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuR2V0QXJndlgBAAAALXRyEkMAAFgNAAAAb3MuZ2V0bG9hZGF2Z3ITQwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldGxvYWRhdmdYAQAAAC10chRDAABYFAAAAHR1cnRsZS5zZXR1bmRvYnVmZmVychVDAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR1bmRvYnVmZmVyWAEAAAAtdHIWQwAAWAoAAAByZS5jb21waWxlchdDAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuY29tcGlsZVgBAAAALXRyGEMAAFgJAAAAdHVydGxlLnN0chlDAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zdFgBAAAALXRyGkMAAFglAAAAeG1sLnNheC5zYXh1dGlscy5wcmVwYXJlX2lucHV0X3NvdXJjZXIbQwAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5wcmVwYXJlX2lucHV0X3NvdXJjZVgBAAAALXRyHEMAAFgNAAAAYmFzZTY0LmRlY29kZXIdQwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuZGVjb2RlWAEAAAAtdHIeQwAAWAoAAAB0dXJ0bGUuYnllch9DAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5ieWVYAQAAAC10ciBDAABYEQAAAGF1ZGlvb3AuZ2V0c2FtcGxlciFDAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmdldHNhbXBsZVgBAAAALXRyIkMAAFgNAAAAdHVydGxlLmlzZG93bnIjQwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaXNkb3duWAEAAAAtdHIkQwAAWBIAAABwaWNrbGV0b29scy5nZW5vcHNyJUMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNwaWNrbGV0b29scy5nZW5vcHNYAQAAAC10ciZDAABYDwAAAHR1cnRsZS5lbmRfcG9seXInQwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZW5kX3BvbHlYAQAAAC10cihDAABYDwAAAG9zLnBhdGguYWJzcGF0aHIpQwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5hYnNwYXRoWAEAAAAtdHIqQwAAWAcAAABzZXRhdHRycitDAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3NldGF0dHJYAQAAAC10cixDAABYBwAAAGdsb2JhbHNyLUMAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ2xvYmFsc1gBAAAALXRyLkMAAFgIAAAAcmV2ZXJzZWRyL0MAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmV2ZXJzZWRYAQAAAC10cjBDAABYGAAAAEZyYW1lV29yay5zZXRhcnJvd2N1cnNvcnIxQwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuc2V0YXJyb3djdXJzb3JYAQAAAC10cjJDAABYDQAAAGdsLm51cmJzY3VydmVyM0MAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNnbC5udXJic2N1cnZlWAEAAAAtdHI0QwAAWAwAAABzc2wuUkFORF9hZGRyNUMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfYWRkWAEAAAAtdHI2QwAAWBQAAABkZWNpbWFsLmxvY2FsY29udGV4dHI3QwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5sb2NhbGNvbnRleHRYAQAAAC10cjhDAABYDQAAAHBsYXRmb3JtLm5vZGVyOUMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5ub2RlWAEAAAAtdHI6QwAAWBAAAABhZXRvb2xzLmtleXN1YnN0cjtDAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldG9vbHMuaHRtbCNhZXRvb2xzLmtleXN1YnN0WAEAAAAtdHI8QwAAWB8AAABnZXR0ZXh0LmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0cj1DAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0WAEAAAAtdHI+QwAAWA8AAABiaW5hc2NpaS5hMmJfcXByP0MAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5hMmJfcXBYAQAAAC10ckBDAABYEQAAAHR1cnRsZS5zaG93dHVydGxlckFDAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaG93dHVydGxlWAEAAAAtdHJCQwAAWAoAAABtYXRoLmFjb3NockNDAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmFjb3NoWAEAAAAtdHJEQwAAWBUAAABjdHlwZXMuc2V0X2xhc3RfZXJyb3JyRUMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnNldF9sYXN0X2Vycm9yWAEAAAAtdHJGQwAAWBoAAABjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZXJHQwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZVgBAAAALXRySEMAAFgaAAAAZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3BySUMAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcFgBAAAALXRySkMAAFgQAAAAY3R5cGVzLmFsaWdubWVudHJLQwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuYWxpZ25tZW50WAEAAAAtdHJMQwAAWBIAAAB1cmxwYXJzZS5wYXJzZV9xc2xyTUMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS5wYXJzZV9xc2xYAQAAAC10ck5DAABYCwAAAGZsLmRvX2Zvcm1zck9DAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZG9fZm9ybXNYAQAAAC10clBDAABYEAAAAGF1ZGlvb3AuYWxhdzJsaW5yUUMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWxhdzJsaW5YAQAAAC10clJDAABYEAAAAHN0cnVjdC5wYWNrX2ludG9yU0MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LnBhY2tfaW50b1gBAAAALXRyVEMAAFgPAAAAdGVybWlvcy50Y2ZsdXNoclVDAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjZmx1c2hYAQAAAC10clZDAABYDwAAAG9wZXJhdG9yLl9fb3JfX3JXQwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fb3JfX1gBAAAALXRyWEMAAFgRAAAAZGlyY2FjaGUuYW5ub3RhdGVyWUMAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlyY2FjaGUuaHRtbCNkaXJjYWNoZS5hbm5vdGF0ZVgBAAAALXRyWkMAAFgQAAAAdXJsbGliLnVybGVuY29kZXJbQwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudXJsZW5jb2RlWAEAAAAtdHJcQwAAWA8AAAB0dXJ0bGUucG9zaXRpb25yXUMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBvc2l0aW9uWAEAAAAtdHJeQwAAWBAAAABhdWRpb29wLnRvc3RlcmVvcl9DAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnRvc3RlcmVvWAEAAAAtdHJgQwAAWA0AAABjdXJzZXMuaGFzX2ljcmFDAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYXNfaWNYAQAAAC10cmJDAABYEAAAAHR1cnRsZS5nZXRzaGFwZXNyY0MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldHNoYXBlc1gBAAAALXRyZEMAAFgNAAAAY3Vyc2VzLmhhc19pbHJlQwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaGFzX2lsWAEAAAAtdHJmQwAAWA8AAABpbXAubG9hZF9tb2R1bGVyZ0MAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmxvYWRfbW9kdWxlWAEAAAAtdHJoQwAAWAoAAABvcy5jaGZsYWdzcmlDAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2hmbGFnc1gBAAAALXRyakMAAFgjAAAAZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC5tYWtlX3ppcGZpbGVya0MAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfemlwZmlsZVgBAAAALXRybEMAAFgNAAAAdW5pdHRlc3QubWFpbnJtQwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0Lm1haW5YAQAAAC10cm5DAABYEwAAAG9wZXJhdG9yLl9fY29uY2F0X19yb0MAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2NvbmNhdF9fWAEAAAAtdHJwQwAAWAoAAABpc3N1YmNsYXNzcnFDAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2lzc3ViY2xhc3NYAQAAAC10cnJDAABYDQAAAGhlYXBxLmhlYXBwb3Byc0MAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5oZWFwcG9wWAEAAAAtdHJ0QwAAWBAAAABjdXJzZXMuYXNjaWkuYWx0cnVDAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5hbHRYAQAAAC10cnZDAABYFAAAAGN1cnNlcy5hc2NpaS5pc3VwcGVycndDAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3VwcGVyWAEAAAAtdHJ4QwAAWAsAAABmY250bC5mY250bHJ5QwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sI2ZjbnRsLmZjbnRsWAEAAAAtdHJ6QwAAWBAAAABsb2NhbGUuZGNnZXR0ZXh0cntDAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5kY2dldHRleHRYAQAAAC10cnxDAABYDQAAAGluc3BlY3Quc3RhY2tyfUMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3Quc3RhY2tYAQAAAC10cn5DAABYFAAAAF93aW5yZWcuUXVlcnlWYWx1ZUV4cn9DAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlF1ZXJ5VmFsdWVFeFgBAAAALXRygEMAAFgLAAAAY3R5cGVzLmNhc3RygUMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNhc3RYAQAAAC10coJDAABYIwAAAGRpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV90YXJiYWxscoNDAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC5tYWtlX3RhcmJhbGxYAQAAAC10coRDAABYFAAAAHNvY2tldC5nZXRzZXJ2Ynlwb3J0coVDAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRzZXJ2Ynlwb3J0WAEAAAAtdHKGQwAAWAsAAABvcy5zZXRyZWdpZHKHQwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNldHJlZ2lkWAEAAAAtdHKIQwAAWBIAAABGcmFtZVdvcmsuTWVudUl0ZW1yiUMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLk1lbnVJdGVtWAEAAAAtdHKKQwAAWA4AAABzeXNsb2cub3BlbmxvZ3KLQwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNsb2cuaHRtbCNzeXNsb2cub3BlbmxvZ1gBAAAALXRyjEMAAFgHAAAAbmlzLmNhdHKNQwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMuY2F0WAEAAAAtdHKOQwAAWAwAAABhdWRpb29wLmJpYXNyj0MAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYmlhc1gBAAAALXRykEMAAFgYAAAAc3FsaXRlMy5yZWdpc3Rlcl9hZGFwdGVycpFDAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnJlZ2lzdGVyX2FkYXB0ZXJYAQAAAC10cpJDAABYDgAAAGF1ZGlvb3AudG9tb25vcpNDAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnRvbW9ub1gBAAAALXRylEMAAFgXAAAAdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJylUMAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5pbnN0YWxsSGFuZGxlclgBAAAALXRylkMAAFgUAAAAY29kZWNzLmlnbm9yZV9lcnJvcnNyl0MAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmlnbm9yZV9lcnJvcnNYAQAAAC10cphDAABYCQAAAGNnaS5wYXJzZXKZQwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucGFyc2VYAQAAAC10cppDAABYBQAAAHN1cGVycptDAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3N1cGVyWAEAAAAtdHKcQwAAWBEAAAB0ZXJtaW9zLnRjZ2V0YXR0cnKdQwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y2dldGF0dHJYAQAAAC10cp5DAABYEwAAAGZ1dHVyZV9idWlsdGlucy5tYXByn0MAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnV0dXJlX2J1aWx0aW5zLmh0bWwjZnV0dXJlX2J1aWx0aW5zLm1hcFgBAAAALXRyoEMAAFgZAAAAdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbnKhQwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uWAEAAAAtdHKiQwAAWA4AAABiaW5hc2NpaS5jcmMzMnKjQwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmNyYzMyWAEAAAAtdHKkQwAAWBgAAABmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXJypUMAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyWAEAAAAtdHKmQwAAWCwAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5kZWxpdmVyX2NoYWxsZW5nZXKnQwAAKGpzBQAAanQFAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5kZWxpdmVyX2NoYWxsZW5nZVgBAAAALXRyqEMAAFgPAAAAb3BlcmF0b3IucnNoaWZ0cqlDAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucnNoaWZ0WAEAAAAtdHKqQwAAWBEAAABfd2lucmVnLkVudW1WYWx1ZXKrQwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5FbnVtVmFsdWVYAQAAAC10cqxDAABYEAAAAGxvZ2dpbmcuc2h1dGRvd25yrUMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuc2h1dGRvd25YAQAAAC10cq5DAABYFAAAAGNvZGUuY29tcGlsZV9jb21tYW5kcq9DAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLmNvbXBpbGVfY29tbWFuZFgBAAAALXRysEMAAFgTAAAAYmlzZWN0Lmluc29ydF9yaWdodHKxQwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0X3JpZ2h0WAEAAAAtdHKyQwAAWAsAAABjdXJzZXMucHV0cHKzQwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucHV0cFgBAAAALXRytEMAAFgPAAAAY29kZWNzLnJlZ2lzdGVycrVDAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5yZWdpc3RlclgBAAAALXRytkMAAFgPAAAAYmluYXNjaWkuYjJhX3FwcrdDAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYjJhX3FwWAEAAAAtdHK4QwAAWA0AAABpbXAuZ2V0X21hZ2ljcrlDAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5nZXRfbWFnaWNYAQAAAC10crpDAABYDwAAAGl0ZXJ0b29scy5jb3VudHK7QwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY291bnRYAQAAAC10crxDAABYCgAAAGNtYXRoLmFzaW5yvUMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5hc2luWAEAAAAtdHK+QwAAWAMAAABtaW5yv0MAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbWluWAEAAAAtdHLAQwAAWAsAAABzaGVsdmUub3BlbnLBQwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUub3BlblgBAAAALXRywkMAAFgPAAAAY3JlYXRlX3Nob3J0Y3V0csNDAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjY3JlYXRlX3Nob3J0Y3V0WAEAAAAtdHLEQwAAWBEAAABvcGVyYXRvci5fX2ltdWxfX3LFQwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW11bF9fWAEAAAAtdHLGQwAAWAoAAABvcy5zZXRldWlkcsdDAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0ZXVpZFgBAAAALXRyyEMAAFgcAAAAdW5pY29kZWRhdGEuZWFzdF9hc2lhbl93aWR0aHLJQwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmVhc3RfYXNpYW5fd2lkdGhYAQAAAC10cspDAABYDwAAAHJhbmRvbS5nZXRzdGF0ZXLLQwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZ2V0c3RhdGVYAQAAAC10csxDAABYEQAAAGl0ZXJ0b29scy5ncm91cGJ5cs1DAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5ncm91cGJ5WAEAAAAtdHLOQwAAWA8AAABjdXJzZXMudGVybW5hbWVyz0MAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRlcm1uYW1lWAEAAAAtdHLQQwAAWBMAAABjb2xvcnN5cy5yZ2JfdG9feWlxctFDAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMucmdiX3RvX3lpcVgBAAAALXRy0kMAAFgkAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5zZXRfcHl0aG9uX2J1aWxkctNDAAAoanMFAABqdAUAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5zZXRfcHl0aG9uX2J1aWxkWAEAAAAtdHLUQwAAWBQAAABwa2d1dGlsLml0ZXJfbW9kdWxlc3LVQwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5pdGVyX21vZHVsZXNYAQAAAC10ctZDAABYCQAAAHR1cnRsZS5ydHLXQwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucnRYAQAAAC10cthDAABYEwAAAG9wZXJhdG9yLl9faW52ZXJ0X19y2UMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2ludmVydF9fWAEAAAAtdHLaQwAAWAsAAABvcGVyYXRvci5nZXLbQwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmdlWAEAAAAtdHLcQwAAWBMAAAB0dXJ0bGUud2luZG93X3dpZHRoct1DAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS53aW5kb3dfd2lkdGhYAQAAAC10ct5DAABYGwAAAG1vZHVsZWZpbmRlci5BZGRQYWNrYWdlUGF0aHLfQwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuQWRkUGFja2FnZVBhdGhYAQAAAC10cuBDAABYFwAAAHRyYWNlYmFjay5leHRyYWN0X3N0YWNrcuFDAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5leHRyYWN0X3N0YWNrWAEAAAAtdHLiQwAAWAwAAAB0dXJ0bGUud3JpdGVy40MAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLndyaXRlWAEAAAAtdHLkQwAAWA8AAABvcy5wYXRoLmxleGlzdHNy5UMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgubGV4aXN0c1gBAAAALXRy5kMAAFgUAAAAbGluZWNhY2hlLmNsZWFyY2FjaGVy50MAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbGluZWNhY2hlLmh0bWwjbGluZWNhY2hlLmNsZWFyY2FjaGVYAQAAAC10cuhDAABYCwAAAHR1cnRsZS5sZWZ0culDAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5sZWZ0WAEAAAAtdHLqQwAAWBcAAABjdXJzZXMucmVzZXRfc2hlbGxfbW9kZXLrQwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucmVzZXRfc2hlbGxfbW9kZVgBAAAALXRy7EMAAFgGAAAAaW50ZXJucu1DAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2ludGVyblgBAAAALXRy7kMAAFgTAAAAbWFjb3N0b29scy5jb3B5dHJlZXLvQwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbWFjb3N0b29scy5jb3B5dHJlZVgBAAAALXRy8EMAAFgQAAAAdGhyZWFkLmdldF9pZGVudHLxQwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuZ2V0X2lkZW50WAEAAAAtdHLyQwAAWAsAAABjbWF0aC5waGFzZXLzQwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnBoYXNlWAEAAAAtdHL0QwAAWAwAAABwaWNrbGUuZHVtcHNy9UMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmR1bXBzWAEAAAAtdHL2QwAAWBsAAAB4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmdy90MAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjeG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5nWAEAAAAtdHL4QwAAWAkAAAB0dXJ0bGUubHRy+UMAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmx0WAEAAAAtdHL6QwAAWA0AAAB0dXJ0bGUub25kcmFncvtDAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmRyYWdYAQAAAC10cvxDAABYDQAAAGluc3BlY3QudHJhY2Vy/UMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QudHJhY2VYAQAAAC10cv5DAABYEgAAAG1hY29zdG9vbHMudG91Y2hlZHL/QwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbWFjb3N0b29scy50b3VjaGVkWAEAAAAtdHIARAAAWA0AAABnZXRvcHQuZ2V0b3B0cgFEAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5nZXRvcHRYAQAAAC10cgJEAABYDgAAAG1pbWV0eXBlcy5pbml0cgNEAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5pbml0WAEAAAAtdHIERAAAWBsAAABkaXN0dXRpbHMudXRpbC5ieXRlX2NvbXBpbGVyBUQAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5ieXRlX2NvbXBpbGVYAQAAAC10cgZEAABYDwAAAG9wZXJhdG9yLl9fbmVfX3IHRAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbmVfX1gBAAAALXRyCEQAAFgYAAAAY3R5cGVzLkRsbEdldENsYXNzT2JqZWN0cglEAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5EbGxHZXRDbGFzc09iamVjdFgBAAAALXRyCkQAAFgLAAAAZmwuaXNxdWV1ZWRyC0QAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5pc3F1ZXVlZFgBAAAALXRyDEQAAFgQAAAAb3BlcmF0b3IuX19hYnNfX3INRAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fYWJzX19YAQAAAC10cg5EAABYEQAAAGljLm1hcHR5cGVjcmVhdG9ycg9EAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMubWFwdHlwZWNyZWF0b3JYAQAAAC10chBEAABYBgAAAGZvcm1hdHIRRAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmb3JtYXRYAQAAAC10chJEAABYCAAAAGZsLnFyZWFkchNEAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwucXJlYWRYAQAAAC10chREAABYDQAAAHR1cnRsZS5nZXRwZW5yFUQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldHBlblgBAAAALXRyFkQAAFgOAAAAYXVkaW9vcC5taW5tYXhyF0QAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubWlubWF4WAEAAAAtdHIYRAAAWBIAAABvcy5wYXRoLmV4cGFuZHZhcnNyGUQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZXhwYW5kdmFyc1gBAAAALXRyGkQAAFgLAAAAb3Muc3Bhd252cGVyG0QAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bnZwZVgBAAAALXRyHEQAAFgLAAAAc3RyaW5nLmZpbmRyHUQAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmZpbmRYAQAAAC10ch5EAABYEQAAAGNzdi5saXN0X2RpYWxlY3Rzch9EAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5saXN0X2RpYWxlY3RzWAEAAAAtdHIgRAAAWAcAAABjb21waWxlciFEAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2NvbXBpbGVYAQAAAC10ciJEAABYIwAAAGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzciNEAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNYAQAAAC10ciREAABYGgAAAGVtYWlsLnV0aWxzLmVuY29kZV9yZmMyMjMxciVEAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5lbmNvZGVfcmZjMjIzMVgBAAAALXRyJkQAAFgRAAAAY3Vyc2VzLmluaXRfY29sb3JyJ0QAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmluaXRfY29sb3JYAQAAAC10cihEAABYFgAAAGZpbGVpbnB1dC5ob29rX2VuY29kZWRyKUQAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0Lmhvb2tfZW5jb2RlZFgBAAAALXRyKkQAAFgZAAAAdW5pY29kZWRhdGEuZGVjb21wb3NpdGlvbnIrRAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRlY29tcG9zaXRpb25YAQAAAC10cixEAABYDwAAAHN0cnVjdC5jYWxjc2l6ZXItRAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuY2FsY3NpemVYAQAAAC10ci5EAABYCwAAAHNodXRpbC5tb3Zlci9EAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5tb3ZlWAEAAAAtdHIwRAAAWBMAAABtc2lsaWIuT3BlbkRhdGFiYXNlcjFEAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5PcGVuRGF0YWJhc2VYAQAAAC10cjJEAABYFAAAAGN1cnNlcy5hc2NpaS5pc3NwYWNlcjNEAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3NwYWNlWAEAAAAtdHI0RAAAWAcAAABoYXNhdHRycjVEAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hhc2F0dHJYAQAAAC10cjZEAABYFQAAAHN5cy5zZXRyZWN1cnNpb25saW1pdHI3RAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0cmVjdXJzaW9ubGltaXRYAQAAAC10cjhEAABYEAAAAF93aW5yZWcuRmx1c2hLZXlyOUQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuRmx1c2hLZXlYAQAAAC10cjpEAABYGQAAAHdzZ2lyZWYudXRpbC5ndWVzc19zY2hlbWVyO0QAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5ndWVzc19zY2hlbWVYAQAAAC10cjxEAABYGwAAAHJlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aHI9RAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aFgBAAAALXRyPkQAAFgDAAAAbGVucj9EAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2xlblgBAAAALXRyQEQAAFgJAAAAb3Muc2V0c2lkckFEAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0c2lkWAEAAAAtdHJCRAAAWBYAAABpdGVydG9vbHMucGVybXV0YXRpb25zckNEAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5wZXJtdXRhdGlvbnNYAQAAAC10ckREAABYCgAAAG1hdGguYXRhbmhyRUQAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguYXRhbmhYAQAAAC10ckZEAABYFQAAAG9wZXJhdG9yLl9fc2V0c2xpY2VfX3JHRAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fc2V0c2xpY2VfX1gBAAAALXRySEQAAFgSAAAAY3Vyc2VzLnBhaXJfbnVtYmVycklEAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5wYWlyX251bWJlclgBAAAALXRySkQAAFgQAAAAb3MucGF0aC5nZXRtdGltZXJLRAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5nZXRtdGltZVgBAAAALXRyTEQAAFgMAAAAb3MuV0NPUkVEVU1Qck1EAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0NPUkVEVU1QWAEAAAAtdHJORAAAWA8AAABvcy5wYXRoLmlzbW91bnRyT0QAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNtb3VudFgBAAAALXRyUEQAAFgaAAAAZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXJyUUQAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXJYAQAAAC10clJEAABYCwAAAGZtLmZvbnRwYXRoclNEAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZtLmh0bWwjZm0uZm9udHBhdGhYAQAAAC10clREAABYFAAAAHNpdGUuZ2V0c2l0ZXBhY2thZ2VzclVEAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLmdldHNpdGVwYWNrYWdlc1gBAAAALXRyVkQAAFgQAAAAYmFzZTY0LmIxNmRlY29kZXJXRAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjE2ZGVjb2RlWAEAAAAtdHJYRAAAWA4AAABic2RkYi5oYXNob3BlbnJZRAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmhhc2hvcGVuWAEAAAAtdHJaRAAAWBcAAAB1bml0dGVzdC5yZWdpc3RlclJlc3VsdHJbRAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0WAEAAAAtdHJcRAAAWBMAAABzaWduYWwuc2lnaW50ZXJydXB0cl1EAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zaWdpbnRlcnJ1cHRYAQAAAC10cl5EAABYDgAAAGN1cnNlcy5pbml0c2Nycl9EAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pbml0c2NyWAEAAAAtdHJgRAAAWAoAAABtYXRoLmV4cG0xcmFEAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmV4cG0xWAEAAAAtdHJiRAAAWBEAAABnZXR0ZXh0LmxkZ2V0dGV4dHJjRAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5sZGdldHRleHRYAQAAAC10cmREAABYFQAAAHN1YnByb2Nlc3MuY2hlY2tfY2FsbHJlRAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5jaGVja19jYWxsWAEAAAAtdHJmRAAAWBQAAAByYW5kb20ubm9ybWFsdmFyaWF0ZXJnRAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ubm9ybWFsdmFyaWF0ZVgBAAAALXRyaEQAAFgUAAAAY3Vyc2VzLmFzY2lpLmlzYXNjaWlyaUQAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzYXNjaWlYAQAAAC10cmpEAABYDwAAAGhlYXBxLm5zbWFsbGVzdHJrRAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLm5zbWFsbGVzdFgBAAAALXRybEQAAFgPAAAAY3Vyc2VzLmdldG1vdXNlcm1EAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXRtb3VzZVgBAAAALXRybkQAAFgQAAAAaW5zcGVjdC5jbGVhbmRvY3JvRAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5jbGVhbmRvY1gBAAAALXRycEQAAFgWAAAAd2FybmluZ3Mud2Fybl9leHBsaWNpdHJxRAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLndhcm5fZXhwbGljaXRYAQAAAC10cnJEAABYGQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxyc0QAAChqcwUAAGp0BQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFgBAAAALXRydEQAAFgPAAAAdXJsbGliMi51cmxvcGVucnVEAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLnVybG9wZW5YAQAAAC10cnZEAABYFgAAAGNvbXBpbGVhbGwuY29tcGlsZV9kaXJyd0QAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NvbXBpbGVhbGwuY29tcGlsZV9kaXJYAQAAAC10cnhEAABYEwAAAHRyYWNlYmFjay5mb3JtYXRfdGJyeUQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmZvcm1hdF90YlgBAAAALXRyekQAAFgIAAAAb3MuZnN5bmNye0QAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3luY1gBAAAALXRyfEQAAFgTAAAAeG1sLnNheC5wYXJzZVN0cmluZ3J9RAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5wYXJzZVN0cmluZ1gBAAAALXRyfkQAAFgNAAAAaW1nZmlsZS53cml0ZXJ/RAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdmaWxlLmh0bWwjaW1nZmlsZS53cml0ZVgBAAAALXRygEQAAFgMAAAAc3RyaW5nLmxvd2VycoFEAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5sb3dlclgBAAAALXRygkQAAFgJAAAAb3MuYWNjZXNzcoNEAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuYWNjZXNzWAEAAAAtdHKERAAAWBQAAABzeXMuZ2V0Y2hlY2tpbnRlcnZhbHKFRAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0Y2hlY2tpbnRlcnZhbFgBAAAALXRyhkQAAFgPAAAAbG9nZ2luZy5kaXNhYmxlcodEAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmRpc2FibGVYAQAAAC10cohEAABYEwAAAHJhbmRvbS5nYW1tYXZhcmlhdGVyiUQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmdhbW1hdmFyaWF0ZVgBAAAALXRyikQAAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nbGlzdHKLRAAAKGpzBQAAanQFAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0WAEAAAAtdHKMRAAAWBQAAABvcGVyYXRvci5fX2lsc2hpZnRfX3KNRAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWxzaGlmdF9fWAEAAAAtdHKORAAAWAQAAABmaWxlco9EAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2ZpbGVYAQAAAC10cpBEAABYEgAAAGNvZGVjcy5FbmNvZGVkRmlsZXKRRAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuRW5jb2RlZEZpbGVYAQAAAC10cpJEAABYDQAAAGhlYXBxLmhlYXBpZnlyk0QAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5oZWFwaWZ5WAEAAAAtdHKURAAAWA0AAABwZGIuc2V0X3RyYWNlcpVEAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5zZXRfdHJhY2VYAQAAAC10cpZEAABYDwAAAHhtbHJwY2xpYi5kdW1wc3KXRAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuZHVtcHNYAQAAAC10cphEAABYDAAAAHR1cnRsZS5yaWdodHKZRAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmlnaHRYAQAAAC10cppEAABYEAAAAGltcC5hY3F1aXJlX2xvY2tym0QAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmFjcXVpcmVfbG9ja1gBAAAALXRynEQAAFgPAAAAZ2wubnVyYnNzdXJmYWNlcp1EAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wubnVyYnNzdXJmYWNlWAEAAAAtdHKeRAAAWA8AAABmaWxlaW5wdXQuY2xvc2Vyn0QAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmNsb3NlWAEAAAAtdHKgRAAAWBEAAABkb2N0ZXN0LmRlYnVnX3NyY3KhRAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5kZWJ1Z19zcmNYAQAAAC10cqJEAABYDwAAAGZubWF0Y2guZm5tYXRjaHKjRAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWwjZm5tYXRjaC5mbm1hdGNoWAEAAAAtdHKkRAAAWBAAAABtaW1ldG9vbHMuZW5jb2RlcqVEAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5lbmNvZGVYAQAAAC10cqZEAABYCAAAAG9zLmNoZGlycqdEAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2hkaXJYAQAAAC10cqhEAABYCwAAAGN1cnNlcy5ub25scqlEAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub25sWAEAAAAtdHKqRAAAWAcAAABvcy5zdGF0cqtEAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdFgBAAAALXRyrEQAAFgWAAAAZGlzdHV0aWxzLnV0aWwuZXhlY3V0ZXKtRAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmV4ZWN1dGVYAQAAAC10cq5EAABYDgAAAHR1cnRsZS50dXJ0bGVzcq9EAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50dXJ0bGVzWAEAAAAtdHKwRAAAWAgAAABwdHkuZm9ya3KxRAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbCNwdHkuZm9ya1gBAAAALXRyskQAAFgQAAAAZ2MuZ2V0X3JlZmVycmVyc3KzRAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9yZWZlcnJlcnNYAQAAAC10crREAABYDAAAAHR1cnRsZS5jbG9uZXK1RAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xvbmVYAQAAAC10crZEAABYFwAAAGVuY29kaW5ncy5pZG5hLm5hbWVwcmVwcrdEAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2VuY29kaW5ncy5pZG5hLm5hbWVwcmVwWAEAAAAtdHK4RAAAWAoAAABvcy5yZW5hbWVzcrlEAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucmVuYW1lc1gBAAAALXRyukQAAFgMAAAAb3BlcmF0b3Iub3JfcrtEAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iub3JfWAEAAAAtdHK8RAAAWB0AAAByZWFkbGluZS5nZXRfY29tcGxldGVyX2RlbGltc3K9RAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0ZXJfZGVsaW1zWAEAAAAtdHK+RAAAWBQAAABmaW5kZXJ0b29scy5zaHV0ZG93bnK/RAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMuc2h1dGRvd25YAQAAAC10csBEAABYEAAAAGdldHRleHQubGdldHRleHRywUQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubGdldHRleHRYAQAAAC10csJEAABYFgAAAEZyYW1lV29yay5EaWFsb2dXaW5kb3dyw0QAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkRpYWxvZ1dpbmRvd1gBAAAALXRyxEQAAFgPAAAAaW1wLmZpbmRfbW9kdWxlcsVEAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5maW5kX21vZHVsZVgBAAAALXRyxkQAAFgPAAAAX3dpbnJlZy5TYXZlS2V5csdEAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlNhdmVLZXlYAQAAAC10cshEAABYEAAAAGN1cnNlcy50ZXJtYXR0cnNyyUQAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRlcm1hdHRyc1gBAAAALXRyykQAAFgOAAAAY2dpLnByaW50X2Zvcm1yy0QAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Zvcm1YAQAAAC10csxEAABYEgAAAGhvdHNob3Quc3RhdHMubG9hZHLNRAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5zdGF0cy5sb2FkWAEAAAAtdHLORAAAWA0AAABvcy5pbml0Z3JvdXBzcs9EAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuaW5pdGdyb3Vwc1gBAAAALXRy0EQAAFgNAAAAc3RyaW5nLnJzcGxpdHLRRAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucnNwbGl0WAEAAAAtdHLSRAAAWBgAAABzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXRy00QAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0WAEAAAAtdHLURAAAWCAAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuU3ViRWxlbWVudHLVRAAAKGpzBQAAanQFAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuU3ViRWxlbWVudFgBAAAALXRy1kQAAFghAAAAbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5jb3B5ctdEAAAoanMFAABqdAUAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuY29weVgBAAAALXRy2EQAAFgJAAAAb3Muc3Bhd252ctlEAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3Bhd252WAEAAAAtdHLaRAAAWBAAAAB6bGliLmNvbXByZXNzb2JqcttEAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmNvbXByZXNzb2JqWAEAAAAtdHLcRAAAWBQAAAByZXNvdXJjZS5nZXRwYWdlc2l6ZXLdRAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLmdldHBhZ2VzaXplWAEAAAAtdHLeRAAAWBgAAABwbGF0Zm9ybS5weXRob25fY29tcGlsZXJy30QAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fY29tcGlsZXJYAQAAAC10cuBEAABYCQAAAG9zLnNwYXdubHLhRAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdubFgBAAAALXRy4kQAAFgPAAAAdHVydGxlLmJhY2t3YXJkcuNEAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iYWNrd2FyZFgBAAAALXRy5EQAAFgHAAAAcGRiLnJ1bnLlRAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIucnVuWAEAAAAtdHLmRAAAWAwAAABzdHJpbmcubGp1c3Ry50QAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmxqdXN0WAEAAAAtdHLoRAAAWAMAAABwb3dy6UQAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcG93WAEAAAAtdHLqRAAAWBUAAABpbnNwZWN0LmdldG1vZHVsZWluZm9y60QAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0bW9kdWxlaW5mb1gBAAAALXRy7EQAAFgJAAAAZ2xvYi5nbG9icu1EAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbCNnbG9iLmdsb2JYAQAAAC10cu5EAABYDQAAAG9zLnBhdGguc3BsaXRy70QAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc3BsaXRYAQAAAC10cvBEAABYFQAAAHBrZ3V0aWwud2Fsa19wYWNrYWdlc3LxRAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC53YWxrX3BhY2thZ2VzWAEAAAAtdHLyRAAAWA0AAAB0aW1laXQudGltZWl0cvNEAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC50aW1laXRYAQAAAC10cvREAABYHgAAAGRpc3R1dGlscy5maWxlX3V0aWwud3JpdGVfZmlsZXL1RAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5maWxlX3V0aWwud3JpdGVfZmlsZVgBAAAALXRy9kQAAFgNAAAAcGFyc2VyLmlzZXhwcnL3RAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuaXNleHByWAEAAAAtdHL4RAAAWA4AAABhbC5xdWVyeXBhcmFtc3L5RAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hbC5odG1sI2FsLnF1ZXJ5cGFyYW1zWAEAAAAtdHL6RAAAWBQAAABjdXJzZXMuYXNjaWkuaXNncmFwaHL7RAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNncmFwaFgBAAAALXRy/EQAAFgcAAAAc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc3L9RAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzWAEAAAAtdHL+RAAAWA4AAAB0dXJ0bGUuYmdjb2xvcnL/RAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmdjb2xvclgBAAAALXRyAEUAAFgOAAAAaW1wLm5ld19tb2R1bGVyAUUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLm5ld19tb2R1bGVYAQAAAC10cgJFAABYEQAAAE1hY09TLldNQXZhaWxhYmxlcgNFAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MuV01BdmFpbGFibGVYAQAAAC10cgRFAABYDAAAAG9wZXJhdG9yLmludnIFRQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmludlgBAAAALXRyBkUAAFgMAAAAcmZjODIyLnF1b3RlcgdFAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5xdW90ZVgBAAAALXRyCEUAAFgMAAAAc2VsZWN0LmVwb2xscglFAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbFgBAAAALXRyCkUAAFgYAAAAaW5zcGVjdC5pc2RhdGFkZXNjcmlwdG9ycgtFAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZGF0YWRlc2NyaXB0b3JYAQAAAC10cgxFAABYDAAAAHN0cmluZy5zcGxpdHINRQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuc3BsaXRYAQAAAC10cg5FAABYEAAAAG9zLnBhdGguZ2V0YXRpbWVyD0UAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0YXRpbWVYAQAAAC10chBFAABYHAAAAHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmdyEUUAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nWAEAAAAtdHISRQAAWBAAAABvcy5wYXRoLnNwbGl0ZXh0chNFAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNwbGl0ZXh0WAEAAAAtdHIURQAAWBMAAABpdGVydG9vbHMudGFrZXdoaWxlchVFAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy50YWtld2hpbGVYAQAAAC10chZFAABYCgAAAGNtYXRoLnRhbmhyF0UAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC50YW5oWAEAAAAtdHIYRQAAWAwAAAB0dXJ0bGUuc3RhbXByGUUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnN0YW1wWAEAAAAtdHIaRQAAWBAAAABjYWxlbmRhci5wcm1vbnRochtFAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIucHJtb250aFgBAAAALXRyHEUAAFgVAAAAdW5pY29kZWRhdGEuY29tYmluaW5nch1FAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuY29tYmluaW5nWAEAAAAtdHIeRQAAWBwAAAByZWFkbGluZS5yZW1vdmVfaGlzdG9yeV9pdGVtch9FAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbVgBAAAALXRyIEUAAFgIAAAAY2FsbGFibGVyIUUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY2FsbGFibGVYAQAAAC10ciJFAABYDQAAAE1hY09TLlN5c0JlZXByI0UAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5TeXNCZWVwWAEAAAAtdHIkRQAAWBUAAABsb2dnaW5nLmNvbmZpZy5saXN0ZW5yJUUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLmNvbmZpZy5saXN0ZW5YAQAAAC10ciZFAABYCgAAAG9zLmdldGVnaWRyJ0UAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRlZ2lkWAEAAAAtdHIoRQAAWBIAAABvcGVyYXRvci5fX2luZGV4X19yKUUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2luZGV4X19YAQAAAC10cipFAABYDAAAAGdjLnNldF9kZWJ1Z3IrRQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLnNldF9kZWJ1Z1gBAAAALXRyLEUAAFgRAAAAY29kZWNzLml0ZXJkZWNvZGVyLUUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLml0ZXJkZWNvZGVYAQAAAC10ci5FAABYEQAAAGZpbGVpbnB1dC5pc3N0ZGluci9FAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5pc3N0ZGluWAEAAAAtdHIwRQAAWBEAAABnZXRvcHQuZ251X2dldG9wdHIxRQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRvcHQuaHRtbCNnZXRvcHQuZ251X2dldG9wdFgBAAAALXRyMkUAAFgRAAAAdXJscGFyc2UucGFyc2VfcXNyM0UAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS5wYXJzZV9xc1gBAAAALXRyNEUAAFgWAAAAc3lzLnNldGRlZmF1bHRlbmNvZGluZ3I1RQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0ZGVmYXVsdGVuY29kaW5nWAEAAAAtdHI2RQAAWA0AAABzcHdkLmdldHNwYWxscjdFAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Nwd2QuaHRtbCNzcHdkLmdldHNwYWxsWAEAAAAtdHI4RQAAWA4AAABjYWxlbmRhci5tb250aHI5RQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLm1vbnRoWAEAAAAtdHI6RQAAWA8AAABkaWZmbGliLnJlc3RvcmVyO0UAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIucmVzdG9yZVgBAAAALXRyPEUAAFgIAAAAb3MucG9wZW5yPUUAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3BlblgBAAAALXRyPkUAAFgUAAAAZG9jdGVzdC5Eb2NUZXN0U3VpdGVyP0UAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFN1aXRlWAEAAAAtdHJARQAAWBcAAABsb2dnaW5nLmNhcHR1cmVXYXJuaW5nc3JBRQAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5jYXB0dXJlV2FybmluZ3NYAQAAAC10ckJFAABYEAAAAG9zLnBhdGgubm9ybWNhc2VyQ0UAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgubm9ybWNhc2VYAQAAAC10ckRFAABYCgAAAGpzb24ubG9hZHNyRUUAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24ubG9hZHNYAQAAAC10ckZFAABYEwAAAGZ1dHVyZV9idWlsdGlucy5oZXhyR0UAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnV0dXJlX2J1aWx0aW5zLmh0bWwjZnV0dXJlX2J1aWx0aW5zLmhleFgBAAAALXRySEUAAFgdAAAAcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGVySUUAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fdmVyc2lvbl90dXBsZVgBAAAALXRySkUAAFgNAAAAYXVkaW9vcC5tYXhwcHJLRQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5tYXhwcFgBAAAALXRyTEUAAFgRAAAAc3ltdGFibGUuc3ltdGFibGVyTUUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5zeW10YWJsZVgBAAAALXRyTkUAAFgUAAAAb3MucGF0aC5zYW1lb3BlbmZpbGVyT0UAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc2FtZW9wZW5maWxlWAEAAAAtdHJQRQAAWBMAAABhZXRvb2xzLnVucGFja2V2ZW50clFFAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldG9vbHMuaHRtbCNhZXRvb2xzLnVucGFja2V2ZW50WAEAAAAtdHJSRQAAWA0AAABtYXRoLmNvcHlzaWduclNFAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNvcHlzaWduWAEAAAAtdHJURQAAWAoAAABjZ2kuZXNjYXBlclVFAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5lc2NhcGVYAQAAAC10clZFAABYEAAAAG9zLnBhdGguYmFzZW5hbWVyV0UAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguYmFzZW5hbWVYAQAAAC10clhFAABYCgAAAGZtLnNldHBhdGhyWUUAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNmbS5zZXRwYXRoWAEAAAAtdHJaRQAAWBAAAABkb2N0ZXN0LnRlc3RmaWxlcltFAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnRlc3RmaWxlWAEAAAAtdHJcRQAAWBMAAABlbnN1cmVwaXAuYm9vdHN0cmFwcl1FAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vuc3VyZXBpcC5odG1sI2Vuc3VyZXBpcC5ib290c3RyYXBYAQAAAC10cl5FAABYCQAAAG1hdGguYWNvc3JfRQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hY29zWAEAAAAtdHJgRQAAWCcAAABnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZV9mcm9tcmVzb3VyY2VyYUUAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2Vuc3VpdGVtb2R1bGUuaHRtbCNnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZV9mcm9tcmVzb3VyY2VYAQAAAC10cmJFAABYCQAAAGFzdC5wYXJzZXJjRQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QucGFyc2VYAQAAAC10cmRFAABYCgAAAG9zLmNvbmZzdHJyZUUAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jb25mc3RyWAEAAAAtdHJmRQAAWBEAAABvcGVyYXRvci5fX2l4b3JfX3JnRQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faXhvcl9fWAEAAAAtdHJoRQAAWCkAAABkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZXJpRQAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lWAEAAAAtdHJqRQAAWAUAAABpbnB1dHJrRQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpbnB1dFgBAAAALXRybEUAAFgcAAAAZGlzdHV0aWxzLnV0aWwuY2hlY2tfZW52aXJvbnJtRQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmNoZWNrX2Vudmlyb25YAQAAAC10cm5FAABYDQAAAGFlcGFjay51bnBhY2tyb0UAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWVwYWNrLmh0bWwjYWVwYWNrLnVucGFja1gBAAAALXRycEUAAFgTAAAAY29sb3JzeXMuaHN2X3RvX3JnYnJxRQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLmhzdl90b19yZ2JYAQAAAC10cnJFAABYFwAAAHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kcnNFAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucGFyc2VfYW5kX2JpbmRYAQAAAC10cnRFAABYEQAAAHB5Y2xici5yZWFkbW9kdWxlcnVFAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5yZWFkbW9kdWxlWAEAAAAtdHJ2RQAAWBMAAABtc2lsaWIuQ3JlYXRlUmVjb3JkcndFAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5DcmVhdGVSZWNvcmRYAQAAAC10cnhFAABYCAAAAG1hdGgubG9ncnlFAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmxvZ1gBAAAALXRyekUAAFgcAAAAZGlzdHV0aWxzLnV0aWwucmZjODIyX2VzY2FwZXJ7RQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLnJmYzgyMl9lc2NhcGVYAQAAAC10cnxFAABYKAAAAGRpc3R1dGlscy5jY29tcGlsZXIuZ2V0X2RlZmF1bHRfY29tcGlsZXJyfUUAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLmdldF9kZWZhdWx0X2NvbXBpbGVyWAEAAAAtdHJ+RQAAdShYHAAAAHdzZ2lyZWYudXRpbC5zaGlmdF9wYXRoX2luZm9yf0UAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5zaGlmdF9wYXRoX2luZm9YAQAAAC10coBFAABYEwAAAGNvbG9yc3lzLnlpcV90b19yZ2JygUUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNjb2xvcnN5cy55aXFfdG9fcmdiWAEAAAAtdHKCRQAAWB0AAAB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZXKDRQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlWAEAAAAtdHKERQAAWAsAAABwaXBlcy5xdW90ZXKFRQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLnF1b3RlWAEAAAAtdHKGRQAAWBAAAABvcGVyYXRvci5fX2ludl9fcodFAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbnZfX1gBAAAALXRyiEUAAFgLAAAAcHJvZmlsZS5ydW5yiUUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUucnVuWAEAAAAtdHKKRQAAWAkAAABqc29uLmR1bXByi0UAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uZHVtcFgBAAAALXRyjEUAAFgJAAAAcHR5LnNwYXduco1FAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B0eS5odG1sI3B0eS5zcGF3blgBAAAALXRyjkUAAFgRAAAAYXVkaW9vcC5hZHBjbTJsaW5yj0UAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWRwY20ybGluWAEAAAAtdHKQRQAAWBYAAABzdHJpbmdwcmVwLmluX3RhYmxlX2M5cpFFAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2M5WAEAAAAtdHKSRQAAWA0AAABjdXJzZXMuZ2V0c3l4cpNFAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXRzeXhYAQAAAC10cpRFAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzdylUUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzdYAQAAAC10cpZFAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzZyl0UAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzZYAQAAAC10cphFAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzVymUUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzVYAQAAAC10cppFAABYDAAAAGJ6Mi5jb21wcmVzc3KbRQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuY29tcHJlc3NYAQAAAC10cpxFAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzNynUUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzNYAQAAAC10cp5FAABYEQAAAGF1ZGlvb3AubGluMmFkcGNtcp9FAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmxpbjJhZHBjbVgBAAAALXRyoEUAAFgXAAAAZ2V0X3NwZWNpYWxfZm9sZGVyX3BhdGhyoUUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNnZXRfc3BlY2lhbF9mb2xkZXJfcGF0aFgBAAAALXRyokUAAFgQAAAAb3BlcmF0b3IuX19hZGRfX3KjRQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fYWRkX19YAQAAAC10cqRFAABYDAAAAG9wZXJhdG9yLnhvcnKlRQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnhvclgBAAAALXRypkUAAFgJAAAAb3MuZXhlY2xwcqdFAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY2xwWAEAAAAtdHKoRQAAWBQAAAB0aHJlYWRpbmcuc3RhY2tfc2l6ZXKpRQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuc3RhY2tfc2l6ZVgBAAAALXRyqkUAAFgQAAAAb3BlcmF0b3IuX19zdWJfX3KrRQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fc3ViX19YAQAAAC10cqxFAABYCQAAAG9zLmV4ZWNsZXKtRQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmV4ZWNsZVgBAAAALXRyrkUAAFgSAAAAYmlzZWN0LmJpc2VjdF9sZWZ0cq9FAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5iaXNlY3RfbGVmdFgBAAAALXRysEUAAFgUAAAAdHVydGxlLm9uc2NyZWVuY2xpY2tysUUAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9uc2NyZWVuY2xpY2tYAQAAAC10crJFAABYFQAAAGNhbGVuZGFyLmZpcnN0d2Vla2RheXKzRQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmZpcnN0d2Vla2RheVgBAAAALXRytEUAAFgZAAAAZW1haWwuY2hhcnNldC5hZGRfY2hhcnNldHK1RQAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5hZGRfY2hhcnNldFgBAAAALXRytkUAAFgPAAAAc3RyaW5nLnN3YXBjYXNlcrdFAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5zd2FwY2FzZVgBAAAALXRyuEUAAFgLAAAAc3RyaW5nLmF0b2ZyuUUAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmF0b2ZYAQAAAC10crpFAABYHgAAAG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydHK7RQAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnRYAQAAAC10crxFAABYFgAAAHRlbXBmaWxlLmdldHRlbXBwcmVmaXhyvUUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4WAEAAAAtdHK+RQAAWAsAAABmaWxlY21wLmNtcHK/RQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5jbXBYAQAAAC10csBFAABYCwAAAHN0cmluZy5hdG9scsFFAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5hdG9sWAEAAAAtdHLCRQAAWBsAAABkb2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWdyw0UAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QucmVnaXN0ZXJfb3B0aW9uZmxhZ1gBAAAALXRyxEUAAFgSAAAAaW1hZ2VvcC5ncmV5MjJncmV5csVFAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmdyZXkyMmdyZXlYAQAAAC10csZFAABYFQAAAG9wZXJhdG9yLl9fZ2V0c2xpY2VfX3LHRQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZ2V0c2xpY2VfX1gBAAAALXRyyEUAAFgWAAAAaW5zcGVjdC5nZXRvdXRlcmZyYW1lc3LJRQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRvdXRlcmZyYW1lc1gBAAAALXRyykUAAFgTAAAAc2h1dGlsLm1ha2VfYXJjaGl2ZXLLRQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwubWFrZV9hcmNoaXZlWAEAAAAtdHLMRQAAWAsAAABjcnlwdC5jcnlwdHLNRQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jcnlwdC5odG1sI2NyeXB0LmNyeXB0WAEAAAAtdHLORQAAWBYAAABzeXNjb25maWcuZ2V0X3BsYXRmb3Jtcs9FAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGxhdGZvcm1YAQAAAC10ctBFAABYEAAAAGJpbmFzY2lpLmEyYl9ocXhy0UUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5hMmJfaHF4WAEAAAAtdHLSRQAAWBIAAABjb250ZXh0bGliLmNsb3Npbmdy00UAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIuY2xvc2luZ1gBAAAALXRy1EUAAFgMAAAAcmFuZG9tLmdhdXNzctVFAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5nYXVzc1gBAAAALXRy1kUAAFgOAAAATWFjT1MuRGVidWdTdHJy10UAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5EZWJ1Z1N0clgBAAAALXRy2EUAAFgMAAAAc29ja2V0Lmh0b25zctlFAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5odG9uc1gBAAAALXRy2kUAAFgPAAAAdHVydGxlLnBlbmNvbG9ycttFAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW5jb2xvclgBAAAALXRy3EUAAFgTAAAAaG1hYy5jb21wYXJlX2RpZ2VzdHLdRQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5jb21wYXJlX2RpZ2VzdFgBAAAALXRy3kUAAFgSAAAAc29ja2V0LmdldGhvc3RuYW1lct9FAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRob3N0bmFtZVgBAAAALXRy4EUAAFgLAAAAaGVhcHEubWVyZ2Vy4UUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5tZXJnZVgBAAAALXRy4kUAAFgNAAAAdGV4dHdyYXAuZmlsbHLjRQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLmZpbGxYAQAAAC10cuRFAABYDAAAAGN0eXBlcy5ieXJlZnLlRQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuYnlyZWZYAQAAAC10cuZFAABYFAAAAGN1cnNlcy5hc2NpaS5pc2FscGhhcudFAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2FscGhhWAEAAAAtdHLoRQAAWB8AAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuaXNlbGVtZW50culFAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5pc2VsZW1lbnRYAQAAAC10cupFAABYEAAAAHRlbXBmaWxlLm1rZHRlbXBy60UAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5ta2R0ZW1wWAEAAAAtdHLsRQAAWAoAAABtYXRoLnRydW5jcu1FAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRydW5jWAEAAAAtdHLuRQAAWAwAAABzdGF0LlNfSU1PREVy70UAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JTU9ERVgBAAAALXRy8EUAAFgRAAAAcGxhdGZvcm0ubGliY192ZXJy8UUAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5saWJjX3ZlclgBAAAALXRy8kUAAFgOAAAAcHByaW50LnBmb3JtYXRy80UAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnBmb3JtYXRYAQAAAC10cvRFAABYBwAAAG1kNS5uZXdy9UUAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm5ld1gBAAAALXRy9kUAAFgDAAAAZGlycvdFAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2RpclgBAAAALXRy+EUAAFgJAAAAbWF0aC5hdGFucvlFAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmF0YW5YAQAAAC10cvpFAABYDgAAAHRpbWUubG9jYWx0aW1lcvtFAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmxvY2FsdGltZVgBAAAALXRy/EUAAFgUAAAAb3BlcmF0b3IuX19nZXRpdGVtX19y/UUAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2dldGl0ZW1fX1gBAAAALXRy/kUAAFgOAAAAZmwuZ2V0X3JnYm1vZGVy/0UAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfcmdibW9kZVgBAAAALXRyAEYAAFgLAAAAY3Vyc2VzLmVjaG9yAUYAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmVjaG9YAQAAAC10cgJGAABYHgAAAGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9yc3IDRgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnNYAQAAAC10cgRGAABYDAAAAGZwZm9ybWF0LmZpeHIFRgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGZvcm1hdC5odG1sI2ZwZm9ybWF0LmZpeFgBAAAALXRyBkYAAFgQAAAAdHVydGxlLmlzdmlzaWJsZXIHRgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaXN2aXNpYmxlWAEAAAAtdHIIRgAAWA4AAAB0dXJ0bGUucGVuZG93bnIJRgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuZG93blgBAAAALXRyCkYAAFgPAAAAemxpYi5kZWNvbXByZXNzcgtGAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmRlY29tcHJlc3NYAQAAAC10cgxGAABYDwAAAHN5cy5kaXNwbGF5aG9va3INRgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZGlzcGxheWhvb2tYAQAAAC10cg5GAABYCQAAAGdsLnZhcnJheXIPRgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLnZhcnJheVgBAAAALXRyEEYAAFgRAAAAY3Vyc2VzLmNvbG9yX3BhaXJyEUYAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmNvbG9yX3BhaXJYAQAAAC10chJGAABYGAAAAHR1cnRsZS51bmRvYnVmZmVyZW50cmllc3ITRgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudW5kb2J1ZmZlcmVudHJpZXNYAQAAAC10chRGAABYDgAAAHR1cnRsZS5kZWdyZWVzchVGAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kZWdyZWVzWAEAAAAtdHIWRgAAWAsAAAB0dXJ0bGUuZmlsbHIXRgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZmlsbFgBAAAALXRyGEYAAFgQAAAAaW1wLmluaXRfYnVpbHRpbnIZRgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuaW5pdF9idWlsdGluWAEAAAAtdHIaRgAAWAkAAABvcy5nZXRwaWRyG0YAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRwaWRYAQAAAC10chxGAABYDAAAAHN0cmluZy5zdHJpcHIdRgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuc3RyaXBYAQAAAC10ch5GAABYDQAAAHN0cmluZy5jZW50ZXJyH0YAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmNlbnRlclgBAAAALXRyIEYAAFgKAAAAY21hdGguYWNvc3IhRgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmFjb3NYAQAAAC10ciJGAABYEAAAAGN0eXBlcy5DRlVOQ1RZUEVyI0YAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkNGVU5DVFlQRVgBAAAALXRyJEYAAFgJAAAAdHVydGxlLmZkciVGAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5mZFgBAAAALXRyJkYAAFgNAAAAbXN2Y3J0LmdldHdjaHInRgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0d2NoWAEAAAAtdHIoRgAAWAgAAABvcy5jaG93bnIpRgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmNob3duWAEAAAAtdHIqRgAAWBIAAAB0dXJ0bGUuc2V0cG9zaXRpb25yK0YAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHBvc2l0aW9uWAEAAAAtdHIsRgAAWBEAAABtc2lsaWIuYWRkX3N0cmVhbXItRgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuYWRkX3N0cmVhbVgBAAAALXRyLkYAAFgZAAAAY3Vyc2VzLnBhbmVsLmJvdHRvbV9wYW5lbHIvRgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuYm90dG9tX3BhbmVsWAEAAAAtdHIwRgAAWAkAAABnemlwLm9wZW5yMUYAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAub3BlblgBAAAALXRyMkYAAFgRAAAAdXJscGFyc2UudXJsc3BsaXRyM0YAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS51cmxzcGxpdFgBAAAALXRyNEYAAFgMAAAAZmwubWFrZV9mb3JtcjVGAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwubWFrZV9mb3JtWAEAAAAtdHI2RgAAWA0AAABvcGVyYXRvci5pYWRkcjdGAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaWFkZFgBAAAALXRyOEYAAFgTAAAAb3BlcmF0b3IuX19yZXBlYXRfX3I5RgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcmVwZWF0X19YAQAAAC10cjpGAABYFQAAAGNvbXBpbGVyLnZpc2l0b3Iud2Fsa3I7RgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLnZpc2l0b3Iud2Fsa1gBAAAALXRyPEYAAFgRAAAAY29udGV4dGxpYi5uZXN0ZWRyPUYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIubmVzdGVkWAEAAAAtdHI+RgAAWAwAAABmaWxlX2NyZWF0ZWRyP0YAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNmaWxlX2NyZWF0ZWRYAQAAAC10ckBGAABYIgAAAGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWJyQUYAAChqcwUAAGp0BQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliWAEAAAAtdHJCRgAAWA0AAABjdHlwZXMucmVzaXplckNGAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5yZXNpemVYAQAAAC10ckRGAABYFQAAAG9wZXJhdG9yLl9fY29udGFpbnNfX3JFRgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fY29udGFpbnNfX1gBAAAALXRyRkYAAFgPAAAAY3Vyc2VzLmlzZW5kd2luckdGAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pc2VuZHdpblgBAAAALXRySEYAAFgQAAAAY3R5cGVzLnNldF9lcnJub3JJRgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2V0X2Vycm5vWAEAAAAtdHJKRgAAWAwAAABtYXJzaGFsLmxvYWRyS0YAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwubG9hZFgBAAAALXRyTEYAAFgPAAAAYmluYXNjaWkuYjJhX3V1ck1GAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYjJhX3V1WAEAAAAtdHJORgAAWAsAAAB0dXJ0bGUuZ290b3JPRgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZ290b1gBAAAALXRyUEYAAFgJAAAAcmUuZXNjYXBlclFGAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuZXNjYXBlWAEAAAAtdHJSRgAAWA8AAAB0dXJ0bGUubWFpbmxvb3ByU0YAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm1haW5sb29wWAEAAAAtdHJURgAAWA0AAABvcGVyYXRvci5ub3RfclVGAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iubm90X1gBAAAALXRyVkYAAFgWAAAAYmluYXNjaWkucmxlZGVjb2RlX2hxeHJXRgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLnJsZWRlY29kZV9ocXhYAQAAAC10clhGAABYEAAAAGN0eXBlcy5nZXRfZXJybm9yWUYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmdldF9lcnJub1gBAAAALXRyWkYAAFgJAAAAZGlzLmRpc3RicltGAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXN0YlgBAAAALXRyXEYAAFgPAAAAbWFpbGNhcC5nZXRjYXBzcl1GAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbCNtYWlsY2FwLmdldGNhcHNYAQAAAC10cl5GAABYEAAAAHJ1bnB5LnJ1bl9tb2R1bGVyX0YAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcnVucHkuaHRtbCNydW5weS5ydW5fbW9kdWxlWAEAAAAtdHJgRgAAWAsAAABwdHkub3BlbnB0eXJhRgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbCNwdHkub3BlbnB0eVgBAAAALXRyYkYAAFgZAAAAdW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbHJjRgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWxYAQAAAC10cmRGAABYCQAAAHJhd19pbnB1dHJlRgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYXdfaW5wdXRYAQAAAC10cmZGAABYFAAAAHR1cnRsZS53aW5kb3dfaGVpZ2h0cmdGAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS53aW5kb3dfaGVpZ2h0WAEAAAAtdHJoRgAAWBMAAABvcy5zdGF0X2Zsb2F0X3RpbWVzcmlGAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9mbG9hdF90aW1lc1gBAAAALXRyakYAAFgIAAAAbmlzLm1hcHNya0YAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmlzLmh0bWwjbmlzLm1hcHNYAQAAAC10cmxGAABYCgAAAGNtYXRoLmNvc2hybUYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5jb3NoWAEAAAAtdHJuRgAAWBcAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MyMXJvRgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMjFYAQAAAC10cnBGAABYFwAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzIycnFGAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MyMlgBAAAALXRyckYAAFgMAAAAcGlja2xlLmxvYWRzcnNGAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5sb2Fkc1gBAAAALXRydEYAAFgJAAAAd2F2ZS5vcGVucnVGAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLm9wZW5YAQAAAC10cnZGAABYDQAAAGdkYm0uZmlyc3RrZXlyd0YAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2RibS5odG1sI2dkYm0uZmlyc3RrZXlYAQAAAC10cnhGAABYFwAAAGVtYWlsLmNoYXJzZXQuYWRkX2NvZGVjcnlGAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LmFkZF9jb2RlY1gBAAAALXRyekYAAFgQAAAAb3MucGF0aC5ub3JtcGF0aHJ7RgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5ub3JtcGF0aFgBAAAALXRyfEYAAFgMAAAAbmV3Lmluc3RhbmNlcn1GAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sI25ldy5pbnN0YW5jZVgBAAAALXRyfkYAAFgMAAAAb3BlcmF0b3IubXVscn9GAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubXVsWAEAAAAtdHKARgAAWBsAAABkaXN0dXRpbHMudXRpbC5zcGxpdF9xdW90ZWRygUYAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5zcGxpdF9xdW90ZWRYAQAAAC10coJGAABYGwAAAF93aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleXKDRgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5FbmFibGVSZWZsZWN0aW9uS2V5WAEAAAAtdHKERgAAWBMAAABpbnNwZWN0LmdldGNhbGxhcmdzcoVGAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGNhbGxhcmdzWAEAAAAtdHKGRgAAWBcAAABzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leHKHRgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leFgBAAAALXRyiEYAAFgHAAAAb3Mud2Fsa3KJRgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLndhbGtYAQAAAC10copGAABYDAAAAHN0cmluZy5pbmRleHKLRgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuaW5kZXhYAQAAAC10coxGAABYEwAAAGN0eXBlcy5HZXRMYXN0RXJyb3JyjUYAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkdldExhc3RFcnJvclgBAAAALXRyjkYAAFgDAAAAY2hyco9GAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2NoclgBAAAALXRykEYAAFgMAAAAb3BlcmF0b3IuaXNfcpFGAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNfWAEAAAAtdHKSRgAAWBgAAABlbWFpbC51dGlscy5wYXJzZWRhdGVfdHpyk0YAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbC5odG1sI2VtYWlsLnV0aWxzLnBhcnNlZGF0ZV90elgBAAAALXRylEYAAFgJAAAAdHVydGxlLmh0cpVGAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5odFgBAAAALXRylkYAAFgJAAAAdXUuZW5jb2RlcpdGAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1Lmh0bWwjdXUuZW5jb2RlWAEAAAAtdHKYRgAAWAsAAABmbS5maW5kZm9udHKZRgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLmZpbmRmb250WAEAAAAtdHKaRgAAWBQAAABjdXJzZXMuZGVmX3Byb2dfbW9kZXKbRgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVmX3Byb2dfbW9kZVgBAAAALXRynEYAAFgMAAAAcHdkLmdldHB3YWxscp1GAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B3ZC5odG1sI3B3ZC5nZXRwd2FsbFgBAAAALXRynkYAAFgRAAAAb3BlcmF0b3IuX19pZGl2X19yn0YAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lkaXZfX1gBAAAALXRyoEYAAFgMAAAAc3VuYXUub3BlbmZwcqFGAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUub3BlbmZwWAEAAAAtdHKiRgAAWAwAAABzb2NrZXQuaHRvbmxyo0YAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lmh0b25sWAEAAAAtdHKkRgAAWBwAAABnZW5zdWl0ZW1vZHVsZS5pc19zY3JpcHRhYmxlcqVGAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dlbnN1aXRlbW9kdWxlLmh0bWwjZ2Vuc3VpdGVtb2R1bGUuaXNfc2NyaXB0YWJsZVgBAAAALXRypkYAAFgHAAAAZm0uaW5pdHKnRgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLmluaXRYAQAAAC10cqhGAABYFAAAAG11bHRpcHJvY2Vzc2luZy5QaXBlcqlGAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5QaXBlWAEAAAAtdHKqRgAAWBQAAABweWNsYnIucmVhZG1vZHVsZV9leHKrRgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIucmVhZG1vZHVsZV9leFgBAAAALXRyrEYAAFgHAAAAcmUuc3VibnKtRgAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLnN1Ym5YAQAAAC10cq5GAABYEQAAAGN1cnNlcy5hc2NpaS5jdHJscq9GAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5jdHJsWAEAAAAtdHKwRgAAWBEAAAB0dXJ0bGUuc2V0aGVhZGluZ3KxRgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0aGVhZGluZ1gBAAAALXRyskYAAFgfAAAAbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2Vzc3KzRgAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzWAEAAAAtdHK0RgAAWAkAAABvcy5nZXRzaWRytUYAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRzaWRYAQAAAC10crZGAABYFQAAAG9wZXJhdG9yLm1ldGhvZGNhbGxlcnK3RgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm1ldGhvZGNhbGxlclgBAAAALXRyuEYAAFgQAAAAcGxhdGZvcm0ubWFjX3ZlcnK5RgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLm1hY192ZXJYAQAAAC10crpGAABYGAAAAGN1cnNlcy50ZXh0cGFkLnJlY3RhbmdsZXK7RgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5yZWN0YW5nbGVYAQAAAC10crxGAABYCgAAAF9faW1wb3J0X19yvUYAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjX19pbXBvcnRfX1gBAAAALXRyvkYAAFgJAAAAb3MucmVuYW1lcr9GAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucmVuYW1lWAEAAAAtdHLARgAAWBAAAABpbWdmaWxlLmdldHNpemVzcsFGAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltZ2ZpbGUuaHRtbCNpbWdmaWxlLmdldHNpemVzWAEAAAAtdHLCRgAAWA8AAABhdWRpb29wLnJldmVyc2Vyw0YAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AucmV2ZXJzZVgBAAAALXRyxEYAAFgRAAAAaW5zcGVjdC5nZXRtb2R1bGVyxUYAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0bW9kdWxlWAEAAAAtdHLGRgAAWCEAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5DbGllbnRyx0YAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ2xpZW50WAEAAAAtdHLIRgAAWBAAAABzaWduYWwuc2V0aXRpbWVycslGAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zZXRpdGltZXJYAQAAAC10cspGAABYDAAAAGN1cnNlcy5ub3Jhd3LLRgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubm9yYXdYAQAAAC10csxGAABYGQAAAGN1cnNlcy51c2VfZGVmYXVsdF9jb2xvcnNyzUYAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnVzZV9kZWZhdWx0X2NvbG9yc1gBAAAALXRyzkYAAFgTAAAAdHVydGxlLnNldHRpbHRhbmdsZXLPRgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0dGlsdGFuZ2xlWAEAAAAtdHLQRgAAWBEAAABpbnNwZWN0LmlzYnVpbHRpbnLRRgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2J1aWx0aW5YAQAAAC10ctJGAABYKQAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuc3luY2hyb25pemVkctNGAAAoanMFAABqdAUAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuc3luY2hyb25pemVkWAEAAAAtdHLURgAAWAwAAAB1dWlkLmdldG5vZGVy1UYAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuZ2V0bm9kZVgBAAAALXRy1kYAAFgLAAAAbG9nZ2luZy5sb2dy10YAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcubG9nWAEAAAAtdHLYRgAAWBIAAABmaWxlaW5wdXQubmV4dGZpbGVy2UYAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0Lm5leHRmaWxlWAEAAAAtdHLaRgAAWBEAAAB0dXJ0bGUuc2NyZWVuc2l6ZXLbRgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2NyZWVuc2l6ZVgBAAAALXRy3EYAAFgNAAAAY3Vyc2VzLm5ld3dpbnLdRgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubmV3d2luWAEAAAAtdHLeRgAAWBIAAABzeXMuZ2V0ZGxvcGVuZmxhZ3Ny30YAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldGRsb3BlbmZsYWdzWAEAAAAtdHLgRgAAWAsAAABzaHV0aWwuY29weXLhRgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuY29weVgBAAAALXRy4kYAAFgYAAAAcmZjODIyLmR1bXBfYWRkcmVzc19wYWlycuNGAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5kdW1wX2FkZHJlc3NfcGFpclgBAAAALXRy5EYAAFgNAAAAc2VsZWN0LnNlbGVjdHLlRgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Quc2VsZWN0WAEAAAAtdHLmRgAAWBQAAABvcGVyYXRvci5fX2ljb25jYXRfX3LnRgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWNvbmNhdF9fWAEAAAAtdHLoRgAAWBoAAAB0aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZXLpRgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZVgBAAAALXRy6kYAAFgMAAAAZmwuZ2V0bWNvbG9ycutGAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZ2V0bWNvbG9yWAEAAAAtdHLsRgAAWBEAAABzeXNsb2cuc2V0bG9nbWFza3LtRgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNsb2cuaHRtbCNzeXNsb2cuc2V0bG9nbWFza1gBAAAALXRy7kYAAFgLAAAAZmNudGwubG9ja2Zy70YAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5sb2NrZlgBAAAALXRy8EYAAFgLAAAAd2F2ZS5vcGVuZnBy8UYAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUub3BlbmZwWAEAAAAtdHLyRgAAWA4AAAB0dXJ0bGUucGVuc2l6ZXLzRgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuc2l6ZVgBAAAALXRy9EYAAFgIAAAAZm0ucHJzdHJy9UYAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNmbS5wcnN0clgBAAAALXRy9kYAAFgTAAAAcmVhZGxpbmUuZ2V0X2VuZGlkeHL3RgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9lbmRpZHhYAQAAAC10cvhGAABYDwAAAGNvcHlfcmVnLnBpY2tsZXL5RgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5X3JlZy5odG1sI2NvcHlfcmVnLnBpY2tsZVgBAAAALXRy+kYAAFgVAAAAZW1haWwudXRpbHMucGFyc2VhZGRycvtGAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5wYXJzZWFkZHJYAQAAAC10cvxGAABYFQAAAGZ1dHVyZV9idWlsdGlucy5hc2NpaXL9RgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMuYXNjaWlYAQAAAC10cv5GAABYEQAAAG1zaWxpYi5VdWlkQ3JlYXRlcv9GAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5VdWlkQ3JlYXRlWAEAAAAtdHIARwAAWAQAAABoYXNocgFHAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hhc2hYAQAAAC10cgJHAABYIwAAAGRpc3R1dGlscy5mYW5jeV9nZXRvcHQuZmFuY3lfZ2V0b3B0cgNHAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5mYW5jeV9nZXRvcHRYAQAAAC10cgRHAABYDgAAAGZsLmNoZWNrX2Zvcm1zcgVHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuY2hlY2tfZm9ybXNYAQAAAC10cgZHAABYEgAAAG9zLnBhdGguc3BsaXRkcml2ZXIHRwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zcGxpdGRyaXZlWAEAAAAtdHIIRwAAWAwAAABNYWNPUy5zcGxhc2hyCUcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5zcGxhc2hYAQAAAC10cgpHAABYCwAAAGN1cnNlcy5iZWVwcgtHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5iZWVwWAEAAAAtdHIMRwAAWBQAAABwaWNrbGV0b29scy5vcHRpbWl6ZXINRwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGV0b29scy5odG1sI3BpY2tsZXRvb2xzLm9wdGltaXplWAEAAAAtdHIORwAAWBQAAAByYW5kb20ucGFyZXRvdmFyaWF0ZXIPRwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucGFyZXRvdmFyaWF0ZVgBAAAALXRyEEcAAFgMAAAAYnNkZGIucm5vcGVuchFHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIucm5vcGVuWAEAAAAtdHISRwAAWBMAAABmdXR1cmVfYnVpbHRpbnMub2N0chNHAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1dHVyZV9idWlsdGlucy5odG1sI2Z1dHVyZV9idWlsdGlucy5vY3RYAQAAAC10chRHAABYCwAAAGFlcGFjay5wYWNrchVHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FlcGFjay5odG1sI2FlcGFjay5wYWNrWAEAAAAtdHIWRwAAWBAAAABmaWxlaW5wdXQuZmlsZW5vchdHAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5maWxlbm9YAQAAAC10chhHAABYEAAAAHBsYXRmb3JtLnZlcnNpb25yGUcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS52ZXJzaW9uWAEAAAAtdHIaRwAAWAQAAAB2YXJzchtHAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3ZhcnNYAQAAAC10chxHAABYAwAAAG9yZHIdRwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvcmRYAQAAAC10ch5HAABYCQAAAGVudW1lcmF0ZXIfRwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNlbnVtZXJhdGVYAQAAAC10ciBHAABYEgAAAHN0cnVjdC51bnBhY2tfZnJvbXIhRwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QudW5wYWNrX2Zyb21YAQAAAC10ciJHAABYDQAAAHhtbC5zYXgucGFyc2VyI0cAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXgucGFyc2VYAQAAAC10ciRHAABYDQAAAGNnaS5wYXJzZV9xc2xyJUcAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNlX3FzbFgBAAAALXRyJkcAAFgaAAAAc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRyJ0cAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRYAQAAAC10cihHAABYDgAAAGN1cnNlcy5rZXluYW1lcilHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5rZXluYW1lWAEAAAAtdHIqRwAAWBMAAABpbnNwZWN0LmlzdHJhY2ViYWNrcitHAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzdHJhY2ViYWNrWAEAAAAtdHIsRwAAWBcAAABNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZXItRwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLkdldENyZWF0b3JBbmRUeXBlWAEAAAAtdHIuRwAAWBIAAABweV9jb21waWxlLmNvbXBpbGVyL0cAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuY29tcGlsZVgBAAAALXRyMEcAAFgiAAAAZGlzdHV0aWxzLmNjb21waWxlci5zaG93X2NvbXBpbGVyc3IxRwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuc2hvd19jb21waWxlcnNYAQAAAC10cjJHAABYDgAAAHN5cy5nZXRwcm9maWxlcjNHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRwcm9maWxlWAEAAAAtdHI0RwAAWAkAAABvcy5raWxscGdyNUcAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5raWxscGdYAQAAAC10cjZHAABYEAAAAHR1cnRsZS5zaGFwZXNpemVyN0cAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNoYXBlc2l6ZVgBAAAALXRyOEcAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9hMXI5RwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9hMVgBAAAALXRyOkcAAFgZAAAAc3lzY29uZmlnLmdldF9jb25maWdfdmFyc3I7RwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzWAEAAAAtdHI8RwAAWAoAAABiYXNlc3RyaW5ncj1HAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Jhc2VzdHJpbmdYAQAAAC10cj5HAABYDwAAAGRvY3Rlc3QudGVzdG1vZHI/RwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC50ZXN0bW9kWAEAAAAtdHJARwAAWBEAAABvcGVyYXRvci5zZXRzbGljZXJBRwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnNldHNsaWNlWAEAAAAtdHJCRwAAWBAAAABhc3QubGl0ZXJhbF9ldmFsckNHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5saXRlcmFsX2V2YWxYAQAAAC10ckRHAABYFgAAAEZyYW1lV29yay53aW5kb3dib3VuZHNyRUcAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLndpbmRvd2JvdW5kc1gBAAAALXRyRkcAAFgSAAAAcGxpc3RsaWIucmVhZFBsaXN0ckdHAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIucmVhZFBsaXN0WAEAAAAtdHJIRwAAWAcAAABvcy5mb3JrcklHAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZm9ya1gBAAAALXRySkcAAFgNAAAAYmRiLnNldF90cmFjZXJLRwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuc2V0X3RyYWNlWAEAAAAtdHJMRwAAWBAAAABvcy5wYXRoLmdldGN0aW1lck1HAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmdldGN0aW1lWAEAAAAtdHJORwAAWBEAAAB1bmljb2RlZGF0YS5kaWdpdHJPRwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRpZ2l0WAEAAAAtdHJQRwAAWAwAAABjZ2l0Yi5lbmFibGVyUUcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpdGIuaHRtbCNjZ2l0Yi5lbmFibGVYAQAAAC10clJHAABYDwAAAHRocmVhZGluZy5STG9ja3JTRwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuUkxvY2tYAQAAAC10clRHAABYGwAAAHhtbC5kb20ucHVsbGRvbS5wYXJzZVN0cmluZ3JVRwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20ucGFyc2VTdHJpbmdYAQAAAC10clZHAABYDgAAAGZsLmdldF9wYXR0ZXJucldHAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZ2V0X3BhdHRlcm5YAQAAAC10clhHAABYDwAAAGl0ZXJ0b29scy5jeWNsZXJZRwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY3ljbGVYAQAAAC10clpHAABYEwAAAHN5c2NvbmZpZy5nZXRfcGF0aHNyW0cAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9wYXRoc1gBAAAALXRyXEcAAFgUAAAAY3Vyc2VzLmNvbG9yX2NvbnRlbnRyXUcAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmNvbG9yX2NvbnRlbnRYAQAAAC10cl5HAABYCgAAAGNtYXRoLnNxcnRyX0cAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5zcXJ0WAEAAAAtdHJgRwAAWA4AAABhdWRpb29wLnJhdGVjdnJhRwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5yYXRlY3ZYAQAAAC10cmJHAABYDQAAAHR1cnRsZS5zZXRwb3NyY0cAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHBvc1gBAAAALXRyZEcAAFgZAAAAYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZXJlRwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlWAEAAAAtdHJmRwAAWBEAAABmaW5kZXJ0b29scy5QcmludHJnRwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMuUHJpbnRYAQAAAC10cmhHAABYDwAAAGl0ZXJ0b29scy5jaGFpbnJpRwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY2hhaW5YAQAAAC10cmpHAABYFAAAAGxvZ2dpbmcuYWRkTGV2ZWxOYW1lcmtHAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmFkZExldmVsTmFtZVgBAAAALXRybEcAAFgSAAAAdHVydGxlLmNsZWFyc2NyZWVucm1HAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhcnNjcmVlblgBAAAALXRybkcAAFgIAAAAb3MuYWJvcnRyb0cAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5hYm9ydFgBAAAALXRycEcAAFgGAAAAc29ydGVkcnFHAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3NvcnRlZFgBAAAALXRyckcAAFgWAAAAdW5pdHRlc3QucmVtb3ZlSGFuZGxlcnJzRwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlbW92ZUhhbmRsZXJYAQAAAC10cnRHAABYCgAAAG9zLmV4ZWNscGVydUcAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjbHBlWAEAAAAtdHJ2RwAAWB0AAAByZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltc3J3RwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9jb21wbGV0ZXJfZGVsaW1zWAEAAAAtdHJ4RwAAWAgAAABmbC5xdGVzdHJ5RwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnF0ZXN0WAEAAAAtdHJ6RwAAWAkAAABvcy5yZW1vdmVye0cAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW1vdmVYAQAAAC10cnxHAABYFgAAAHJhbmRvbS52b25taXNlc3ZhcmlhdGVyfUcAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZVgBAAAALXRyfkcAAFgQAAAAdHVydGxlLnRpbHRhbmdsZXJ/RwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudGlsdGFuZ2xlWAEAAAAtdHKARwAAWBAAAABjZ2kucGFyc2VfaGVhZGVycoFHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5wYXJzZV9oZWFkZXJYAQAAAC10coJHAABYDwAAAHR1cnRsZS5lbmRfZmlsbHKDRwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZW5kX2ZpbGxYAQAAAC10coRHAABYDwAAAGN1cnNlcy50aWdldG51bXKFRwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGlnZXRudW1YAQAAAC10coZHAABYFwAAAHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0codHAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLmNoZWNrX291dHB1dFgBAAAALXRyiEcAAFgPAAAAb3BlcmF0b3IucmVwZWF0colHAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucmVwZWF0WAEAAAAtdHKKRwAAWAoAAABvcy5mb3JrcHR5cotHAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZm9ya3B0eVgBAAAALXRyjEcAAFgMAAAAdGltZS5hc2N0aW1lco1HAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmFzY3RpbWVYAQAAAC10co5HAABYCQAAAG1hdGgubW9kZnKPRwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5tb2RmWAEAAAAtdHKQRwAAWA8AAABzaHV0aWwuY29weXN0YXRykUcAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHlzdGF0WAEAAAAtdHKSRwAAWBkAAABtaW1ldG9vbHMuY2hvb3NlX2JvdW5kYXJ5cpNHAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5jaG9vc2VfYm91bmRhcnlYAQAAAC10cpRHAABYHAAAAGRpc3R1dGlscy5kaXJfdXRpbC5jb3B5X3RyZWVylUcAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGlyX3V0aWwuY29weV90cmVlWAEAAAAtdHKWRwAAWAoAAABjbWF0aC5hdGFucpdHAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXRhblgBAAAALXRymEcAAFgKAAAAbWF0aC5hdGFuMnKZRwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hdGFuMlgBAAAALXRymkcAAFgMAAAATWFjT1Mub3BlbnJmcptHAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1Mub3BlbnJmWAEAAAAtdHKcRwAAWAsAAABzZWxlY3QucG9sbHKdRwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbFgBAAAALXRynkcAAFgIAAAAb3Mud3JpdGVyn0cAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy53cml0ZVgBAAAALXRyoEcAAFgYAAAAdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkcqFHAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5jdXJyZW50X3RocmVhZFgBAAAALXRyokcAAFgIAAAAcmUubWF0Y2hyo0cAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5tYXRjaFgBAAAALXRypEcAAFgMAAAAb3BlcmF0b3IuYWRkcqVHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuYWRkWAEAAAAtdHKmRwAAWBEAAAB0dXJ0bGUucmVzaXplbW9kZXKnRwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmVzaXplbW9kZVgBAAAALXRyqEcAAFgOAAAAdXJsbGliLnVybG9wZW5yqUcAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybG9wZW5YAQAAAC10cqpHAABYCAAAAHN5cy5leGl0cqtHAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGl0WAEAAAAtdHKsRwAAWA8AAABzdWJwcm9jZXNzLmNhbGxyrUcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuY2FsbFgBAAAALXRyrkcAAFgRAAAAaXRlcnRvb2xzLnByb2R1Y3Ryr0cAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnByb2R1Y3RYAQAAAC10crBHAABYFAAAAGZpbGVpbnB1dC5maWxlbGluZW5vcrFHAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5maWxlbGluZW5vWAEAAAAtdHKyRwAAWBIAAAB0dXJ0bGUucmVzZXRzY3JlZW5ys0cAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJlc2V0c2NyZWVuWAEAAAAtdHK0RwAAWBQAAABjdXJzZXMuYXNjaWkuaXNkaWdpdHK1RwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNkaWdpdFgBAAAALXRytkcAAFgQAAAAZmluZGVydG9vbHMuY29weXK3RwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMuY29weVgBAAAALXRyuEcAAFgMAAAAYW55ZGJtLmNsb3NlcrlHAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FueWRibS5odG1sI2FueWRibS5jbG9zZVgBAAAALXRyukcAAFgPAAAAX3dpbnJlZy5Mb2FkS2V5crtHAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkxvYWRLZXlYAQAAAC10crxHAABYEQAAAGN1cnNlcy51bmdldG1vdXNlcr1HAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldG1vdXNlWAEAAAAtdHK+RwAAWBIAAABzb2NrZXQuZ2V0bmFtZWluZm9yv0cAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldG5hbWVpbmZvWAEAAAAtdHLARwAAWAsAAABvcy5zdHJlcnJvcnLBRwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN0cmVycm9yWAEAAAAtdHLCRwAAWBUAAABvcGVyYXRvci5pc051bWJlclR5cGVyw0cAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc051bWJlclR5cGVYAQAAAC10csRHAABYEwAAAHVybGxpYi51cmwycGF0aG5hbWVyxUcAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybDJwYXRobmFtZVgBAAAALXRyxkcAAFgYAAAAc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0csdHAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zZXRkZWZhdWx0dGltZW91dFgBAAAALXRyyEcAAFgTAAAAdXJsbGliLnVucXVvdGVfcGx1c3LJRwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudW5xdW90ZV9wbHVzWAEAAAAtdHLKRwAAWA0AAABkdW1iZGJtLmNsb3NlcstHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bWJkYm0uaHRtbCNkdW1iZGJtLmNsb3NlWAEAAAAtdHLMRwAAWB4AAABzc2wuX2h0dHBzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXNyzUcAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLl9odHRwc192ZXJpZnlfY2VydGlmaWNhdGVzWAEAAAAtdHLORwAAWBUAAABtaW1ldG9vbHMuY29weWxpdGVyYWxyz0cAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLmNvcHlsaXRlcmFsWAEAAAAtdHLQRwAAWBcAAABzdHJpbmdwcmVwLm1hcF90YWJsZV9iMnLRRwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5tYXBfdGFibGVfYjJYAQAAAC10ctJHAABYFwAAAHN0cmluZ3ByZXAubWFwX3RhYmxlX2IzctNHAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLm1hcF90YWJsZV9iM1gBAAAALXRy1EcAAFgLAAAAdHVydGxlLnljb3Jy1UcAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnljb3JYAQAAAC10ctZHAABYDgAAAGN1cnNlcy51bmdldGNoctdHAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldGNoWAEAAAAtdHLYRwAAWBAAAABzb2NrZXQuaW5ldF9udG9hctlHAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5pbmV0X250b2FYAQAAAC10ctpHAABYCgAAAG9zLndhaXRwaWRy20cAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0cGlkWAEAAAAtdHLcRwAAWBAAAABzb2NrZXQuaW5ldF9udG9wct1HAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5pbmV0X250b3BYAQAAAC10ct5HAABYAwAAAG9jdHLfRwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvY3RYAQAAAC10cuBHAABYDAAAAHN0YXRpY21ldGhvZHLhRwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNzdGF0aWNtZXRob2RYAQAAAC10cuJHAABYEwAAAGJhc2U2NC5kZWNvZGVzdHJpbmdy40cAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmRlY29kZXN0cmluZ1gBAAAALXRy5EcAAFggAAAAdGVzdC5zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3Ny5UcAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzWAEAAAAtdHLmRwAAWBUAAABzc2wuZW51bV9jZXJ0aWZpY2F0ZXNy50cAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmVudW1fY2VydGlmaWNhdGVzWAEAAAAtdHLoRwAAWAkAAABvcy5zeXN0ZW1y6UcAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zeXN0ZW1YAQAAAC10cupHAABYEQAAAGl0ZXJ0b29scy5zdGFybWFwcutHAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5zdGFybWFwWAEAAAAtdHLsRwAAWBgAAABwbGF0Zm9ybS5weXRob25fcmV2aXNpb25y7UcAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fcmV2aXNpb25YAQAAAC10cu5HAABYEgAAAGF1ZGlvb3AuZmluZGZhY3RvcnLvRwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5maW5kZmFjdG9yWAEAAAAtdHLwRwAAWBIAAABzb2NrZXQuZ2V0YWRkcmluZm9y8UcAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGFkZHJpbmZvWAEAAAAtdHLyRwAAWA0AAABtc3ZjcnQucHV0d2NocvNHAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5wdXR3Y2hYAQAAAC10cvRHAABYEAAAAGJhc2U2NC5iMzJlbmNvZGVy9UcAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmIzMmVuY29kZVgBAAAALXRy9kcAAFgJAAAAb3MuZ2V0dWlkcvdHAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0dWlkWAEAAAAtdHL4RwAAWAwAAABtYXRoLnJhZGlhbnNy+UcAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgucmFkaWFuc1gBAAAALXRy+kcAAFgYAAAAc3lzY29uZmlnLmdldF9wYXRoX25hbWVzcvtHAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGF0aF9uYW1lc1gBAAAALXRy/EcAAFgTAAAAc3lzLl9jdXJyZW50X2ZyYW1lc3L9RwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuX2N1cnJlbnRfZnJhbWVzWAEAAAAtdHL+RwAAWAwAAABvcy5zZXRyZXNnaWRy/0cAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRyZXNnaWRYAQAAAC10cgBIAABYCgAAAHpsaWIuY3JjMzJyAUgAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuY3JjMzJYAQAAAC10cgJIAABYCwAAAHRpbWUuZ210aW1lcgNIAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmdtdGltZVgBAAAALXRyBEgAAFgKAAAAb3Muc3Bhd25scHIFSAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdubHBYAQAAAC10cgZIAABYGAAAAGRpc3R1dGlscy5kZXBfdXRpbC5uZXdlcnIHSAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kZXBfdXRpbC5uZXdlclgBAAAALXRyCEgAAFgUAAAAX3dpbnJlZy5RdWVyeUluZm9LZXlyCUgAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUXVlcnlJbmZvS2V5WAEAAAAtdHIKSAAAWBAAAABwbGF0Zm9ybS5yZWxlYXNlcgtIAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucmVsZWFzZVgBAAAALXRyDEgAAFgdAAAAeG1sLnBhcnNlcnMuZXhwYXQuRXJyb3JTdHJpbmdyDUgAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkVycm9yU3RyaW5nWAEAAAAtdHIOSAAAWA8AAABvcGVyYXRvci5pbnZlcnRyD0gAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbnZlcnRYAQAAAC10chBIAABYDAAAAG9zLnNldGdyb3Vwc3IRSAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNldGdyb3Vwc1gBAAAALXRyEkgAAFgTAAAAZW1haWwudXRpbHMudW5xdW90ZXITSAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlsLmh0bWwjZW1haWwudXRpbHMudW5xdW90ZVgBAAAALXRyFEgAAFgKAAAAbWF0aC5sZGV4cHIVSAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sZGV4cFgBAAAALXRyFkgAAFgTAAAAb3BlcmF0b3IuX19yc2hpZnRfX3IXSAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcnNoaWZ0X19YAQAAAC10chhIAABYCAAAAG1hdGguc2luchlIAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnNpblgBAAAALXRyGkgAAFgOAAAAY2FsZW5kYXIucHJjYWxyG0gAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5wcmNhbFgBAAAALXRyHEgAAFgOAAAAc3lzLnNldHByb2ZpbGVyHUgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldHByb2ZpbGVYAQAAAC10ch5IAABYDAAAAGR1bWJkYm0ub3BlbnIfSAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjZHVtYmRibS5vcGVuWAEAAAAtdHIgSAAAWAsAAAByYW5kb20uc2VlZHIhSAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uc2VlZFgBAAAALXRyIkgAAFgPAAAAcHlfY29tcGlsZS5tYWluciNIAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNweV9jb21waWxlLm1haW5YAQAAAC10ciRIAABYDwAAAHBsYXRmb3JtLnN5c3RlbXIlSAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnN5c3RlbVgBAAAALXRyJkgAAFgKAAAAZ2wuZW5kcGlja3InSAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLmVuZHBpY2tYAQAAAC10cihIAABYDAAAAGdycC5nZXRncmFsbHIpSAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ncnAuaHRtbCNncnAuZ2V0Z3JhbGxYAQAAAC10cipIAABYCAAAAHJlLnB1cmdlcitIAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUucHVyZ2VYAQAAAC10cixIAABYFQAAAHhtbC5kb20ubWluaWRvbS5wYXJzZXItSAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20ucGFyc2VYAQAAAC10ci5IAABYIgAAAHNxbGl0ZTMuZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3NyL0gAAChqcwUAAGp0BQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3NYAQAAAC10cjBIAABYGgAAAHdzZ2lyZWYudXRpbC5pc19ob3BfYnlfaG9wcjFIAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwuaXNfaG9wX2J5X2hvcFgBAAAALXRyMkgAAFgUAAAAdXJsbGliMi5idWlsZF9vcGVuZXJyM0gAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuYnVpbGRfb3BlbmVyWAEAAAAtdHI0SAAAWAkAAAB0aW1lLnRpbWVyNUgAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUudGltZVgBAAAALXRyNkgAAFgJAAAAZ2wuc2VsZWN0cjdIAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wuc2VsZWN0WAEAAAAtdHI4SAAAWA4AAABwYXJzZXIuaXNzdWl0ZXI5SAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuaXNzdWl0ZVgBAAAALXRyOkgAAFgTAAAAd2ViYnJvd3Nlci5vcGVuX25ld3I7SAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuX25ld1gBAAAALXRyPEgAAFgQAAAAZ2MuZ2V0X3JlZmVyZW50c3I9SAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9yZWZlcmVudHNYAQAAAC10cj5IAABYCgAAAG1hdGguYXNpbmhyP0gAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguYXNpbmhYAQAAAC10ckBIAABYEgAAAG9zLnBhdGguZXhwYW5kdXNlcnJBSAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5leHBhbmR1c2VyWAEAAAAtdHJCSAAAWBkAAABtaW1pZnkubWltZV9kZWNvZGVfaGVhZGVyckNIAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21pbWlmeS5taW1lX2RlY29kZV9oZWFkZXJYAQAAAC10ckRIAABYCwAAAGltZ2hkci53aGF0ckVIAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltZ2hkci5odG1sI2ltZ2hkci53aGF0WAEAAAAtdHJGSAAAWBgAAABzeXNjb25maWcucGFyc2VfY29uZmlnX2hyR0gAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLnBhcnNlX2NvbmZpZ19oWAEAAAAtdHJISAAAWBIAAABtYWNvc3Rvb2xzLm1rYWxpYXNySUgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI21hY29zdG9vbHMubWthbGlhc1gBAAAALXRySkgAAFgLAAAAdGltZS5ta3RpbWVyS0gAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUubWt0aW1lWAEAAAAtdHJMSAAAWBkAAABkaWZmbGliLklTX0NIQVJBQ1RFUl9KVU5Lck1IAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLklTX0NIQVJBQ1RFUl9KVU5LWAEAAAAtdHJOSAAAWBMAAAByZWFkbGluZS5nZXRfYmVnaWR4ck9IAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2JlZ2lkeFgBAAAALXRyUEgAAFgZAAAAb3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlc3JRSAAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNYAQAAAC10clJIAABYHgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS50b3N0cmluZ3JTSAAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdYAQAAAC10clRIAABYCwAAAG9zLmZzdGF0dmZzclVIAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZnN0YXR2ZnNYAQAAAC10clZIAABYDQAAAGNvZGVjcy5kZWNvZGVyV0gAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmRlY29kZVgBAAAALXRyWEgAAFgJAAAAY21hdGguY29zcllIAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguY29zWAEAAAAtdHJaSAAAWAsAAAB0dXJ0bGUuZG9uZXJbSAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZG9uZVgBAAAALXRyXEgAAFgJAAAAbWF0aC5mbW9kcl1IAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZtb2RYAQAAAC10cl5IAABYDwAAAG9zLnBhdGguZGlybmFtZXJfSAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5kaXJuYW1lWAEAAAAtdHJgSAAAWBIAAABsb2NhbGUucmVzZXRsb2NhbGVyYUgAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLnJlc2V0bG9jYWxlWAEAAAAtdHJiSAAAWA4AAABmbC5zaG93X2Nob2ljZXJjSAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnNob3dfY2hvaWNlWAEAAAAtdHJkSAAAWBQAAAB3aW5zb3VuZC5NZXNzYWdlQmVlcHJlSAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1lc3NhZ2VCZWVwWAEAAAAtdHJmSAAAWBgAAAB3c2dpcmVmLnV0aWwucmVxdWVzdF91cmlyZ0gAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5yZXF1ZXN0X3VyaVgBAAAALXRyaEgAAFgeAAAAbWltZXR5cGVzLmd1ZXNzX2FsbF9leHRlbnNpb25zcmlIAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5ndWVzc19hbGxfZXh0ZW5zaW9uc1gBAAAALXRyakgAAFgIAAAAbmV3LmNvZGVya0gAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbmV3LmNvZGVYAQAAAC10cmxIAABYEAAAAG9wZXJhdG9yLnNldGl0ZW1ybUgAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5zZXRpdGVtWAEAAAAtdHJuSAAAWAcAAABvcy5vcGVucm9IAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mub3BlblgBAAAALXRycEgAAFgLAAAAb3MubWFrZWRpcnNycUgAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5tYWtlZGlyc1gBAAAALXRyckgAAFgYAAAAYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlcnNIAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC51cmxzYWZlX2I2NGRlY29kZVgBAAAALXRydEgAAFgOAAAAbXN2Y3J0LnVuZ2V0Y2hydUgAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LnVuZ2V0Y2hYAQAAAC10cnZIAABYDwAAAGNzdi5nZXRfZGlhbGVjdHJ3SAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuZ2V0X2RpYWxlY3RYAQAAAC10cnhIAABYDQAAAHN0YXQuU19JU1NPQ0tyeUgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1NPQ0tYAQAAAC10cnpIAABYIQAAAHhtbC5kb20ucmVnaXN0ZXJET01JbXBsZW1lbnRhdGlvbnJ7SAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5yZWdpc3RlckRPTUltcGxlbWVudGF0aW9uWAEAAAAtdHJ8SAAAWA0AAABtc3ZjcnQuZ2V0Y2hlcn1IAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXRjaGVYAQAAAC10cn5IAABYEAAAAG9wZXJhdG9yLnRydWVkaXZyf0gAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci50cnVlZGl2WAEAAAAtdHKASAAAWBUAAABvcGVyYXRvci5fX2Zsb29yZGl2X19ygUgAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2Zsb29yZGl2X19YAQAAAC10coJIAABYCQAAAG9zLmxjaG93bnKDSAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmxjaG93blgBAAAALXRyhEgAAFgXAAAATWFjT1MuU2V0Q3JlYXRvckFuZFR5cGVyhUgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZVgBAAAALXRyhkgAAFgXAAAAbG9jYWxlLmdldGRlZmF1bHRsb2NhbGVyh0gAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmdldGRlZmF1bHRsb2NhbGVYAQAAAC10cohIAABYFAAAAGFiYy5hYnN0cmFjdHByb3BlcnR5colIAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5hYnN0cmFjdHByb3BlcnR5WAEAAAAtdHKKSAAAWA0AAABvcGVyYXRvci5pcG93cotIAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXBvd1gBAAAALXRyjEgAAFgeAAAAcGxpc3RsaWIucmVhZFBsaXN0RnJvbVJlc291cmNlco1IAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIucmVhZFBsaXN0RnJvbVJlc291cmNlWAEAAAAtdHKOSAAAWAwAAABvcGVyYXRvci5kaXZyj0gAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5kaXZYAQAAAC10cpBIAABYDgAAAGN1cnNlcy5yZXNldHR5cpFIAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNldHR5WAEAAAAtdHKSSAAAWAsAAABjbWF0aC5pc25hbnKTSAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmlzbmFuWAEAAAAtdHKUSAAAWAgAAABtYXRoLmV4cHKVSAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5leHBYAQAAAC10cpZIAABYDQAAAHNvY2tldC5zb2NrZXRyl0gAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldFgBAAAALXRymEgAAFgMAAAAYnNkZGIuYnRvcGVucplIAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnRvcGVuWAEAAAAtdHKaSAAAWAsAAAByZS5maW5kaXRlcnKbSAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLmZpbmRpdGVyWAEAAAAtdHKcSAAAWA0AAAB0aW1lLnN0cmZ0aW1lcp1IAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnN0cmZ0aW1lWAEAAAAtdHKeSAAAWAkAAABtYXRoLmZhYnNyn0gAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZmFic1gBAAAALXRyoEgAAFgPAAAAbG9jYWxlLmN1cnJlbmN5cqFIAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5jdXJyZW5jeVgBAAAALXRyokgAAFgQAAAAb3BlcmF0b3IuX19kaXZfX3KjSAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZGl2X19YAQAAAC10cqRIAABYDwAAAGdldHRleHQuZ2V0dGV4dHKlSAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5nZXR0ZXh0WAEAAAAtdHKmSAAAWBQAAABjb2RlY3Muc3RyaWN0X2Vycm9yc3KnSAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3Muc3RyaWN0X2Vycm9yc1gBAAAALXRyqEgAAFgUAAAAY29weV9yZWcuY29uc3RydWN0b3JyqUgAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weV9yZWcuaHRtbCNjb3B5X3JlZy5jb25zdHJ1Y3RvclgBAAAALXRyqkgAAFgTAAAAY29sb3JzeXMucmdiX3RvX2hsc3KrSAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLnJnYl90b19obHNYAQAAAC10cqxIAABYDQAAAGpwZWcuY29tcHJlc3NyrUgAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI2pwZWcuY29tcHJlc3NYAQAAAC10cq5IAABYEgAAAHN5cy5zZXRkbG9wZW5mbGFnc3KvSAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0ZGxvcGVuZmxhZ3NYAQAAAC10crBIAABYDQAAAHBvcGVuMi5wb3BlbjJysUgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLnBvcGVuMlgBAAAALXRyskgAAFgNAAAAcG9wZW4yLnBvcGVuM3KzSAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIucG9wZW4zWAEAAAAtdHK0SAAAWA0AAABwb3BlbjIucG9wZW40crVIAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5wb3BlbjRYAQAAAC10crZIAABYFgAAAGluc3BlY3QuZ2V0aW5uZXJmcmFtZXNyt0gAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0aW5uZXJmcmFtZXNYAQAAAC10crhIAABYEAAAAGJpbmFzY2lpLmIyYV9ocXhyuUgAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5iMmFfaHF4WAEAAAAtdHK6SAAAWBoAAAB0dXJ0bGUud3JpdGVfZG9jc3RyaW5nZGljdHK7SAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud3JpdGVfZG9jc3RyaW5nZGljdFgBAAAALXRyvEgAAFgSAAAAcHByaW50LmlzcmVjdXJzaXZlcr1IAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5pc3JlY3Vyc2l2ZVgBAAAALXRyvkgAAFgWAAAAaXRlcnRvb2xzLmNvbWJpbmF0aW9uc3K/SAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY29tYmluYXRpb25zWAEAAAAtdHLASAAAWBEAAABnZXR0ZXh0LmRuZ2V0dGV4dHLBSAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5kbmdldHRleHRYAQAAAC10csJIAABYDwAAAG9wZXJhdG9yLl9fbGVfX3LDSAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbGVfX1gBAAAALXRyxEgAAFgMAAAAdHVydGxlLmJncGljcsVIAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZ3BpY1gBAAAALXRyxkgAAFgKAAAAZmwucWRldmljZXLHSAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnFkZXZpY2VYAQAAAC10cshIAABYDAAAAHNpZ25hbC5wYXVzZXLJSAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwucGF1c2VYAQAAAC10cspIAABYDQAAAGF1ZGlvb3AuY3Jvc3Nyy0gAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuY3Jvc3NYAQAAAC10csxIAABYHAAAAHN5c2NvbmZpZy5nZXRfcHl0aG9uX3ZlcnNpb25yzUgAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9weXRob25fdmVyc2lvblgBAAAALXRyzkgAAFggAAAAc2h1dGlsLnVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXRyz0gAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLnVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXRYAQAAAC10ctBIAABYEwAAAGNnaS5wYXJzZV9tdWx0aXBhcnRy0UgAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNlX211bHRpcGFydFgBAAAALXRy0kgAAFgMAAAAemxpYi5hZGxlcjMyctNIAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmFkbGVyMzJYAQAAAC10ctRIAABYEAAAAGZsLmdldF9kaXJlY3Rvcnly1UgAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfZGlyZWN0b3J5WAEAAAAtdHLWSAAAWBYAAABjb2Rlb3AuY29tcGlsZV9jb21tYW5kctdIAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVvcC5odG1sI2NvZGVvcC5jb21waWxlX2NvbW1hbmRYAQAAAC10cthIAABYDgAAAGN1cnNlcy53cmFwcGVyctlIAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53cmFwcGVyWAEAAAAtdHLaSAAAWA8AAABvcGVyYXRvci5jb25jYXRy20gAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5jb25jYXRYAQAAAC10ctxIAABYDwAAAG9wZXJhdG9yLl9fbHRfX3LdSAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbHRfX1gBAAAALXRy3kgAAFgLAAAAb3BlcmF0b3IubGVy30gAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5sZVgBAAAALXRy4EgAAFggAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdy4UgAAChqcwUAAGp0BQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdYAQAAAC10cuJIAABYFQAAAHhtbC5kb20ucHVsbGRvbS5wYXJzZXLjSAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20ucGFyc2VYAQAAAC10cuRIAABYAwAAAGJpbnLlSAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNiaW5YAQAAAC10cuZIAABYDAAAAGZtLmVudW1lcmF0ZXLnSAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLmVudW1lcmF0ZVgBAAAALXRy6EgAAFgLAAAAb3BlcmF0b3IubHRy6UgAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5sdFgBAAAALXRy6kgAAFgOAAAAbXN2Y3J0LmxvY2tpbmdy60gAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LmxvY2tpbmdYAQAAAC10cuxIAABYJAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5mcm9tc3RyaW5nbGlzdHLtSAAAKGpzBQAAanQFAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuZnJvbXN0cmluZ2xpc3RYAQAAAC10cu5IAABYFAAAAGNzdi5maWVsZF9zaXplX2xpbWl0cu9IAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5maWVsZF9zaXplX2xpbWl0WAEAAAAtdHLwSAAAWBMAAABpbnNwZWN0LmdldGNvbW1lbnRzcvFIAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGNvbW1lbnRzWAEAAAAtdHLySAAAWB4AAABwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb25y80gAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb25YAQAAAC10cvRIAABYGgAAAGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9ycvVIAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvclgBAAAALXRy9kgAAFgGAAAAcmVkdWNlcvdIAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JlZHVjZVgBAAAALXRy+EgAAFgbAAAAbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5ncvlIAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZ1gBAAAALXRy+kgAAFgLAAAAY29kZWNzLm9wZW5y+0gAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLm9wZW5YAQAAAC10cvxIAABYBwAAAGRsLm9wZW5y/UgAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGwuaHRtbCNkbC5vcGVuWAEAAAAtdHL+SAAAWBEAAABwcHJpbnQuaXNyZWFkYWJsZXL/SAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuaXNyZWFkYWJsZVgBAAAALXRyAEkAAFgHAAAAc2hhLm5ld3IBSQAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEubmV3WAEAAAAtdHICSQAAWAMAAABzdW1yA0kAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc3VtWAEAAAAtdHIESQAAWBIAAABpbnNwZWN0LmdldGFyZ3NwZWNyBUkAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0YXJnc3BlY1gBAAAALXRyBkkAAFgWAAAAYXV0b0dJTC5pbnN0YWxsQXV0b0dJTHIHSQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdXRvZ2lsLmh0bWwjYXV0b0dJTC5pbnN0YWxsQXV0b0dJTFgBAAAALXRyCEkAAFgdAAAAbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnJyCUkAAChqcwUAAGp0BQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnJYAQAAAC10cgpJAABYEwAAAGN1cnNlcy5hc2NpaS5pc2N0cmxyC0kAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzY3RybFgBAAAALXRyDEkAAFgPAAAAbWFjb3N0b29scy5jb3B5cg1JAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zdG9vbHMuaHRtbCNtYWNvc3Rvb2xzLmNvcHlYAQAAAC10cg5JAABYDAAAAG9zLmZwYXRoY29uZnIPSQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZwYXRoY29uZlgBAAAALXRyEEkAAFgIAAAAb3MubWFqb3JyEUkAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5tYWpvclgBAAAALXRyEkkAAFgOAAAAaXRlcnRvb2xzLmltYXByE0kAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmltYXBYAQAAAC10chRJAABYGAAAAHRva2VuaXplLmdlbmVyYXRlX3Rva2Vuc3IVSQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLmdlbmVyYXRlX3Rva2Vuc1gBAAAALXRyFkkAAFgVAAAAc3lzLl9jbGVhcl90eXBlX2NhY2hlchdJAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fY2xlYXJfdHlwZV9jYWNoZVgBAAAALXRyGEkAAFgLAAAAb3MudW5zZXRlbnZyGUkAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy51bnNldGVudlgBAAAALXRyGkkAAFgOAAAAc3lzLmV4Y2VwdGhvb2tyG0kAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y2VwdGhvb2tYAQAAAC10chxJAABYCwAAAGFueWRibS5vcGVuch1JAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FueWRibS5odG1sI2FueWRibS5vcGVuWAEAAAAtdHIeSQAAWBAAAABvcGVyYXRvci5jb3VudE9mch9JAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuY291bnRPZlgBAAAALXRyIEkAAFgSAAAAZGVjaW1hbC5nZXRjb250ZXh0ciFJAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLmdldGNvbnRleHRYAQAAAC10ciJJAABYCgAAAG9zLm1ha2VkZXZyI0kAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5tYWtlZGV2WAEAAAAtdHIkSQAAWA0AAABzeXMuX2dldGZyYW1lciVJAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fZ2V0ZnJhbWVYAQAAAC10ciZJAABYEAAAAF93aW5yZWcuQ2xvc2VLZXlyJ0kAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuQ2xvc2VLZXlYAQAAAC10cihJAABYGgAAAGRpZmZsaWIuSHRtbERpZmYubWFrZV9maWxlcilJAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLkh0bWxEaWZmLm1ha2VfZmlsZVgBAAAALXRyKkkAAFgJAAAAZGJtLmNsb3NlcitJAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RibS5odG1sI2RibS5jbG9zZVgBAAAALXRyLEkAAFgNAAAAc3B3ZC5nZXRzcG5hbXItSQAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcHdkLmh0bWwjc3B3ZC5nZXRzcG5hbVgBAAAALXRyLkkAAFgPAAAAc3NsLlJBTkRfc3RhdHVzci9JAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5SQU5EX3N0YXR1c1gBAAAALXRyMEkAAFgGAAAAYnVmZmVycjFJAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2J1ZmZlclgBAAAALXRyMkkAAFgLAAAAY21hdGguYWNvc2hyM0kAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5hY29zaFgBAAAALXRyNEkAAFgIAAAAb3MuZnN0YXRyNUkAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3RhdFgBAAAALXRyNkkAAFgXAAAAaW1wb3J0bGliLmltcG9ydF9tb2R1bGVyN0kAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmltcG9ydF9tb2R1bGVYAQAAAC10cjhJAABYDAAAAGN1cnNlcy5mbGFzaHI5SQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZmxhc2hYAQAAAC10cjpJAABYEAAAAG9wZXJhdG9yLl9faW9yX19yO0kAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lvcl9fWAEAAAAtdHI8SQAAWBQAAABsb2NhbGUuZm9ybWF0X3N0cmluZ3I9SQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZm9ybWF0X3N0cmluZ1gBAAAALXRyPkkAAFgWAAAAbmlzLmdldF9kZWZhdWx0X2RvbWFpbnI/SQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMuZ2V0X2RlZmF1bHRfZG9tYWluWAEAAAAtdHJASQAAWCMAAABkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZXJBSQAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlWAEAAAAtdHJCSQAAWBYAAABmbC5zZXRfZXZlbnRfY2FsbF9iYWNrckNJAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2V0X2V2ZW50X2NhbGxfYmFja1gBAAAALXRyREkAAFgTAAAAeG1sLnNheC5tYWtlX3BhcnNlcnJFSQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5tYWtlX3BhcnNlclgBAAAALXRyRkkAAFgXAAAAdGhyZWFkLnN0YXJ0X25ld190aHJlYWRyR0kAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLnN0YXJ0X25ld190aHJlYWRYAQAAAC10ckhJAABYDQAAAGN1cnNlcy5zZXRzeXhySUkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnNldHN5eFgBAAAALXRySkkAAFgNAAAAYmlzZWN0LmJpc2VjdHJLSQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuYmlzZWN0WAEAAAAtdHJMSQAAWBAAAABtc2lsaWIuRkNJQ3JlYXRlck1JAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5GQ0lDcmVhdGVYAQAAAC10ck5JAABYDAAAAG9zLmZ0cnVuY2F0ZXJPSQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZ0cnVuY2F0ZVgBAAAALXRyUEkAAFgXAAAAeG1sLnNheC5zYXh1dGlscy5lc2NhcGVyUUkAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuZXNjYXBlWAEAAAAtdHJSSQAAWA8AAABvcy5wYXRoLmdldHNpemVyU0kAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0c2l6ZVgBAAAALXRyVEkAAFgQAAAAcmZjODIyLm1rdGltZV90enJVSQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIubWt0aW1lX3R6WAEAAAAtdHJWSQAAWBUAAABFYXN5RGlhbG9ncy5Bc2tGb2xkZXJyV0kAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Bc2tGb2xkZXJYAQAAAC10clhJAABYGAAAAGVtYWlsLnV0aWxzLmdldGFkZHJlc3Nlc3JZSQAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlsLmh0bWwjZW1haWwudXRpbHMuZ2V0YWRkcmVzc2VzWAEAAAAtdHJaSQAAWAgAAABtYXRoLmVyZnJbSQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5lcmZYAQAAAC10clxJAABYEgAAAHBrZ3V0aWwuZ2V0X2xvYWRlcnJdSQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5nZXRfbG9hZGVyWAEAAAAtdHJeSQAAWA0AAABiaXNlY3QuaW5zb3J0cl9JAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5pbnNvcnRYAQAAAC10cmBJAABYDAAAAGdldHRleHQuZmluZHJhSQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5maW5kWAEAAAAtdHJiSQAAWBkAAABsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlncmNJAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy5jb25maWcuZGljdENvbmZpZ1gBAAAALXRyZEkAAFgPAAAAb3BlcmF0b3IuaXNfbm90cmVJAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNfbm90WAEAAAAtdHJmSQAAWBEAAABpbnNwZWN0LmdldHNvdXJjZXJnSQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRzb3VyY2VYAQAAAC10cmhJAABYDwAAAHdlYmJyb3dzZXIub3BlbnJpSQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuWAEAAAAtdHJqSQAAWAcAAABnbC5waWNrcmtJAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wucGlja1gBAAAALXRybEkAAFgaAAAAdHVydGxlLnNldHdvcmxkY29vcmRpbmF0ZXNybUkAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHdvcmxkY29vcmRpbmF0ZXNYAQAAAC10cm5JAABYEwAAAHBsaXN0bGliLndyaXRlUGxpc3Ryb0kAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi53cml0ZVBsaXN0WAEAAAAtdHJwSQAAWA8AAABzaHV0aWwuY29weW1vZGVycUkAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHltb2RlWAEAAAAtdHJySQAAWBUAAAB0dXJ0bGUucmVnaXN0ZXJfc2hhcGVyc0kAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJlZ2lzdGVyX3NoYXBlWAEAAAAtdHJ0SQAAWBIAAABjdHlwZXMuRm9ybWF0RXJyb3JydUkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkZvcm1hdEVycm9yWAEAAAAtdHJ2SQAAWBoAAAB4bWwuc2F4LnNheHV0aWxzLnF1b3RlYXR0cnJ3SQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5xdW90ZWF0dHJYAQAAAC10cnhJAABYDQAAAHNzbC5lbnVtX2NybHNyeUkAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmVudW1fY3Jsc1gBAAAALXRyekkAAFgMAAAAdHVydGxlLm9ua2V5cntJAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmtleVgBAAAALXRyfEkAAFgJAAAAb3MubGNobW9kcn1JAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubGNobW9kWAEAAAAtdHJ+SQAAWA0AAAB0aW1laXQucmVwZWF0cn9JAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5yZXBlYXRYAQAAAC10coBJAABYDQAAAHNpZ25hbC5zaWduYWxygUkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnNpZ25hbFgBAAAALXRygkkAAFgSAAAAY1N0cmluZ0lPLlN0cmluZ0lPcoNJAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjY1N0cmluZ0lPLlN0cmluZ0lPWAEAAAAtdHKESQAAWBMAAABvcGVyYXRvci5hdHRyZ2V0dGVycoVJAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuYXR0cmdldHRlclgBAAAALXRyhkkAAFgJAAAAbWF0aC5zcXJ0codJAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnNxcnRYAQAAAC10cohJAABYGQAAAGZpbGVpbnB1dC5ob29rX2NvbXByZXNzZWRyiUkAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0Lmhvb2tfY29tcHJlc3NlZFgBAAAALXRyikkAAFgJAAAAbWF0aC50YW5ocotJAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRhbmhYAQAAAC10coxJAABYEAAAAHN5cy5jYWxsX3RyYWNpbmdyjUkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmNhbGxfdHJhY2luZ1gBAAAALXRyjkkAAFgFAAAAdHVwbGVyj0kAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjdHVwbGVYAQAAAC10cpBJAABYFAAAAGZsLnNldF9ncmFwaGljc19tb2RlcpFJAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2V0X2dyYXBoaWNzX21vZGVYAQAAAC10cpJJAABYEQAAAGRpcmVjdG9yeV9jcmVhdGVkcpNJAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZGlyZWN0b3J5X2NyZWF0ZWRYAQAAAC10cpRJAABYDwAAAGxvY2FsZS5kZ2V0dGV4dHKVSQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZGdldHRleHRYAQAAAC10cpZJAABYEAAAAG9wZXJhdG9yLmdldGl0ZW1yl0kAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5nZXRpdGVtWAEAAAAtdHKYSQAAWAsAAABvcy5zcGF3bmxwZXKZSQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdubHBlWAEAAAAtdHKaSQAAWAkAAABtYXRoLmNvc2hym0kAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguY29zaFgBAAAALXRynEkAAFgNAAAAb3BlcmF0b3IuaWRpdnKdSQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlkaXZYAQAAAC10cp5JAABYEQAAAGNvZGVjcy5nZXRkZWNvZGVycp9JAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5nZXRkZWNvZGVyWAEAAAAtdHKgSQAAWA8AAABmbC5nZXRfZmlsZW5hbWVyoUkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfZmlsZW5hbWVYAQAAAC10cqJJAABYGAAAAGNvbW1hbmRzLmdldHN0YXR1c291dHB1dHKjSQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21tYW5kcy5odG1sI2NvbW1hbmRzLmdldHN0YXR1c291dHB1dFgBAAAALXRypEkAAFgRAAAAaW1hZ2VvcC5ncmV5Mm1vbm9ypUkAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZ3JleTJtb25vWAEAAAAtdHKmSQAAWA8AAABhdWRpb29wLmxpbjJsaW5yp0kAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubGluMmxpblgBAAAALXRyqEkAAFgJAAAAb3MuZ2V0Z2lkcqlJAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Z2lkWAEAAAAtdHKqSQAAWBIAAAB0dXJ0bGUuZXhpdG9uY2xpY2tyq0kAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmV4aXRvbmNsaWNrWAEAAAAtdHKsSQAAWBEAAABpYy5zZXR0eXBlY3JlYXRvcnKtSQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLnNldHR5cGVjcmVhdG9yWAEAAAAtdHKuSQAAWBIAAABzeXNjb25maWcuZ2V0X3BhdGhyr0kAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9wYXRoWAEAAAAtdHKwSQAAWBAAAABzb2NrZXQuaW5ldF9hdG9ucrFJAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5pbmV0X2F0b25YAQAAAC10crJJAABYFAAAAG9wZXJhdG9yLl9fc2V0aXRlbV9fcrNJAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19zZXRpdGVtX19YAQAAAC10crRJAABYDAAAAG9zLmdldHJlc2dpZHK1SQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHJlc2dpZFgBAAAALXRytkkAAFgIAAAAb3Mucm1kaXJyt0kAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ybWRpclgBAAAALXRyuEkAAFgXAAAAdGFibmFubnkucHJvY2Vzc190b2tlbnNyuUkAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFibmFubnkuaHRtbCN0YWJuYW5ueS5wcm9jZXNzX3Rva2Vuc1gBAAAALXRyukkAAFgaAAAAc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGVyu0kAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGVYAQAAAC10crxJAABYCgAAAGNtYXRoLnNpbmhyvUkAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5zaW5oWAEAAAAtdHK+SQAAWBAAAAByZmM4MjIucGFyc2VkYXRlcr9JAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5wYXJzZWRhdGVYAQAAAC10csBJAABYEQAAAGNvZGVjcy5nZXRlbmNvZGVycsFJAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5nZXRlbmNvZGVyWAEAAAAtdHLCSQAAWA4AAABzdHJpbmcucmVwbGFjZXLDSQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucmVwbGFjZVgBAAAALXRyxEkAAFgTAAAAdXJsbGliLnBhdGhuYW1lMnVybHLFSQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIucGF0aG5hbWUydXJsWAEAAAAtdHLGSQAAWBwAAABjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVycsdJAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXJYAQAAAC10cshJAABYFgAAAGVuY29kaW5ncy5pZG5hLlRvQVNDSUlyyUkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjZW5jb2RpbmdzLmlkbmEuVG9BU0NJSVgBAAAALXRyykkAAFgbAAAAcmVhZGxpbmUuc2V0X3ByZV9pbnB1dF9ob29rcstJAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X3ByZV9pbnB1dF9ob29rWAEAAAAtdHLMSQAAWBMAAABjdXJzZXMuZGVsYXlfb3V0cHV0cs1JAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5kZWxheV9vdXRwdXRYAQAAAC10cs5JAABYFAAAAGN1cnNlcy5hc2NpaS5pc3ByaW50cs9JAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3ByaW50WAEAAAAtdHLQSQAAWAkAAABvcy51bmxpbmty0UkAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy51bmxpbmtYAQAAAC10ctJJAABYEAAAAHN0cmluZy5tYWtldHJhbnNy00kAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLm1ha2V0cmFuc1gBAAAALXRy1EkAAFgLAAAAdHVydGxlLnNldGhy1UkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldGhYAQAAAC10ctZJAABYCgAAAG9zLnNldHBnaWRy10kAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRwZ2lkWAEAAAAtdHLYSQAAWA4AAABwbGF0Zm9ybS5wb3BlbnLZSQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnBvcGVuWAEAAAAtdHLaSQAAWB0AAABkaXN0dXRpbHMuZmlsZV91dGlsLmNvcHlfZmlsZXLbSQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5maWxlX3V0aWwuY29weV9maWxlWAEAAAAtdHLcSQAAWAwAAABvcy5wYXRoLndhbGty3UkAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgud2Fsa1gBAAAALXRy3kkAAFgLAAAAdHVydGxlLnNldHhy30kAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHhYAQAAAC10cuBJAABYCwAAAHR1cnRsZS5zZXR5cuFJAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR5WAEAAAAtdHLiSQAAWBAAAAB0dXJ0bGUub25yZWxlYXNlcuNJAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbnJlbGVhc2VYAQAAAC10cuRJAABYDgAAAHJhbmRvbS5zaHVmZmxlcuVJAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5zaHVmZmxlWAEAAAAtdHLmSQAAWAkAAABmbC5xcmVzZXRy50kAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5xcmVzZXRYAQAAAC10cuhJAABYGgAAAHNxbGl0ZTMuY29tcGxldGVfc3RhdGVtZW50culJAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLmNvbXBsZXRlX3N0YXRlbWVudFgBAAAALXRy6kkAAFgcAAAAcmVhZGxpbmUuZ2V0X2NvbXBsZXRpb25fdHlwZXLrSQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0aW9uX3R5cGVYAQAAAC10cuxJAABYHgAAAGRvY3Rlc3QucnVuX2RvY3N0cmluZ19leGFtcGxlc3LtSQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5ydW5fZG9jc3RyaW5nX2V4YW1wbGVzWAEAAAAtdHLuSQAAWBUAAABsb2dnaW5nLm1ha2VMb2dSZWNvcmRy70kAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcubWFrZUxvZ1JlY29yZFgBAAAALXRy8EkAAFgLAAAAZGJoYXNoLm9wZW5y8UkAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjZGJoYXNoLm9wZW5YAQAAAC10cvJJAABYCgAAAG9zLmdldHBnaWRy80kAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRwZ2lkWAEAAAAtdHL0SQAAWBUAAABpbnNwZWN0LmZvcm1hdGFyZ3NwZWNy9UkAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZm9ybWF0YXJnc3BlY1gBAAAALXRy9kkAAFgRAAAAdXJsbGliLnF1b3RlX3BsdXNy90kAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnF1b3RlX3BsdXNYAQAAAC10cvhJAABYDgAAAGN1cnNlcy5oYXNfa2V5cvlJAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYXNfa2V5WAEAAAAtdHL6SQAAWBgAAABkaXN0dXRpbHMuY29yZS5ydW5fc2V0dXBy+0kAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29yZS5ydW5fc2V0dXBYAQAAAC10cvxJAABYEwAAAHBrZ3V0aWwuZXh0ZW5kX3BhdGhy/UkAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuZXh0ZW5kX3BhdGhYAQAAAC10cv5JAABYCwAAAHRocmVhZC5leGl0cv9JAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5leGl0WAEAAAAtdHIASgAAWAwAAABncnAuZ2V0Z3JnaWRyAUoAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3JwLmh0bWwjZ3JwLmdldGdyZ2lkWAEAAAAtdHICSgAAWAkAAABtYXRoLmZzdW1yA0oAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZnN1bVgBAAAALXRyBEoAAFgNAAAAY3Vyc2VzLmVuZHdpbnIFSgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZW5kd2luWAEAAAAtdHIGSgAAWAkAAABvcy5mY2htb2RyB0oAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mY2htb2RYAQAAAC10cghKAABYCwAAAG9zLnJlYWRsaW5rcglKAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucmVhZGxpbmtYAQAAAC10cgpKAABYEgAAAGluc3BlY3QuaXNhYnN0cmFjdHILSgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2Fic3RyYWN0WAEAAAAtdHIMSgAAWBsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUucGFyc2VyDUoAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnBhcnNlWAEAAAAtdHIOSgAAWBAAAABiaW5hc2NpaS5hMmJfaGV4cg9KAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYTJiX2hleFgBAAAALXRyEEoAAFgNAAAAcXVvcHJpLmVuY29kZXIRSgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdW9wcmkuaHRtbCNxdW9wcmkuZW5jb2RlWAEAAAAtdHISSgAAWAwAAABvcy50Y2dldHBncnByE0oAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50Y2dldHBncnBYAQAAAC10chRKAABYFAAAAHJlYWRsaW5lLmluc2VydF90ZXh0chVKAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuaW5zZXJ0X3RleHRYAQAAAC10chZKAABYBQAAAHJvdW5kchdKAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JvdW5kWAEAAAAtdHIYSgAAWBYAAABwbGF0Zm9ybS5weXRob25fYnJhbmNochlKAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX2JyYW5jaFgBAAAALXRyGkoAAFgMAAAAaW1nZmlsZS5yZWFkchtKAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltZ2ZpbGUuaHRtbCNpbWdmaWxlLnJlYWRYAQAAAC10chxKAABYDQAAAHNlbGVjdC5rZXZlbnRyHUoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudFgBAAAALXRyHkoAAFgVAAAAc3lzLmdldHJlY3Vyc2lvbmxpbWl0ch9KAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRyZWN1cnNpb25saW1pdFgBAAAALXRyIEoAAFgJAAAAY29weS5jb3B5ciFKAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvcHkuaHRtbCNjb3B5LmNvcHlYAQAAAC10ciJKAABYFAAAAGN1cnNlcy5hc2NpaS5pc2xvd2VyciNKAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2xvd2VyWAEAAAAtdHIkSgAAWBUAAABtdWx0aXByb2Nlc3NpbmcuQXJyYXlyJUoAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkFycmF5WAEAAAAtdHImSgAAWAoAAABvcy5zcGF3bnZlcidKAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3Bhd252ZVgBAAAALXRyKEoAAFgWAAAAdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZXIpSgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLlRlbXBvcmFyeUZpbGVYAQAAAC10cipKAABYEAAAAGJpbmFzY2lpLmhleGxpZnlyK0oAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5oZXhsaWZ5WAEAAAAtdHIsSgAAWAoAAABvcy5zcGF3bnZwci1KAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3Bhd252cFgBAAAALXRyLkoAAFgLAAAAZmNudGwuZmxvY2tyL0oAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5mbG9ja1gBAAAALXRyMEoAAFgNAAAAaXRlcnRvb2xzLnRlZXIxSgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMudGVlWAEAAAAtdHIySgAAWBYAAABvcGVyYXRvci5fX2lmbG9vcmRpdl9fcjNKAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pZmxvb3JkaXZfX1gBAAAALXRyNEoAAFgQAAAAZmlsZWNtcC5jbXBmaWxlc3I1SgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5jbXBmaWxlc1gBAAAALXRyNkoAAFgNAAAAY2QubXNmdG9mcmFtZXI3SgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLm1zZnRvZnJhbWVYAQAAAC10cjhKAABYDQAAAG1hcnNoYWwubG9hZHNyOUoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwubG9hZHNYAQAAAC10cjpKAABYDwAAAGxvZ2dpbmcud2FybmluZ3I7SgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy53YXJuaW5nWAEAAAAtdHI8SgAAWBQAAABjdXJzZXMuYXNjaWkuaXNibGFua3I9SgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNibGFua1gBAAAALXRyPkoAAFgRAAAAbG9jYWxlLnRleHRkb21haW5yP0oAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLnRleHRkb21haW5YAQAAAC10ckBKAABYDQAAAG9wZXJhdG9yLmltdWxyQUoAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbXVsWAEAAAAtdHJCSgAAWBkAAABkaXN0dXRpbHMuZGlyX3V0aWwubWtwYXRockNKAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmRpcl91dGlsLm1rcGF0aFgBAAAALXRyREoAAFgPAAAAY3Vyc2VzLmN1cnNfc2V0ckVKAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jdXJzX3NldFgBAAAALXRyRkoAAFgIAAAAYXN0LndhbGtyR0oAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LndhbGtYAQAAAC10ckhKAABYBwAAAGNkLm9wZW5ySUoAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5vcGVuWAEAAAAtdHJKSgAAWBMAAABmbm1hdGNoLmZubWF0Y2hjYXNlcktKAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZubWF0Y2hjYXNlWAEAAAAtdHJMSgAAWA0AAABzaHV0aWwucm10cmVlck1KAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5ybXRyZWVYAQAAAC10ck5KAABYEAAAAGl0ZXJ0b29scy5pc2xpY2VyT0oAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmlzbGljZVgBAAAALXRyUEoAAFgQAAAAb3BlcmF0b3IuX19wb3NfX3JRSgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcG9zX19YAQAAAC10clJKAABYGgAAAHdzZ2lyZWYudmFsaWRhdGUudmFsaWRhdG9yclNKAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnZhbGlkYXRlLnZhbGlkYXRvclgBAAAALXRyVEoAAFgVAAAAZnBlY3RsLnR1cm5vZmZfc2lnZnBlclVKAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC50dXJub2ZmX3NpZ2ZwZVgBAAAALXRyVkoAAFgWAAAAZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbnJXSgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5iaW5kdGV4dGRvbWFpblgBAAAALXRyWEoAAFgUAAAAdHJhY2ViYWNrLnByaW50X2xhc3RyWUoAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X2xhc3RYAQAAAC10clpKAABYEQAAAGluc3BlY3QuaXNyb3V0aW5lcltKAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0Lmlzcm91dGluZVgBAAAALXRyXEoAAFgNAAAAc3RyaW5nLmxzdHJpcHJdSgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcubHN0cmlwWAEAAAAtdHJeSgAAWBAAAABjdHlwZXMuc3RyaW5nX2F0cl9KAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5zdHJpbmdfYXRYAQAAAC10cmBKAABYDwAAAHRlbXBmaWxlLm1rdGVtcHJhSgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLm1rdGVtcFgBAAAALXRyYkoAAFgTAAAAY3Vyc2VzLmFzY2lpLnVuY3RybHJjSgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkudW5jdHJsWAEAAAAtdHJkSgAAWAwAAABhbC5nZXRwYXJhbXNyZUoAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNhbC5nZXRwYXJhbXNYAQAAAC10cmZKAABYDgAAAHR1cnRsZS50b3dhcmRzcmdKAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50b3dhcmRzWAEAAAAtdHJoSgAAWBYAAABzaHV0aWwuaWdub3JlX3BhdHRlcm5zcmlKAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5pZ25vcmVfcGF0dGVybnNYAQAAAC10cmpKAABYBgAAAHJlbG9hZHJrSgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyZWxvYWRYAQAAAC10cmxKAABYGAAAAHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnJtSgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJYAQAAAC10cm5KAABYEQAAAGl0ZXJ0b29scy5pZmlsdGVycm9KAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5pZmlsdGVyWAEAAAAtdHJwSgAAWBoAAABtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcnJxSgAAKGpzBQAAanQFAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlclgBAAAALXRyckoAAFgSAAAAY29tcGlsZXIucGFyc2VGaWxlcnNKAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXIucGFyc2VGaWxlWAEAAAAtdHJ0SgAAWA8AAABhdWRpb29wLmZpbmRtYXhydUoAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZmluZG1heFgBAAAALXRydkoAAFgRAAAARnJhbWVXb3JrLk1lbnVCYXJyd0oAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLk1lbnVCYXJYAQAAAC10cnhKAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfZDJyeUoAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfZDJYAQAAAC10cnpKAABYDgAAAHJhbmRvbS51bmlmb3JtcntKAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS51bmlmb3JtWAEAAAAtdHJ8SgAAWBYAAABzdHJpbmdwcmVwLmluX3RhYmxlX2Qxcn1KAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2QxWAEAAAAtdHJ+SgAAWA8AAABzdHJpbmcuY2Fwd29yZHNyf0oAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmNhcHdvcmRzWAEAAAAtdHKASgAAWAwAAABpbWdmaWxlLnR0b2JygUoAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUudHRvYlgBAAAALXRygkoAAFgKAAAAb3MudHR5bmFtZXKDSgAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnR0eW5hbWVYAQAAAC10coRKAABYCQAAAG9zLmdldGVudnKFSgAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldGVudlgBAAAALXRyhkoAAFg0AAAAbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5tdWx0aXByb2Nlc3NpbmcuTWFuYWdlcnKHSgAAKGpzBQAAanQFAABYawAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLm11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyWAEAAAAtdHKISgAAWBAAAABmaW5kZXJ0b29scy5tb3ZlcolKAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zdG9vbHMuaHRtbCNmaW5kZXJ0b29scy5tb3ZlWAEAAAAtdHKKSgAAWA0AAABsb2dnaW5nLmVycm9ycotKAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmVycm9yWAEAAAAtdHKMSgAAWA4AAABsb2NhbGUuc3RyeGZybXKNSgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuc3RyeGZybVgBAAAALXRyjkoAAFgRAAAAaW1wLmxvYWRfY29tcGlsZWRyj0oAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmxvYWRfY29tcGlsZWRYAQAAAC10cpBKAABYBQAAAHJhbmdlcpFKAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlWAEAAAAtdHKSSgAAWAwAAAB0dXJ0bGUud2lkdGhyk0oAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLndpZHRoWAEAAAAtdHKUSgAAWAoAAABnYy5jb2xsZWN0cpVKAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuY29sbGVjdFgBAAAALXRylkoAAFgXAAAAY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3Jyl0oAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3JYAQAAAC10cphKAABYDAAAAHN0cmluZy5yanVzdHKZSgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucmp1c3RYAQAAAC10cppKAABYEAAAAHNvY2tldC5pbmV0X3B0b25ym0oAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfcHRvblgBAAAALXRynEoAAFgKAAAAdHVydGxlLnBvc3KdSgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucG9zWAEAAAAtdHKeSgAAWBQAAABpbnNwZWN0LmN1cnJlbnRmcmFtZXKfSgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5jdXJyZW50ZnJhbWVYAQAAAC10cqBKAABYCgAAAGpzb24uZHVtcHNyoUoAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uZHVtcHNYAQAAAC10cqJKAABYHQAAAGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0cqNKAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLmh0bWwjZW1haWwuZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXRYAQAAAC10cqRKAABYDQAAAGRvY3Rlc3QuZGVidWdypUoAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuZGVidWdYAQAAAC10cqZKAABYEwAAAHBrZ3V0aWwuZmluZF9sb2FkZXJyp0oAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuZmluZF9sb2FkZXJYAQAAAC10cqhKAABYEQAAAG1zaWxpYi5hZGRfdGFibGVzcqlKAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5hZGRfdGFibGVzWAEAAAAtdHKqSgAAWAsAAABtYXRoLmxnYW1tYXKrSgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sZ2FtbWFYAQAAAC10cqxKAABYDAAAAGN1cnNlcy5uYXBtc3KtSgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubmFwbXNYAQAAAC10cq5KAABYEwAAAHF1b3ByaS5kZWNvZGVzdHJpbmdyr0oAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmRlY29kZXN0cmluZ1gBAAAALXRysEoAAFgaAAAAY3Vyc2VzLnBhbmVsLnVwZGF0ZV9wYW5lbHNysUoAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLnVwZGF0ZV9wYW5lbHNYAQAAAC10crJKAABYFQAAAHJhbmRvbS5sb2dub3JtdmFyaWF0ZXKzSgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ubG9nbm9ybXZhcmlhdGVYAQAAAC10crRKAABYEQAAAHN0cmluZy5qb2luZmllbGRzcrVKAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5qb2luZmllbGRzWAEAAAAtdHK2SgAAWAYAAABmbC50aWVyt0oAAChqcwUAAGp0BQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC50aWVYAQAAAC10crhKAABYGwAAAGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbnK5SgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uWAEAAAAtdHK6SgAAWAcAAABvcy5waXBlcrtKAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucGlwZVgBAAAALXRyvEoAAFgMAAAAb3MuZmRhdGFzeW5jcr1KAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZmRhdGFzeW5jWAEAAAAtdHK+SgAAWBEAAABwbGF0Zm9ybS5wbGF0Zm9ybXK/SgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnBsYXRmb3JtWAEAAAAtdHLASgAAWB8AAABtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVucsFKAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW5YAQAAAC10csJKAABYCgAAAG9zLmxpc3RkaXJyw0oAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5saXN0ZGlyWAEAAAAtdHLESgAAWCUAAABtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLlJhd1ZhbHVlcsVKAAAoanMFAABqdAUAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuUmF3VmFsdWVYAQAAAC10csZKAABYFAAAAE1hY09TLkdldEVycm9yU3RyaW5ncsdKAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MuR2V0RXJyb3JTdHJpbmdYAQAAAC10cshKAABYCwAAAHR1cnRsZS5ob21lcslKAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5ob21lWAEAAAAtdHLKSgAAWBkAAABhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zcstKAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5maXhfbWlzc2luZ19sb2NhdGlvbnNYAQAAAC10csxKAABYCwAAAGNtYXRoLmlzaW5mcs1KAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguaXNpbmZYAQAAAC10cs5KAABYEAAAAHNpZ25hbC5nZXRzaWduYWxyz0oAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLmdldHNpZ25hbFgBAAAALXRy0EoAAFgVAAAAY3R5cGVzLmdldF9sYXN0X2Vycm9yctFKAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5nZXRfbGFzdF9lcnJvclgBAAAALXRy0koAAFgJAAAAb3MudG1wbmFtctNKAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudG1wbmFtWAEAAAAtdHLUSgAAWAsAAABnbC5wd2xjdXJ2ZXLVSgAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLnB3bGN1cnZlWAEAAAAtdHLWSgAAWBAAAABvcGVyYXRvci5fX25vdF9fctdKAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19ub3RfX1gBAAAALXRy2EoAAFgYAAAAY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5ctlKAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5WAEAAAAtdHLaSgAAWBsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MSURy20oAAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTElEWAEAAAAtdHLcSgAAWBMAAABfd2lucmVnLkNyZWF0ZUtleUV4ct1KAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkNyZWF0ZUtleUV4WAEAAAAtdHLeSgAAWAkAAABtYXRoLmVyZmNy30oAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZXJmY1gBAAAALXRy4EoAAFgWAAAAd2FybmluZ3MucmVzZXR3YXJuaW5nc3LhSgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLnJlc2V0d2FybmluZ3NYAQAAAC10cuJKAABYCwAAAFRraW50ZXIuVGNscuNKAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbCNUa2ludGVyLlRjbFgBAAAALXRy5EoAAFgSAAAAaW5zcGVjdC5nZXRtZW1iZXJzcuVKAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1lbWJlcnNYAQAAAC10cuZKAABYFwAAAHJlYWRsaW5lLnJlYWRfaW5pdF9maWxlcudKAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVhZF9pbml0X2ZpbGVYAQAAAC10cuhKAABYDgAAAG1zdmNydC5oZWFwbWluculKAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5oZWFwbWluWAEAAAAtdHLqSgAAWBIAAABjdXJzZXMuYXNjaWkuYXNjaWly60oAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmFzY2lpWAEAAAAtdHLsSgAAWBQAAABkaXN0dXRpbHMuY29yZS5zZXR1cHLtSgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLnNldHVwWAEAAAAtdHLuSgAAWA4AAABjdXJzZXMudXNlX2VudnLvSgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudXNlX2VudlgBAAAALXRy8EoAAFgXAAAARWFzeURpYWxvZ3MuQXNrUGFzc3dvcmRy8UoAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Bc2tQYXNzd29yZFgBAAAALXRy8koAAFgTAAAAdW5pY29kZWRhdGEubnVtZXJpY3LzSgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm51bWVyaWNYAQAAAC10cvRKAABYEwAAAGl0ZXJ0b29scy5kcm9wd2hpbGVy9UoAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmRyb3B3aGlsZVgBAAAALXRy9koAAFgNAAAAYmFzZTY0LmVuY29kZXL3SgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuZW5jb2RlWAEAAAAtdHL4SgAAWAwAAABncnAuZ2V0Z3JuYW1y+UoAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3JwLmh0bWwjZ3JwLmdldGdybmFtWAEAAAAtdHL6SgAAWBYAAAB0cmFjZWJhY2suZm9ybWF0X3N0YWNrcvtKAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfc3RhY2tYAQAAAC10cvxKAABYBgAAAHVuaWNocnL9SgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN1bmljaHJYAQAAAC10cv5KAABYFQAAAHVuaXR0ZXN0LnJlbW92ZVJlc3VsdHL/SgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlbW92ZVJlc3VsdFgBAAAALXRyAEsAAFgWAAAAcmVhZGxpbmUuY2xlYXJfaGlzdG9yeXIBSwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmNsZWFyX2hpc3RvcnlYAQAAAC10cgJLAABYEgAAAGxvY2FsZS5ubF9sYW5naW5mb3IDSwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUubmxfbGFuZ2luZm9YAQAAAC10cgRLAABYDwAAAHhtbHJwY2xpYi5sb2Fkc3IFSwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIubG9hZHNYAQAAAC10cgZLAABYDQAAAHN0cmluZy5yc3RyaXByB0sAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnJzdHJpcFgBAAAALXRyCEsAAFgNAAAAY29kZWNzLmVuY29kZXIJSwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZW5jb2RlWAEAAAAtdHIKSwAAWBwAAAB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0cgtLAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0WAEAAAAtdHIMSwAAWBIAAABpbnNwZWN0LmlzZnVuY3Rpb25yDUsAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNmdW5jdGlvblgBAAAALXRyDksAAFgDAAAAaGV4cg9LAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hleFgBAAAALXRyEEsAAFgTAAAAdGVzdC5zdXBwb3J0LmZvcmdldHIRSwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmZvcmdldFgBAAAALXRyEksAAFgWAAAAY29sbGVjdGlvbnMubmFtZWR0dXBsZXITSwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLm5hbWVkdHVwbGVYAQAAAC10chRLAABYDQAAAGN0eXBlcy5zaXplb2ZyFUsAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnNpemVvZlgBAAAALXRyFksAAFgJAAAAb3MucG9wZW4ychdLAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucG9wZW4yWAEAAAAtdHIYSwAAWAkAAABvcy5wb3BlbjNyGUsAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3BlbjNYAQAAAC10chpLAABYCQAAAGdkYm0uc3luY3IbSwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5zeW5jWAEAAAAtdHIcSwAAWAkAAABvcy5wb3BlbjRyHUsAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3BlbjRYAQAAAC10ch5LAABYEQAAAG9wZXJhdG9yLmRlbHNsaWNlch9LAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZGVsc2xpY2VYAQAAAC10ciBLAABYFQAAAHN5cy5nZXR3aW5kb3dzdmVyc2lvbnIhSwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0d2luZG93c3ZlcnNpb25YAQAAAC10ciJLAABYDwAAAGNhbGVuZGFyLnRpbWVnbXIjSwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLnRpbWVnbVgBAAAALXRyJEsAAFgQAAAAZmlsZWlucHV0LmxpbmVub3IlSwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQubGluZW5vWAEAAAAtdHImSwAAWA0AAAByYW5kb20ud2hzZWVkcidLAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS53aHNlZWRYAQAAAC10cihLAABYFwAAAGluc3BlY3QuZm9ybWF0YXJndmFsdWVzcilLAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlc1gBAAAALXRyKksAAFgSAAAAdHJhY2ViYWNrLnByaW50X3RicitLAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5wcmludF90YlgBAAAALXRyLEsAAFgVAAAAdW5pY29kZWRhdGEubm9ybWFsaXplci1LAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEubm9ybWFsaXplWAEAAAAtdHIuSwAAWBwAAAB3c2dpcmVmLnV0aWwuYXBwbGljYXRpb25fdXJpci9LAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwuYXBwbGljYXRpb25fdXJpWAEAAAAtdHIwSwAAWAsAAABvcy5zZXRyZXVpZHIxSwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNldHJldWlkWAEAAAAtdHIySwAAWA0AAABvcGVyYXRvci5pc3VicjNLAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXN1YlgBAAAALXRyNEsAAFgiAAAAZW1haWwudXRpbHMuY29sbGFwc2VfcmZjMjIzMV92YWx1ZXI1SwAAKGpzBQAAanQFAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlsLmh0bWwjZW1haWwudXRpbHMuY29sbGFwc2VfcmZjMjIzMV92YWx1ZVgBAAAALXRyNksAAFgPAAAAY2FsZW5kYXIuaXNsZWFwcjdLAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuaXNsZWFwWAEAAAAtdHI4SwAAWA4AAABpbXAuaXNfYnVpbHRpbnI5SwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuaXNfYnVpbHRpblgBAAAALXRyOksAAFgNAAAAd2Vha3JlZi5wcm94eXI7SwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5wcm94eVgBAAAALXRyPEsAAFgIAAAAb3MubWtub2RyPUsAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ta25vZFgBAAAALXRyPksAAFglAAAAbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5SYXdBcnJheXI/SwAAKGpzBQAAanQFAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLlJhd0FycmF5WAEAAAAtdHJASwAAWBgAAAB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmVyQUsAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5leHBlY3RlZEZhaWx1cmVYAQAAAC10ckJLAABYDAAAAHN0cmluZy5yZmluZHJDSwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucmZpbmRYAQAAAC10ckRLAABYCgAAAG9zLmN0ZXJtaWRyRUsAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jdGVybWlkWAEAAAAtdHJGSwAAWBAAAABjdHlwZXMuYWRkcmVzc29mckdLAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5hZGRyZXNzb2ZYAQAAAC10ckhLAABYBAAAAHJlcHJySUsAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmVwclgBAAAALXRySksAAFgRAAAAY2FsZW5kYXIuY2FsZW5kYXJyS0sAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5jYWxlbmRhclgBAAAALXRyTEsAAFgUAAAAQ29sb3JQaWNrZXIuR2V0Q29sb3JyTUsAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JwaWNrZXIuaHRtbCNDb2xvclBpY2tlci5HZXRDb2xvclgBAAAALXRyTksAAFgPAAAAdGV4dHdyYXAuZGVkZW50ck9LAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuZGVkZW50WAEAAAAtdHJQSwAAWB0AAAByZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbXJRSwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnJlcGxhY2VfaGlzdG9yeV9pdGVtWAEAAAAtdHJSSwAAWBEAAABvcGVyYXRvci5nZXRzbGljZXJTSwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmdldHNsaWNlWAEAAAAtdHJUSwAAWAgAAABvcy51bmFtZXJVSwAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnVuYW1lWAEAAAAtdHJWSwAAWB0AAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuQ29tbWVudHJXSwAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuQ29tbWVudFgBAAAALXRyWEsAAFgSAAAAZGlzLmZpbmRsaW5lc3RhcnRzcllLAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5maW5kbGluZXN0YXJ0c1gBAAAALXRyWksAAFgMAAAAYWwubmV3Y29uZmlncltLAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwubmV3Y29uZmlnWAEAAAAtdHJcSwAAWAsAAABhdWRpb29wLm1heHJdSwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5tYXhYAQAAAC10cl5LAABYEgAAAHR1cnRsZS5jbGVhcnN0YW1wc3JfSwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xlYXJzdGFtcHNYAQAAAC10cmBLAABYEgAAAGZpbGVpbnB1dC5maWxlbmFtZXJhSwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuZmlsZW5hbWVYAQAAAC10cmJLAABYDQAAAGN1cnNlcy51bmN0cmxyY0sAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnVuY3RybFgBAAAALXRyZEsAAFgMAAAAZ2MuaXNlbmFibGVkcmVLAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuaXNlbmFibGVkWAEAAAAtdHJmSwAAWBQAAABpbnNwZWN0LmdldGZyYW1laW5mb3JnSwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRmcmFtZWluZm9YAQAAAC10cmhLAABYDAAAAHR1cnRsZS5zZXR1cHJpSwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0dXBYAQAAAC10cmpLAABYCwAAAHBkYi5ydW5ldmFscmtLAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5ydW5ldmFsWAEAAAAtdHJsSwAAWCMAAABkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9saWJfb3B0aW9uc3JtSwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuZ2VuX2xpYl9vcHRpb25zWAEAAAAtdHJuSwAAWA4AAABnYy5nZXRfb2JqZWN0c3JvSwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9vYmplY3RzWAEAAAAtdHJwSwAAWAsAAABmY250bC5pb2N0bHJxSwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sI2ZjbnRsLmlvY3RsWAEAAAAtdHJySwAAWAwAAABmcGZvcm1hdC5zY2lyc0sAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBmb3JtYXQuaHRtbCNmcGZvcm1hdC5zY2lYAQAAAC10cnRLAABYEwAAAGltYWdlb3AuZGl0aGVyMm1vbm9ydUsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZGl0aGVyMm1vbm9YAQAAAC10cnZLAABYFwAAAHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9ucndLAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25YAQAAAC10cnhLAABYEAAAAGJhc2U2NC5iMzJkZWNvZGVyeUsAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmIzMmRlY29kZVgBAAAALXRyeksAAFgiAAAAZW1haWwuaXRlcmF0b3JzLmJvZHlfbGluZV9pdGVyYXRvcnJ7SwAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNlbWFpbC5pdGVyYXRvcnMuYm9keV9saW5lX2l0ZXJhdG9yWAEAAAAtdHJ8SwAAWBAAAABsb2NhbGUubm9ybWFsaXplcn1LAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5ub3JtYWxpemVYAQAAAC10cn5LAABYEAAAAHJhbmRvbS5yYW5kcmFuZ2Vyf0sAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnJhbmRyYW5nZVgBAAAALXRygEsAAFgPAAAAaW1hZ2VvcC50b3ZpZGVvcoFLAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLnRvdmlkZW9YAQAAAC10coJLAABYBAAAAG5leHRyg0sAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbmV4dFgBAAAALXRyhEsAAFgNAAAAc3RydWN0LnVucGFja3KFSwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QudW5wYWNrWAEAAAAtdHKGSwAAWBEAAABvcGVyYXRvci5jb250YWluc3KHSwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmNvbnRhaW5zWAEAAAAtdHKISwAAWA0AAAB0dXJ0bGUuY2lyY2xlcolLAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jaXJjbGVYAQAAAC10copLAABYCAAAAGV4ZWNmaWxlcotLAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2V4ZWNmaWxlWAEAAAAtdHKMSwAAWCAAAAB0ZXN0LnN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZHKNSwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWRYAQAAAC10co5LAABYCAAAAG9zLl9leGl0co9LAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuX2V4aXRYAQAAAC10cpBLAABYCwAAAHBpY2tsZS5kdW1wcpFLAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5kdW1wWAEAAAAtdHKSSwAAWA8AAABzaHV0aWwuY29weXRyZWVyk0sAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHl0cmVlWAEAAAAtdHKUSwAAWAoAAABsb2NhbGUuc3RycpVLAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zdHJYAQAAAC10cpZLAABYDgAAAHBsYXRmb3JtLnVuYW1lcpdLAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0udW5hbWVYAQAAAC10cphLAABYAwAAAGNtcHKZSwAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjbXBYAQAAAC10cppLAABYEAAAAGltcC5sb2FkX2R5bmFtaWNym0sAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmxvYWRfZHluYW1pY1gBAAAALXRynEsAAFgaAAAAdGVzdC5zdXBwb3J0LmltcG9ydF9tb2R1bGVynUsAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5pbXBvcnRfbW9kdWxlWAEAAAAtdHKeSwAAWBQAAABsb2dnaW5nLmdldExldmVsTmFtZXKfSwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5nZXRMZXZlbE5hbWVYAQAAAC10cqBLAABYDQAAAGxvZ2dpbmcuZGVidWdyoUsAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZGVidWdYAQAAAC10cqJLAABYFQAAAHRocmVhZC5pbnRlcnJ1cHRfbWFpbnKjSwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuaW50ZXJydXB0X21haW5YAQAAAC10cqRLAABYFAAAAHBrZ3V0aWwuZ2V0X2ltcG9ydGVycqVLAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmdldF9pbXBvcnRlclgBAAAALXRypksAAFgMAAAAdHVydGxlLmNsZWFycqdLAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhclgBAAAALXRyqEsAAFgaAAAARWFzeURpYWxvZ3MuQXNrRmlsZUZvck9wZW5yqUsAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Bc2tGaWxlRm9yT3BlblgBAAAALXRyqksAAFgSAAAAemxpYi5kZWNvbXByZXNzb2JqcqtLAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmRlY29tcHJlc3NvYmpYAQAAAC10cqxLAABYDgAAAGhlYXBxLm5sYXJnZXN0cq1LAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEubmxhcmdlc3RYAQAAAC10cq5LAABYEQAAAGVtYWlsLnV0aWxzLnF1b3Rlcq9LAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5xdW90ZVgBAAAALXRysEsAAFgVAAAAZmlsZWlucHV0LmlzZmlyc3RsaW5lcrFLAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5pc2ZpcnN0bGluZVgBAAAALXRysksAAFgNAAAAYmRiLmVmZmVjdGl2ZXKzSwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuZWZmZWN0aXZlWAEAAAAtdHK0SwAAWBoAAABnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZXK1SwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZW5zdWl0ZW1vZHVsZS5odG1sI2dlbnN1aXRlbW9kdWxlLnByb2Nlc3NmaWxlWAEAAAAtdHK2SwAAWBcAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MxMXK3SwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMTFYAQAAAC10crhLAABYFwAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzEycrlLAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MxMlgBAAAALXRyuksAAFgPAAAAY2QuY3JlYXRlcGFyc2VycrtLAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuY3JlYXRlcGFyc2VyWAEAAAAtdHK8SwAAWBgAAABzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb25yvUsAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uWAEAAAAtdHK+SwAAWAwAAABzdGF0LlNfSVNSRUdyv0sAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1JFR1gBAAAALXRywEsAAFgUAAAAbXNpbGliLmluaXRfZGF0YWJhc2VywUsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmluaXRfZGF0YWJhc2VYAQAAAC10csJLAABYFwAAAGNvbXBpbGVhbGwuY29tcGlsZV9wYXRocsNLAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjb21waWxlYWxsLmNvbXBpbGVfcGF0aFgBAAAALXRyxEsAAFgMAAAAc29ja2V0Lm50b2hzcsVLAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5udG9oc1gBAAAALXRyxksAAFgXAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXJyx0sAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0JhclgBAAAALXRyyEsAAFgNAAAAdGltZS5zdHJwdGltZXLJSwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5zdHJwdGltZVgBAAAALXRyyksAAFgQAAAAb3BlcmF0b3IuX19wb3dfX3LLSwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcG93X19YAQAAAC10csxLAABYFQAAAHBsYXRmb3JtLnB5dGhvbl9idWlsZHLNSwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnB5dGhvbl9idWlsZFgBAAAALXRyzksAAFgSAAAAcGxhdGZvcm0ud2luMzJfdmVycs9LAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ud2luMzJfdmVyWAEAAAAtdHLQSwAAWAwAAABzb2NrZXQubnRvaGxy0UsAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lm50b2hsWAEAAAAtdHLSSwAAWA4AAAB1cmxsaWIudW5xdW90ZXLTSwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudW5xdW90ZVgBAAAALXRy1EsAAFgaAAAAaW1wdXRpbC5weV9zdWZmaXhfaW1wb3J0ZXJy1UsAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwucHlfc3VmZml4X2ltcG9ydGVyWAEAAAAtdHLWSwAAWAwAAABnYy5nZXRfY291bnRy10sAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfY291bnRYAQAAAC10cthLAABYFgAAAGZ1dHVyZV9idWlsdGlucy5maWx0ZXJy2UsAAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnV0dXJlX2J1aWx0aW5zLmh0bWwjZnV0dXJlX2J1aWx0aW5zLmZpbHRlclgBAAAALXRy2ksAAFgMAAAAc3lzLmV4Y19pbmZvcttLAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGNfaW5mb1gBAAAALXRy3EsAAFgQAAAAY3Vyc2VzLmhhbGZkZWxheXLdSwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaGFsZmRlbGF5WAEAAAAtdHLeSwAAWA8AAABzaXRlLmFkZHNpdGVkaXJy30sAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuYWRkc2l0ZWRpclgBAAAALXRy4EsAAFgVAAAAbXVsdGlwcm9jZXNzaW5nLlZhbHVlcuFLAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5WYWx1ZVgBAAAALXRy4ksAAFgIAAAAb3MucGxvY2ty40sAAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wbG9ja1gBAAAALXRy5EsAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jOHLlSwAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jOFgBAAAALXRy5ksAAFgcAAAAbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZ3LnSwAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmcuY29uZmlnLnN0b3BMaXN0ZW5pbmdYAQAAAC10cuhLAABYFAAAAG9wZXJhdG9yLl9faXJlcGVhdF9fculLAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pcmVwZWF0X19YAQAAAC10cupLAABYBgAAAHJlLnN1YnLrSwAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLnN1YlgBAAAALXRy7EsAAFgUAAAAZnBlY3RsLnR1cm5vbl9zaWdmcGVy7UsAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBlY3RsLmh0bWwjZnBlY3RsLnR1cm5vbl9zaWdmcGVYAQAAAC10cu5LAABYGQAAAG1pbWlmeS5taW1lX2VuY29kZV9oZWFkZXJy70sAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltaWZ5Lmh0bWwjbWltaWZ5Lm1pbWVfZW5jb2RlX2hlYWRlclgBAAAALXRy8EsAAFgHAAAAZ2V0YXR0cnLxSwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNnZXRhdHRyWAEAAAAtdHLySwAAWBEAAABoZWFwcS5oZWFwcmVwbGFjZXLzSwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLmhlYXByZXBsYWNlWAEAAAAtdHL0SwAAWBEAAABsb2NhbGUubG9jYWxlY29udnL1SwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUubG9jYWxlY29udlgBAAAALXRy9ksAAFgMAAAAb3BlcmF0b3IucG9zcvdLAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucG9zWAEAAAAtdHL4SwAAWBQAAABtaW1ldHlwZXMuZ3Vlc3NfdHlwZXL5SwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuZ3Vlc3NfdHlwZVgBAAAALXRy+ksAAFgMAAAAb3BlcmF0b3IucG93cvtLAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucG93WAEAAAAtdHL8SwAAWBEAAABvcGVyYXRvci5pdHJ1ZWRpdnL9SwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLml0cnVlZGl2WAEAAAAtdHL+SwAAWAsAAABpYy5wYXJzZXVybHL/SwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLnBhcnNldXJsWAEAAAAtdHIATAAAWAkAAAByZS5zZWFyY2hyAUwAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5zZWFyY2hYAQAAAC10cgJMAABYDQAAAHR1cnRsZS5saXN0ZW5yA0wAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmxpc3RlblgBAAAALXRyBEwAAFgMAAAAcHdkLmdldHB3bmFtcgVMAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B3ZC5odG1sI3B3ZC5nZXRwd25hbVgBAAAALXRyBkwAAFgRAAAAY2dpLnByaW50X2Vudmlyb25yB0wAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Vudmlyb25YAQAAAC10cghMAABYFgAAAGNzdi51bnJlZ2lzdGVyX2RpYWxlY3RyCUwAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LnVucmVnaXN0ZXJfZGlhbGVjdFgBAAAALXRyCkwAAFgVAAAAcGxhdGZvcm0uYXJjaGl0ZWN0dXJlcgtMAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0uYXJjaGl0ZWN0dXJlWAEAAAAtdHIMTAAAWBQAAABzb2NrZXQuZ2V0aG9zdGJ5bmFtZXINTAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0aG9zdGJ5bmFtZVgBAAAALXRyDkwAAFgKAAAAb3MuZ2V0cHBpZHIPTAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHBwaWRYAQAAAC10chBMAABYCgAAAG1hdGguaHlwb3RyEUwAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguaHlwb3RYAQAAAC10chJMAABYDAAAAGdkYm0ubmV4dGtleXITTAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5uZXh0a2V5WAEAAAAtdHIUTAAAWBMAAABiaW5hc2NpaS5iMmFfYmFzZTY0chVMAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYjJhX2Jhc2U2NFgBAAAALXRyFkwAAFgUAAAAdGhyZWFkLmFsbG9jYXRlX2xvY2tyF0wAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmFsbG9jYXRlX2xvY2tYAQAAAC10chhMAABYCgAAAG1hdGguZ2FtbWFyGUwAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZ2FtbWFYAQAAAC10chpMAABYDwAAAG1zaWxpYi5hZGRfZGF0YXIbTAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuYWRkX2RhdGFYAQAAAC10chxMAABYDAAAAHNpZ25hbC5hbGFybXIdTAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuYWxhcm1YAQAAAC10ch5MAABYEAAAAGF1ZGlvb3AubGluMmFsYXdyH0wAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubGluMmFsYXdYAQAAAC10ciBMAABYGAAAAHJlYWRsaW5lLmdldF9saW5lX2J1ZmZlcnIhTAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9saW5lX2J1ZmZlclgBAAAALXRyIkwAAFgUAAAAdHJhY2ViYWNrLmV4dHJhY3RfdGJyI0wAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmV4dHJhY3RfdGJYAQAAAC10ciRMAABYCgAAAG9zLnNldHBncnByJUwAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRwZ3JwWAEAAAAtdHImTAAAWAwAAABzdHJpbmcuY291bnRyJ0wAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmNvdW50WAEAAAAtdHIoTAAAWBYAAABzdHJpbmdwcmVwLmluX3RhYmxlX2IxcilMAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2IxWAEAAAAtdHIqTAAAWA0AAABvcy5jbG9zZXJhbmdlcitMAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2xvc2VyYW5nZVgBAAAALXRyLEwAAFgJAAAAbmlzLm1hdGNoci1MAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25pcy5odG1sI25pcy5tYXRjaFgBAAAALXRyLkwAAFgCAAAAaWRyL0wAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjaWRYAQAAAC10cjBMAABYFAAAAGNvbXBpbGVyLmNvbXBpbGVGaWxlcjFMAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXIuY29tcGlsZUZpbGVYAQAAAC10cjJMAABYEAAAAGF1ZGlvb3AudWxhdzJsaW5yM0wAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AudWxhdzJsaW5YAQAAAC10cjRMAABYDAAAAGljLmxhdW5jaHVybHI1TAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLmxhdW5jaHVybFgBAAAALXRyNkwAAFgOAAAAdGhyZWFkaW5nLkxvY2tyN0wAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2tYAQAAAC10cjhMAABYEQAAAGxvZ2dpbmcuZ2V0TG9nZ2VycjlMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmdldExvZ2dlclgBAAAALXRyOkwAAFgQAAAAaW1wLnJlbGVhc2VfbG9ja3I7TAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAucmVsZWFzZV9sb2NrWAEAAAAtdHI8TAAAWA8AAABtc2lsaWIuZ2VuX3V1aWRyPUwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmdlbl91dWlkWAEAAAAtdHI+TAAAWCsAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5hbnN3ZXJfY2hhbGxlbmdlcj9MAAAoanMFAABqdAUAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmFuc3dlcl9jaGFsbGVuZ2VYAQAAAC10ckBMAABYKAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2VyQUwAAChqcwUAAGp0BQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnJlZ2lzdGVyX25hbWVzcGFjZVgBAAAALXRyQkwAAFgTAAAAb3BlcmF0b3IuX19sc2hpZnRfX3JDTAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbHNoaWZ0X19YAQAAAC10ckRMAABYGgAAAGVtYWlsLnV0aWxzLmRlY29kZV9yZmMyMjMxckVMAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWwuaHRtbCNlbWFpbC51dGlscy5kZWNvZGVfcmZjMjIzMVgBAAAALXRyRkwAAFgJAAAAb3Muc2V0Z2lkckdMAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0Z2lkWAEAAAAtdHJITAAAWBEAAABjdHlwZXMuUFlGVU5DVFlQRXJJTAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUFlGVU5DVFlQRVgBAAAALXRySkwAAFgRAAAAb3BlcmF0b3IuX19pYW5kX19yS0wAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lhbmRfX1gBAAAALXRyTEwAAFgWAAAAcGtndXRpbC5pdGVyX2ltcG9ydGVyc3JNTAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5pdGVyX2ltcG9ydGVyc1gBAAAALXRyTkwAAFgUAAAAb3BlcmF0b3IuX190cnVlZGl2X19yT0wAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX3RydWVkaXZfX1gBAAAALXRyUEwAAFgSAAAAcmVzb3VyY2UuZ2V0cnVzYWdlclFMAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuZ2V0cnVzYWdlWAEAAAAtdHJSTAAAWBEAAABfd2lucmVnLkNyZWF0ZUtleXJTTAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5DcmVhdGVLZXlYAQAAAC10clRMAABYFAAAAGN1cnNlcy5hc2NpaS5pc2NudHJsclVMAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2NudHJsWAEAAAAtdHJWTAAAWBIAAABmaW5kZXJ0b29scy5sYXVuY2hyV0wAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI2ZpbmRlcnRvb2xzLmxhdW5jaFgBAAAALXRyWEwAAFgNAAAAbG9jYWxlLmZvcm1hdHJZTAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZm9ybWF0WAEAAAAtdHJaTAAAWBoAAAByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZXJbTAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlWAEAAAAtdHJcTAAAWBwAAABfd2lucmVnLkRpc2FibGVSZWZsZWN0aW9uS2V5cl1MAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkRpc2FibGVSZWZsZWN0aW9uS2V5WAEAAAAtdHJeTAAAWAwAAABzdHJpbmcudXBwZXJyX0wAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnVwcGVyWAEAAAAtdHJgTAAAWAkAAABvcy5ta2ZpZm9yYUwAAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ta2ZpZm9YAQAAAC10cmJMAABYDgAAAHBvc2l4ZmlsZS5vcGVucmNMAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5vcGVuWAEAAAAtdHJkTAAAWA0AAABjb2RlY3MubG9va3VwcmVMAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5sb29rdXBYAQAAAC10cmZMAABYEAAAAGRpcmNhY2hlLmxpc3RkaXJyZ0wAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlyY2FjaGUuaHRtbCNkaXJjYWNoZS5saXN0ZGlyWAEAAAAtdHJoTAAAWBAAAABvcy5wYXRoLnNwbGl0dW5jcmlMAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNwbGl0dW5jWAEAAAAtdHJqTAAAWAoAAABvcy5nZXRwZ3JwcmtMAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cGdycFgBAAAALXRybEwAAFgOAAAAbWF0aC5mYWN0b3JpYWxybUwAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZmFjdG9yaWFsWAEAAAAtdHJuTAAAWAoAAABvcy51cmFuZG9tcm9MAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudXJhbmRvbVgBAAAALXRycEwAAFgTAAAAdW5pY29kZWRhdGEuZGVjaW1hbHJxTAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRlY2ltYWxYAQAAAC10cnJMAABYCgAAAG9zLmdldGV1aWRyc0wAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRldWlkWAEAAAAtdHJ0TAAAWBAAAABvc3NhdWRpb2Rldi5vcGVucnVMAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3BlblgBAAAALXRydkwAAFgZAAAAeG1sLnNheC5zYXh1dGlscy51bmVzY2FwZXJ3TAAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy51bmVzY2FwZVgBAAAALXRyeEwAAFgOAAAAcmFuZG9tLnJhbmRpbnRyeUwAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnJhbmRpbnRYAQAAAC10cnpMAABYDQAAAHVuaXR0ZXN0LnNraXBye0wAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5za2lwWAEAAAAtdHJ8TAAAWBsAAABjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXJyfUwAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyWAEAAAAtdHJ+TAAAWB4AAABkaXN0dXRpbHMuZGlyX3V0aWwuY3JlYXRlX3RyZWVyf0wAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGlyX3V0aWwuY3JlYXRlX3RyZWVYAQAAAC10coBMAABYDwAAAG9wZXJhdG9yLl9fZ2VfX3KBTAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZ2VfX1gBAAAALXRygkwAAFgDAAAAbWF4coNMAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI21heFgBAAAALXRyhEwAAFgVAAAAaW5zcGVjdC5nZXRzb3VyY2VmaWxlcoVMAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldHNvdXJjZWZpbGVYAQAAAC10coZMAABYAwAAAG1hcHKHTAAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNtYXBYAQAAAC10cohMAABYEwAAAGNnaS5wcmludF9kaXJlY3RvcnlyiUwAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2RpcmVjdG9yeVgBAAAALXRyikwAAFgSAAAAY3Vyc2VzLnN0YXJ0X2NvbG9ycotMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zdGFydF9jb2xvclgBAAAALXRyjEwAAFgRAAAAcmFuZG9tLnRyaWFuZ3VsYXJyjUwAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnRyaWFuZ3VsYXJYAQAAAC10co5MAABYHgAAAHNodXRpbC5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdHKPTAAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXRYAQAAAC10cpBMAABYEQAAAF93aW5yZWcuRGVsZXRlS2V5cpFMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkRlbGV0ZUtleVgBAAAALXRykkwAAFgNAAAAc2VsZWN0LmtxdWV1ZXKTTAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua3F1ZXVlWAEAAAAtdHKUTAAAWA4AAABvcGVyYXRvci5pbmRleHKVTAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmluZGV4WAEAAAAtdHKWTAAAWAsAAAB0dXJ0bGUuYmFja3KXTAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmFja1gBAAAALXRymEwAAFgSAAAAaW1hZ2VvcC5ncmV5MmdyZXk0cplMAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmdyZXkyZ3JleTRYAQAAAC10cppMAABYFQAAAGN1cnNlcy5kZWZfc2hlbGxfbW9kZXKbTAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVmX3NoZWxsX21vZGVYAQAAAC10cpxMAABYEwAAAHRva2VuLklTTk9OVEVSTUlOQUxynUwAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5JU05PTlRFUk1JTkFMWAEAAAAtdHKeTAAAWBkAAABtaW1ldHlwZXMuZ3Vlc3NfZXh0ZW5zaW9ucp9MAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5ndWVzc19leHRlbnNpb25YAQAAAC10cqBMAABYEgAAAGltYWdlb3AuZ3JleTJncmV5MnKhTAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5ncmV5MmdyZXkyWAEAAAAtdHKiTAAAWBAAAAB0dXJ0bGUuY29sb3Jtb2RlcqNMAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jb2xvcm1vZGVYAQAAAC10cqRMAABYDwAAAHR1cnRsZS5nZXRfcG9seXKlTAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZ2V0X3BvbHlYAQAAAC10cqZMAABYDgAAAEZyYW1lV29yay5NZW51cqdMAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5NZW51WAEAAAAtdHKoTAAAWAgAAABvcy50aW1lc3KpTAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRpbWVzWAEAAAAtdHKqTAAAWBIAAABiaW5hc2NpaS51bmhleGxpZnlyq0wAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS51bmhleGxpZnlYAQAAAC10cqxMAABYDwAAAHRlcm1pb3MudGNkcmFpbnKtTAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y2RyYWluWAEAAAAtdHKuTAAAWA0AAABhdWRpb29wLmF2Z3Bwcq9MAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmF2Z3BwWAEAAAAtdHKwTAAAWBsAAAByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGVysUwAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGVYAQAAAC10crJMAABYFAAAAHNpZ25hbC5zZXRfd2FrZXVwX2ZkcrNMAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zZXRfd2FrZXVwX2ZkWAEAAAAtdHK0TAAAWBAAAABjYWxlbmRhci53ZWVrZGF5crVMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIud2Vla2RheVgBAAAALXRytkwAAFgQAAAAb3MucGF0aC5zYW1lZmlsZXK3TAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zYW1lZmlsZVgBAAAALXRyuEwAAFgPAAAAdHVydGxlLmRpc3RhbmNlcrlMAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kaXN0YW5jZVgBAAAALXRyukwAAFgUAAAAY3Vyc2VzLm1vdXNlaW50ZXJ2YWxyu0wAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm1vdXNlaW50ZXJ2YWxYAQAAAC10crxMAABYDQAAAHBsYXRmb3JtLmRpc3RyvUwAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5kaXN0WAEAAAAtdHK+TAAAWB8AAAB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5cr9MAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHlYAQAAAC10csBMAABYCAAAAGhtYWMubmV3csFMAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLm5ld1gBAAAALXRywkwAAFgNAAAAb3MucGF0aC5pc2RpcnLDTAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5pc2RpclgBAAAALXRyxEwAAFgOAAAAbG9jYWxlLnN0cmNvbGxyxUwAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLnN0cmNvbGxYAQAAAC10csZMAABYDgAAAHRlcm1pb3MudGNmbG93csdMAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjZmxvd1gBAAAALXRyyEwAAFgMAAAAc3RhdC5TX0lTQkxLcslMAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNCTEtYAQAAAC10cspMAABYFwAAAHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50cstMAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLmdldHdlYWtyZWZjb3VudFgBAAAALXRyzEwAAFgNAAAAb3BlcmF0b3IuaXhvcnLNTAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLml4b3JYAQAAAC10cs5MAABYCgAAAGNzdi5yZWFkZXJyz0wAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LnJlYWRlclgBAAAALXRy0EwAAFgMAAAAdHVydGxlLnRpdGxlctFMAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50aXRsZVgBAAAALXRy0kwAAFgUAAAAb3BlcmF0b3IuX19kZWxpdGVtX19y00wAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2RlbGl0ZW1fX1gBAAAALXRy1EwAAFgUAAAAaW5zcGVjdC5nZXRjbGFzc3RyZWVy1UwAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0Y2xhc3N0cmVlWAEAAAAtdHLWTAAAWBIAAAB0YXJmaWxlLmlzX3RhcmZpbGVy10wAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuaXNfdGFyZmlsZVgBAAAALXRy2EwAAFgUAAAAY3Vyc2VzLmFzY2lpLmlzcHVuY3Ry2UwAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzcHVuY3RYAQAAAC10ctpMAAB1WAgAAABzdGQ6dGVybXLbTAAAfXLcTAAAKFgJAAAAZG9jc3RyaW5nct1MAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZG9jc3RyaW5nWAEAAAAtdHLeTAAAWAkAAABhdHRyaWJ1dGVy30wAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1hdHRyaWJ1dGVYAQAAAC10cuBMAABYBAAAAGJkZmxy4UwAAChqcwUAAGp0BQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1iZGZsWAEAAAAtdHLiTAAAWBMAAABwb3NpdGlvbmFsIGFyZ3VtZW50cuNMAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcG9zaXRpb25hbC1hcmd1bWVudFgBAAAALXRy5EwAAFgIAAAAaXRlcmF0b3Jy5UwAAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pdGVyYXRvclgBAAAALXRy5kwAAFgLAAAAcHl0aG9uIDMwMDBy50wAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1weXRob24tMzAwMFgBAAAALXRy6EwAAFgGAAAAZmluZGVyculMAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZmluZGVyWAEAAAAtdHLqTAAAWA8AAABzdHJ1Y3Qgc2VxdWVuY2Vy60wAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1zdHJ1Y3Qtc2VxdWVuY2VYAQAAAC10cuxMAABYCAAAAGZ1bmN0aW9ucu1MAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZnVuY3Rpb25YAQAAAC10cu5MAABYBgAAAGxhbWJkYXLvTAAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWxhbWJkYVgBAAAALXRy8EwAAFgTAAAAYWJzdHJhY3QgYmFzZSBjbGFzc3LxTAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWFic3RyYWN0LWJhc2UtY2xhc3NYAQAAAC10cvJMAABYBQAAAGNsYXNzcvNMAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY2xhc3NYAQAAAC10cvRMAABYCAAAAGNvZXJjaW9ucvVMAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY29lcmNpb25YAQAAAC10cvZMAABYDgAAAGZsb29yIGRpdmlzaW9ucvdMAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZmxvb3ItZGl2aXNpb25YAQAAAC10cvhMAABYDAAAAG5lc3RlZCBzY29wZXL5TAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW5lc3RlZC1zY29wZVgBAAAALXRy+kwAAFgXAAAAbWV0aG9kIHJlc29sdXRpb24gb3JkZXJy+0wAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tZXRob2QtcmVzb2x1dGlvbi1vcmRlclgBAAAALXRy/EwAAFgQAAAAZmlsZS1saWtlIG9iamVjdHL9TAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZpbGUtbGlrZS1vYmplY3RYAQAAAC10cv5MAABYCQAAAF9fc2xvdHNfX3L/TAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXNsb3RzWAEAAAAtdHIATQAAWBEAAABieXRlcy1saWtlIG9iamVjdHIBTQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWJ5dGVzLWxpa2Utb2JqZWN0WAEAAAAtdHICTQAAWAQAAABlYWZwcgNNAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZWFmcFgBAAAALXRyBE0AAFgGAAAAbG9hZGVycgVNAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbG9hZGVyWAEAAAAtdHIGTQAAWAcAAABtYXBwaW5ncgdNAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbWFwcGluZ1gBAAAALXRyCE0AAFgEAAAAbGlzdHIJTQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWxpc3RYAQAAAC10cgpNAABYDgAAAHNwZWNpYWwgbWV0aG9kcgtNAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tc3BlY2lhbC1tZXRob2RYAQAAAC10cgxNAABYDgAAAGNvbXBsZXggbnVtYmVycg1NAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY29tcGxleC1udW1iZXJYAQAAAC10cg5NAABYDwAAAGRpY3Rpb25hcnkgdmlld3IPTQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWRpY3Rpb25hcnktdmlld1gBAAAALXRyEE0AAFgHAAAAcGFja2FnZXIRTQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXBhY2thZ2VYAQAAAC10chJNAABYBwAAAGNweXRob25yE00AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1jcHl0aG9uWAEAAAAtdHIUTQAAWA8AAABuZXctc3R5bGUgY2xhc3NyFU0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1uZXctc3R5bGUtY2xhc3NYAQAAAC10chZNAABYCQAAAGltbXV0YWJsZXIXTQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWltbXV0YWJsZVgBAAAALXRyGE0AAFgQAAAAZXh0ZW5zaW9uIG1vZHVsZXIZTQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWV4dGVuc2lvbi1tb2R1bGVYAQAAAC10chpNAABYCAAAAGltcG9ydGVychtNAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW1wb3J0ZXJYAQAAAC10chxNAABYCwAAAGludGVyYWN0aXZlch1NAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW50ZXJhY3RpdmVYAQAAAC10ch5NAABYCQAAAGRlY29yYXRvcnIfTQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWRlY29yYXRvclgBAAAALXRyIE0AAFgSAAAAZ2FyYmFnZSBjb2xsZWN0aW9uciFNAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZ2FyYmFnZS1jb2xsZWN0aW9uWAEAAAAtdHIiTQAAWAkAAABwYXJhbWV0ZXJyI00AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYXJhbWV0ZXJYAQAAAC10ciRNAABYEgAAAHVuaXZlcnNhbCBuZXdsaW5lc3IlTQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXVuaXZlcnNhbC1uZXdsaW5lc1gBAAAALXRyJk0AAFgDAAAAPj4+cidNAAAoanMFAABqdAUAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm1YAQAAAC10cihNAABYBwAAAG11dGFibGVyKU0AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tdXRhYmxlWAEAAAAtdHIqTQAAWAYAAABtZXRob2RyK00AAChqcwUAAGp0BQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tZXRob2RYAQAAAC10cixNAABYFwAAAGdsb2JhbCBpbnRlcnByZXRlciBsb2Nrci1NAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZ2xvYmFsLWludGVycHJldGVyLWxvY2tYAQAAAC10ci5NAABYCwAAAG5hbWVkIHR1cGxlci9NAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbmFtZWQtdHVwbGVYAQAAAC10cjBNAABYCAAAAGJ5dGVjb2RlcjFNAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tYnl0ZWNvZGVYAQAAAC10cjJNAABYCwAAAGludGVycHJldGVkcjNNAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW50ZXJwcmV0ZWRYAQAAAC10cjRNAABYEAAAAGtleXdvcmQgYXJndW1lbnRyNU0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1rZXl3b3JkLWFyZ3VtZW50WAEAAAAtdHI2TQAAWAQAAAAydG8zcjdNAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tMnRvM1gBAAAALXRyOE0AAFgEAAAAdHlwZXI5TQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXR5cGVYAQAAAC10cjpNAABYCQAAAGltcG9ydGluZ3I7TQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWltcG9ydGluZ1gBAAAALXRyPE0AAFgKAAAAX19mdXR1cmVfX3I9TQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZ1dHVyZVgBAAAALXRyPk0AAFgIAAAAcHl0aG9uaWNyP00AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1weXRob25pY1gBAAAALXRyQE0AAFgDAAAAbXJvckFNAAAoanMFAABqdAUAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbXJvWAEAAAAtdHJCTQAAWBQAAABnZW5lcmF0b3IgZXhwcmVzc2lvbnJDTQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdlbmVyYXRvci1leHByZXNzaW9uWAEAAAAtdHJETQAAWAkAAABuYW1lc3BhY2VyRU0AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1uYW1lc3BhY2VYAQAAAC10ckZNAABYDQAAAHplbiBvZiBweXRob25yR00AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS16ZW4tb2YtcHl0aG9uWAEAAAAtdHJITQAAWAkAAABzdGF0ZW1lbnRySU0AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1zdGF0ZW1lbnRYAQAAAC10ckpNAABYCQAAAG1ldGFjbGFzc3JLTQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1ldGFjbGFzc1gBAAAALXRyTE0AAFgPAAAAcmVmZXJlbmNlIGNvdW50ck1NAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcmVmZXJlbmNlLWNvdW50WAEAAAAtdHJOTQAAWAgAAABoYXNoYWJsZXJPTQAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWhhc2hhYmxlWAEAAAAtdHJQTQAAWBAAAABpbnRlZ2VyIGRpdmlzaW9uclFNAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW50ZWdlci1kaXZpc2lvblgBAAAALXRyUk0AAFgEAAAAaWRsZXJTTQAAKGpzBQAAanQFAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWlkbGVYAQAAAC10clRNAABYBgAAAG1vZHVsZXJVTQAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1vZHVsZVgBAAAALXRyVk0AAFgIAAAAYXJndW1lbnRyV00AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1hcmd1bWVudFgBAAAALXRyWE0AAFgUAAAAdHJpcGxlLXF1b3RlZCBzdHJpbmdyWU0AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS10cmlwbGUtcXVvdGVkLXN0cmluZ1gBAAAALXRyWk0AAFgGAAAAb2JqZWN0cltNAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tb2JqZWN0WAEAAAAtdHJcTQAAWAQAAABsYnlscl1NAAAoanMFAABqdAUAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbGJ5bFgBAAAALXRyXk0AAFgLAAAAZmlsZSBvYmplY3RyX00AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1maWxlLW9iamVjdFgBAAAALXRyYE0AAFgIAAAAc2VxdWVuY2VyYU0AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1zZXF1ZW5jZVgBAAAALXRyYk0AAFgKAAAAZGljdGlvbmFyeXJjTQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWRpY3Rpb25hcnlYAQAAAC10cmRNAABYBQAAAHNsaWNlcmVNAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tc2xpY2VYAQAAAC10cmZNAABYEgAAAGxpc3QgY29tcHJlaGVuc2lvbnJnTQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWxpc3QtY29tcHJlaGVuc2lvblgBAAAALXRyaE0AAFgDAAAALi4ucmlNAAAoanMFAABqdAUAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tMVgBAAAALXRyak0AAFgIAAAAaXRlcmFibGVya00AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pdGVyYWJsZVgBAAAALXRybE0AAFgKAAAAZXhwcmVzc2lvbnJtTQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWV4cHJlc3Npb25YAQAAAC10cm5NAABYAwAAAGdpbHJvTQAAKGpzBQAAanQFAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdpbFgBAAAALXRycE0AAFgTAAAAdmlydHVhbCBlbnZpcm9ubWVudHJxTQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXZpcnR1YWwtZW52aXJvbm1lbnRYAQAAAC10cnJNAABYCQAAAGdlbmVyYXRvcnJzTQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdlbmVyYXRvclgBAAAALXRydE0AAFgPAAAAY29udGV4dCBtYW5hZ2VycnVNAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY29udGV4dC1tYW5hZ2VyWAEAAAAtdHJ2TQAAWAsAAABkdWNrLXR5cGluZ3J3TQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWR1Y2stdHlwaW5nWAEAAAAtdHJ4TQAAWA0AAABjbGFzc2ljIGNsYXNzcnlNAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY2xhc3NpYy1jbGFzc1gBAAAALXRyek0AAFgMAAAAa2V5IGZ1bmN0aW9ucntNAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0ta2V5LWZ1bmN0aW9uWAEAAAAtdHJ8TQAAWA8AAAB2aXJ0dWFsIG1hY2hpbmVyfU0AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS12aXJ0dWFsLW1hY2hpbmVYAQAAAC10cn5NAABYCgAAAGRlc2NyaXB0b3Jyf00AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1kZXNjcmlwdG9yWAEAAAAtdHKATQAAdVgMAAAAcHk6ZXhjZXB0aW9ucoFNAAB9coJNAAAoWBQAAAB4bWwuZG9tLkRPTUV4Y2VwdGlvbnKDTQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5ET01FeGNlcHRpb25YAQAAAC10coRNAABYCQAAAGRibS5lcnJvcnKFTQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYm0uaHRtbCNkYm0uZXJyb3JYAQAAAC10coZNAABYHQAAAGV4Y2VwdGlvbnMuVW5pY29kZURlY29kZUVycm9ycodNAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVEZWNvZGVFcnJvclgBAAAALXRyiE0AAFgVAAAAc210cGxpYi5TTVRQSGVsb0Vycm9ycolNAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBIZWxvRXJyb3JYAQAAAC10copNAABYGAAAAGh0dHBsaWIuQ2Fubm90U2VuZEhlYWRlcnKLTQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5DYW5ub3RTZW5kSGVhZGVyWAEAAAAtdHKMTQAAWAwAAABsb2NhbGUuRXJyb3JyjU0AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVycm9yWAEAAAAtdHKOTQAAWA0AAABzb2NrZXQuaGVycm9yco9NAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5oZXJyb3JYAQAAAC10cpBNAABYDAAAAGRiaGFzaC5lcnJvcnKRTQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZXJyb3JYAQAAAC10cpJNAABYCwAAAE1hY09TLkVycm9ycpNNAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MuRXJyb3JYAQAAAC10cpRNAABYCQAAAG5pcy5lcnJvcnKVTQAAKGpzBQAAanQFAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMuZXJyb3JYAQAAAC10cpZNAABYHAAAAGV4Y2VwdGlvbnMuWmVyb0RpdmlzaW9uRXJyb3Jyl00AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuWmVyb0RpdmlzaW9uRXJyb3JYAQAAAC10cphNAABYCAAAAHJlLmVycm9ycplNAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuZXJyb3JYAQAAAC10cppNAABYGQAAAGV4Y2VwdGlvbnMuUmVmZXJlbmNlRXJyb3Jym00AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuUmVmZXJlbmNlRXJyb3JYAQAAAC10cpxNAABYGwAAAENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvcnKdTQAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3JYAQAAAC10cp5NAABYGgAAAENvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9ycp9NAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9yWAEAAAAtdHKgTQAAWBoAAABubnRwbGliLk5OVFBQZXJtYW5lbnRFcnJvcnKhTQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQUGVybWFuZW50RXJyb3JYAQAAAC10cqJNAABYFgAAAHNzbC5TU0xaZXJvUmV0dXJuRXJyb3Jyo00AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFplcm9SZXR1cm5FcnJvclgBAAAALXRypE0AAFgWAAAAZXhjZXB0aW9ucy5Mb29rdXBFcnJvcnKlTQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Mb29rdXBFcnJvclgBAAAALXRypk0AAFgMAAAAZ2V0b3B0LmVycm9ycqdNAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5lcnJvclgBAAAALXRyqE0AAFgTAAAAeG1sLmRvbS5Ob3RGb3VuZEVycnKpTQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob3RGb3VuZEVyclgBAAAALXRyqk0AAFgYAAAAZXhjZXB0aW9ucy5PdmVyZmxvd0Vycm9ycqtNAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLk92ZXJmbG93RXJyb3JYAQAAAC10cqxNAABYDAAAAHhkcmxpYi5FcnJvcnKtTQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuRXJyb3JYAQAAAC10cq5NAABYEwAAAGV4Y2VwdGlvbnMuS2V5RXJyb3Jyr00AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuS2V5RXJyb3JYAQAAAC10crBNAABYGQAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlRXJyb3JysU0AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlRXJyb3JYAQAAAC10crJNAABYFAAAAGN0eXBlcy5Bcmd1bWVudEVycm9ycrNNAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5Bcmd1bWVudEVycm9yWAEAAAAtdHK0TQAAWBcAAABleGNlcHRpb25zLlVuaWNvZGVFcnJvcnK1TQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3JYAQAAAC10crZNAABYEwAAAGltYXBsaWIuSU1BUDQuYWJvcnRyt00AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuYWJvcnRYAQAAAC10crhNAABYGgAAAG1haWxib3guTm9TdWNoTWFpbGJveEVycm9ycrlNAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk5vU3VjaE1haWxib3hFcnJvclgBAAAALXRyuk0AAFgVAAAAZXhjZXB0aW9ucy5WYWx1ZUVycm9ycrtNAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlZhbHVlRXJyb3JYAQAAAC10crxNAABYFAAAAHhtbC5zYXguU0FYRXhjZXB0aW9ucr1NAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWEV4Y2VwdGlvblgBAAAALXRyvk0AAFgYAAAAZXhjZXB0aW9ucy5JbXBvcnRXYXJuaW5ncr9NAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkltcG9ydFdhcm5pbmdYAQAAAC10csBNAABYEgAAAHNpZ25hbC5JdGltZXJFcnJvcnLBTQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSXRpbWVyRXJyb3JYAQAAAC10csJNAABYHgAAAHNtdHBsaWIuU01UUFNlcnZlckRpc2Nvbm5lY3RlZHLDTQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQU2VydmVyRGlzY29ubmVjdGVkWAEAAAAtdHLETQAAWB0AAABzbXRwbGliLlNNVFBSZXNwb25zZUV4Y2VwdGlvbnLFTQAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQUmVzcG9uc2VFeGNlcHRpb25YAQAAAC10csZNAABYHQAAAGVtYWlsLmVycm9ycy5IZWFkZXJQYXJzZUVycm9ycsdNAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI2VtYWlsLmVycm9ycy5IZWFkZXJQYXJzZUVycm9yWAEAAAAtdHLITQAAWBkAAABodHRwbGliLkNhbm5vdFNlbmRSZXF1ZXN0cslNAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkNhbm5vdFNlbmRSZXF1ZXN0WAEAAAAtdHLKTQAAWBgAAABleGNlcHRpb25zLlN5bnRheFdhcm5pbmdyy00AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuU3ludGF4V2FybmluZ1gBAAAALXRyzE0AAFgLAAAAUXVldWUuRW1wdHlyzU0AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNRdWV1ZS5FbXB0eVgBAAAALXRyzk0AAFgNAAAAZHVtYmRibS5lcnJvcnLPTQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjZHVtYmRibS5lcnJvclgBAAAALXRy0E0AAFgVAAAAbm50cGxpYi5OTlRQRGF0YUVycm9yctFNAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBEYXRhRXJyb3JYAQAAAC10ctJNAABYGQAAAGVtYWlsLmVycm9ycy5NZXNzYWdlRXJyb3Jy000AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLk1lc3NhZ2VFcnJvclgBAAAALXRy1E0AAFgSAAAAZ2V0b3B0LkdldG9wdEVycm9yctVNAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5HZXRvcHRFcnJvclgBAAAALXRy1k0AAFgdAAAAaHR0cGxpYi5VbmltcGxlbWVudGVkRmlsZU1vZGVy100AAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuVW5pbXBsZW1lbnRlZEZpbGVNb2RlWAEAAAAtdHLYTQAAWBgAAABleGNlcHRpb25zLlN0YW5kYXJkRXJyb3Jy2U0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuU3RhbmRhcmRFcnJvclgBAAAALXRy2k0AAFgXAAAAZXhjZXB0aW9ucy5SdW50aW1lRXJyb3Jy200AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuUnVudGltZUVycm9yWAEAAAAtdHLcTQAAWBYAAABleGNlcHRpb25zLlVzZXJXYXJuaW5nct1NAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVzZXJXYXJuaW5nWAEAAAAtdHLeTQAAWBYAAAB3ZWFrcmVmLlJlZmVyZW5jZUVycm9yct9NAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLlJlZmVyZW5jZUVycm9yWAEAAAAtdHLgTQAAWBgAAABleGNlcHRpb25zLkZ1dHVyZVdhcm5pbmdy4U0AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuRnV0dXJlV2FybmluZ1gBAAAALXRy4k0AAFgYAAAAc210cGxpYi5TTVRQQ29ubmVjdEVycm9ycuNNAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBDb25uZWN0RXJyb3JYAQAAAC10cuRNAABYEQAAAG5udHBsaWIuTk5UUEVycm9ycuVNAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBFcnJvclgBAAAALXRy5k0AAFgRAAAAeG1sLmRvbS5TeW50YXhFcnJy500AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uU3ludGF4RXJyWAEAAAAtdHLoTQAAWBMAAABleGNlcHRpb25zLlRhYkVycm9yculNAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlRhYkVycm9yWAEAAAAtdHLqTQAAWBYAAABleGNlcHRpb25zLkltcG9ydEVycm9ycutNAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkltcG9ydEVycm9yWAEAAAAtdHLsTQAAWA8AAABzb2NrZXQuZ2FpZXJyb3Jy7U0AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdhaWVycm9yWAEAAAAtdHLuTQAAWCQAAABDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Jy700AAChqcwUAAGp0BQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yWAEAAAAtdHLwTQAAWC4AAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5BdXRoZW50aWNhdGlvbkVycm9ycvFNAAAoanMFAABqdAUAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkF1dGhlbnRpY2F0aW9uRXJyb3JYAQAAAC10cvJNAABYEgAAAGZ0cGxpYi5lcnJvcl9yZXBseXLzTQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfcmVwbHlYAQAAAC10cvRNAABYFAAAAHhtbC5kb20uTmFtZXNwYWNlRXJycvVNAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5hbWVzcGFjZUVyclgBAAAALXRy9k0AAFgVAAAAaHR0cGxpYi5IVFRQRXhjZXB0aW9ucvdNAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBFeGNlcHRpb25YAQAAAC10cvhNAABYEwAAAGV4Y2VwdGlvbnMuVk1TRXJyb3Jy+U0AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVk1TRXJyb3JYAQAAAC10cvpNAABYGwAAAHRlc3Quc3VwcG9ydC5SZXNvdXJjZURlbmllZHL7TQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlJlc291cmNlRGVuaWVkWAEAAAAtdHL8TQAAWBwAAABleGNlcHRpb25zLktleWJvYXJkSW50ZXJydXB0cv1NAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLktleWJvYXJkSW50ZXJydXB0WAEAAAAtdHL+TQAAWBMAAAB0YXJmaWxlLkhlYWRlckVycm9ycv9NAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkhlYWRlckVycm9yWAEAAAAtdHIATgAAWBQAAABleGNlcHRpb25zLlR5cGVFcnJvcnIBTgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5UeXBlRXJyb3JYAQAAAC10cgJOAABYGAAAAGV4Y2VwdGlvbnMuQmFzZUV4Y2VwdGlvbnIDTgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5CYXNlRXhjZXB0aW9uWAEAAAAtdHIETgAAWBUAAABtYWlsYm94Lk5vdEVtcHR5RXJyb3JyBU4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTm90RW1wdHlFcnJvclgBAAAALXRyBk4AAFgWAAAAcGlja2xlLlVucGlja2xpbmdFcnJvcnIHTgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuVW5waWNrbGluZ0Vycm9yWAEAAAAtdHIITgAAWB8AAABodHRwbGliLlVua25vd25UcmFuc2ZlckVuY29kaW5ncglOAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLlVua25vd25UcmFuc2ZlckVuY29kaW5nWAEAAAAtdHIKTgAAWBMAAABleGNlcHRpb25zLkVPRkVycm9ycgtOAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkVPRkVycm9yWAEAAAAtdHIMTgAAWBQAAAB6aXBmaWxlLkxhcmdlWmlwRmlsZXINTgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5MYXJnZVppcEZpbGVYAQAAAC10cg5OAABYFQAAAGV4Y2VwdGlvbnMuSW5kZXhFcnJvcnIPTgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5JbmRleEVycm9yWAEAAAAtdHIQTgAAWBEAAAB0YXJmaWxlLlJlYWRFcnJvcnIRTgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5SZWFkRXJyb3JYAQAAAC10chJOAABYHgAAAG11bHRpcHJvY2Vzc2luZy5CdWZmZXJUb29TaG9ydHITTgAAKGpzBQAAanQFAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQnVmZmVyVG9vU2hvcnRYAQAAAC10chROAABYEAAAAHdlYmJyb3dzZXIuRXJyb3JyFU4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIuRXJyb3JYAQAAAC10chZOAABYGAAAAGV4Y2VwdGlvbnMuU3RvcEl0ZXJhdGlvbnIXTgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5TdG9wSXRlcmF0aW9uWAEAAAAtdHIYTgAAWBkAAABmcGVjdGwuRmxvYXRpbmdQb2ludEVycm9ychlOAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC5GbG9hdGluZ1BvaW50RXJyb3JYAQAAAC10chpOAABYEAAAAHRhcmZpbGUuVGFyRXJyb3JyG04AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRXJyb3JYAQAAAC10chxOAABYEgAAAGV4Y2VwdGlvbnMuT1NFcnJvcnIdTgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5PU0Vycm9yWAEAAAAtdHIeTgAAWAgAAABkbC5lcnJvcnIfTgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmVycm9yWAEAAAAtdHIgTgAAWBkAAABubnRwbGliLk5OVFBQcm90b2NvbEVycm9yciFOAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBQcm90b2NvbEVycm9yWAEAAAAtdHIiTgAAWBUAAABleGNlcHRpb25zLlN5c3RlbUV4aXRyI04AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuU3lzdGVtRXhpdFgBAAAALXRyJE4AAFgMAAAAYW55ZGJtLmVycm9yciVOAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FueWRibS5odG1sI2FueWRibS5lcnJvclgBAAAALXRyJk4AAFgfAAAAaHR0cGxpYi5JbXByb3BlckNvbm5lY3Rpb25TdGF0ZXInTgAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5JbXByb3BlckNvbm5lY3Rpb25TdGF0ZVgBAAAALXRyKE4AAFgKAAAAUXVldWUuRnVsbHIpTgAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLkZ1bGxYAQAAAC10cipOAABYHQAAAGV4Y2VwdGlvbnMuRmxvYXRpbmdQb2ludEVycm9ycitOAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkZsb2F0aW5nUG9pbnRFcnJvclgBAAAALXRyLE4AAFgZAAAAQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvcnItTgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yWAEAAAAtdHIuTgAAWAoAAAB6bGliLmVycm9yci9OAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmVycm9yWAEAAAAtdHIwTgAAWBIAAABwYXJzZXIuUGFyc2VyRXJyb3JyMU4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlBhcnNlckVycm9yWAEAAAAtdHIyTgAAWCAAAAB4bWwuZG9tLk5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycnIzTgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob01vZGlmaWNhdGlvbkFsbG93ZWRFcnJYAQAAAC10cjROAABYEwAAAGNvb2tpZWxpYi5Mb2FkRXJyb3JyNU4AAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkxvYWRFcnJvclgBAAAALXRyNk4AAFgZAAAAeG1sLmRvbS5JbnVzZUF0dHJpYnV0ZUVycnI3TgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnVzZUF0dHJpYnV0ZUVyclgBAAAALXRyOE4AAFgZAAAAb3NzYXVkaW9kZXYuT1NTQXVkaW9FcnJvcnI5TgAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lk9TU0F1ZGlvRXJyb3JYAQAAAC10cjpOAABYEgAAAHppcGZpbGUuQmFkWmlwZmlsZXI7TgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5CYWRaaXBmaWxlWAEAAAAtdHI8TgAAWAwAAAB0aHJlYWQuZXJyb3JyPU4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmVycm9yWAEAAAAtdHI+TgAAWBYAAAB4ZHJsaWIuQ29udmVyc2lvbkVycm9ycj9OAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5Db252ZXJzaW9uRXJyb3JYAQAAAC10ckBOAABYIQAAAHhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbnJBTgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uWAEAAAAtdHJCTgAAWB8AAABzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yckNOAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yWAEAAAAtdHJETgAAWBMAAABiaW5hc2NpaS5JbmNvbXBsZXRlckVOAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuSW5jb21wbGV0ZVgBAAAALXRyRk4AAFgaAAAAZXhjZXB0aW9ucy5Bcml0aG1ldGljRXJyb3JyR04AAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuQXJpdGhtZXRpY0Vycm9yWAEAAAAtdHJITgAAWBYAAABpbWFwbGliLklNQVA0LnJlYWRvbmx5cklOAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlYWRvbmx5WAEAAAAtdHJKTgAAWAgAAABjZC5lcnJvcnJLTgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLmVycm9yWAEAAAAtdHJMTgAAWBEAAAB0YWJuYW5ueS5OYW5ueU5hZ3JNTgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55Lk5hbm55TmFnWAEAAAAtdHJOTgAAWBQAAABleGNlcHRpb25zLk5hbWVFcnJvcnJPTgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5OYW1lRXJyb3JYAQAAAC10clBOAABYCgAAAGpwZWcuZXJyb3JyUU4AAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI2pwZWcuZXJyb3JYAQAAAC10clJOAABYHAAAAHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3JyU04AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3JYAQAAAC10clROAABYDQAAAGltZ2ZpbGUuZXJyb3JyVU4AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUuZXJyb3JYAQAAAC10clZOAABYGwAAAHhtbC5kb20uSGllcmFyY2h5UmVxdWVzdEVycnJXTgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyWAEAAAAtdHJYTgAAWBYAAABleGNlcHRpb25zLkJ1ZmZlckVycm9ycllOAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkJ1ZmZlckVycm9yWAEAAAAtdHJaTgAAWA4AAAByZXNvdXJjZS5lcnJvcnJbTgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLmVycm9yWAEAAAAtdHJcTgAAWBEAAABmdHBsaWIuZXJyb3JfdGVtcHJdTgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfdGVtcFgBAAAALXRyXk4AAFgKAAAAZ2RibS5lcnJvcnJfTgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5lcnJvclgBAAAALXRyYE4AAFgTAAAAZnBmb3JtYXQuTm90QU51bWJlcnJhTgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGZvcm1hdC5odG1sI2ZwZm9ybWF0Lk5vdEFOdW1iZXJYAQAAAC10cmJOAABYGgAAAG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9ycmNOAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBUZW1wb3JhcnlFcnJvclgBAAAALXRyZE4AAFgYAAAAZXhjZXB0aW9ucy5HZW5lcmF0b3JFeGl0cmVOAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkdlbmVyYXRvckV4aXRYAQAAAC10cmZOAABYDgAAAGJpbmFzY2lpLkVycm9ycmdOAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuRXJyb3JYAQAAAC10cmhOAABYCwAAAGJkYi5CZGJRdWl0cmlOAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGJRdWl0WAEAAAAtdHJqTgAAWBIAAABodHRwbGliLkludmFsaWRVUkxya04AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSW52YWxpZFVSTFgBAAAALXRybE4AAFgkAAAAZXhjZXB0aW9ucy5QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5ncm1OAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdYAQAAAC10cm5OAABYFQAAAHRocmVhZGluZy5UaHJlYWRFcnJvcnJvTgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkRXJyb3JYAQAAAC10cnBOAABYFwAAAHhtbC5kb20uSW52YWxpZFN0YXRlRXJycnFOAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludmFsaWRTdGF0ZUVyclgBAAAALXRyck4AAFglAAAAQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvcnJzTgAAKGpzBQAAanQFAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvblN5bnRheEVycm9yWAEAAAAtdHJ0TgAAWA0AAABhdWRpb29wLmVycm9ycnVOAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmVycm9yWAEAAAAtdHJ2TgAAWBcAAABleGNlcHRpb25zLldpbmRvd3NFcnJvcnJ3TgAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5XaW5kb3dzRXJyb3JYAQAAAC10cnhOAABYFAAAAHBpY2tsZS5QaWNrbGluZ0Vycm9ycnlOAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGluZ0Vycm9yWAEAAAAtdHJ6TgAAWBkAAABleGNlcHRpb25zLlJ1bnRpbWVXYXJuaW5ncntOAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlJ1bnRpbWVXYXJuaW5nWAEAAAAtdHJ8TgAAWA4AAABzb2NrZXQudGltZW91dHJ9TgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQudGltZW91dFgBAAAALXRyfk4AAFgQAAAAdXJsbGliMi5VUkxFcnJvcnJ/TgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5VUkxFcnJvclgBAAAALXRygE4AAFgYAAAAemlwaW1wb3J0LlppcEltcG9ydEVycm9ycoFOAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC5aaXBJbXBvcnRFcnJvclgBAAAALXRygk4AAFgZAAAAc210cGxpYi5TTVRQU2VuZGVyUmVmdXNlZHKDTgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQU2VuZGVyUmVmdXNlZFgBAAAALXRyhE4AAFgdAAAAc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWRyhU4AAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUFJlY2lwaWVudHNSZWZ1c2VkWAEAAAAtdHKGTgAAWCUAAABlbWFpbC5lcnJvcnMuTXVsdGlwYXJ0Q29udmVyc2lvbkVycm9ycodOAAAoanMFAABqdAUAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI2VtYWlsLmVycm9ycy5NdWx0aXBhcnRDb252ZXJzaW9uRXJyb3JYAQAAAC10cohOAABYHgAAAGV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWRFcnJvcnKJTgAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZEVycm9yWAEAAAAtdHKKTgAAWBQAAABodHRwbGliLk5vdENvbm5lY3RlZHKLTgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5Ob3RDb25uZWN0ZWRYAQAAAC10coxOAABYGAAAAHhtbC5kb20uTm9EYXRhQWxsb3dlZEVycnKNTgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob0RhdGFBbGxvd2VkRXJyWAEAAAAtdHKOTgAAWBcAAAB4bWwuZG9tLk5vdFN1cHBvcnRlZEVycnKPTgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob3RTdXBwb3J0ZWRFcnJYAQAAAC10cpBOAABYHQAAAGV4Y2VwdGlvbnMuVW5pY29kZUVuY29kZUVycm9ycpFOAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVFbmNvZGVFcnJvclgBAAAALXRykk4AAFgSAAAAZXhjZXB0aW9ucy5XYXJuaW5ncpNOAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLldhcm5pbmdYAQAAAC10cpROAABYFQAAAHNtdHBsaWIuU01UUERhdGFFcnJvcnKVTgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQRGF0YUVycm9yWAEAAAAtdHKWTgAAWBYAAABkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlcpdOAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlWAEAAAAtdHKYTgAAWBYAAABleGNlcHRpb25zLlN5c3RlbUVycm9ycplOAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlN5c3RlbUVycm9yWAEAAAAtdHKaTgAAWB0AAABzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcnKbTgAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3JYAQAAAC10cpxOAABYFQAAAHNzbC5TU0xXYW50V3JpdGVFcnJvcnKdTgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMV2FudFdyaXRlRXJyb3JYAQAAAC10cp5OAABYDAAAAGN1cnNlcy5lcnJvcnKfTgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZXJyb3JYAQAAAC10cqBOAABYFwAAAHhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycqFOAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvclgBAAAALXRyok4AAFgXAAAAaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb25yo04AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5VbnN1cHBvcnRlZE9wZXJhdGlvblgBAAAALXRypE4AAFgWAAAAZ2V0cGFzcy5HZXRQYXNzV2FybmluZ3KlTgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRwYXNzLmh0bWwjZ2V0cGFzcy5HZXRQYXNzV2FybmluZ1gBAAAALXRypk4AAFgMAAAAc3RydWN0LmVycm9ycqdOAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5lcnJvclgBAAAALXRyqE4AAFgJAAAAY3N2LkVycm9ycqlOAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5FcnJvclgBAAAALXRyqk4AAFgTAAAAbWFpbGJveC5Gb3JtYXRFcnJvcnKrTgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5Gb3JtYXRFcnJvclgBAAAALXRyrE4AAFgVAAAAaHR0cGxpYi5CYWRTdGF0dXNMaW5lcq1OAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkJhZFN0YXR1c0xpbmVYAQAAAC10cq5OAABYFQAAAHNtdHBsaWIuU01UUEV4Y2VwdGlvbnKvTgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQRXhjZXB0aW9uWAEAAAAtdHKwTgAAWAgAAABvcy5lcnJvcnKxTgAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmVycm9yWAEAAAAtdHKyTgAAWBkAAABleGNlcHRpb25zLkF0dHJpYnV0ZUVycm9ycrNOAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkF0dHJpYnV0ZUVycm9yWAEAAAAtdHK0TgAAWAwAAABiaW5oZXguRXJyb3JytU4AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LkVycm9yWAEAAAAtdHK2TgAAWCYAAABDb25maWdQYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcnK3TgAAKGpzBQAAanQFAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvclgBAAAALXRyuE4AAFgMAAAAc3NsLlNTTEVycm9ycrlOAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xFcnJvclgBAAAALXRyuk4AAFgaAAAAbWFpbGJveC5FeHRlcm5hbENsYXNoRXJyb3Jyu04AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guRXh0ZXJuYWxDbGFzaEVycm9yWAEAAAAtdHK8TgAAWCAAAABleGNlcHRpb25zLlVuaWNvZGVUcmFuc2xhdGVFcnJvcnK9TgAAKGpzBQAAanQFAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlVHJhbnNsYXRlRXJyb3JYAQAAAC10cr5OAABYGAAAAHhtbC5kb20uRG9tc3RyaW5nU2l6ZUVycnK/TgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb21zdHJpbmdTaXplRXJyWAEAAAAtdHLATgAAWBkAAABleGNlcHRpb25zLkFzc2VydGlvbkVycm9ycsFOAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkFzc2VydGlvbkVycm9yWAEAAAAtdHLCTgAAWBEAAABmdHBsaWIuZXJyb3JfcGVybXLDTgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfcGVybVgBAAAALXRyxE4AAFgUAAAAc3NsLkNlcnRpZmljYXRlRXJyb3JyxU4AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNlcnRpZmljYXRlRXJyb3JYAQAAAC10csZOAABYDQAAAG1haWxib3guRXJyb3Jyx04AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guRXJyb3JYAQAAAC10cshOAABYFgAAAG5udHBsaWIuTk5UUFJlcGx5RXJyb3JyyU4AAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUFJlcGx5RXJyb3JYAQAAAC10cspOAABYEQAAAHVuaXR0ZXN0LlNraXBUZXN0cstOAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuU2tpcFRlc3RYAQAAAC10csxOAABYGwAAAHhtbC5kb20uSW52YWxpZENoYXJhY3RlckVycnLNTgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkQ2hhcmFjdGVyRXJyWAEAAAAtdHLOTgAAWBsAAAB1cmxsaWIuQ29udGVudFRvb1Nob3J0RXJyb3Jyz04AAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLkNvbnRlbnRUb29TaG9ydEVycm9yWAEAAAAtdHLQTgAAWBUAAABuZXRyYy5OZXRyY1BhcnNlRXJyb3Jy0U4AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy5OZXRyY1BhcnNlRXJyb3JYAQAAAC10ctJOAABYGAAAAHhtbC5kb20uSW52YWxpZEFjY2Vzc0VycnLTTgAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkQWNjZXNzRXJyWAEAAAAtdHLUTgAAWBQAAAB0YXJmaWxlLkV4dHJhY3RFcnJvcnLVTgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5FeHRyYWN0RXJyb3JYAQAAAC10ctZOAABYCAAAAHV1LkVycm9yctdOAAAoanMFAABqdAUAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1Lmh0bWwjdXUuRXJyb3JYAQAAAC10cthOAABYDwAAAHNzbC5TU0xFT0ZFcnJvcnLZTgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRU9GRXJyb3JYAQAAAC10ctpOAABYEgAAAGV4Y2VwdGlvbnMuSU9FcnJvcnLbTgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5JT0Vycm9yWAEAAAAtdHLcTgAAWCIAAABDb25maWdQYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yct1OAAAoanMFAABqdAUAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3JYAQAAAC10ct5OAABYHgAAAHhtbC5kb20uSW52YWxpZE1vZGlmaWNhdGlvbkVycnLfTgAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkTW9kaWZpY2F0aW9uRXJyWAEAAAAtdHLgTgAAWBgAAAB4bWwuZG9tLldyb25nRG9jdW1lbnRFcnJy4U4AAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uV3JvbmdEb2N1bWVudEVyclgBAAAALXRy4k4AAFgWAAAAZXhjZXB0aW9ucy5NZW1vcnlFcnJvcnLjTgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5NZW1vcnlFcnJvclgBAAAALXRy5E4AAFgKAAAAY29weS5lcnJvcnLlTgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5Lmh0bWwjY29weS5lcnJvclgBAAAALXRy5k4AAFgSAAAAaW8uQmxvY2tpbmdJT0Vycm9ycudOAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQmxvY2tpbmdJT0Vycm9yWAEAAAAtdHLoTgAAWBIAAABwaWNrbGUuUGlja2xlRXJyb3Jy6U4AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlBpY2tsZUVycm9yWAEAAAAtdHLqTgAAWBYAAABodHRwbGliLkluY29tcGxldGVSZWFkcutOAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkluY29tcGxldGVSZWFkWAEAAAAtdHLsTgAAWBsAAABleGNlcHRpb25zLkluZGVudGF0aW9uRXJyb3Jy7U4AAChqcwUAAGp0BQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuSW5kZW50YXRpb25FcnJvclgBAAAALXRy7k4AAFgYAAAAdGFyZmlsZS5Db21wcmVzc2lvbkVycm9ycu9OAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkNvbXByZXNzaW9uRXJyb3JYAQAAAC10cvBOAABYFwAAAGh0dHBsaWIuVW5rbm93blByb3RvY29scvFOAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLlVua25vd25Qcm90b2NvbFgBAAAALXRy8k4AAFgZAAAAeG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbnLzTgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvblgBAAAALXRy9E4AAFgMAAAAc29ja2V0LmVycm9ycvVOAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5lcnJvclgBAAAALXRy9k4AAFgZAAAAZXhjZXB0aW9ucy5Vbmljb2RlV2FybmluZ3L3TgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlV2FybmluZ1gBAAAALXRy+E4AAFgTAAAAaW1hcGxpYi5JTUFQNC5lcnJvcnL5TgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5lcnJvclgBAAAALXRy+k4AAFgaAAAAZW1haWwuZXJyb3JzLkJvdW5kYXJ5RXJyb3Jy+04AAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLkJvdW5kYXJ5RXJyb3JYAQAAAC10cvxOAABYFAAAAHhtbC5kb20uSW5kZXhTaXplRXJycv1OAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkluZGV4U2l6ZUVyclgBAAAALXRy/k4AAFgWAAAAZXhjZXB0aW9ucy5TeW50YXhFcnJvcnL/TgAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5TeW50YXhFcnJvclgBAAAALXRyAE8AAFgXAAAAdGVzdC5zdXBwb3J0LlRlc3RGYWlsZWRyAU8AAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5UZXN0RmFpbGVkWAEAAAAtdHICTwAAWBIAAABDb29raWUuQ29va2llRXJyb3JyA08AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLkNvb2tpZUVycm9yWAEAAAAtdHIETwAAWCwAAABDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcnIFTwAAKGpzBQAAanQFAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvclgBAAAALXRyBk8AAFgTAAAAdGFyZmlsZS5TdHJlYW1FcnJvcnIHTwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5TdHJlYW1FcnJvclgBAAAALXRyCE8AAFgeAAAAZW1haWwuZXJyb3JzLk1lc3NhZ2VQYXJzZUVycm9ycglPAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI2VtYWlsLmVycm9ycy5NZXNzYWdlUGFyc2VFcnJvclgBAAAALXRyCk8AAFgWAAAAaHRtbGxpYi5IVE1MUGFyc2VFcnJvcnILTwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VFcnJvclgBAAAALXRyDE8AAFggAAAAeG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb25yDU8AAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uWAEAAAAtdHIOTwAAWBEAAABzdW5hdWRpb2Rldi5lcnJvcnIPTwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sI3N1bmF1ZGlvZGV2LmVycm9yWAEAAAAtdHIQTwAAWA0AAABpbWFnZW9wLmVycm9ychFPAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmVycm9yWAEAAAAtdHISTwAAWBQAAABhdXRvR0lMLkF1dG9HSUxFcnJvcnITTwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdXRvZ2lsLmh0bWwjYXV0b0dJTC5BdXRvR0lMRXJyb3JYAQAAAC10chRPAABYCwAAAHN1bmF1LkVycm9ychVPAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuRXJyb3JYAQAAAC10chZPAABYGQAAAHB5X2NvbXBpbGUuUHlDb21waWxlRXJyb3JyF08AAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuUHlDb21waWxlRXJyb3JYAQAAAC10chhPAABYGwAAAGV4Y2VwdGlvbnMuRW52aXJvbm1lbnRFcnJvcnIZTwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5FbnZpcm9ubWVudEVycm9yWAEAAAAtdHIaTwAAWB0AAABleGNlcHRpb25zLkRlcHJlY2F0aW9uV2FybmluZ3IbTwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5EZXByZWNhdGlvbldhcm5pbmdYAQAAAC10chxPAABYGAAAAGh0dHBsaWIuUmVzcG9uc2VOb3RSZWFkeXIdTwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5SZXNwb25zZU5vdFJlYWR5WAEAAAAtdHIeTwAAWBsAAABkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb25yH08AAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvblgBAAAALXRyIE8AAFgSAAAAcG9wbGliLmVycm9yX3Byb3RvciFPAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5lcnJvcl9wcm90b1gBAAAALXRyIk8AAFgfAAAAQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25FcnJvcnIjTwAAKGpzBQAAanQFAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9yWAEAAAAtdHIkTwAAWBMAAAB0b2tlbml6ZS5Ub2tlbkVycm9yciVPAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuaXplLmh0bWwjdG9rZW5pemUuVG9rZW5FcnJvclgBAAAALXRyJk8AAFgcAAAAZXhjZXB0aW9ucy5VbmJvdW5kTG9jYWxFcnJvcnInTwAAKGpzBQAAanQFAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5VbmJvdW5kTG9jYWxFcnJvclgBAAAALXRyKE8AAFgSAAAAQ29uZmlnUGFyc2VyLkVycm9ycilPAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5FcnJvclgBAAAALXRyKk8AAFgUAAAAZXhjZXB0aW9ucy5FeGNlcHRpb25yK08AAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuRXhjZXB0aW9uWAEAAAAtdHIsTwAAWBQAAABzc2wuU1NMV2FudFJlYWRFcnJvcnItTwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMV2FudFJlYWRFcnJvclgBAAAALXRyLk8AAFgIAAAAaWMuZXJyb3JyL08AAChqcwUAAGp0BQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5lcnJvclgBAAAALXRyME8AAFgWAAAAc2dtbGxpYi5TR01MUGFyc2VFcnJvcnIxTwAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VFcnJvclgBAAAALXRyMk8AAFgMAAAAc2VsZWN0LmVycm9ycjNPAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcnJvclgBAAAALXRyNE8AAFgSAAAAZnRwbGliLmVycm9yX3Byb3RvcjVPAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5lcnJvcl9wcm90b1gBAAAALXRyNk8AAFgMAAAAc2h1dGlsLkVycm9ycjdPAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5FcnJvclgBAAAALXRyOE8AAFgKAAAAd2F2ZS5FcnJvcnI5TwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5FcnJvclgBAAAALXRyOk8AAFgRAAAAdXJsbGliMi5IVFRQRXJyb3JyO08AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUEVycm9yWAEAAAAtdHI8TwAAWBMAAABzc2wuU1NMU3lzY2FsbEVycm9ycj1PAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTeXNjYWxsRXJyb3JYAQAAAC10cj5PAAB1WA0AAABzdGQ6MnRvM2ZpeGVycj9PAAB9ckBPAAAoWAYAAABmaWx0ZXJyQU8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1maWx0ZXJYAQAAAC10ckJPAABYCwAAAHNldF9saXRlcmFsckNPAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItc2V0X2xpdGVyYWxYAQAAAC10ckRPAABYCAAAAGV4ZWNmaWxlckVPAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZXhlY2ZpbGVYAQAAAC10ckZPAABYBgAAAHJlZHVjZXJHTwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXJlZHVjZVgBAAAALXRySE8AAFgJAAAAcmF3X2lucHV0cklPAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcmF3X2lucHV0WAEAAAAtdHJKTwAAWAYAAABpZGlvbXNyS08AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pZGlvbXNYAQAAAC10ckxPAABYBgAAAGJ1ZmZlcnJNTwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWJ1ZmZlclgBAAAALXRyTk8AAFgDAAAAemlwck9PAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItemlwWAEAAAAtdHJQTwAAWAUAAAByYWlzZXJRTwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXJhaXNlWAEAAAAtdHJSTwAAWAcAAABub256ZXJvclNPAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbm9uemVyb1gBAAAALXRyVE8AAFgFAAAAdHlwZXNyVU8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci10eXBlc1gBAAAALXRyVk8AAFgJAAAAbWV0YWNsYXNzcldPAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbWV0YWNsYXNzWAEAAAAtdHJYTwAAWAUAAABpbnB1dHJZTwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWlucHV0WAEAAAAtdHJaTwAAWAsAAABtZXRob2RhdHRyc3JbTwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLW1ldGhvZGF0dHJzWAEAAAAtdHJcTwAAWAsAAABudW1saXRlcmFsc3JdTwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLW51bWxpdGVyYWxzWAEAAAAtdHJeTwAAWAcAAABhc3NlcnRzcl9PAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItYXNzZXJ0c1gBAAAALXRyYE8AAFgGAAAAZnV0dXJlcmFPAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZnV0dXJlWAEAAAAtdHJiTwAAWAgAAABpbXBvcnRzMnJjTwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWltcG9ydHMyWAEAAAAtdHJkTwAAWAkAAABmdW5jYXR0cnNyZU8AAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1mdW5jYXR0cnNYAQAAAC10cmZPAABYBAAAAGxvbmdyZ08AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1sb25nWAEAAAAtdHJoTwAAWAQAAAByZXBycmlPAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcmVwclgBAAAALXRyak8AAFgHAAAAZ2V0Y3dkdXJrTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWdldGN3ZHVYAQAAAC10cmxPAABYBgAAAHhyYW5nZXJtTwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXhyYW5nZVgBAAAALXRybk8AAFgHAAAAaW1wb3J0c3JvTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWltcG9ydHNYAQAAAC10cnBPAABYBAAAAGV4ZWNycU8AAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1leGVjWAEAAAAtdHJyTwAAWA0AAABzdGFuZGFyZGVycm9ycnNPAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItc3RhbmRhcmRlcnJvclgBAAAALXRydE8AAFgFAAAAdGhyb3dydU8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci10aHJvd1gBAAAALXRydk8AAFgGAAAAaW1wb3J0cndPAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaW1wb3J0WAEAAAAtdHJ4TwAAWAwAAAB0dXBsZV9wYXJhbXNyeU8AAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci10dXBsZV9wYXJhbXNYAQAAAC10cnpPAABYBwAAAHVuaWNvZGVye08AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci11bmljb2RlWAEAAAAtdHJ8TwAAWBEAAABpdGVydG9vbHNfaW1wb3J0c3J9TwAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWl0ZXJ0b29sc19pbXBvcnRzWAEAAAAtdHJ+TwAAWAQAAABkaWN0cn9PAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZGljdFgBAAAALXRygE8AAFgHAAAAc3lzX2V4Y3KBTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXN5c19leGNYAQAAAC10coJPAABYCQAAAGl0ZXJ0b29sc3KDTwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWl0ZXJ0b29sc1gBAAAALXRyhE8AAFgGAAAAZXhjZXB0coVPAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZXhjZXB0WAEAAAAtdHKGTwAAWAgAAABleGl0ZnVuY3KHTwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWV4aXRmdW5jWAEAAAAtdHKITwAAWAYAAAB1cmxsaWJyiU8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci11cmxsaWJYAQAAAC10copPAABYBwAAAHJlbmFtZXNyi08AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yZW5hbWVzWAEAAAAtdHKMTwAAWAMAAABtYXByjU8AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1tYXBYAQAAAC10co5PAABYCgAAAGlzaW5zdGFuY2Vyj08AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pc2luc3RhbmNlWAEAAAAtdHKQTwAAWAUAAABwYXJlbnKRTwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXBhcmVuWAEAAAAtdHKSTwAAWAUAAABwcmludHKTTwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXByaW50WAEAAAAtdHKUTwAAWAQAAABuZXh0cpVPAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbmV4dFgBAAAALXRylk8AAFgCAAAAbmVyl08AAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1uZVgBAAAALXRymE8AAFgKAAAAeHJlYWRsaW5lc3KZTwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXhyZWFkbGluZXNYAQAAAC10cppPAABYCgAAAGJhc2VzdHJpbmdym08AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1iYXNlc3RyaW5nWAEAAAAtdHKcTwAAWAYAAABpbnRlcm5ynU8AAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbnRlcm5YAQAAAC10cp5PAABYCAAAAHdzX2NvbW1hcp9PAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItd3NfY29tbWFYAQAAAC10cqBPAABYBQAAAGFwcGx5cqFPAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItYXBwbHlYAQAAAC10cqJPAABYBwAAAGhhc19rZXlyo08AAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1oYXNfa2V5WAEAAAAtdHKkTwAAdVgFAAAAYzp2YXJypU8AAH1ypk8AAChYCwAAAFB5TGlzdF9UeXBlcqdPAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfVHlwZVgBAAAALXRyqE8AAFgMAAAAUHlDbGFzc19UeXBlcqlPAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlDbGFzc19UeXBlWAEAAAAtdHKqTwAAWA0AAABQeVN0cmluZ19UeXBlcqtPAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX1R5cGVYAQAAAC10cqxPAABYDAAAAFB5U2xpY2VfVHlwZXKtTwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfVHlwZVgBAAAALXRyrk8AAFgLAAAAUHlEaWN0X1R5cGVyr08AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9UeXBlWAEAAAAtdHKwTwAAWAwAAABQeVR1cGxlX1R5cGVysU8AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX1R5cGVYAQAAAC10crJPAABYCwAAAFB5VHlwZV9UeXBlcrNPAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfVHlwZVgBAAAALXRytE8AAFgPAAAAUHlGdW5jdGlvbl9UeXBlcrVPAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9UeXBlWAEAAAAtdHK2TwAAWA0AAABQeV9ldmFsX2lucHV0crdPAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfZXZhbF9pbnB1dFgBAAAALXRyuE8AAFgLAAAAUHlMb25nX1R5cGVyuU8AAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19UeXBlWAEAAAAtdHK6TwAAWA0AAABQeU1vZHVsZV9UeXBlcrtPAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX1R5cGVYAQAAAC10crxPAABYCgAAAFB5U2V0X1R5cGVyvU8AAChqcwUAAGp0BQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfVHlwZVgBAAAALXRyvk8AAFgKAAAAUHlJbnRfVHlwZXK/TwAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9UeXBlWAEAAAAtdHLATwAAWA4AAABQeUNvbXBsZXhfVHlwZXLBTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X1R5cGVYAQAAAC10csJPAABYDgAAAFB5VW5pY29kZV9UeXBlcsNPAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfVHlwZVgBAAAALXRyxE8AAFgPAAAAUHlfc2luZ2xlX2lucHV0csVPAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfc2luZ2xlX2lucHV0WAEAAAAtdHLGTwAAWAwAAABQeUZsb2F0X1R5cGVyx08AAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X1R5cGVYAQAAAC10cshPAABYEAAAAFB5X0VORF9PRl9CVUZGRVJyyU8AAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfRU5EX09GX0JVRkZFUlgBAAAALXRyyk8AAFgHAAAAUHlfTm9uZXLLTwAAKGpzBQAAanQFAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbm9uZS5odG1sI2MuUHlfTm9uZVgBAAAALXRyzE8AAFgQAAAAUHlGcm96ZW5TZXRfVHlwZXLNTwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeUZyb3plblNldF9UeXBlWAEAAAAtdHLOTwAAWBEAAABQeVRyYWNlX0VYQ0VQVElPTnLPTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9FWENFUFRJT05YAQAAAC10ctBPAABYEgAAAENPX0ZVVFVSRV9ESVZJU0lPTnLRTwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLkNPX0ZVVFVSRV9ESVZJU0lPTlgBAAAALXRy0k8AAFgWAAAAUHlJbXBvcnRfRnJvemVuTW9kdWxlc3LTTwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzWAEAAAAtdHLUTwAAWAcAAABQeV9UcnVlctVPAAAoanMFAABqdAUAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWwjYy5QeV9UcnVlWAEAAAAtdHLWTwAAWA4AAABQeVRyYWNlX0NfQ0FMTHLXTwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX0NBTExYAQAAAC10cthPAABYDwAAAFB5Q2FsbEl0ZXJfVHlwZXLZTwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5Q2FsbEl0ZXJfVHlwZVgBAAAALXRy2k8AAFgQAAAAUHlUcmFjZV9DX1JFVFVSTnLbTwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX1JFVFVSTlgBAAAALXRy3E8AAFgOAAAAX1B5X05vbmVTdHJ1Y3Ry3U8AAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLl9QeV9Ob25lU3RydWN0WAEAAAAtdHLeTwAAWBMAAABQeVRyYWNlX0NfRVhDRVBUSU9Oct9PAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX0NfRVhDRVBUSU9OWAEAAAAtdHLgTwAAWAoAAABQeUdlbl9UeXBlcuFPAAAoanMFAABqdAUAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nZW4uaHRtbCNjLlB5R2VuX1R5cGVYAQAAAC10cuJPAABYEAAAAFB5Qnl0ZUFycmF5X1R5cGVy408AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfVHlwZVgBAAAALXRy5E8AAFgNAAAAUHlfZmlsZV9pbnB1dHLlTwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X2ZpbGVfaW5wdXRYAQAAAC10cuZPAABYCwAAAFB5Q29kZV9UeXBlcudPAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlLmh0bWwjYy5QeUNvZGVfVHlwZVgBAAAALXRy6E8AAFgIAAAAUHlfRmFsc2Vy6U8AAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbCNjLlB5X0ZhbHNlWAEAAAAtdHLqTwAAWAsAAABQeUNlbGxfVHlwZXLrTwAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX1R5cGVYAQAAAC10cuxPAABYDAAAAFB5VHJhY2VfTElORXLtTwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9MSU5FWAEAAAAtdHLuTwAAWAsAAABQeV9FbGxpcHNpc3LvTwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2xpY2UuaHRtbCNjLlB5X0VsbGlwc2lzWAEAAAAtdHLwTwAAWA4AAABQeVRyYWNlX1JFVFVSTnLxTwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9SRVRVUk5YAQAAAC10cvJPAABYCwAAAFB5RmlsZV9UeXBlcvNPAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfVHlwZVgBAAAALXRy9E8AAFgNAAAAUHlNZXRob2RfVHlwZXL1TwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9UeXBlWAEAAAAtdHL2TwAAWA4AAABQeVNlcUl0ZXJfVHlwZXL3TwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5U2VxSXRlcl9UeXBlWAEAAAAtdHL4TwAAWA8AAABQeVByb3BlcnR5X1R5cGVy+U8AAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5UHJvcGVydHlfVHlwZVgBAAAALXRy+k8AAFgMAAAAUHlUcmFjZV9DQUxMcvtPAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX0NBTExYAQAAAC10cvxPAABYDQAAAFB5QnVmZmVyX1R5cGVy/U8AAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfVHlwZVgBAAAALXRy/k8AAFgPAAAAUHlJbnN0YW5jZV9UeXBlcv9PAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlJbnN0YW5jZV9UeXBlWAEAAAAtdHIAUAAAdVgKAAAAYzpmdW5jdGlvbnIBUAAAfXICUAAAKFgIAAAAUHlfVklTSVRyA1AAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlfVklTSVRYAQAAAC10cgRQAABYGQAAAFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXhyBVAAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeFgBAAAALXRyBlAAAFgVAAAAUHlOdW1iZXJfSW5QbGFjZVBvd2VycgdQAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VQb3dlclgBAAAALXRyCFAAAFgYAAAAUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlcglQAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlWAEAAAAtdHIKUAAAWBAAAABQeVR1cGxlX0dldFNsaWNlcgtQAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9HZXRTbGljZVgBAAAALXRyDFAAAFgVAAAAUHlPYmplY3RfQXNSZWFkQnVmZmVycg1QAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmpidWZmZXIuaHRtbCNjLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlclgBAAAALXRyDlAAAFgJAAAAUHlfQXRFeGl0cg9QAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5X0F0RXhpdFgBAAAALXRyEFAAAFghAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uchFQAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb25YAQAAAC10chJQAABYDgAAAFB5TnVtYmVyX0Zsb2F0chNQAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0Zsb2F0WAEAAAAtdHIUUAAAWBIAAABQeU9TX2FzY2lpX2Zvcm1hdGRyFVAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1NfYXNjaWlfZm9ybWF0ZFgBAAAALXRyFlAAAFgQAAAAUHlGbG9hdF9Bc1N0cmluZ3IXUAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQXNTdHJpbmdYAQAAAC10chhQAABYEAAAAFB5Q29kZWNfUmVnaXN0ZXJyGVAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1JlZ2lzdGVyWAEAAAAtdHIaUAAAWBgAAABQeVN0cmluZ19Bc0RlY29kZWRPYmplY3RyG1AAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0WAEAAAAtdHIcUAAAWBMAAABQeVNlcXVlbmNlX1NldFNsaWNlch1QAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9TZXRTbGljZVgBAAAALXRyHlAAAFgaAAAAUHlEYXRlVGltZV9EQVRFX0dFVF9NSU5VVEVyH1AAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX01JTlVURVgBAAAALXRyIFAAAFgcAAAAUHlVbmljb2RlX0RlY29kZU1CQ1NTdGF0ZWZ1bHIhUAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZU1CQ1NTdGF0ZWZ1bFgBAAAALXRyIlAAAFgUAAAAUHlfVU5JQ09ERV9UT0RFQ0lNQUxyI1AAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9ERUNJTUFMWAEAAAAtdHIkUAAAWA4AAABQeUFueVNldF9DaGVja3IlUAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeUFueVNldF9DaGVja1gBAAAALXRyJlAAAFgPAAAAUHlUdXBsZV9HZXRJdGVtcidQAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9HZXRJdGVtWAEAAAAtdHIoUAAAWBEAAABQeU9TX2FzY2lpX3N0cnRvZHIpUAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19hc2NpaV9zdHJ0b2RYAQAAAC10cipQAABYEwAAAFB5T2JqZWN0X0dDX1VuVHJhY2tyK1AAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfVW5UcmFja1gBAAAALXRyLFAAAFgSAAAAUHlVbmljb2RlX0NvbnRhaW5zci1QAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ29udGFpbnNYAQAAAC10ci5QAABYHgAAAFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZ3IvUAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nWAEAAAAtdHIwUAAAWBMAAABQeVNlcXVlbmNlX0RlbFNsaWNlcjFQAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9EZWxTbGljZVgBAAAALXRyMlAAAFgMAAAAUHlEYXRlX0NoZWNrcjNQAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0NoZWNrWAEAAAAtdHI0UAAAWBEAAABQeVRocmVhZFN0YXRlX05ld3I1UAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9OZXdYAQAAAC10cjZQAABYHQAAAFB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlcjdQAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZVgBAAAALXRyOFAAAFgUAAAAUHlDb2RlY19TdHJpY3RFcnJvcnNyOVAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1N0cmljdEVycm9yc1gBAAAALXRyOlAAAFgTAAAAUHlPYmplY3RfQ2FsbE9iamVjdHI7UAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsT2JqZWN0WAEAAAAtdHI8UAAAWA8AAABQeVVuaWNvZGVfQ2hlY2tyPVAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9DaGVja1gBAAAALXRyPlAAAFgbAAAAUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlcj9QAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGVYAQAAAC10ckBQAABYDAAAAFB5TnVtYmVyX0FkZHJBUAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9BZGRYAQAAAC10ckJQAABYEQAAAFB5R0lMU3RhdGVfRW5zdXJlckNQAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUdJTFN0YXRlX0Vuc3VyZVgBAAAALXRyRFAAAFgYAAAAUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nckVQAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmdYAQAAAC10ckZQAABYEAAAAFB5T2JqZWN0X0hhc0F0dHJyR1AAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzQXR0clgBAAAALXRySFAAAFgZAAAAUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZ3JJUAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZ1gBAAAALXRySlAAAFgMAAAAUHlUeXBlX0NoZWNrcktQAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfQ2hlY2tYAQAAAC10ckxQAABYEAAAAFB5VHVwbGVfR0VUX0lURU1yTVAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0dFVF9JVEVNWAEAAAAtdHJOUAAAWBQAAABQeUNhcHN1bGVfR2V0UG9pbnRlcnJPUAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldFBvaW50ZXJYAQAAAC10clBQAABYCgAAAFB5UnVuX0ZpbGVyUVAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxlWAEAAAAtdHJSUAAAWBYAAABQeU9iamVjdF9IYXNBdHRyU3RyaW5nclNQAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0hhc0F0dHJTdHJpbmdYAQAAAC10clRQAABYDgAAAFB5T1NfQWZ0ZXJGb3JrclVQAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5T1NfQWZ0ZXJGb3JrWAEAAAAtdHJWUAAAWAsAAABQeUxpc3RfU2l6ZXJXUAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1NpemVYAQAAAC10clhQAABYFAAAAFB5V2Vha3JlZl9HRVRfT0JKRUNUcllQAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjYy5QeVdlYWtyZWZfR0VUX09CSkVDVFgBAAAALXRyWlAAAFgVAAAAUHlVbmljb2RlX0Zyb21Vbmljb2RlcltQAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbVVuaWNvZGVYAQAAAC10clxQAABYEwAAAFB5Q09iamVjdF9Bc1ZvaWRQdHJyXVAAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvYmplY3QuaHRtbCNjLlB5Q09iamVjdF9Bc1ZvaWRQdHJYAQAAAC10cl5QAABYJwAAAFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZXJfUAAAKGpzBQAAanQFAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZVgBAAAALXRyYFAAAFgSAAAAUHlfVU5JQ09ERV9JU0RJR0lUcmFQAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTRElHSVRYAQAAAC10cmJQAABYFAAAAFB5VW5pY29kZV9TcGxpdGxpbmVzcmNQAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfU3BsaXRsaW5lc1gBAAAALXRyZFAAAFgbAAAAUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzcmVQAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNYAQAAAC10cmZQAABYGwAAAFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZXJnUAAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfQ3JlYXRlWAEAAAAtdHJoUAAAWA0AAABQeUZsb2F0X0NoZWNrcmlQAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9DaGVja1gBAAAALXRyalAAAFgNAAAAUHlXcmFwcGVyX05ld3JrUAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlXcmFwcGVyX05ld1gBAAAALXRybFAAAFgRAAAAUHlfQWRkUGVuZGluZ0NhbGxybVAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0FkZFBlbmRpbmdDYWxsWAEAAAAtdHJuUAAAWA8AAABQeVNlcUl0ZXJfQ2hlY2tyb1AAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeVNlcUl0ZXJfQ2hlY2tYAQAAAC10cnBQAABYDwAAAFB5U2VxdWVuY2VfRmFzdHJxUAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfRmFzdFgBAAAALXRyclAAAFgSAAAAUHlUaHJlYWRTdGF0ZV9OZXh0cnNQAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX05leHRYAQAAAC10cnRQAABYEgAAAFB5UnVuX0FueUZpbGVGbGFnc3J1UAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0FueUZpbGVGbGFnc1gBAAAALXRydlAAAFgQAAAAX1B5T2JqZWN0X05ld1ZhcnJ3UAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuX1B5T2JqZWN0X05ld1ZhclgBAAAALXRyeFAAAFgZAAAAUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcnJ5UAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyWAEAAAAtdHJ6UAAAWA4AAABQeU1hcHBpbmdfU2l6ZXJ7UAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX1NpemVYAQAAAC10cnxQAABYHgAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZXJ9UAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfQ3JlYXRlWAEAAAAtdHJ+UAAAWBIAAABQeVR1cGxlX0NoZWNrRXhhY3Ryf1AAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0NoZWNrRXhhY3RYAQAAAC10coBQAABYEgAAAFB5Qnl0ZUFycmF5X1Jlc2l6ZXKBUAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9SZXNpemVYAQAAAC10coJQAABYEQAAAFB5VHlwZV9HZW5lcmljTmV3coNQAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfR2VuZXJpY05ld1gBAAAALXRyhFAAAFgQAAAAUHlNb2R1bGVfR2V0TmFtZXKFUAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9HZXROYW1lWAEAAAAtdHKGUAAAWBAAAABQeVNlcXVlbmNlX0NvdW50codQAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9Db3VudFgBAAAALXRyiFAAAFgNAAAAUHlfR2V0VmVyc2lvbnKJUAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0VmVyc2lvblgBAAAALXRyilAAAFgNAAAAUHlTZXFJdGVyX05ld3KLUAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5U2VxSXRlcl9OZXdYAQAAAC10coxQAABYDAAAAFB5TW9kdWxlX05ld3KNUAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9OZXdYAQAAAC10co5QAABYEAAAAFB5X0NvbXBpbGVTdHJpbmdyj1AAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9Db21waWxlU3RyaW5nWAEAAAAtdHKQUAAAWA8AAABQeU51bWJlcl9Db2VyY2VykVAAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQ29lcmNlWAEAAAAtdHKSUAAAWBUAAABQeUNPYmplY3RfRnJvbVZvaWRQdHJyk1AAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvYmplY3QuaHRtbCNjLlB5Q09iamVjdF9Gcm9tVm9pZFB0clgBAAAALXRylFAAAFgTAAAAUHlDb2RlY19Mb29rdXBFcnJvcnKVUAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfTG9va3VwRXJyb3JYAQAAAC10cpZQAABYDAAAAFB5VHVwbGVfUGFja3KXUAAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfUGFja1gBAAAALXRymFAAAFgNAAAAUHlEZWx0YV9DaGVja3KZUAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGVsdGFfQ2hlY2tYAQAAAC10cppQAABYDgAAAFB5TGlzdF9HZXRJdGVtcptQAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR2V0SXRlbVgBAAAALXRynFAAAFgbAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlcp1QAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGVYAQAAAC10cp5QAABYHwAAAFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmdyn1AAAChqcwUAAGp0BQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmdYAQAAAC10cqBQAABYDQAAAFB5TWV0aG9kX1NlbGZyoVAAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfU2VsZlgBAAAALXRyolAAAFgRAAAAUHlfTmV3SW50ZXJwcmV0ZXJyo1AAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X05ld0ludGVycHJldGVyWAEAAAAtdHKkUAAAWA8AAABQeU9iamVjdF9HQ19EZWxypVAAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfRGVsWAEAAAAtdHKmUAAAWAwAAABQeUNvZGVfQ2hlY2typ1AAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9DaGVja1gBAAAALXRyqFAAAFgPAAAAUHlUaW1lX0Zyb21UaW1lcqlQAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlUaW1lX0Zyb21UaW1lWAEAAAAtdHKqUAAAWBYAAABQeVVuaWNvZGVfRGVjb2RlTGF0aW4xcqtQAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xWAEAAAAtdHKsUAAAWBcAAABQeUludGVycHJldGVyU3RhdGVfTmV4dHKtUAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX05leHRYAQAAAC10cq5QAABYDwAAAFB5Qm9vbF9Gcm9tTG9uZ3KvUAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYm9vbC5odG1sI2MuUHlCb29sX0Zyb21Mb25nWAEAAAAtdHKwUAAAWAoAAABQeURpY3RfTmV3crFQAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfTmV3WAEAAAAtdHKyUAAAWBcAAABQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcnKzUAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlclgBAAAALXRytFAAAFgOAAAAUHlEaWN0X0RlbEl0ZW1ytVAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9EZWxJdGVtWAEAAAAtdHK2UAAAWBwAAABQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrcrdQAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tYAQAAAC10crhQAABYHQAAAFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzcrlQAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3NYAQAAAC10crpQAABYEgAAAFB5V2Vha3JlZl9DaGVja1JlZnK7UAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0NoZWNrUmVmWAEAAAAtdHK8UAAAWBEAAABQeVVuaWNvZGVfQVNfREFUQXK9UAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FTX0RBVEFYAQAAAC10cr5QAABYHQAAAFB5VW5pY29kZV9FbmNvZGVVbmljb2RlRXNjYXBlcr9QAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVW5pY29kZUVzY2FwZVgBAAAALXRywFAAAFgWAAAAUHlCeXRlQXJyYXlfQ2hlY2tFeGFjdHLBUAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9DaGVja0V4YWN0WAEAAAAtdHLCUAAAWBAAAABQeVVuaWNvZGVfRW5jb2RlcsNQAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlWAEAAAAtdHLEUAAAWBYAAABQeU9iamVjdF9Bc1dyaXRlQnVmZmVycsVQAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmpidWZmZXIuaHRtbCNjLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXJYAQAAAC10csZQAABYFwAAAFB5QnVmZmVyX1NpemVGcm9tRm9ybWF0csdQAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX1NpemVGcm9tRm9ybWF0WAEAAAAtdHLIUAAAWBgAAABQeU51bWJlcl9JblBsYWNlU3VidHJhY3RyyVAAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0WAEAAAAtdHLKUAAAWBMAAABQeVN5c19BZGRXYXJuT3B0aW9ucstQAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0FkZFdhcm5PcHRpb25YAQAAAC10csxQAABYDgAAAFB5RmxvYXRfR2V0TWlucs1QAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9HZXRNaW5YAQAAAC10cs5QAABYCgAAAFB5TGlzdF9OZXdyz1AAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9OZXdYAQAAAC10ctBQAABYIAAAAFB5VW5pY29kZV9FbmNvZGVSYXdVbmljb2RlRXNjYXBlctFQAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlUmF3VW5pY29kZUVzY2FwZVgBAAAALXRy0lAAAFgUAAAAUHlDYXBzdWxlX0NoZWNrRXhhY3Ry01AAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9DaGVja0V4YWN0WAEAAAAtdHLUUAAAWA8AAABQeUNPYmplY3RfQ2hlY2ty1VAAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvYmplY3QuaHRtbCNjLlB5Q09iamVjdF9DaGVja1gBAAAALXRy1lAAAFgNAAAAUHlTeXNfR2V0RmlsZXLXUAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19HZXRGaWxlWAEAAAAtdHLYUAAAWBUAAABQeVVuaWNvZGVfRGVjb2RlQVNDSUly2VAAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVBU0NJSVgBAAAALXRy2lAAAFgSAAAAUHlfRmRJc0ludGVyYWN0aXZlcttQAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5X0ZkSXNJbnRlcmFjdGl2ZVgBAAAALXRy3FAAAFgUAAAAUHlVbmljb2RlX0FzV2lkZUNoYXJy3VAAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1dpZGVDaGFyWAEAAAAtdHLeUAAAWBgAAABQeVNlcXVlbmNlX0luUGxhY2VDb25jYXRy31AAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0luUGxhY2VDb25jYXRYAQAAAC10cuBQAABYEgAAAFB5VW5pY29kZV9HRVRfU0laRXLhUAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0dFVF9TSVpFWAEAAAAtdHLiUAAAWBQAAABQeUNvZGVjX1N0cmVhbVJlYWRlcnLjUAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfU3RyZWFtUmVhZGVyWAEAAAAtdHLkUAAAWAwAAABQeU9iamVjdF9EaXJy5VAAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfRGlyWAEAAAAtdHLmUAAAWA0AAABQeURpY3RfVmFsdWVzcudQAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfVmFsdWVzWAEAAAAtdHLoUAAAWBsAAABQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGVy6VAAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlWAEAAAAtdHLqUAAAWBEAAABQeU51bWJlcl9Db2VyY2VFeHLrUAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Db2VyY2VFeFgBAAAALXRy7FAAAFgeAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29ucu1QAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb25YAQAAAC10cu5QAABYCwAAAFB5RGljdF9Db3B5cu9QAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ29weVgBAAAALXRy8FAAAFgWAAAAUHlVbmljb2RlX0VuY29kZUxhdGluMXLxUAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZUxhdGluMVgBAAAALXRy8lAAAFgPAAAAUHlPU19hc2NpaV9hdG9mcvNQAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX2FzY2lpX2F0b2ZYAQAAAC10cvRQAABYEwAAAFB5QnVmZmVyX0Zyb21NZW1vcnly9VAAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfRnJvbU1lbW9yeVgBAAAALXRy9lAAAFgYAAAAX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9ucvdQAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLl9QeUltcG9ydF9GaXh1cEV4dGVuc2lvblgBAAAALXRy+FAAAFgVAAAAUHlVbmljb2RlX0VuY29kZVVURjMycvlQAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGMzJYAQAAAC10cvpQAABYFQAAAFB5VW5pY29kZV9Gcm9tRm9ybWF0VnL7UAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21Gb3JtYXRWWAEAAAAtdHL8UAAAWBcAAABQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ3L9UAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdYAQAAAC10cv5QAABYDQAAAFB5SW50X0FTX0xPTkdy/1AAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfQVNfTE9OR1gBAAAALXRyAFEAAFgeAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0cgFRAAAoanMFAABqdAUAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3RYAQAAAC10cgJRAABYCQAAAFB5TWVtX0RlbHIDUQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9EZWxYAQAAAC10cgRRAABYEQAAAFB5QnVmZmVyX0ZpbGxJbmZvcgVRAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0ZpbGxJbmZvWAEAAAAtdHIGUQAAWBQAAABQeUNvZGVjX1N0cmVhbVdyaXRlcnIHUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfU3RyZWFtV3JpdGVyWAEAAAAtdHIIUQAAWBUAAABQeVJ1bl9JbnRlcmFjdGl2ZUxvb3ByCVEAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9JbnRlcmFjdGl2ZUxvb3BYAQAAAC10cgpRAABYDgAAAFB5SW50X0Zyb21Mb25ncgtRAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0Zyb21Mb25nWAEAAAAtdHIMUQAAWAsAAABQeU9TX2dldHNpZ3INUQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX2dldHNpZ1gBAAAALXRyDlEAAFgRAAAAUHlDYXBzdWxlX0lzVmFsaWRyD1EAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9Jc1ZhbGlkWAEAAAAtdHIQUQAAWBYAAABQeVVuaWNvZGVfQXNNQkNTU3RyaW5nchFRAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNNQkNTU3RyaW5nWAEAAAAtdHISUQAAWBEAAABQeUV2YWxfRXZhbENvZGVFeHITUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5RXZhbF9FdmFsQ29kZUV4WAEAAAAtdHIUUQAAWAsAAABQeUFyZ19QYXJzZXIVUQAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19QYXJzZVgBAAAALXRyFlEAAFgXAAAAX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25yF1EAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25YAQAAAC10chhRAABYFAAAAFB5VGhyZWFkU3RhdGVfRGVsZXRlchlRAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX0RlbGV0ZVgBAAAALXRyGlEAAFgYAAAAUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNchtRAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNWAEAAAAtdHIcUQAAWAkAAABQeVNldF9Qb3ByHVEAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfUG9wWAEAAAAtdHIeUQAAWBIAAABQeURlc2NyX05ld1dyYXBwZXJyH1EAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5RGVzY3JfTmV3V3JhcHBlclgBAAAALXRyIFEAAFgMAAAAUHlFcnJfV2FybkV4ciFRAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9XYXJuRXhYAQAAAC10ciJRAABYDwAAAFB5X0dldEJ1aWxkSW5mb3IjUQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0QnVpbGRJbmZvWAEAAAAtdHIkUQAAWA8AAABfUHlUdXBsZV9SZXNpemVyJVEAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5fUHlUdXBsZV9SZXNpemVYAQAAAC10ciZRAABYDwAAAFB5U2VxdWVuY2VfSVRFTXInUQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfSVRFTVgBAAAALXRyKFEAAFgMAAAAUHlUdXBsZV9TaXplcilRAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9TaXplWAEAAAAtdHIqUQAAWA8AAABQeUVycl9TZXRPYmplY3RyK1EAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldE9iamVjdFgBAAAALXRyLFEAAFgcAAAAUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFza3ItUQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrWAEAAAAtdHIuUQAAWBQAAABQeUltcG9ydF9HZXRJbXBvcnRlcnIvUQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9HZXRJbXBvcnRlclgBAAAALXRyMFEAAFgYAAAAUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0cjFRAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdFgBAAAALXRyMlEAAFgOAAAAUHlfR2V0UGxhdGZvcm1yM1EAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldFBsYXRmb3JtWAEAAAAtdHI0UQAAWBYAAABQeUltcG9ydF9FeHRlbmRJbml0dGFicjVRAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0V4dGVuZEluaXR0YWJYAQAAAC10cjZRAABYIAAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0cjdRAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydFgBAAAALXRyOFEAAFgRAAAAUHlGaWxlX1NldEJ1ZlNpemVyOVEAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9TZXRCdWZTaXplWAEAAAAtdHI6UQAAWBkAAABQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzcjtRAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFnc1gBAAAALXRyPFEAAFgQAAAAUHlfU2V0UHl0aG9uSG9tZXI9UQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfU2V0UHl0aG9uSG9tZVgBAAAALXRyPlEAAFgRAAAAUHlUeXBlX0NsZWFyQ2FjaGVyP1EAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9DbGVhckNhY2hlWAEAAAAtdHJAUQAAWBAAAABQeV9HZXRFeGVjUHJlZml4ckFRAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRFeGVjUHJlZml4WAEAAAAtdHJCUQAAWBgAAABQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkVyQ1EAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkVYAQAAAC10ckRRAABYEgAAAFB5X1VOSUNPREVfVE9USVRMRXJFUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT1RJVExFWAEAAAAtdHJGUQAAWB0AAABQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZXJHUQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGVYAQAAAC10ckhRAABYCgAAAFB5Q29kZV9OZXdySVEAAChqcwUAAGp0BQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9OZXdYAQAAAC10ckpRAABYEgAAAFB5RXJyX05ld0V4Y2VwdGlvbnJLUQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfTmV3RXhjZXB0aW9uWAEAAAAtdHJMUQAAWBUAAABQeVVuaWNvZGVfUmljaENvbXBhcmVyTVEAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9SaWNoQ29tcGFyZVgBAAAALXRyTlEAAFgNAAAAUHlPYmplY3RfSGFzaHJPUQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9IYXNoWAEAAAAtdHJQUQAAWBQAAABQeUNvZGVjX0lnbm9yZUVycm9yc3JRUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfSWdub3JlRXJyb3JzWAEAAAAtdHJSUQAAWAoAAABQeUNlbGxfR2V0clNRAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxfR2V0WAEAAAAtdHJUUQAAWBYAAABQeU51bWJlcl9JblBsYWNlRGl2aWRlclVRAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VEaXZpZGVYAQAAAC10clZRAABYEQAAAFB5TWFwcGluZ19EZWxJdGVtcldRAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfRGVsSXRlbVgBAAAALXRyWFEAAFgPAAAAUHlUeXBlX01vZGlmaWVkcllRAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfTW9kaWZpZWRYAQAAAC10clpRAABYDQAAAFB5RXJyX1Jlc3RvcmVyW1EAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1Jlc3RvcmVYAQAAAC10clxRAABYFgAAAFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNyXVEAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNYAQAAAC10cl5RAABYFAAAAFB5X1VOSUNPREVfSVNOVU1FUklDcl9RAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTTlVNRVJJQ1gBAAAALXRyYFEAAFgbAAAAUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkcmFRAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZFgBAAAALXRyYlEAAFgVAAAAUHlPU19kb3VibGVfdG9fc3RyaW5ncmNRAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX2RvdWJsZV90b19zdHJpbmdYAQAAAC10cmRRAABYDgAAAFB5TGlzdF9TZXRJdGVtcmVRAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU2V0SXRlbVgBAAAALXRyZlEAAFgVAAAAUHlVbmljb2RlX0RlY29kZVVURjE2cmdRAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGMTZYAQAAAC10cmhRAABYEAAAAFB5TWFwcGluZ19IYXNLZXlyaVEAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19IYXNLZXlYAQAAAC10cmpRAABYDAAAAFB5Q2VsbF9DaGVja3JrUQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX0NoZWNrWAEAAAAtdHJsUQAAWBMAAABQeURhdGVUaW1lX0dFVF9ZRUFScm1RAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9HRVRfWUVBUlgBAAAALXRyblEAAFgWAAAAUHlOdW1iZXJfSW5QbGFjZVJzaGlmdHJvUQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlUnNoaWZ0WAEAAAAtdHJwUQAAWBUAAABQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXNycVEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfSXNDb250aWd1b3VzWAEAAAAtdHJyUQAAWAgAAABQeV9DTEVBUnJzUQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X0NMRUFSWAEAAAAtdHJ0UQAAWBoAAABQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcHJ1UQAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXBYAQAAAC10cnZRAABYEAAAAFB5Q2FsbEl0ZXJfQ2hlY2tyd1EAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeUNhbGxJdGVyX0NoZWNrWAEAAAAtdHJ4UQAAWAwAAABQeURpY3RfTWVyZ2VyeVEAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9NZXJnZVgBAAAALXRyelEAAFgQAAAAUHlPYmplY3RfRGVsQXR0cnJ7UQAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9EZWxBdHRyWAEAAAAtdHJ8UQAAWA4AAABQeVN0cmluZ19DaGVja3J9UQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19DaGVja1gBAAAALXRyflEAAFgPAAAAUHlMb25nX0Zyb21Mb25ncn9RAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbUxvbmdYAQAAAC10coBRAABYEQAAAFB5TnVtYmVyX1Bvc2l0aXZlcoFRAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1Bvc2l0aXZlWAEAAAAtdHKCUQAAWBMAAABQeUJ1ZmZlcl9Gcm9tT2JqZWN0coNRAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0Zyb21PYmplY3RYAQAAAC10coRRAABYFwAAAFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4coVRAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4WAEAAAAtdHKGUQAAWA8AAABQeU9iamVjdF9OZXdWYXJyh1EAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X05ld1ZhclgBAAAALXRyiFEAAFgUAAAAUHlDYXBzdWxlX0dldENvbnRleHRyiVEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9HZXRDb250ZXh0WAEAAAAtdHKKUQAAWAoAAABQeUNlbGxfR0VUcotRAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxfR0VUWAEAAAAtdHKMUQAAWBIAAABQeVRocmVhZFN0YXRlX1N3YXByjVEAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVfU3dhcFgBAAAALXRyjlEAAFgPAAAAUHlEZWx0YV9Gcm9tRFNVco9RAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEZWx0YV9Gcm9tRFNVWAEAAAAtdHKQUQAAWAwAAABQeUl0ZXJfQ2hlY2tykVEAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXIuaHRtbCNjLlB5SXRlcl9DaGVja1gBAAAALXRyklEAAFgPAAAAUHlXZWFrcmVmX0NoZWNrcpNRAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjYy5QeVdlYWtyZWZfQ2hlY2tYAQAAAC10cpRRAABYHQAAAFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplcpVRAAAoanMFAABqdAUAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplWAEAAAAtdHKWUQAAWA8AAABQeU9iamVjdF9HQ19OZXdyl1EAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfTmV3WAEAAAAtdHKYUQAAWBEAAABQeVJ1bl9TdHJpbmdGbGFnc3KZUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1N0cmluZ0ZsYWdzWAEAAAAtdHKaUQAAWBcAAABQeU1vZHVsZV9BZGRTdHJpbmdNYWNyb3KbUQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRTdHJpbmdNYWNyb1gBAAAALXRynFEAAFgUAAAAUHlFdmFsX1JlbGVhc2VUaHJlYWRynVEAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9SZWxlYXNlVGhyZWFkWAEAAAAtdHKeUQAAWBQAAABQeUJ5dGVBcnJheV9Bc1N0cmluZ3KfUQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9Bc1N0cmluZ1gBAAAALXRyoFEAAFgMAAAAUHlOdW1iZXJfQW5kcqFRAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0FuZFgBAAAALXRyolEAAFgRAAAAUHlMb25nX0Zyb21TaXplX3Ryo1EAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tU2l6ZV90WAEAAAAtdHKkUQAAWAwAAABQeU9iamVjdF9OZXdypVEAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X05ld1gBAAAALXRyplEAAFgLAAAAUHlTbGljZV9OZXdyp1EAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX05ld1gBAAAALXRyqFEAAFgWAAAAUHlGcm96ZW5TZXRfQ2hlY2tFeGFjdHKpUQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeUZyb3plblNldF9DaGVja0V4YWN0WAEAAAAtdHKqUQAAWB4AAABQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVyq1EAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZVgBAAAALXRyrFEAAFgYAAAAUHlEYXRlVGltZV9Gcm9tVGltZXN0YW1wcq1RAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9Gcm9tVGltZXN0YW1wWAEAAAAtdHKuUQAAWBQAAABQeURhdGVUaW1lX0dFVF9NT05USHKvUQAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfR0VUX01PTlRIWAEAAAAtdHKwUQAAWA4AAABQeU51bWJlcl9JbmRleHKxUQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JbmRleFgBAAAALXRyslEAAFgdAAAAUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnRys1EAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0WAEAAAAtdHK0UQAAWA4AAABQeU51bWJlcl9DaGVja3K1UQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9DaGVja1gBAAAALXRytlEAAFgNAAAAUHlFcnJfU2V0Tm9uZXK3UQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0Tm9uZVgBAAAALXRyuFEAAFgTAAAAUHlTdHJpbmdfQ2hlY2tFeGFjdHK5UQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19DaGVja0V4YWN0WAEAAAAtdHK6UQAAWBEAAABQeUNPYmplY3RfR2V0RGVzY3K7UQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0X0dldERlc2NYAQAAAC10crxRAABYEAAAAFB5SW5zdGFuY2VfQ2hlY2tyvVEAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NsYXNzLmh0bWwjYy5QeUluc3RhbmNlX0NoZWNrWAEAAAAtdHK+UQAAWBQAAABQeU1vZHVsZV9BZGRJbnRNYWNyb3K/UQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRJbnRNYWNyb1gBAAAALXRywFEAAFgLAAAAUHlEaWN0X0tleXNywVEAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9LZXlzWAEAAAAtdHLCUQAAWBYAAABQeUNvbXBsZXhfRnJvbUNDb21wbGV4csNRAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfRnJvbUNDb21wbGV4WAEAAAAtdHLEUQAAWBQAAABQeVVuaWNvZGVfRnJvbU9iamVjdHLFUQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21PYmplY3RYAQAAAC10csZRAABYEAAAAFB5X0lzSW5pdGlhbGl6ZWRyx1EAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0lzSW5pdGlhbGl6ZWRYAQAAAC10cshRAABYDwAAAFB5TnVtYmVyX0ludmVydHLJUQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JbnZlcnRYAQAAAC10cspRAABYDwAAAFB5Q29kZV9OZXdFbXB0eXLLUQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZS5odG1sI2MuUHlDb2RlX05ld0VtcHR5WAEAAAAtdHLMUQAAWAkAAABQeV9JTkNSRUZyzVEAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjYy5QeV9JTkNSRUZYAQAAAC10cs5RAABYFwAAAFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5ncs9RAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZ1gBAAAALXRy0FEAAFgPAAAAUHlFdmFsX0dldEZyYW1lctFRAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0RnJhbWVYAQAAAC10ctJRAABYIAAAAFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlctNRAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZVgBAAAALXRy1FEAAFgNAAAAX1B5T2JqZWN0X0RlbHLVUQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuX1B5T2JqZWN0X0RlbFgBAAAALXRy1lEAAFgRAAAAUHlOdW1iZXJfU3VidHJhY3Ry11EAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfU3VidHJhY3RYAQAAAC10cthRAABYCgAAAFB5RXJyX1dhcm5y2VEAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dhcm5YAQAAAC10ctpRAABYFQAAAFB5Q29kZWNfS25vd25FbmNvZGluZ3LbUQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfS25vd25FbmNvZGluZ1gBAAAALXRy3FEAAFgSAAAAUHlTdHJpbmdfQVNfU1RSSU5Hct1RAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0FTX1NUUklOR1gBAAAALXRy3lEAAFgSAAAAUHlGdW5jdGlvbl9HZXRDb2Rlct9RAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRDb2RlWAEAAAAtdHLgUQAAWBEAAABQeUV2YWxfR2V0R2xvYmFsc3LhUQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldEdsb2JhbHNYAQAAAC10cuJRAABYHQAAAFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVscuNRAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bFgBAAAALXRy5FEAAFgUAAAAUHlVbmljb2RlX0RlY29kZU1CQ1Ny5VEAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVNQkNTWAEAAAAtdHLmUQAAWBgAAABQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemVy51EAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplWAEAAAAtdHLoUQAAWCkAAABQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHLpUQAAKGpzBQAAanQFAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RYAQAAAC10cupRAABYGAAAAFB5RGF0ZVRpbWVfVElNRV9HRVRfSE9VUnLrUQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfVElNRV9HRVRfSE9VUlgBAAAALXRy7FEAAFgRAAAAUHlVbmljb2RlX0NvbXBhcmVy7VEAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Db21wYXJlWAEAAAAtdHLuUQAAWBIAAABQeUVycl9TZXRJbnRlcnJ1cHRy71EAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEludGVycnVwdFgBAAAALXRy8FEAAFgYAAAAUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrcvFRAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0FzVW5zaWduZWRMb25nTWFza1gBAAAALXRy8lEAAFgKAAAAUHlNZW1fRnJlZXLzUQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9GcmVlWAEAAAAtdHL0UQAAWCEAAABQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb25y9VEAAChqcwUAAGp0BQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvblgBAAAALXRy9lEAAFgRAAAAUHlGaWxlX0Zyb21TdHJpbmdy91EAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9Gcm9tU3RyaW5nWAEAAAAtdHL4UQAAWBQAAABQeUNhcHN1bGVfU2V0UG9pbnRlcnL5UQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX1NldFBvaW50ZXJYAQAAAC10cvpRAABYDwAAAFB5U3RyaW5nX0Zvcm1hdHL7UQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Gb3JtYXRYAQAAAC10cvxRAABYDAAAAFB5T2JqZWN0X0NtcHL9UQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DbXBYAQAAAC10cv5RAABYFAAAAFB5T2JqZWN0X0NoZWNrQnVmZmVycv9RAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5T2JqZWN0X0NoZWNrQnVmZmVyWAEAAAAtdHIAUgAAWAwAAABQeU9iamVjdF9TdHJyAVIAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfU3RyWAEAAAAtdHICUgAAWBAAAABQeU1hcHBpbmdfVmFsdWVzcgNSAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfVmFsdWVzWAEAAAAtdHIEUgAAWA4AAABQeV9Jbml0TW9kdWxlM3IFUgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlfSW5pdE1vZHVsZTNYAQAAAC10cgZSAABYEAAAAFB5SW50X0Zyb21TdHJpbmdyB1IAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVN0cmluZ1gBAAAALXRyCFIAAFgPAAAAUHlFcnJfU2V0U3RyaW5ncglSAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRTdHJpbmdYAQAAAC10cgpSAABYFAAAAFB5RnVuY3Rpb25fR2V0TW9kdWxlcgtSAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRNb2R1bGVYAQAAAC10cgxSAABYIAAAAFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5ncg1SAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZ1gBAAAALXRyDlIAAFgPAAAAUHlfSW5pdGlhbGl6ZUV4cg9SAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9Jbml0aWFsaXplRXhYAQAAAC10chBSAABYDgAAAFB5VW5pY29kZV9Kb2luchFSAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfSm9pblgBAAAALXRyElIAAFgRAAAAUHlGcm96ZW5TZXRfQ2hlY2tyE1IAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfQ2hlY2tYAQAAAC10chRSAABYDQAAAFB5T2JqZWN0X1R5cGVyFVIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfVHlwZVgBAAAALXRyFlIAAFgWAAAAUHlNZXRob2RfQ2xlYXJGcmVlTGlzdHIXUgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9DbGVhckZyZWVMaXN0WAEAAAAtdHIYUgAAWBAAAABQeVNlcXVlbmNlX0luZGV4chlSAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9JbmRleFgBAAAALXRyGlIAAFgPAAAAUHlUdXBsZV9TZXRJdGVtchtSAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9TZXRJdGVtWAEAAAAtdHIcUgAAWA4AAABQeUluc3RhbmNlX05ld3IdUgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5SW5zdGFuY2VfTmV3WAEAAAAtdHIeUgAAWA8AAABQeV9WYUJ1aWxkVmFsdWVyH1IAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FyZy5odG1sI2MuUHlfVmFCdWlsZFZhbHVlWAEAAAAtdHIgUgAAWBUAAABQeUNvbXBsZXhfRnJvbURvdWJsZXNyIVIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9Gcm9tRG91Ymxlc1gBAAAALXRyIlIAAFgPAAAAUHlVbmljb2RlX1NwbGl0ciNSAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfU3BsaXRYAQAAAC10ciRSAABYDQAAAFB5U3RyaW5nX1NpemVyJVIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfU2l6ZVgBAAAALXRyJlIAAFgUAAAAUHlTdHJpbmdfRnJvbUZvcm1hdFZyJ1IAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRnJvbUZvcm1hdFZYAQAAAC10cihSAABYEwAAAFB5U3RyaW5nX0Zyb21Gb3JtYXRyKVIAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRnJvbUZvcm1hdFgBAAAALXRyKlIAAFgRAAAAUHlMb25nX0NoZWNrRXhhY3RyK1IAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19DaGVja0V4YWN0WAEAAAAtdHIsUgAAWBQAAABQeUV2YWxfR2V0UmVzdHJpY3RlZHItUgAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldFJlc3RyaWN0ZWRYAQAAAC10ci5SAABYHQAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9UaHJlYWRIZWFkci9SAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZFgBAAAALXRyMFIAAFgNAAAAUHlPYmplY3RfRnJlZXIxUgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdF9GcmVlWAEAAAAtdHIyUgAAWBEAAABQeUNhcHN1bGVfR2V0TmFtZXIzUgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldE5hbWVYAQAAAC10cjRSAABYEgAAAF9QeU9iamVjdF9HQ19UUkFDS3I1UgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5fUHlPYmplY3RfR0NfVFJBQ0tYAQAAAC10cjZSAABYFwAAAFB5VW5pY29kZV9Bc1VURjE2U3RyaW5ncjdSAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNVVEYxNlN0cmluZ1gBAAAALXRyOFIAAFgWAAAAUHlNYXBwaW5nX0hhc0tleVN0cmluZ3I5UgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0hhc0tleVN0cmluZ1gBAAAALXRyOlIAAFgNAAAAUHlfRmluZE1ldGhvZHI7UgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlfRmluZE1ldGhvZFgBAAAALXRyPFIAAFgRAAAAUHlVbmljb2RlX1JlcGxhY2VyPVIAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9SZXBsYWNlWAEAAAAtdHI+UgAAWBkAAABQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5ncj9SAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0ludGVybkZyb21TdHJpbmdYAQAAAC10ckBSAABYFgAAAFB5TnVtYmVyX0luUGxhY2VMc2hpZnRyQVIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUxzaGlmdFgBAAAALXRyQlIAAFgWAAAAUHlJbXBvcnRfQXBwZW5kSW5pdHRhYnJDUgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9BcHBlbmRJbml0dGFiWAEAAAAtdHJEUgAAWCwAAABQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHJFUgAAKGpzBQAAanQFAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RYAQAAAC10ckZSAABYCwAAAFB5RXJyX0ZldGNockdSAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9GZXRjaFgBAAAALXRySFIAAFgRAAAAUHlDb2RlX0dldE51bUZyZWVySVIAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9HZXROdW1GcmVlWAEAAAAtdHJKUgAAWBEAAABQeV9HZXRQcm9ncmFtTmFtZXJLUgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UHJvZ3JhbU5hbWVYAQAAAC10ckxSAABYDQAAAFB5TWVtX1JlYWxsb2NyTVIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fUmVhbGxvY1gBAAAALXRyTlIAAFgXAAAAUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3NyT1IAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TaW1wbGVGaWxlRXhGbGFnc1gBAAAALXRyUFIAAFgOAAAAUHlUWkluZm9fQ2hlY2tyUVIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRaSW5mb19DaGVja1gBAAAALXRyUlIAAFgPAAAAUHlNYXBwaW5nX0l0ZW1zclNSAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfSXRlbXNYAQAAAC10clRSAABYIAAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0clVSAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydFgBAAAALXRyVlIAAFgVAAAAUHlGbG9hdF9DbGVhckZyZWVMaXN0cldSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9DbGVhckZyZWVMaXN0WAEAAAAtdHJYUgAAWAsAAABQeUdlbl9DaGVja3JZUgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2VuLmh0bWwjYy5QeUdlbl9DaGVja1gBAAAALXRyWlIAAFgPAAAAUHlTdHJpbmdfRGVjb2RlcltSAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0RlY29kZVgBAAAALXRyXFIAAFgXAAAAUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3NyXVIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TaW1wbGVTdHJpbmdGbGFnc1gBAAAALXRyXlIAAFgPAAAAUHlTZXF1ZW5jZV9MaXN0cl9SAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9MaXN0WAEAAAAtdHJgUgAAWBIAAABQeU9iamVjdF9UeXBlQ2hlY2tyYVIAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfVHlwZUNoZWNrWAEAAAAtdHJiUgAAWBIAAABQeV9VTklDT0RFX0lTTE9XRVJyY1IAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNMT1dFUlgBAAAALXRyZFIAAFgKAAAAX1B5X2NfcHJvZHJlUgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2NfcHJvZFgBAAAALXRyZlIAAFgbAAAAUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzcmdSAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc1gBAAAALXRyaFIAAFgSAAAAUHlfVU5JQ09ERV9JU1VQUEVScmlSAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTVVBQRVJYAQAAAC10cmpSAABYDgAAAFB5RmxvYXRfR2V0TWF4cmtSAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9HZXRNYXhYAQAAAC10cmxSAABYEgAAAFB5RmlsZV9Xcml0ZVN0cmluZ3JtUgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1dyaXRlU3RyaW5nWAEAAAAtdHJuUgAAWA8AAABQeUxpc3RfU2V0U2xpY2Vyb1IAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9TZXRTbGljZVgBAAAALXRycFIAAFgPAAAAUHlFdmFsX0V2YWxDb2RlcnFSAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlFdmFsX0V2YWxDb2RlWAEAAAAtdHJyUgAAWBAAAABQeUJ1ZmZlcl9SZWxlYXNlcnNSAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX1JlbGVhc2VYAQAAAC10cnRSAABYDwAAAFB5X0dldENvcHlyaWdodHJ1UgAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0Q29weXJpZ2h0WAEAAAAtdHJ2UgAAWA4AAABQeUVycl9Ob01lbW9yeXJ3UgAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfTm9NZW1vcnlYAQAAAC10cnhSAABYEAAAAFB5RXZhbF9HZXRMb2NhbHNyeVIAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRMb2NhbHNYAQAAAC10cnpSAABYDgAAAFB5T1NfdnNucHJpbnRmcntSAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3ZzbnByaW50ZlgBAAAALXRyfFIAAFgYAAAAUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93cn1SAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3dYAQAAAC10cn5SAABYDgAAAFB5X0luaXRNb2R1bGU0cn9SAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeV9Jbml0TW9kdWxlNFgBAAAALXRygFIAAFgNAAAAUHlfSW5pdGlhbGl6ZXKBUgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfSW5pdGlhbGl6ZVgBAAAALXRyglIAAFgVAAAAUHlJbXBvcnRfSW1wb3J0TW9kdWxlcoNSAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZVgBAAAALXRyhFIAAFgUAAAAUHlVbmljb2RlX0FTX1VOSUNPREVyhVIAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9BU19VTklDT0RFWAEAAAAtdHKGUgAAWA0AAABQeURpY3RfVXBkYXRlcodSAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfVXBkYXRlWAEAAAAtdHKIUgAAWBEAAABQeUxvbmdfRnJvbVN0cmluZ3KJUgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21TdHJpbmdYAQAAAC10copSAABYGgAAAFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzcotSAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzWAEAAAAtdHKMUgAAWBIAAABQeUVycl9XYXJuRXhwbGljaXRyjVIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dhcm5FeHBsaWNpdFgBAAAALXRyjlIAAFgKAAAAUHlfWERFQ1JFRnKPUgAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X1hERUNSRUZYAQAAAC10cpBSAABYFQAAAFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ3KRUgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzVW5zaWduZWRMb25nWAEAAAAtdHKSUgAAWA8AAABQeURpY3RQcm94eV9OZXdyk1IAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdFByb3h5X05ld1gBAAAALXRylFIAAFgdAAAAUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWxylVIAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsWAEAAAAtdHKWUgAAWBUAAABQeV9FbnRlclJlY3Vyc2l2ZUNhbGxyl1IAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5X0VudGVyUmVjdXJzaXZlQ2FsbFgBAAAALXRymFIAAFgNAAAAUHlMaXN0X0FwcGVuZHKZUgAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0FwcGVuZFgBAAAALXRymlIAAFgYAAAAUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5cptSAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseVgBAAAALXRynFIAAFgNAAAAUHlPU19zbnByaW50ZnKdUgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19zbnByaW50ZlgBAAAALXRynlIAAFgVAAAAUHlNZXRob2RfR0VUX0ZVTkNUSU9Ocp9SAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX0dFVF9GVU5DVElPTlgBAAAALXRyoFIAAFgXAAAAUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVyoVIAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVYAQAAAC10cqJSAABYEAAAAFB5VHVwbGVfR0VUX1NJWkVyo1IAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0dFVF9TSVpFWAEAAAAtdHKkUgAAWA8AAABQeUxvbmdfQXNEb3VibGVypVIAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc0RvdWJsZVgBAAAALXRyplIAAFgRAAAAUHlGaWxlX0NoZWNrRXhhY3Ryp1IAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9DaGVja0V4YWN0WAEAAAAtdHKoUgAAWB4AAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb25yqVIAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvblgBAAAALXRyqlIAAFgcAAAAUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bHKrUgAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bFgBAAAALXRyrFIAAFgSAAAAUHlFdmFsX0dldEZ1bmNOYW1lcq1SAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0RnVuY05hbWVYAQAAAC10cq5SAABYEQAAAFB5X1NldFByb2dyYW1OYW1lcq9SAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9TZXRQcm9ncmFtTmFtZVgBAAAALXRysFIAAFgXAAAAUHlDYXBzdWxlX1NldERlc3RydWN0b3JysVIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yWAEAAAAtdHKyUgAAWBUAAABQeVRocmVhZFN0YXRlX0dldERpY3Rys1IAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVfR2V0RGljdFgBAAAALXRytFIAAFgRAAAAUHlTeXNfV3JpdGVTdGRlcnJytVIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfV3JpdGVTdGRlcnJYAQAAAC10crZSAABYFQAAAFB5U2VxdWVuY2VfRmFzdF9JVEVNU3K3UgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfRmFzdF9JVEVNU1gBAAAALXRyuFIAAFgXAAAAUHlVbmljb2RlX0dFVF9EQVRBX1NJWkVyuVIAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9HRVRfREFUQV9TSVpFWAEAAAAtdHK6UgAAWBMAAABQeUV2YWxfR2V0Q2FsbFN0YXRzcrtSAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfR2V0Q2FsbFN0YXRzWAEAAAAtdHK8UgAAWBUAAABQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGxyvVIAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5X0xlYXZlUmVjdXJzaXZlQ2FsbFgBAAAALXRyvlIAAFgSAAAAUHlTZXF1ZW5jZV9HZXRJdGVtcr9SAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9HZXRJdGVtWAEAAAAtdHLAUgAAWBIAAABQeU51bWJlcl9SZW1haW5kZXJywVIAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUmVtYWluZGVyWAEAAAAtdHLCUgAAWBoAAABQeURhdGVUaW1lX0RBVEVfR0VUX1NFQ09ORHLDUgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfREFURV9HRVRfU0VDT05EWAEAAAAtdHLEUgAAWBEAAABQeURhdGVfQ2hlY2tFeGFjdHLFUgAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZV9DaGVja0V4YWN0WAEAAAAtdHLGUgAAWBYAAABQeUNvbXBsZXhfSW1hZ0FzRG91YmxlcsdSAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlWAEAAAAtdHLIUgAAWAwAAABQeURpY3RfSXRlbXNyyVIAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9JdGVtc1gBAAAALXRyylIAAFgjAAAAUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVyy1IAAChqcwUAAGp0BQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lWAEAAAAtdHLMUgAAWCIAAABQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5ncs1SAAAoanMFAABqdAUAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nWAEAAAAtdHLOUgAAWA0AAABQeUZpbGVfQXNGaWxlcs9SAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfQXNGaWxlWAEAAAAtdHLQUgAAWBgAAABQeUludGVycHJldGVyU3RhdGVfQ2xlYXJy0VIAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhclgBAAAALXRy0lIAAFgRAAAAUHlTZXF1ZW5jZV9SZXBlYXRy01IAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1JlcGVhdFgBAAAALXRy1FIAAFgPAAAAUHlOdW1iZXJfVG9CYXNlctVSAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1RvQmFzZVgBAAAALXRy1lIAAFgWAAAAUHlPYmplY3RfU2V0QXR0clN0cmluZ3LXUgAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9TZXRBdHRyU3RyaW5nWAEAAAAtdHLYUgAAWBEAAABQeUFyZ19VbnBhY2tUdXBsZXLZUgAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19VbnBhY2tUdXBsZVgBAAAALXRy2lIAAFgYAAAAUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVycttSAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmpidWZmZXIuaHRtbCNjLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlclgBAAAALXRy3FIAAFgSAAAAUHlGaWxlX0luY1VzZUNvdW50ct1SAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfSW5jVXNlQ291bnRYAQAAAC10ct5SAABYDAAAAFB5TWVtX1Jlc2l6ZXLfUgAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9SZXNpemVYAQAAAC10cuBSAABYFQAAAFB5Q29kZWNfUmVnaXN0ZXJFcnJvcnLhUgAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfUmVnaXN0ZXJFcnJvclgBAAAALXRy4lIAAFgXAAAAUHlVbmljb2RlX0RlY29kZUNoYXJtYXBy41IAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVDaGFybWFwWAEAAAAtdHLkUgAAWBEAAABQeUZsb2F0X0FTX0RPVUJMRXLlUgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQVNfRE9VQkxFWAEAAAAtdHLmUgAAWBEAAABQeVN0cmluZ19Bc1N0cmluZ3LnUgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Bc1N0cmluZ1gBAAAALXRy6FIAAFgJAAAAUHlTZXRfQWRkculSAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0FkZFgBAAAALXRy6lIAAFgSAAAAUHlJbXBvcnRfQWRkTW9kdWxlcutSAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0FkZE1vZHVsZVgBAAAALXRy7FIAAFgcAAAAUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU9iamVjdHLtUgAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0WAEAAAAtdHLuUgAAWA8AAABQeUxpc3RfR0VUX0lURU1y71IAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9HRVRfSVRFTVgBAAAALXRy8FIAAFgNAAAAUHlfSW5pdE1vZHVsZXLxUgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlfSW5pdE1vZHVsZVgBAAAALXRy8lIAAFgUAAAAUHlVbmljb2RlX0RlY29kZVVURjdy81IAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEY3WAEAAAAtdHL0UgAAWA8AAABQeU1hcHBpbmdfQ2hlY2ty9VIAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19DaGVja1gBAAAALXRy9lIAAFgLAAAAUHlJdGVyX05leHRy91IAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXIuaHRtbCNjLlB5SXRlcl9OZXh0WAEAAAAtdHL4UgAAWAkAAABQeU1lbV9OZXdy+VIAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fTmV3WAEAAAAtdHL6UgAAWBMAAABQeVdlYWtyZWZfR2V0T2JqZWN0cvtSAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjYy5QeVdlYWtyZWZfR2V0T2JqZWN0WAEAAAAtdHL8UgAAWAwAAABQeVRpbWVfQ2hlY2ty/VIAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRpbWVfQ2hlY2tYAQAAAC10cv5SAABYGgAAAFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlcv9SAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlWAEAAAAtdHIAUwAAWBUAAABQeUZ1bmN0aW9uX0dldENsb3N1cmVyAVMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX0dldENsb3N1cmVYAQAAAC10cgJTAABYFgAAAFB5VW5pY29kZV9Bc1VURjhTdHJpbmdyA1MAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VURjhTdHJpbmdYAQAAAC10cgRTAABYFQAAAFB5X0dldFByb2dyYW1GdWxsUGF0aHIFUwAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoWAEAAAAtdHIGUwAAWCYAAABQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZXIHUwAAKGpzBQAAanQFAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVYAQAAAC10cghTAABYFQAAAFB5Qnl0ZUFycmF5X0FTX1NUUklOR3IJUwAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9BU19TVFJJTkdYAQAAAC10cgpTAABYGwAAAFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZHILUwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kWAEAAAAtdHIMUwAAWAwAAABQeU1ldGhvZF9OZXdyDVMAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfTmV3WAEAAAAtdHIOUwAAWA0AAABQeUxpc3RfSW5zZXJ0cg9TAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfSW5zZXJ0WAEAAAAtdHIQUwAAWBoAAABQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZXIRUwAAKGpzBQAAanQFAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGVYAQAAAC10chJTAABYDQAAAFB5TG9uZ19Bc0xvbmdyE1MAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc0xvbmdYAQAAAC10chRTAABYDAAAAFB5QnVmZmVyX05ld3IVUwAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9OZXdYAQAAAC10chZTAABYHgAAAFB5QnVmZmVyX0ZpbGxDb250aWd1b3VzU3RyaWRlc3IXUwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXNYAQAAAC10chhTAABYCwAAAFB5RGljdF9OZXh0chlTAAAoanMFAABqdAUAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfTmV4dFgBAAAALXRyGlMAAFgQAAAAUHlTZXF1ZW5jZV9DaGVja3IbUwAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfQ2hlY2tYAQAAAC10chxTAABYDwAAAFB5T2JqZWN0X0xlbmd0aHIdUwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9MZW5ndGhYAQAAAC10ch5TAABYEgAAAFB5RXZhbF9FdmFsRnJhbWVFeHIfUwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5RXZhbF9FdmFsRnJhbWVFeFgBAAAALXRyIFMAAFgdAAAAUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmdyIVMAAChqcwUAAGp0BQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nWAEAAAAtdHIiUwAAWBQAAABQeVVuaWNvZGVfRnJvbUZvcm1hdHIjUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21Gb3JtYXRYAQAAAC10ciRTAABYGwAAAFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZHIlUwAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kWAEAAAAtdHImUwAAWA8AAABQeVJ1bl9BbnlGaWxlRXhyJ1MAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9BbnlGaWxlRXhYAQAAAC10cihTAABYEgAAAFB5RGVsdGFfQ2hlY2tFeGFjdHIpUwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGVsdGFfQ2hlY2tFeGFjdFgBAAAALXRyKlMAAFgXAAAAUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJyK1MAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21XaW5kb3dzRXJyWAEAAAAtdHIsUwAAWBMAAABQeU51bWJlcl9JblBsYWNlQW5kci1TAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VBbmRYAQAAAC10ci5TAABYHQAAAFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0ci9TAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydFgBAAAALXRyMFMAAFgSAAAAUHlGbG9hdF9Gcm9tU3RyaW5ncjFTAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9Gcm9tU3RyaW5nWAEAAAAtdHIyUwAAWB0AAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydHIzUwAAKGpzBQAAanQFAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnRYAQAAAC10cjRTAABYFAAAAFB5RGljdF9TZXRJdGVtU3RyaW5ncjVTAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2V0SXRlbVN0cmluZ1gBAAAALXRyNlMAAFgUAAAAUHlVbmljb2RlX0VuY29kZVVURjdyN1MAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVVVEY3WAEAAAAtdHI4UwAAWBkAAABQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkcjlTAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkWAEAAAAtdHI6UwAAWBQAAABQeVVuaWNvZGVfRW5jb2RlVVRGOHI7UwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZVVURjhYAQAAAC10cjxTAABYEAAAAFB5T2JqZWN0X0NvbXBhcmVyPVMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ29tcGFyZVgBAAAALXRyPlMAAFgdAAAAUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNyP1MAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FyZy5odG1sI2MuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNYAQAAAC10ckBTAABYEwAAAFB5TW9kdWxlX0NoZWNrRXhhY3RyQVMAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQ2hlY2tFeGFjdFgBAAAALXRyQlMAAFgOAAAAUHlPYmplY3RfUHJpbnRyQ1MAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfUHJpbnRYAQAAAC10ckRTAABYDgAAAFB5RGljdF9TZXRJdGVtckVTAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2V0SXRlbVgBAAAALXRyRlMAAFgXAAAAUHlNZW1vcnlWaWV3X0Zyb21PYmplY3RyR1MAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3RYAQAAAC10ckhTAABYEwAAAFB5VW5pY29kZV9UcmFuc2xhdGVySVMAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9UcmFuc2xhdGVYAQAAAC10ckpTAABYEAAAAFB5SW1wb3J0X0NsZWFudXByS1MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfQ2xlYW51cFgBAAAALXRyTFMAAFgOAAAAUHlPYmplY3RfQnl0ZXNyTVMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQnl0ZXNYAQAAAC10ck5TAABYEQAAAFB5VHlwZV9IYXNGZWF0dXJlck9TAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfSGFzRmVhdHVyZVgBAAAALXRyUFMAAFgTAAAAUHlVbmljb2RlX0FzVW5pY29kZXJRUwAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVW5pY29kZVgBAAAALXRyUlMAAFgVAAAAUHlGdW5jdGlvbl9TZXRDbG9zdXJlclNTAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9TZXRDbG9zdXJlWAEAAAAtdHJUUwAAWA8AAABQeVN0cmluZ19FbmNvZGVyVVMAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRW5jb2RlWAEAAAAtdHJWUwAAWA8AAABQeUZpbGVfRnJvbUZpbGVyV1MAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9Gcm9tRmlsZVgBAAAALXRyWFMAAFgSAAAAUHlfVU5JQ09ERV9JU1RJVExFcllTAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTVElUTEVYAQAAAC10clpTAABYDwAAAFB5U3RyaW5nX0NvbmNhdHJbUwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Db25jYXRYAQAAAC10clxTAABYDwAAAFB5TGlzdF9HRVRfU0laRXJdUwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0dFVF9TSVpFWAEAAAAtdHJeUwAAWBIAAABQeUxvbmdfRnJvbVVuaWNvZGVyX1MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVW5pY29kZVgBAAAALXRyYFMAAFgSAAAAUHlNZW1vcnlWaWV3X0NoZWNrcmFTAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19DaGVja1gBAAAALXRyYlMAAFgXAAAAUHlVbmljb2RlX0NsZWFyRnJlZUxpc3RyY1MAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9DbGVhckZyZWVMaXN0WAEAAAAtdHJkUwAAWB4AAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3RyZVMAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdFgBAAAALXRyZlMAAFgQAAAAUHlBcmdfUGFyc2VUdXBsZXJnUwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19QYXJzZVR1cGxlWAEAAAAtdHJoUwAAWAwAAABQeU9iamVjdF9EZWxyaVMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X0RlbFgBAAAALXRyalMAAFgSAAAAUHlfVU5JQ09ERV9JU0FMUEhBcmtTAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTQUxQSEFYAQAAAC10cmxTAABYEwAAAFB5TG9uZ19Gcm9tTG9uZ0xvbmdybVMAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tTG9uZ0xvbmdYAQAAAC10cm5TAABYEQAAAFB5VW5pY29kZV9HZXRTaXplcm9TAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfR2V0U2l6ZVgBAAAALXRycFMAAFgSAAAAUHlFcnJfU2V0RnJvbUVycm5vcnFTAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9YAQAAAC10cnJTAABYGQAAAFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGVyc1MAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGVYAQAAAC10cnRTAABYCgAAAF9QeV9jX2RpZmZydVMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX2RpZmZYAQAAAC10cnZTAABYGwAAAFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZXJ3UwAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplWAEAAAAtdHJ4UwAAWBEAAABQeU1ldGhvZF9GdW5jdGlvbnJ5UwAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9GdW5jdGlvblgBAAAALXRyelMAAFgSAAAAUHlGbG9hdF9DaGVja0V4YWN0cntTAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9DaGVja0V4YWN0WAEAAAAtdHJ8UwAAWBkAAABQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25ncn1TAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nWAEAAAAtdHJ+UwAAWA8AAABQeUZyb3plblNldF9OZXdyf1MAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfTmV3WAEAAAAtdHKAUwAAWAwAAABQeVJ1bl9GaWxlRXhygVMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxlRXhYAQAAAC10coJTAABYGgAAAFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVycoNTAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXJYAQAAAC10coRTAABYDgAAAF9QeUltcG9ydF9Jbml0coVTAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLl9QeUltcG9ydF9Jbml0WAEAAAAtdHKGUwAAWA4AAABQeUNhbGxJdGVyX05ld3KHUwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5Q2FsbEl0ZXJfTmV3WAEAAAAtdHKIUwAAWBAAAABQeU9iamVjdF9SZWFsbG9jcolTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5T2JqZWN0X1JlYWxsb2NYAQAAAC10copTAABYFAAAAFB5T2JqZWN0X1JpY2hDb21wYXJlcotTAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1JpY2hDb21wYXJlWAEAAAAtdHKMUwAAWBIAAABQeVdlYWtyZWZfTmV3UHJveHlyjVMAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9OZXdQcm94eVgBAAAALXRyjlMAAFgUAAAAUHlEaWN0X01lcmdlRnJvbVNlcTJyj1MAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9NZXJnZUZyb21TZXEyWAEAAAAtdHKQUwAAWA4AAABQeVNldF9HRVRfU0laRXKRUwAAKGpzBQAAanQFAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9HRVRfU0laRVgBAAAALXRyklMAAFgUAAAAUHlDb21wbGV4X0FzQ0NvbXBsZXhyk1MAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9Bc0NDb21wbGV4WAEAAAAtdHKUUwAAWBEAAABQeURlc2NyX05ld01ldGhvZHKVUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdNZXRob2RYAQAAAC10cpZTAABYEwAAAFB5TnVtYmVyX0luUGxhY2VYb3Jyl1MAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVhvclgBAAAALXRymFMAAFgLAAAAUHlOdW1iZXJfT3JymVMAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfT3JYAQAAAC10cppTAABYEgAAAFB5T2JqZWN0X0dDX1Jlc2l6ZXKbUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5QeU9iamVjdF9HQ19SZXNpemVYAQAAAC10cpxTAABYFgAAAFB5RnVuY3Rpb25fR2V0RGVmYXVsdHNynVMAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX0dldERlZmF1bHRzWAEAAAAtdHKeUwAAWAsAAABQeUVycl9DbGVhcnKfUwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfQ2xlYXJYAQAAAC10cqBTAABYFgAAAFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnNyoVMAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfUmVzZXRXYXJuT3B0aW9uc1gBAAAALXRyolMAAFgSAAAAUHlFdmFsX1JlbGVhc2VMb2NrcqNTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVsZWFzZUxvY2tYAQAAAC10cqRTAABYFgAAAFB5X1VOSUNPREVfSVNMSU5FQlJFQUtypVMAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNMSU5FQlJFQUtYAQAAAC10cqZTAABYEwAAAFB5QW55U2V0X0NoZWNrRXhhY3Ryp1MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlBbnlTZXRfQ2hlY2tFeGFjdFgBAAAALXRyqFMAAFgdAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnRyqVMAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0WAEAAAAtdHKqUwAAWBQAAABQeVdlYWtyZWZfQ2hlY2tQcm94eXKrUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0NoZWNrUHJveHlYAQAAAC10cqxTAABYDAAAAFB5VHlwZV9SZWFkeXKtUwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX1JlYWR5WAEAAAAtdHKuUwAAWBAAAABQeUxvbmdfQXNWb2lkUHRycq9TAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNWb2lkUHRyWAEAAAAtdHKwUwAAWBAAAABQeU9iamVjdF9HZXRJdGVtcrFTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEl0ZW1YAQAAAC10crJTAABYGgAAAFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzcrNTAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3NYAQAAAC10crRTAABYEwAAAFB5VFpJbmZvX0NoZWNrRXhhY3RytVMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRaSW5mb19DaGVja0V4YWN0WAEAAAAtdHK2UwAAWBoAAABQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycnK3UwAAKGpzBQAAanQFAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJYAQAAAC10crhTAABYEAAAAFB5T2JqZWN0X0dldEF0dHJyuVMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2V0QXR0clgBAAAALXRyulMAAFgXAAAAUHlNb2R1bGVfQWRkSW50Q29uc3RhbnRyu1MAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnRYAQAAAC10crxTAABYDAAAAFB5VHlwZV9JU19HQ3K9UwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0lTX0dDWAEAAAAtdHK+UwAAWBEAAABQeUV2YWxfU2V0UHJvZmlsZXK/UwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1NldFByb2ZpbGVYAQAAAC10csBTAABYEgAAAFB5RXZhbF9HZXRGdW5jRGVzY3LBUwAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldEZ1bmNEZXNjWAEAAAAtdHLCUwAAWBAAAABQeV9HZXRQeXRob25Ib21lcsNTAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRQeXRob25Ib21lWAEAAAAtdHLEUwAAWBAAAABQeU9iamVjdF9TZXRJdGVtcsVTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NldEl0ZW1YAQAAAC10csZTAABYEAAAAFB5VHlwZV9Jc1N1YnR5cGVyx1MAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9Jc1N1YnR5cGVYAQAAAC10cshTAABYGgAAAFB5RGF0ZVRpbWVfRnJvbURhdGVBbmRUaW1lcslTAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9Gcm9tRGF0ZUFuZFRpbWVYAQAAAC10cspTAABYCgAAAFB5X1hJTkNSRUZyy1MAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjYy5QeV9YSU5DUkVGWAEAAAAtdHLMUwAAWBEAAABQeURlc2NyX05ld01lbWJlcnLNUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdNZW1iZXJYAQAAAC10cs5TAABYDgAAAFB5VW5pY29kZV9GaW5kcs9TAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRmluZFgBAAAALXRy0FMAAFgNAAAAUHlPYmplY3RfU2l6ZXLRUwAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9TaXplWAEAAAAtdHLSUwAAWAoAAABQeUNlbGxfTmV3ctNTAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxfTmV3WAEAAAAtdHLUUwAAWA4AAABfUHlJbXBvcnRfRmluaXLVUwAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fUHlJbXBvcnRfRmluaVgBAAAALXRy1lMAAFgVAAAAUHlFcnJfV3JpdGVVbnJhaXNhYmxlctdTAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9Xcml0ZVVucmFpc2FibGVYAQAAAC10cthTAABYHgAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZHLZUwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kWAEAAAAtdHLaUwAAWAsAAABQeUludF9DaGVja3LbUwAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9DaGVja1gBAAAALXRy3FMAAFgYAAAAUHlPYmplY3RfUmljaENvbXBhcmVCb29sct1TAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbFgBAAAALXRy3lMAAFghAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0ct9TAAAoanMFAABqdAUAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3RYAQAAAC10cuBTAABYDAAAAFB5X0dldFByZWZpeHLhUwAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UHJlZml4WAEAAAAtdHLiUwAAWBAAAABQeU9iamVjdF9HZXRJdGVycuNTAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEl0ZXJYAQAAAC10cuRTAABYEgAAAFB5RXZhbF9BY3F1aXJlTG9ja3LlUwAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX0FjcXVpcmVMb2NrWAEAAAAtdHLmUwAAWAkAAABQeVNldF9OZXdy51MAAChqcwUAAGp0BQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfTmV3WAEAAAAtdHLoUwAAWBEAAABQeUVycl9CYWRBcmd1bWVudHLpUwAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfQmFkQXJndW1lbnRYAQAAAC10cupTAABYHgAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbnLrUwAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uWAEAAAAtdHLsUwAAWA8AAABQeUNvZGVjX0VuY29kZXJy7VMAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0VuY29kZXJYAQAAAC10cu5TAABYEwAAAFB5VW5pY29kZV9UYWlsbWF0Y2hy71MAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9UYWlsbWF0Y2hYAQAAAC10cvBTAABYEAAAAF9QeVN0cmluZ19SZXNpemVy8VMAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuX1B5U3RyaW5nX1Jlc2l6ZVgBAAAALXRy8lMAAFgMAAAAUHlEaWN0X0NoZWNrcvNTAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ2hlY2tYAQAAAC10cvRTAABYDwAAAFB5TnVtYmVyX0xzaGlmdHL1UwAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Mc2hpZnRYAQAAAC10cvZTAABYEQAAAFB5RGljdF9DaGVja0V4YWN0cvdTAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ2hlY2tFeGFjdFgBAAAALXRy+FMAAFgUAAAAUHlVbmljb2RlX0NoZWNrRXhhY3Ry+VMAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9DaGVja0V4YWN0WAEAAAAtdHL6UwAAWBIAAABQeUdJTFN0YXRlX1JlbGVhc2Vy+1MAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5R0lMU3RhdGVfUmVsZWFzZVgBAAAALXRy/FMAAFgMAAAAUHlCb29sX0NoZWNrcv1TAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWwjYy5QeUJvb2xfQ2hlY2tYAQAAAC10cv5TAABYDgAAAFB5TWFwcGluZ19LZXlzcv9TAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfS2V5c1gBAAAALXRyAFQAAFgTAAAAUHlUaHJlYWRTdGF0ZV9DbGVhcnIBVAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9DbGVhclgBAAAALXRyAlQAAFgQAAAAUHlUdXBsZV9TRVRfSVRFTXIDVAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfU0VUX0lURU1YAQAAAC10cgRUAABYDwAAAFB5SW50X0FzU3NpemVfdHIFVAAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9Bc1NzaXplX3RYAQAAAC10cgZUAABYFwAAAFB5TWFwcGluZ19TZXRJdGVtU3RyaW5ncgdUAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZ1gBAAAALXRyCFQAAFgSAAAAUHlFcnJfQ2hlY2tTaWduYWxzcglUAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9DaGVja1NpZ25hbHNYAQAAAC10cgpUAABYCQAAAFB5X0RFQ1JFRnILVAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X0RFQ1JFRlgBAAAALXRyDFQAAFgRAAAAUHlFdmFsX1NhdmVUaHJlYWRyDVQAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9TYXZlVGhyZWFkWAEAAAAtdHIOVAAAWBAAAABQeUxvbmdfQXNTc2l6ZV90cg9UAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNTc2l6ZV90WAEAAAAtdHIQVAAAWBIAAABQeUV2YWxfR2V0QnVpbHRpbnNyEVQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRCdWlsdGluc1gBAAAALXRyElQAAFgZAAAAUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvY3ITVAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvY1gBAAAALXRyFFQAAFgLAAAAUHlUdXBsZV9OZXdyFVQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX05ld1gBAAAALXRyFlQAAFgKAAAAUHlDZWxsX1NFVHIXVAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX1NFVFgBAAAALXRyGFQAAFgVAAAAUHlVbmljb2RlX0RlY29kZVVURjMychlUAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGMzJYAQAAAC10chpUAABYEAAAAFB5T2JqZWN0X1NldEF0dHJyG1QAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfU2V0QXR0clgBAAAALXRyHFQAAFgMAAAAUHlMaXN0X0NoZWNrch1UAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfQ2hlY2tYAQAAAC10ch5UAABYDwAAAFB5Q29kZWNfRGVjb2RlcnIfVAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfRGVjb2RlclgBAAAALXRyIFQAAFgKAAAAUHlfR2V0UGF0aHIhVAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UGF0aFgBAAAALXRyIlQAAFgZAAAAUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZ3IjVAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZ1gBAAAALXRyJFQAAFgPAAAAUHlPU19DaGVja1N0YWNrciVUAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5T1NfQ2hlY2tTdGFja1gBAAAALXRyJlQAAFgUAAAAX1B5T2JqZWN0X0dDX1VOVFJBQ0tyJ1QAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuX1B5T2JqZWN0X0dDX1VOVFJBQ0tYAQAAAC10cihUAABYFQAAAFB5VW5pY29kZV9FbmNvZGVBU0NJSXIpVAAAKGpzBQAAanQFAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZUFTQ0lJWAEAAAAtdHIqVAAAWBUAAABQeU9TX3N0cmluZ190b19kb3VibGVyK1QAAChqcwUAAGp0BQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1Nfc3RyaW5nX3RvX2RvdWJsZVgBAAAALXRyLFQAAFgKAAAAUHlTZXRfU2l6ZXItVAAAKGpzBQAAanQFAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9TaXplWAEAAAAtdHIuVAAAWAwAAABQeUludF9HZXRNYXhyL1QAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfR2V0TWF4WAEAAAAtdHIwVAAAWBIAAABQeU51bWJlcl9Bc1NzaXplX3RyMVQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQXNTc2l6ZV90WAEAAAAtdHIyVAAAWBYAAABQeU9iamVjdF9HZXRBdHRyU3RyaW5ncjNUAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEF0dHJTdHJpbmdYAQAAAC10cjRUAABYFAAAAFB5RmxvYXRfQXNSZXByU3RyaW5ncjVUAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9Bc1JlcHJTdHJpbmdYAQAAAC10cjZUAABYGgAAAFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50cjdUAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50WAEAAAAtdHI4VAAAWB8AAABQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzcjlUAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc1gBAAAALXRyOlQAAFgbAAAAUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kcjtUAAAoanMFAABqdAUAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmRYAQAAAC10cjxUAABYHgAAAFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbnI9VAAAKGpzBQAAanQFAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uWAEAAAAtdHI+VAAAWBAAAABQeU9iamVjdF9Jbml0VmFycj9UAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeU9iamVjdF9Jbml0VmFyWAEAAAAtdHJAVAAAWBkAAABQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yckFUAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3JYAQAAAC10ckJUAABYFgAAAFB5U3RyaW5nX0ludGVybkluUGxhY2VyQ1QAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfSW50ZXJuSW5QbGFjZVgBAAAALXRyRFQAAFgcAAAAUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzY3JFVAAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzY1gBAAAALXRyRlQAAFgJAAAAUHlHZW5fTmV3ckdUAAAoanMFAABqdAUAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nZW4uaHRtbCNjLlB5R2VuX05ld1gBAAAALXRySFQAAFgOAAAAUHlFcnJfT2NjdXJyZWRySVQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX09jY3VycmVkWAEAAAAtdHJKVAAAWAoAAABQeUNlbGxfU2V0cktUAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxfU2V0WAEAAAAtdHJMVAAAWAsAAABQeVNldF9DaGVja3JNVAAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9DaGVja1gBAAAALXRyTlQAAFgPAAAAUHlPYmplY3RfTWFsbG9jck9UAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5T2JqZWN0X01hbGxvY1gBAAAALXRyUFQAAFgHAAAAUHlfRXhpdHJRVAAAKGpzBQAAanQFAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeV9FeGl0WAEAAAAtdHJSVAAAWA0AAABfUHlPYmplY3RfTmV3clNUAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5fUHlPYmplY3RfTmV3WAEAAAAtdHJUVAAAWBcAAABQeVVuaWNvZGVfRW5jb2RlQ2hhcm1hcHJVVAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZUNoYXJtYXBYAQAAAC10clZUAABYDAAAAFB5UnVuX1N0cmluZ3JXVAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1N0cmluZ1gBAAAALXRyWFQAAFgUAAAAUHlEaWN0X0RlbEl0ZW1TdHJpbmdyWVQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9EZWxJdGVtU3RyaW5nWAEAAAAtdHJaVAAAWBUAAABQeVVuaWNvZGVfRW5jb2RlVVRGMTZyW1QAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVVVEYxNlgBAAAALXRyXFQAAFgNAAAAUHlFcnJfUHJpbnRFeHJdVAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfUHJpbnRFeFgBAAAALXRyXlQAAFgJAAAAX1B5X2Nfc3Vtcl9UAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19zdW1YAQAAAC10cmBUAABYEAAAAFB5RnVuY3Rpb25fQ2hlY2tyYVQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX0NoZWNrWAEAAAAtdHJiVAAAWAwAAABQeU9iamVjdF9Ob3RyY1QAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfTm90WAEAAAAtdHJkVAAAWBYAAABQeURlc2NyX05ld0NsYXNzTWV0aG9kcmVUAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld0NsYXNzTWV0aG9kWAEAAAAtdHJmVAAAWBEAAABQeV9FbmRJbnRlcnByZXRlcnJnVAAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfRW5kSW50ZXJwcmV0ZXJYAQAAAC10cmhUAABYEgAAAFB5RGF0ZVRpbWVfR0VUX0RBWXJpVAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfR0VUX0RBWVgBAAAALXRyalQAAFgWAAAAUHlGdW5jdGlvbl9TZXREZWZhdWx0c3JrVAAAKGpzBQAAanQFAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fU2V0RGVmYXVsdHNYAQAAAC10cmxUAABYFAAAAFB5VW5pY29kZV9Gcm9tU3RyaW5ncm1UAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbVN0cmluZ1gBAAAALXRyblQAAFgXAAAAUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVJyb1QAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVJYAQAAAC10cnBUAABYFgAAAFB5T2JqZWN0X0RlbEF0dHJTdHJpbmdycVQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfRGVsQXR0clN0cmluZ1gBAAAALXRyclQAAFgTAAAAUHlPYmplY3RfSXNTdWJjbGFzc3JzVAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Jc1N1YmNsYXNzWAEAAAAtdHJ0VAAAWA8AAABQeVN5c19HZXRPYmplY3RydVQAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfR2V0T2JqZWN0WAEAAAAtdHJ2VAAAWAoAAABfUHlfY19xdW90cndUAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19xdW90WAEAAAAtdHJ4VAAAWA4AAABQeUZ1bmN0aW9uX05ld3J5VAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fTmV3WAEAAAAtdHJ6VAAAWBwAAABQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5cntUAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnlYAQAAAC10cnxUAABYEgAAAFB5RmlsZV9TZXRFbmNvZGluZ3J9VAAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1NldEVuY29kaW5nWAEAAAAtdHJ+VAAAWBMAAABQeU51bWJlcl9UcnVlRGl2aWRlcn9UAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1RydWVEaXZpZGVYAQAAAC10coBUAABYEAAAAFB5RGF0ZVRpbWVfQ2hlY2tygVQAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0NoZWNrWAEAAAAtdHKCVAAAWBUAAABQeU9iamVjdF9Bc0NoYXJCdWZmZXJyg1QAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamJ1ZmZlci5odG1sI2MuUHlPYmplY3RfQXNDaGFyQnVmZmVyWAEAAAAtdHKEVAAAWBAAAABQeUNhbGxhYmxlX0NoZWNrcoVUAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5Q2FsbGFibGVfQ2hlY2tYAQAAAC10coZUAABYDwAAAFB5RmxvYXRfR2V0SW5mb3KHVAAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfR2V0SW5mb1gBAAAALXRyiFQAAFgNAAAAUHlfRmF0YWxFcnJvcnKJVAAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeV9GYXRhbEVycm9yWAEAAAAtdHKKVAAAWAwAAABQeU51bWJlcl9JbnRyi1QAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW50WAEAAAAtdHKMVAAAWAkAAABfUHlfY19wb3dyjVQAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX3Bvd1gBAAAALXRyjlQAAFgSAAAAUHlFdmFsX0luaXRUaHJlYWRzco9UAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfSW5pdFRocmVhZHNYAQAAAC10cpBUAABYDQAAAFB5T2JqZWN0X0NhbGxykVQAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbFgBAAAALXRyklQAAFgaAAAAUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemVyk1QAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemVYAQAAAC10cpRUAABYDAAAAFB5SW50X0FzTG9uZ3KVVAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9Bc0xvbmdYAQAAAC10cpZUAABYDgAAAFB5QnVmZmVyX0NoZWNrcpdUAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0NoZWNrWAEAAAAtdHKYVAAAWA8AAABQeVJ1bl9GaWxlRmxhZ3NymVQAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxlRmxhZ3NYAQAAAC10cppUAABYFAAAAFB5RXZhbF9SZXN0b3JlVGhyZWFkcptUAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVzdG9yZVRocmVhZFgBAAAALXRynFQAAFgLAAAAUHlfRmluYWxpemVynVQAAChqcwUAAGp0BQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0ZpbmFsaXplWAEAAAAtdHKeVAAAWBUAAABQeURhdGVUaW1lX0NoZWNrRXhhY3Ryn1QAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0NoZWNrRXhhY3RYAQAAAC10cqBUAABYFgAAAFB5Q29tcGxleF9SZWFsQXNEb3VibGVyoVQAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9SZWFsQXNEb3VibGVYAQAAAC10cqJUAABYGAAAAFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdHKjVAAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdFgBAAAALXRypFQAAFgHAAAAUHlfTWFpbnKlVAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X01haW5YAQAAAC10cqZUAABYEQAAAFB5Qnl0ZUFycmF5X0NoZWNrcqdUAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NoZWNrWAEAAAAtdHKoVAAAWBMAAABQeVR5cGVfR2VuZXJpY0FsbG9jcqlUAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfR2VuZXJpY0FsbG9jWAEAAAAtdHKqVAAAWAsAAABQeURpY3RfU2l6ZXKrVAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X1NpemVYAQAAAC10cqxUAABYDwAAAFB5RXZhbF9TZXRUcmFjZXKtVAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1NldFRyYWNlWAEAAAAtdHKuVAAAWAwAAABQeUxvbmdfQ2hlY2tyr1QAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19DaGVja1gBAAAALXRysFQAAFgSAAAAUHlTZXF1ZW5jZV9EZWxJdGVtcrFUAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9EZWxJdGVtWAEAAAAtdHKyVAAAWBAAAABQeVVuaWNvZGVfRm9ybWF0crNUAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRm9ybWF0WAEAAAAtdHK0VAAAWBIAAABQeV9VTklDT0RFX0lTQUxOVU1ytVQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNBTE5VTVgBAAAALXRytlQAAFgRAAAAUHlJbnN0YW5jZV9OZXdSYXdyt1QAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NsYXNzLmh0bWwjYy5QeUluc3RhbmNlX05ld1Jhd1gBAAAALXRyuFQAAFgPAAAAUHlVbmljb2RlX0NvdW50crlUAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ291bnRYAQAAAC10crpUAABYFAAAAFB5UnVuX0ludGVyYWN0aXZlT25lcrtUAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVPbmVYAQAAAC10crxUAABYEgAAAFB5T2JqZWN0X0dDX05ld1ZhcnK9VAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5QeU9iamVjdF9HQ19OZXdWYXJYAQAAAC10cr5UAABYFQAAAFB5Q29kZWNfUmVwbGFjZUVycm9yc3K/VAAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfUmVwbGFjZUVycm9yc1gBAAAALXRywFQAAFgQAAAAUHlJbnRfQ2hlY2tFeGFjdHLBVAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9DaGVja0V4YWN0WAEAAAAtdHLCVAAAWA4AAABQeUNvZGVjX0VuY29kZXLDVAAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfRW5jb2RlWAEAAAAtdHLEVAAAWBoAAABQeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcnLFVAAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyWAEAAAAtdHLGVAAAWBQAAABQeVNsaWNlX0dldEluZGljZXNFeHLHVAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfR2V0SW5kaWNlc0V4WAEAAAAtdHLIVAAAWBMAAABQeVN0cmluZ19Gcm9tU3RyaW5ncslUAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0Zyb21TdHJpbmdYAQAAAC10cspUAABYEQAAAFB5U3RyaW5nX0dFVF9TSVpFcstUAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0dFVF9TSVpFWAEAAAAtdHLMVAAAWBMAAABQeVNlcXVlbmNlX0dldFNsaWNlcs1UAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9HZXRTbGljZVgBAAAALXRyzlQAAFgdAAAAUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2tyz1QAAChqcwUAAGp0BQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrWAEAAAAtdHLQVAAAWBoAAABQeURhdGVUaW1lX1RJTUVfR0VUX1NFQ09ORHLRVAAAKGpzBQAAanQFAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfVElNRV9HRVRfU0VDT05EWAEAAAAtdHLSVAAAWA0AAABQeUNhcHN1bGVfTmV3ctNUAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfTmV3WAEAAAAtdHLUVAAAWAsAAABQeUxpc3RfU29ydHLVVAAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1NvcnRYAQAAAC10ctZUAABYDQAAAFB5U2xpY2VfQ2hlY2ty11QAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX0NoZWNrWAEAAAAtdHLYVAAAWBYAAABQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0ctlUAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3RYAQAAAC10ctpUAABYDQAAAFB5U3lzX1NldEFyZ3Zy21QAAChqcwUAAGp0BQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5U3lzX1NldEFyZ3ZYAQAAAC10ctxUAABYEgAAAFB5TnVtYmVyX0luUGxhY2VPcnLdVAAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlT3JYAQAAAC10ct5UAABYDgAAAFB5U2V0X0NvbnRhaW5zct9UAAAoanMFAABqdAUAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0NvbnRhaW5zWAEAAAAtdHLgVAAAWB8AAABQeURhdGVUaW1lX1RJTUVfR0VUX01JQ1JPU0VDT05EcuFUAAAoanMFAABqdAUAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9USU1FX0dFVF9NSUNST1NFQ09ORFgBAAAALXRy4lQAAFgRAAAAUHlMb25nX0FzTG9uZ0xvbmdy41QAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc0xvbmdMb25nWAEAAAAtdHLkVAAAWBkAAABQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzcuVUAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFnc1gBAAAALXRy5lQAAFgUAAAAUHlfVU5JQ09ERV9JU0RFQ0lNQUxy51QAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNERUNJTUFMWAEAAAAtdHLoVAAAWBQAAABQeVVuaWNvZGVfRGVjb2RlVVRGOHLpVAAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjhYAQAAAC10cupUAABYEwAAAFB5T2JqZWN0X0NhbGxNZXRob2Ry61QAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbE1ldGhvZFgBAAAALXRy7FQAAFgQAAAAUHlVbmljb2RlX0RlY29kZXLtVAAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVgBAAAALXRy7lQAAFgVAAAAUHlGcmFtZV9HZXRMaW5lTnVtYmVycu9UAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUZyYW1lX0dldExpbmVOdW1iZXJYAQAAAC10cvBUAABYFgAAAFB5SW1wb3J0X0dldE1vZHVsZURpY3Ry8VQAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfR2V0TW9kdWxlRGljdFgBAAAALXRy8lQAAFgZAAAAUHlMb25nX0FzVW5zaWduZWRMb25nTWFza3LzVAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzVW5zaWduZWRMb25nTWFza1gBAAAALXRy9FQAAFgRAAAAUHlTZXF1ZW5jZV9Db25jYXRy9VQAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0NvbmNhdFgBAAAALXRy9lQAAFgWAAAAUHlVbmljb2RlX0Zyb21XaWRlQ2hhcnL3VAAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21XaWRlQ2hhclgBAAAALXRy+FQAAFgXAAAAUHlJbnRlcnByZXRlclN0YXRlX0hlYWRy+VQAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkWAEAAAAtdHL6VAAAWBAAAABQeVJ1bl9TaW1wbGVGaWxlcvtUAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlRmlsZVgBAAAALXRy/FQAAFgQAAAAUHlCeXRlQXJyYXlfU2l6ZXL9VAAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9TaXplWAEAAAAtdHL+VAAAWBIAAABQeV9VTklDT0RFX1RPVVBQRVJy/1QAAChqcwUAAGp0BQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9VUFBFUlgBAAAALXRyAFUAAFgYAAAAUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9ucgFVAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9Ob3JtYWxpemVFeGNlcHRpb25YAQAAAC10cgJVAABYEQAAAFB5TGlzdF9DaGVja0V4YWN0cgNVAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfQ2hlY2tFeGFjdFgBAAAALXRyBFUAAFgMAAAAUHlNZW1fTWFsbG9jcgVVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX01hbGxvY1gBAAAALXRyBlUAAFgSAAAAUHlNb2R1bGVfQWRkT2JqZWN0cgdVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZE9iamVjdFgBAAAALXRyCFUAAFgOAAAAUHlEZXNjcl9Jc0RhdGFyCVUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5RGVzY3JfSXNEYXRhWAEAAAAtdHIKVQAAWA4AAABQeUVycl9XYXJuUHkza3ILVQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfV2FyblB5M2tYAQAAAC10cgxVAABYFAAAAFB5Q09iamVjdF9TZXRWb2lkUHRycg1VAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2JqZWN0Lmh0bWwjYy5QeUNPYmplY3RfU2V0Vm9pZFB0clgBAAAALXRyDlUAAFgRAAAAUHlPYmplY3RfR0NfVHJhY2tyD1UAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfVHJhY2tYAQAAAC10chBVAABYEgAAAFB5RmxvYXRfRnJvbURvdWJsZXIRVQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfRnJvbURvdWJsZVgBAAAALXRyElUAAFgVAAAAUHlGdW5jdGlvbl9HZXRHbG9iYWxzchNVAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRHbG9iYWxzWAEAAAAtdHIUVQAAWAwAAABQeURpY3RfQ2xlYXJyFVUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9DbGVhclgBAAAALXRyFlUAAFgMAAAAUHlGaWxlX0NoZWNrchdVAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfQ2hlY2tYAQAAAC10chhVAABYEgAAAFB5UnVuX1NpbXBsZVN0cmluZ3IZVQAAKGpzBQAAanQFAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZVN0cmluZ1gBAAAALXRyGlUAAFgNAAAAUHlJbmRleF9DaGVja3IbVQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeUluZGV4X0NoZWNrWAEAAAAtdHIcVQAAWA8AAABQeVNlcXVlbmNlX1NpemVyHVUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1NpemVYAQAAAC10ch5VAABYGwAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZHIfVQAAKGpzBQAAanQFAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kWAEAAAAtdHIgVQAAWA0AAABQeVJ1bl9BbnlGaWxlciFVAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fQW55RmlsZVgBAAAALXRyIlUAAFgcAAAAUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZXIjVQAAKGpzBQAAanQFAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZVgBAAAALXRyJFUAAFgNAAAAUHlPYmplY3RfUmVwcnIlVQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9SZXByWAEAAAAtdHImVQAAWBoAAABQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91c3InVQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91c1gBAAAALXRyKFUAAFgXAAAAUHlVbmljb2RlX0FzVVRGMzJTdHJpbmdyKVUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nWAEAAAAtdHIqVQAAWBwAAABQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93citVAAAoanMFAABqdAUAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93WAEAAAAtdHIsVQAAWAwAAABQeU51bWJlcl9Yb3JyLVUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfWG9yWAEAAAAtdHIuVQAAWA0AAABQeU9TX3N0cm5pY21wci9VAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3N0cm5pY21wWAEAAAAtdHIwVQAAWA8AAABQeVN5c19TZXRPYmplY3RyMVUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfU2V0T2JqZWN0WAEAAAAtdHIyVQAAWBUAAABQeUltcG9ydF9SZWxvYWRNb2R1bGVyM1UAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfUmVsb2FkTW9kdWxlWAEAAAAtdHI0VQAAWBIAAABQeUxvbmdfRnJvbVZvaWRQdHJyNVUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVm9pZFB0clgBAAAALXRyNlUAAFgaAAAAUHlEYXRlVGltZV9USU1FX0dFVF9NSU5VVEVyN1UAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX1RJTUVfR0VUX01JTlVURVgBAAAALXRyOFUAAFgUAAAAUHlDb21wbGV4X0NoZWNrRXhhY3RyOVUAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9DaGVja0V4YWN0WAEAAAAtdHI6VQAAWBIAAABQeUNsYXNzX0lzU3ViY2xhc3NyO1UAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NsYXNzLmh0bWwjYy5QeUNsYXNzX0lzU3ViY2xhc3NYAQAAAC10cjxVAABYEAAAAFB5V2Vha3JlZl9OZXdSZWZyPVUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9OZXdSZWZYAQAAAC10cj5VAABYGQAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGVyP1UAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGVYAQAAAC10ckBVAABYGwAAAFB5RmlsZV9TZXRFbmNvZGluZ0FuZEVycm9yc3JBVQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1NldEVuY29kaW5nQW5kRXJyb3JzWAEAAAAtdHJCVQAAWBAAAABQeU1vZHVsZV9HZXREaWN0ckNVAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldERpY3RYAQAAAC10ckRVAABYDgAAAFB5TGlzdF9SZXZlcnNlckVVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfUmV2ZXJzZVgBAAAALXRyRlUAAFgOAAAAUHlNZXRob2RfQ2hlY2tyR1UAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfQ2hlY2tYAQAAAC10ckhVAABYEgAAAFB5X1VOSUNPREVfVE9MT1dFUnJJVQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT0xPV0VSWAEAAAAtdHJKVQAAWA0AAABQeUNsYXNzX0NoZWNrcktVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlDbGFzc19DaGVja1gBAAAALXRyTFUAAFgNAAAAUHlOdW1iZXJfTG9uZ3JNVQAAKGpzBQAAanQFAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Mb25nWAEAAAAtdHJOVQAAWBMAAABQeU51bWJlcl9JblBsYWNlQWRkck9VAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VBZGRYAQAAAC10clBVAABYEQAAAFB5U2VxdWVuY2VfTGVuZ3RoclFVAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9MZW5ndGhYAQAAAC10clJVAABYEgAAAFB5X1VOSUNPREVfSVNTUEFDRXJTVQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU1NQQUNFWAEAAAAtdHJUVQAAWA4AAABQeUZpbGVfR2V0TGluZXJVVQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX0dldExpbmVYAQAAAC10clZVAABYEgAAAFB5T2JqZWN0X0dldEJ1ZmZlcnJXVQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9HZXRCdWZmZXJYAQAAAC10clhVAABYEAAAAFB5RXZhbF9FdmFsRnJhbWVyWVUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUV2YWxfRXZhbEZyYW1lWAEAAAAtdHJaVQAAWBIAAABQeUZpbGVfV3JpdGVPYmplY3RyW1UAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9Xcml0ZU9iamVjdFgBAAAALXRyXFUAAFgOAAAAUHlOdW1iZXJfUG93ZXJyXVUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUG93ZXJYAQAAAC10cl5VAABYDwAAAFB5SW1wb3J0X0ltcG9ydHJfVQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRYAQAAAC10cmBVAABYGwAAAFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZ3JhVQAAKGpzBQAAanQFAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nWAEAAAAtdHJiVQAAWA0AAABQeUFyZ19WYVBhcnNlcmNVAAAoanMFAABqdAUAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1ZhUGFyc2VYAQAAAC10cmRVAABYHAAAAFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWxyZVUAAChqcwUAAGp0BQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWxYAQAAAC10cmZVAABYEAAAAFB5SW50X0Zyb21TaXplX3RyZ1UAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVNpemVfdFgBAAAALXRyaFUAAFgMAAAAUHlPU19zdHJpY21wcmlVAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3N0cmljbXBYAQAAAC10cmpVAABYEQAAAFB5Q2Fwc3VsZV9TZXROYW1lcmtVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0TmFtZVgBAAAALXRybFUAAFgTAAAAUHlPYmplY3RfSXNJbnN0YW5jZXJtVQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Jc0luc3RhbmNlWAEAAAAtdHJuVQAAWBcAAABQeUltcG9ydF9HZXRNYWdpY051bWJlcnJvVQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9HZXRNYWdpY051bWJlclgBAAAALXRycFUAAFgQAAAAUHlVbmljb2RlX0NvbmNhdHJxVQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NvbmNhdFgBAAAALXRyclUAAFgPAAAAUHlMaXN0X1NFVF9JVEVNcnNVAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU0VUX0lURU1YAQAAAC10cnRVAABYEQAAAFB5UnVuX0ZpbGVFeEZsYWdzcnVVAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fRmlsZUV4RmxhZ3NYAQAAAC10cnZVAABYFgAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXdyd1UAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXdYAQAAAC10cnhVAABYEAAAAFB5TWFwcGluZ19MZW5ndGhyeVUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19MZW5ndGhYAQAAAC10cnpVAABYDgAAAFB5RGljdF9HZXRJdGVtcntVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfR2V0SXRlbVgBAAAALXRyfFUAAFgSAAAAUHlCeXRlQXJyYXlfQ29uY2F0cn1VAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NvbmNhdFgBAAAALXRyflUAAFgSAAAAUHlfVU5JQ09ERV9UT0RJR0lUcn9VAAAoanMFAABqdAUAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPRElHSVRYAQAAAC10coBVAABYFAAAAFB5RXZhbF9SZUluaXRUaHJlYWRzcoFVAAAoanMFAABqdAUAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVJbml0VGhyZWFkc1gBAAAALXRyglUAAFgPAAAAUHlMaXN0X0dldFNsaWNlcoNVAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR2V0U2xpY2VYAQAAAC10coRVAABYFAAAAFB5Qnl0ZUFycmF5X0dFVF9TSVpFcoVVAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0dFVF9TSVpFWAEAAAAtdHKGVQAAWBEAAABQeVRpbWVfQ2hlY2tFeGFjdHKHVQAAKGpzBQAAanQFAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZV9DaGVja0V4YWN0WAEAAAAtdHKIVQAAWBgAAABQeURhdGVUaW1lX0RBVEVfR0VUX0hPVVJyiVUAAChqcwUAAGp0BQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX0hPVVJYAQAAAC10copVAABYFAAAAFB5VW5pY29kZV9FbmNvZGVNQkNTcotVAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlTUJDU1gBAAAALXRyjFUAAFgVAAAAUHlfQ29tcGlsZVN0cmluZ0ZsYWdzco1VAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfQ29tcGlsZVN0cmluZ0ZsYWdzWAEAAAAtdHKOVQAAWAkAAABfUHlfY19uZWdyj1UAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX25lZ1gBAAAALXRykFUAAFgRAAAAUHlTeXNfV3JpdGVTdGRvdXRykVUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfV3JpdGVTdGRvdXRYAQAAAC10cpJVAABYFQAAAFB5T2JqZWN0X0NhbGxGdW5jdGlvbnKTVQAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsRnVuY3Rpb25YAQAAAC10cpRVAABYDQAAAFB5U2V0X0Rpc2NhcmRylVUAAChqcwUAAGp0BQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfRGlzY2FyZFgBAAAALXRyllUAAFgbAAAAUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlcpdVAAAoanMFAABqdAUAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZVgBAAAALXRymFUAAFgXAAAAUHlPYmplY3RfR2VuZXJpY1NldEF0dHJymVUAAChqcwUAAGp0BQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2VuZXJpY1NldEF0dHJYAQAAAC10cppVAABYEwAAAFB5U2VxdWVuY2VfQ29udGFpbnNym1UAAChqcwUAAGp0BQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0NvbnRhaW5zWAEAAAAtdHKcVQAAWBQAAABQeUV2YWxfQWNxdWlyZVRocmVhZHKdVQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX0FjcXVpcmVUaHJlYWRYAQAAAC10cp5VAABYDwAAAFB5TnVtYmVyX0Rpdm1vZHKfVQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9EaXZtb2RYAQAAAC10cqBVAABYDwAAAFB5T2JqZWN0X0lzVHJ1ZXKhVQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Jc1RydWVYAQAAAC10cqJVAABYHwAAAFB5RGF0ZVRpbWVfREFURV9HRVRfTUlDUk9TRUNPTkRyo1UAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX01JQ1JPU0VDT05EWAEAAAAtdHKkVQAAWBoAAABQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbHKlVQAAKGpzBQAAanQFAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbFgBAAAALXRyplUAAFgZAAAAUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Y3KnVQAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Y1gBAAAALXRyqFUAAFgUAAAAUHlTaWduYWxfU2V0V2FrZXVwRmRyqVUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5U2lnbmFsX1NldFdha2V1cEZkWAEAAAAtdHKqVQAAWBEAAABQeU51bWJlcl9OZWdhdGl2ZXKrVQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9OZWdhdGl2ZVgBAAAALXRyrFUAAFgSAAAAUHlMb25nX0Zyb21Tc2l6ZV90cq1VAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVNzaXplX3RYAQAAAC10cq5VAABYGgAAAFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5ncq9VAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdYAQAAAC10crBVAABYHAAAAFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NysVUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnc1gBAAAALXRyslUAAFgUAAAAUHlEYXRlX0Zyb21UaW1lc3RhbXBys1UAAChqcwUAAGp0BQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVfRnJvbVRpbWVzdGFtcFgBAAAALXRytFUAAFggAAAAUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGVytVUAAChqcwUAAGp0BQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlWAEAAAAtdHK2VQAAWBEAAABQeU51bWJlcl9NdWx0aXBseXK3VQAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9NdWx0aXBseVgBAAAALXRyuFUAAFgSAAAAUHlGaWxlX0RlY1VzZUNvdW50crlVAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfRGVjVXNlQ291bnRYAQAAAC10crpVAABYEAAAAFB5R2VuX0NoZWNrRXhhY3Ryu1UAAChqcwUAAGp0BQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fQ2hlY2tFeGFjdFgBAAAALXRyvFUAAFgRAAAAUHlJbnRfRnJvbVNzaXplX3RyvVUAAChqcwUAAGp0BQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVNzaXplX3RYAQAAAC10cr5VAABYFAAAAFB5UnVuX0FueUZpbGVFeEZsYWdzcr9VAAAoanMFAABqdAUAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fQW55RmlsZUV4RmxhZ3NYAQAAAC10csBVAABYEAAAAFB5U2VxdWVuY2VfVHVwbGVywVUAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1R1cGxlWAEAAAAtdHLCVQAAWAsAAABQeUZpbGVfTmFtZXLDVQAAKGpzBQAAanQFAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX05hbWVYAQAAAC10csRVAABYJAAAAFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHLFVQAAKGpzBQAAanQFAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0WAEAAAAtdHLGVQAAWA4AAABQeU1ldGhvZF9DbGFzc3LHVQAAKGpzBQAAanQFAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9DbGFzc1gBAAAALXRyyFUAAFgbAAAAUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0cslVAAAoanMFAABqdAUAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3RYAQAAAC10cspVAABYDwAAAFB5TnVtYmVyX0RpdmlkZXLLVQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9EaXZpZGVYAQAAAC10csxVAABYFAAAAFB5Q2Fwc3VsZV9TZXRDb250ZXh0cs1VAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0Q29udGV4dFgBAAAALXRyzlUAAFgNAAAAUHlTeXNfU2V0UGF0aHLPVQAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19TZXRQYXRoWAEAAAAtdHLQVQAAWA8AAABQeU51bWJlcl9Sc2hpZnRy0VUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUnNoaWZ0WAEAAAAtdHLSVQAAWBQAAABQeURpY3RfR2V0SXRlbVN0cmluZ3LTVQAAKGpzBQAAanQFAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0dldEl0ZW1TdHJpbmdYAQAAAC10ctRVAABYDgAAAFB5TW9kdWxlX0NoZWNrctVVAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0NoZWNrWAEAAAAtdHLWVQAAWBAAAABQeUZpbGVfU29mdFNwYWNlctdVAAAoanMFAABqdAUAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfU29mdFNwYWNlWAEAAAAtdHLYVQAAWAwAAABQeUVycl9Gb3JtYXRy2VUAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0Zvcm1hdFgBAAAALXRy2lUAAFgXAAAAUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmdy21UAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nWAEAAAAtdHLcVQAAWA4AAABQeV9HZXRDb21waWxlcnLdVQAAKGpzBQAAanQFAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0Q29tcGlsZXJYAQAAAC10ct5VAABYEQAAAFB5VGhyZWFkU3RhdGVfR2V0ct9VAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX0dldFgBAAAALXRy4FUAAFgLAAAAUHlFcnJfUHJpbnRy4VUAAChqcwUAAGp0BQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1ByaW50WAEAAAAtdHLiVQAAWB8AAABQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzcuNVAAAoanMFAABqdAUAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9yc1gBAAAALXRy5FUAAFgXAAAAUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmdy5VUAAChqcwUAAGp0BQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19EZWxJdGVtU3RyaW5nWAEAAAAtdHLmVQAAWBEAAABQeVR5cGVfQ2hlY2tFeGFjdHLnVQAAKGpzBQAAanQFAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NoZWNrRXhhY3RYAQAAAC10cuhVAABYDQAAAFB5VHVwbGVfQ2hlY2ty6VUAAChqcwUAAGp0BQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0NoZWNrWAEAAAAtdHLqVQAAWB4AAABQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmRy61UAAChqcwUAAGp0BQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZFgBAAAALXRy7FUAAFgSAAAAUHlSdW5fU2ltcGxlRmlsZUV4cu1VAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlRmlsZUV4WAEAAAAtdHLuVQAAWBAAAABQeU9iamVjdF9Vbmljb2Rlcu9VAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1VuaWNvZGVYAQAAAC10cvBVAABYDgAAAFB5TGlzdF9Bc1R1cGxlcvFVAAAoanMFAABqdAUAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfQXNUdXBsZVgBAAAALXRy8lUAAFgeAAAAUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzcvNVAAAoanMFAABqdAUAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzWAEAAAAtdHL0VQAAWBsAAABQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGVy9VUAAChqcwUAAGp0BQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZVgBAAAALXRy9lUAAFgUAAAAUHlOdW1iZXJfRmxvb3JEaXZpZGVy91UAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfRmxvb3JEaXZpZGVYAQAAAC10cvhVAABYFAAAAFB5X1VOSUNPREVfVE9OVU1FUklDcvlVAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPTlVNRVJJQ1gBAAAALXRy+lUAAFgPAAAAUHlTeXNfU2V0QXJndkV4cvtVAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVN5c19TZXRBcmd2RXhYAQAAAC10cvxVAABYEAAAAFB5Q2Fwc3VsZV9JbXBvcnRy/VUAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9JbXBvcnRYAQAAAC10cv5VAABYEQAAAFB5TWV0aG9kX0dFVF9TRUxGcv9VAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX0dFVF9TRUxGWAEAAAAtdHIAVgAAWA8AAABQeUNvbXBsZXhfQ2hlY2tyAVYAAChqcwUAAGp0BQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9DaGVja1gBAAAALXRyAlYAAFgPAAAAUHlEaWN0X0NvbnRhaW5zcgNWAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ29udGFpbnNYAQAAAC10cgRWAABYEQAAAFB5TnVtYmVyX0Fic29sdXRlcgVWAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0Fic29sdXRlWAEAAAAtdHIGVgAAWBAAAABQeU9iamVjdF9EZWxJdGVtcgdWAAAoanMFAABqdAUAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RlbEl0ZW1YAQAAAC10cghWAABYFwAAAFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9ycglWAAAoanMFAABqdAUAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvclgBAAAALXRyClYAAFgPAAAAUHlEYXRlX0Zyb21EYXRlcgtWAAAoanMFAABqdAUAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0Zyb21EYXRlWAEAAAAtdHIMVgAAWBEAAABQeURlc2NyX05ld0dldFNldHINVgAAKGpzBQAAanQFAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdHZXRTZXRYAQAAAC10cg5WAABYIAAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5ncg9WAAAoanMFAABqdAUAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZ1gBAAAALXRyEFYAAFgVAAAAUHlUdXBsZV9DbGVhckZyZWVMaXN0chFWAAAoanMFAABqdAUAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9DbGVhckZyZWVMaXN0WAEAAAAtdHISVgAAWBIAAABQeU1ldGhvZF9HRVRfQ0xBU1NyE1YAAChqcwUAAGp0BQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfR0VUX0NMQVNTWAEAAAAtdHIUVgAAWBcAAABQeU9iamVjdF9HZW5lcmljR2V0QXR0cnIVVgAAKGpzBQAAanQFAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9HZW5lcmljR2V0QXR0clgBAAAALXRyFlYAAFgVAAAAUHlTdHJpbmdfQ29uY2F0QW5kRGVschdWAAAoanMFAABqdAUAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0NvbmNhdEFuZERlbFgBAAAALXRyGFYAAFgVAAAAUHlFcnJfQmFkSW50ZXJuYWxDYWxschlWAAAoanMFAABqdAUAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9CYWRJbnRlcm5hbENhbGxYAQAAAC10chpWAABYDQAAAFB5T2JqZWN0X0luaXRyG1YAAChqcwUAAGp0BQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X0luaXRYAQAAAC10chxWAABYEgAAAFB5U2xpY2VfR2V0SW5kaWNlc3IdVgAAKGpzBQAAanQFAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfR2V0SW5kaWNlc1gBAAAALXRyHlYAAFgVAAAAUHlSdW5fU2ltcGxlRmlsZUZsYWdzch9WAAAoanMFAABqdAUAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlRmlsZUZsYWdzWAEAAAAtdHIgVgAAWBAAAABQeUZsb2F0X0FzRG91YmxlciFWAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9Bc0RvdWJsZVgBAAAALXRyIlYAAFgUAAAAUHlNb2R1bGVfR2V0RmlsZW5hbWVyI1YAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfR2V0RmlsZW5hbWVYAQAAAC10ciRWAABYEQAAAFB5TG9uZ19Gcm9tRG91YmxlciVWAAAoanMFAABqdAUAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbURvdWJsZVgBAAAALXRyJlYAAFgNAAAAUHlfQnVpbGRWYWx1ZXInVgAAKGpzBQAAanQFAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeV9CdWlsZFZhbHVlWAEAAAAtdHIoVgAAWAsAAABQeU9TX3NldHNpZ3IpVgAAKGpzBQAAanQFAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX3NldHNpZ1gBAAAALXRyKlYAAFgTAAAAUHlJbnRfQ2xlYXJGcmVlTGlzdHIrVgAAKGpzBQAAanQFAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9DbGVhckZyZWVMaXN0WAEAAAAtdHIsVgAAWBIAAABQeVNlcXVlbmNlX1NldEl0ZW1yLVYAAChqcwUAAGp0BQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1NldEl0ZW1YAQAAAC10ci5WAABYDgAAAFB5Q29kZWNfRGVjb2Rlci9WAAAoanMFAABqdAUAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19EZWNvZGVYAQAAAC10cjBWAABYCwAAAFB5U2V0X0NsZWFycjFWAAAoanMFAABqdAUAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0NsZWFyWAEAAAAtdHIyVgAAdXWHdVUGY29uZmlncjNWAABjc3BoaW54LmNvbmZpZwpDb25maWcKcjRWAAApgXI1VgAAfXI2VgAAKFUKbWFzdGVyX2RvY3I3VgAAVQVpbmRleHI4VgAAVQlvdmVycmlkZXNyOVYAAH1VDm5pdHBpY2tfaWdub3JlcjpWAABdcjtWAAAoVQhweTpjbGFzc3I8VgAAVQCGcj1WAABqPFYAAFUDQW55cj5WAACGcj9WAABqPFYAAFUERGljdHJAVgAAhnJBVgAAajxWAABVCEl0ZXJhYmxlckJWAACGckNWAABqPFYAAFUETGlzdHJEVgAAhnJFVgAAajxWAABVA1NldHJGVgAAhnJHVgAAajxWAABVBVR1cGxlckhWAACGcklWAABqPFYAAFUFdHVwbGVySlYAAIZyS1YAAGo8VgAAVSphcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLl9QaWNrbGVDb2RlckJhc2VyTFYAAIZyTVYAAGo8VgAAVSNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RDb2RlcnJOVgAAhnJPVgAAajxWAABVGmFwYWNoZV9iZWFtLmlvLl9BdnJvU291cmNlclBWAACGclFWAABqPFYAAFUuYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlJvd0FzRGljdEpzb25Db2RlcnJSVgAAhnJTVgAAajxWAABVM2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uX011dGF0ZXJUVgAAhnJVVgAAajxWAABVTWFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hclZWAACGcldWAABqPFYAAFUgYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNvdXJjZUJhc2VyWFYAAIZyWVYAAGo8VgAAVTVhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5FeHBlY3RlZFNwbGl0T3V0Y29tZXJaVgAAhnJbVgAAajxWAABVKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY1Jlc3VsdHNyXFYAAIZyXVYAAGo8VgAAVSRhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZVZpc2l0b3JyXlYAAIZyX1YAAGo8VgAAVSdhcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGVyYFYAAIZyYVYAAGo8VgAAVR5hcGFjaGVfYmVhbS5wdmFsdWUuQXNTaWRlSW5wdXRyYlYAAIZyY1YAAGo8VgAAVSFhcGFjaGVfYmVhbS5wdmFsdWUuRG9PdXRwdXRzVHVwbGVyZFYAAIZyZVYAAGo8VgAAVRlhcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlcmZWAACGcmdWAABqPFYAAFUwYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuQ2FsbGFibGVUYXNrcmhWAACGcmlWAABqPFYAAFU0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNhbGxhYmxlV3JhcHBlckNvbWJpbmVGbnJqVgAAhnJrVgAAajxWAABVOmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHNybFYAAIZybVYAAGo8VgAAVTFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuX1BhcmFsbGVsVHJpZ2dlckZucm5WAACGcm9WAABqPFYAAFU0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkluTWVtb3J5VW5tZXJnZWRTdGF0ZXJwVgAAhnJxVgAAajxWAABVMWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQW55VHlwZUNvbnN0cmFpbnRyclYAAIZyc1YAAGo8VgAAVTFhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkNvbXBvc2l0ZVR5cGVIaW50cnRWAACGcnVWAABqPFYAAFUuYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludHJ2VgAAhnJ3VgAAajxWAABVP2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oKXJ4VgAAhnJ5VgAAajxWAABVFldpbmRvd2VkVHlwZUNvbnN0cmFpbnRyelYAAIZye1YAAGo8VgAAVRZ1bml0dGVzdC5jYXNlLlRlc3RDYXNlcnxWAACGcn1WAABVBnB5Om9ianJ+VgAAVQCGcn9WAABqflYAAGo+VgAAhnKAVgAAan5WAABqQFYAAIZygVYAAGp+VgAAakJWAACGcoJWAABqflYAAGpEVgAAhnKDVgAAan5WAABqRlYAAIZyhFYAAGp+VgAAakhWAACGcoVWAABqflYAAGpKVgAAhnKGVgAAan5WAABqTFYAAIZyh1YAAGp+VgAAak5WAACGcohWAABqflYAAGpQVgAAhnKJVgAAan5WAABqUlYAAIZyilYAAGp+VgAAalRWAACGcotWAABqflYAAGpWVgAAhnKMVgAAan5WAABqWFYAAIZyjVYAAGp+VgAAalpWAACGco5WAABqflYAAGpcVgAAhnKPVgAAan5WAABqXlYAAIZykFYAAGp+VgAAamBWAACGcpFWAABqflYAAGpiVgAAhnKSVgAAan5WAABqZFYAAIZyk1YAAGp+VgAAamZWAACGcpRWAABqflYAAGpoVgAAhnKVVgAAan5WAABqalYAAIZyllYAAGp+VgAAamxWAACGcpdWAABqflYAAGpuVgAAhnKYVgAAan5WAABqcFYAAIZymVYAAGp+VgAAanJWAACGcppWAABqflYAAGp0VgAAhnKbVgAAan5WAABqdlYAAIZynFYAAGp+VgAAanhWAACGcp1WAABqflYAAGp6VgAAhnKeVgAAan5WAABqfFYAAIZyn1YAAGVVB3Byb2plY3RyoFYAAFULQXBhY2hlIEJlYW1VFGRvY3Rlc3RfZ2xvYmFsX3NldHVwcqFWAABVHAppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpVE2ludGVyc3BoaW54X21hcHBpbmdyolYAAH1yo1YAAChq7gMAAGrtAwAAToZq+wQAAGr6BAAAToZqbwUAAGpuBQAAToZ1VRBleGNsdWRlX3BhdHRlcm5zcqRWAABdcqVWAAAoVQZfYnVpbGRyplYAAFUPYXBhY2hlX2JlYW0ucnN0cqdWAABlVRRhdXRvZG9jX21lbWJlcl9vcmRlcnKoVgAAVQhieXNvdXJjZXKpVgAAVQ9odG1sX3RoZW1lX3BhdGhyqlYAAF1yq1YAAFVcL2hvbWUvamJvbm9mcmUvV29ya3NwYWNlL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0Ly50b3gvZG9jcy9sb2NhbC9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXNyrFYAAGFVEWF1dG9jbGFzc19jb250ZW50cq1WAABVBGJvdGhyrlYAAFUKaHRtbF90aGVtZXKvVgAAVRBzcGhpbnhfcnRkX3RoZW1lcrBWAABVCG5pdHBpY2t5crFWAACIVQpleHRlbnNpb25zcrJWAABdcrNWAAAoVRJzcGhpbnguZXh0LmF1dG9kb2NytFYAAFUSc3BoaW54LmV4dC5kb2N0ZXN0crVWAABVFnNwaGlueC5leHQuaW50ZXJzcGhpbnhytlYAAFUTc3BoaW54LmV4dC5uYXBvbGVvbnK3VgAAVRNzcGhpbnguZXh0LnZpZXdjb2RlcrhWAABlVQVzZXR1cHK5VgAATnViVQ50b2Nfc2VjbnVtYmVyc3K6VgAAfVUQdG9jdHJlZV9pbmNsdWRlc3K7VgAAfXK8VgAAKGhmXXK9VgAAKFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNyvlYAAFgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3Jlcr9WAABYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXLAVgAAWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm1ywVYAAFghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzcsJWAABYHwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWxyw1YAAFgeAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VycsRWAABYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbHLFVgAAWB0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3LGVgAAZWgmXXLHVgAAKFgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlcshWAABYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGVyyVYAAGVoWV1yylYAAChYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVycstWAABYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW9yzFYAAFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZXLNVgAAWCYAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcnLOVgAAWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVycs9WAABYJAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbHLQVgAAZWgqXXLRVgAAKFgdAAAAYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNy0lYAAFgYAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luctNWAABYGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc3LUVgAAWBoAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcnLVVgAAWB0AAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlsc3LWVgAAWBcAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeXLXVgAAWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXBy2FYAAFgWAAAAYXBhY2hlX2JlYW0udXRpbHMudXJuc3LZVgAAZWgtXXLaVgAAKFg2AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjcttWAABYMAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwY3LcVgAAWDEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjct1WAABYNwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGNy3lYAAFg0AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwY3LfVgAAWC4AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZW5kcG9pbnRzX3BiMl9ncnBjcuBWAABYOAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjcuFWAABlaGxdcuJWAAAoWB0AAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aHLjVgAAWCMAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZXLkVgAAZWgNXXLlVgAAWBsAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGly5lYAAGFoDl1y51YAAChYEgAAAGFwYWNoZV9iZWFtLmNvZGVyc3LoVgAAWBQAAABhcGFjaGVfYmVhbS5pbnRlcm5hbHLpVgAAWA4AAABhcGFjaGVfYmVhbS5pb3LqVgAAWBMAAABhcGFjaGVfYmVhbS5tZXRyaWNzcutWAABYEwAAAGFwYWNoZV9iZWFtLm9wdGlvbnNy7FYAAFgXAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHly7VYAAFgTAAAAYXBhY2hlX2JlYW0ucnVubmVyc3LuVgAAWBMAAABhcGFjaGVfYmVhbS50ZXN0aW5ncu9WAABYFgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXNy8FYAAFgVAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzcvFWAABYEQAAAGFwYWNoZV9iZWFtLnV0aWxzcvJWAABYEQAAAGFwYWNoZV9iZWFtLmVycm9ycvNWAABYFAAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lcvRWAABYEgAAAGFwYWNoZV9iZWFtLnB2YWx1ZXL1VgAAWBMAAABhcGFjaGVfYmVhbS52ZXJzaW9ucvZWAABlaDFdcvdWAAAoWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VycvhWAABYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcvlWAABlaHJdcvpWAAAoWBIAAABhcGFjaGVfYmVhbS5pby5nY3By+1YAAFgVAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvcvxWAABYHAAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2Vy/VYAAFgcAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2lua3L+VgAAWB4AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2Vy/1YAAFgZAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXIAVwAAWBoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc3IBVwAAWB8AAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtcgJXAABYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXIDVwAAWB4AAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW1yBFcAAFgdAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnNyBVcAAFgjAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNyBlcAAFggAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHNyB1cAAFgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvcghXAABYGQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9yCVcAAFgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9yClcAAGVoNF1yC1cAAChYHAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3dyDFcAAFgaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3RyDVcAAFggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWxyDlcAAFgXAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2JyD1cAAFgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0chBXAABYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVychFXAABYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnISVwAAZWgfXXITVwAAKFgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnNyFFcAAFghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lchVXAABYHwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1yFlcAAFgeAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzchdXAABYGAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbHIYVwAAZWgSXXIZVwAAWB8AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxchpXAABhaHZdchtXAAAoWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5weXRob25fcnBjX2RpcmVjdF9ydW5uZXJyHFcAAFg5AAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVych1XAABlaHhdch5XAAAoWCQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNyH1cAAFguAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcnIgVwAAWCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyciFXAABlaBddciJXAAAoWBkAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzciNXAABYGgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljciRXAABYHgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZXIlVwAAZWhbXXImVwAAKFgYAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwcidXAABYHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJyKFcAAFgZAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbHIpVwAAZWh6XXIqVwAAKFgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW9yK1cAAFgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzcixXAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyci1XAABYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXNyLlcAAFgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lcnIvVwAAZWh8XXIwVwAAWDIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdHIxVwAAYWhAXXIyVwAAKFgZAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc3IzVwAAWB0AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZXI0VwAAWB4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW1yNVcAAFgdAAAAYXBhY2hlX2JlYW0uY29kZXJzLnR5cGVjb2RlcnNyNlcAAGVogF1yN1cAAChYIAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzcjhXAABYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5cjlXAABYHQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzcjpXAABYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZXI7VwAAWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrcjxXAABYHwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNyPVcAAGVoRF1yPlcAAChYHAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVyP1cAAFgbAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5ckBXAABYIAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtckFXAABYGAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb3JCVwAAWBkAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3VickNXAABlaIJdckRXAAAoWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXJFVwAAWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja3JGVwAAWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yckdXAABYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzckhXAABYKAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXJySVcAAFgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0ckpXAABYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9ycktXAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zckxXAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyck1XAABYLgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3JyTlcAAFgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbHJPVwAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlcnJQVwAAZXVVFWludGVyc3BoaW54X2ludmVudG9yeXJRVwAAfXJSVwAAKGrwAwAAfXJTVwAAKGpyBQAAanUFAABqdgUAAGp3BQAAangFAABqeQUAAGp6BQAAansFAABqfAUAAGp9BQAAan4FAABqfwUAAGqABQAAaoEFAABqSAYAAGpJBgAAaoQFAABqhQUAAGqGBQAAaocFAABqiAUAAGqJBQAAaooFAABqiwUAAGqMBQAAao0FAABq1gkAAGrXCQAAao4FAABqjwUAAGqQBQAAapEFAABqkgUAAGqTBQAAapQFAABqlQUAAGqWBQAAapcFAABqmAUAAGqZBQAAapoFAABqmwUAAGqcBQAAap0FAABqngUAAGqfBQAAaqAFAABqoQUAAGq8BwAAar0HAABqpAUAAGqlBQAAavgDAABq+QMAAGqmBQAAaqcFAABqqAUAAGqpBQAAaqoFAABqqwUAAGqsBQAAaq0FAABqsgUAAGqzBQAAarQFAABqtQUAAGq2BQAAarcFAABquAUAAGq5BQAAaroFAABquwUAAGq8BQAAar0FAABqvgUAAGq/BQAAasAFAABqwQUAAGrCBQAAasMFAABqxAUAAGrFBQAAasYFAABqxwUAAGrIBQAAaskFAABqygUAAGrLBQAAaswFAABqzQUAAGrQBQAAatEFAABq0gUAAGrTBQAAatQFAABq1QUAAGrWBQAAatcFAABq2AUAAGrZBQAAatoFAABq2wUAAGoIBwAAagkHAABq3gUAAGrfBQAAauAFAABq4QUAAGriBQAAauMFAABqsAkAAGqxCQAAasQHAABqxQcAAGrkBQAAauUFAABq5gUAAGrnBQAAaugFAABq6QUAAGrqBQAAausFAABq7gUAAGrvBQAAagAEAABqAQQAAGryBQAAavMFAABq9AUAAGr1BQAAavYFAABq9wUAAGrIBwAAaskHAABq+gUAAGr7BQAAavwFAABq/QUAAGr+BQAAav8FAABqAAYAAGoBBgAAavwIAABq/QgAAGoEBgAAagUGAABqBgYAAGoHBgAAaggGAABqCQYAAGoKBgAAagsGAABqDAYAAGoNBgAAauQJAABq5QkAAGoOBgAAag8GAABqEAYAAGoRBgAAahIGAABqEwYAAGoUBgAAahUGAABqFgYAAGoXBgAAahgGAABqGQYAAGoaBgAAahsGAABqHAYAAGodBgAAangIAABqeQgAAGogBgAAaiEGAABqIgYAAGojBgAAaiYGAABqJwYAAGooBgAAaikGAABqDgcAAGoPBwAAaioGAABqKwYAAGosBgAAai0GAABqLgYAAGovBgAAajAGAABqMQYAAGryAwAAavUDAABqMgYAAGozBgAAaj4JAABqPwkAAGo2BgAAajcGAABqOAYAAGo5BgAAajoGAABqOwYAAGo8BgAAaj0GAABqPgYAAGo/BgAAakAGAABqQQYAAGpaBgAAalsGAABqRAYAAGpFBgAAakYGAABqRwYAAGqCBQAAaoMFAABqSgYAAGpLBgAAakwGAABqTQYAAGpOBgAAak8GAABqUgYAAGpTBgAAalQGAABqVQYAAGpWBgAAalcGAABq/gQAAGoBBQAAalgGAABqWQYAAGpCBgAAakMGAABqSAkAAGpJCQAAal4GAABqXwYAAGpgBgAAamEGAABqSgkAAGpLCQAAamQGAABqZQYAAGpmBgAAamcGAABqYgkAAGpjCQAAamgGAABqaQYAAGpqBgAAamsGAABqdAgAAGp1CAAAamwGAABqbQYAAGpuBgAAam8GAABqcAYAAGpxBgAAanIGAABqcwYAAGp0BgAAanUGAABqdgYAAGp3BgAAangGAABqeQYAAGp6BgAAansGAABqfAYAAGp9BgAAan4GAABqfwYAAGqABgAAaoEGAABqggYAAGqDBgAAaoQGAABqhQYAAGqGBgAAaocGAABqiAYAAGqJBgAAaooGAABqiwYAAGqUCAAAapUIAABqjgYAAGqPBgAAapAGAABqkQYAAGqSBgAAapMGAABqUAYAAGpRBgAAasIJAABqwwkAAGqWBgAAapcGAABqmAYAAGqZBgAAapoGAABqmwYAAGqcBgAAap0GAABqngYAAGqfBgAAaqAGAABqoQYAAGqiBgAAaqMGAABqpAYAAGqlBgAAaqYGAABqpwYAAGqoBgAAaqkGAABq8gcAAGrzBwAAaqwGAABqrQYAAGomBwAAaicHAABqsAYAAGqxBgAAarIGAABqswYAAGq0BgAAarUGAABqtgYAAGq3BgAAargGAABquQYAAGq8BgAAar0GAABqvgYAAGq/BgAAasAGAABqwQYAAGrCBgAAasMGAABqxAYAAGrFBgAAasYGAABqxwYAAGrIBgAAaskGAABqygYAAGrLBgAAaswGAABqzQYAAGrQBgAAatEGAABq0gYAAGrTBgAAatQGAABq1QYAAGrWBgAAatcGAABqLgcAAGovBwAAatoGAABq2wYAAGrcBgAAat0GAABq3gYAAGrfBgAAauAGAABq4QYAAGowBwAAajEHAABq5AYAAGrlBgAAauYGAABq5wYAAGroBgAAaukGAABq6gYAAGrrBgAAauwGAABq7QYAAGruBgAAau8GAABq8AYAAGrxBgAAavIGAABq8wYAAGr0BgAAavUGAABq9gYAAGr3BgAAavgGAABq+QYAAGr6BgAAavsGAABq/AYAAGr9BgAAavwHAABq/QcAAGoABwAAagEHAABqAgcAAGoDBwAAagQHAABqBQcAAGoGBwAAagcHAABq3AUAAGrdBQAAagoHAABqCwcAAGoMBwAAag0HAABq/AMAAGr9AwAAahAHAABqEQcAAGoSBwAAahMHAABqFAcAAGoVBwAAahYHAABqFwcAAGoYBwAAahkHAABqGgcAAGobBwAAahwHAABqHQcAAGoeBwAAah8HAABqIAcAAGohBwAAaiIHAABqIwcAAGokBwAAaiUHAABqrgYAAGqvBgAAaigHAABqKQcAAGpgCQAAamEJAABq2AYAAGrZBgAAauIGAABq4wYAAGoyBwAAajMHAABqNAcAAGo1BwAAagIFAABqAwUAAGo2BwAAajcHAABq2gkAAGrbCQAAaiwHAABqLQcAAGo6BwAAajsHAABqPAcAAGo9BwAAaj4HAABqPwcAAGpABwAAakEHAABqQgcAAGpDBwAAakQHAABqRQcAAGpGBwAAakcHAABqSAcAAGpJBwAAakoHAABqSwcAAGpMBwAAak0HAABqTgcAAGpPBwAAalAHAABqUQcAAGriCAAAauMIAABqUgcAAGpTBwAAalQHAABqVQcAAGr6AwAAavsDAABqVgcAAGpXBwAAalgHAABqWQcAAGpaBwAAalsHAABqXAcAAGpdBwAAal4HAABqXwcAAGpgBwAAamEHAABqYgcAAGpjBwAAamQHAABqZQcAAGpmBwAAamcHAABqaAcAAGppBwAAamoHAABqawcAAGrsBQAAau0FAABqbgcAAGpvBwAAanAHAABqcQcAAGpyBwAAanMHAABqdAcAAGp1BwAAanYHAABqdwcAAGp4BwAAankHAABqegcAAGp7BwAAanwHAABqfQcAAGp+BwAAan8HAABqgAcAAGqBBwAAaoIHAABqgwcAAGqEBwAAaoUHAABqJAkAAGolCQAAaogHAABqiQcAAGqKBwAAaosHAABqjAcAAGqNBwAAao4HAABqjwcAAGqQBwAAapEHAABqkgcAAGqTBwAAapYHAABqlwcAAGqYBwAAapkHAABqmgcAAGqbBwAAapwHAABqnQcAAGqeBwAAap8HAABqoAcAAGqhBwAAapQGAABqlQYAAGqkBwAAaqUHAABqpgcAAGqnBwAAaqgHAABqqQcAAGqqBwAAaqsHAABqrAcAAGqtBwAAaq4HAABqrwcAAGqwBwAAarEHAABqsgcAAGqzBwAAarQHAABqtQcAAGq+CAAAar8IAABquAcAAGq5BwAAaroHAABquwcAAGqiBQAAaqMFAABqvgcAAGq/BwAAasAHAABqwQcAAGrCBwAAasMHAABqsAUAAGqxBQAAasYHAABqxwcAAGr4BQAAavkFAABqzAcAAGrNBwAAas4HAABqzwcAAGrQBwAAatEHAABq0gcAAGrTBwAAatQHAABq1QcAAGrWBwAAatcHAABq2AcAAGrZBwAAatoHAABq2wcAAGrcBwAAat0HAABq3gcAAGrfBwAAauAHAABq4QcAAGriBwAAauMHAABq5AcAAGrlBwAAauYHAABq5wcAAGroBwAAaukHAABq6gcAAGrrBwAAauwHAABq7QcAAGruBwAAau8HAABq8AcAAGrxBwAAaqoGAABqqwYAAGr0BwAAavUHAABq9gcAAGr3BwAAavAFAABq8QUAAGr4BwAAavkHAABq+gcAAGr7BwAAav4GAABq/wYAAGr+BwAAav8HAABqAAgAAGoBCAAAagIIAABqAwgAAGqECQAAaoUJAABqBggAAGoHCAAAaggIAABqCQgAAGqGCQAAaocJAABqCggAAGoLCAAAagwIAABqDQgAAGrKCAAAassIAABqDggAAGoPCAAAahAIAABqEQgAAGoSCAAAahMIAABqFAgAAGoVCAAAahYIAABqFwgAAGoYCAAAahkIAABqGggAAGobCAAAahwIAABqHQgAAGq6BgAAarsGAABqIAgAAGohCAAAaiIIAABqIwgAAGokCAAAaiUIAABqJggAAGonCAAAaigIAABqKQgAAGoqCAAAaisIAABqJAYAAGolBgAAai4IAABqLwgAAGowCAAAajEIAABqkAkAAGqRCQAAajQIAABqNQgAAGo2CAAAajcIAABqOAgAAGo5CAAAah4IAABqHwgAAGo8CAAAaj0IAABqPggAAGo/CAAAakAIAABqQQgAAGpCCAAAakMIAABqRAgAAGpFCAAAakYIAABqRwgAAGpICAAAakkIAABqSggAAGpLCAAAakwIAABqTQgAAGpOCAAAak8IAABqUAgAAGpRCAAAalIIAABqUwgAAGpUCAAAalUIAABqVggAAGpXCAAAalgIAABqWQgAAGpaCAAAalsIAABqXAgAAGpdCAAAal4IAABqXwgAAGpgCAAAamEIAABqYggAAGpjCAAAamQIAABqZQgAAGpmCAAAamcIAABqaAgAAGppCAAAamoIAABqawgAAGpsCAAAam0IAABqbggAAGpvCAAAanAIAABqcQgAAGpyCAAAanMIAABqbAcAAGptBwAAanYIAABqdwgAAGoeBgAAah8GAABqeggAAGp7CAAAanwIAABqfQgAAGp+CAAAan8IAABqgAgAAGqBCAAAaoIIAABqgwgAAGqECAAAaoUIAABqhggAAGqHCAAAaooIAABqiwgAAGqMCAAAao0IAABqjggAAGqPCAAAapAIAABqkQgAAGqSCAAAapMIAABqiAgAAGqJCAAAapYIAABqlwgAAGqYCAAAapkIAABqLAgAAGotCAAAapoIAABqmwgAAGqeCAAAap8IAABqoAgAAGqhCAAAaqIIAABqowgAAGqkCAAAaqUIAABqpggAAGqnCAAAaqgIAABqqQgAAGqqCAAAaqsIAABqrAgAAGqtCAAAaq4IAABqrwgAAGqwCAAAarEIAABqsggAAGqzCAAAarQIAABqtQgAAGq2CAAAarcIAABquAgAAGq5CAAAaroIAABquwgAAGq8CAAAar0IAABqtgcAAGq3BwAAasAIAABqwQgAAGrCCAAAasMIAABqxAgAAGrFCAAAasYIAABqxwgAAGrICAAAaskIAABqhgcAAGqHBwAAaswIAABqzQgAAGrOCAAAas8IAABq0AgAAGrRCAAAatIIAABq0wgAAGrUCAAAatUIAABq2AgAAGrZCAAAatoIAABq2wgAAGrcCAAAat0IAABq3ggAAGrfCAAAauAIAABq4QgAAGrKBwAAassHAABq5AgAAGrlCAAAauYIAABq5wgAAGroCAAAaukIAABq6ggAAGrrCAAAauwIAABq7QgAAGruCAAAau8IAABq8AgAAGrxCAAAavIIAABq8wgAAGr0CAAAavUIAABq9ggAAGr3CAAAavgIAABq+QgAAGr6CAAAavsIAABq/ggAAGr/CAAAajoIAABqOwgAAGoACQAAagEJAABqugkAAGq7CQAAagQJAABqBQkAAGqUBwAAapUHAABq9gMAAGr3AwAAagoJAABqCwkAAGoMCQAAag0JAABqDgkAAGoPCQAAahAJAABqEQkAAGoSCQAAahMJAABqzgUAAGrPBQAAahYJAABqFwkAAGoYCQAAahkJAABqGgkAAGobCQAAahwJAABqHQkAAGoeCQAAah8JAABqIAkAAGohCQAAaiIJAABqIwkAAGomCQAAaicJAABqKAkAAGopCQAAagQFAABqBQUAAGoqCQAAaisJAABqLAkAAGotCQAAaloJAABqWwkAAGouCQAAai8JAABqMAkAAGoxCQAAajIJAABqMwkAAGoGCQAAagcJAABqNAkAAGo1CQAAajYJAABqNwkAAGo4CQAAajkJAABqOgkAAGo7CQAAajwJAABqPQkAAGo0BgAAajUGAABqQAkAAGpBCQAAakIJAABqQwkAAGpECQAAakUJAABqRgkAAGpHCQAAaggJAABqCQkAAGpcBgAAal0GAABqYgYAAGpjBgAAakwJAABqTQkAAGpOCQAAak8JAABqUAkAAGpRCQAAalIJAABqUwkAAGpUCQAAalUJAABqzgkAAGrPCQAAalYJAABqVwkAAGpYCQAAalkJAABqjAYAAGqNBgAAalwJAABqXQkAAGpeCQAAal8JAABqKgcAAGorBwAAajgHAABqOQcAAGr+AwAAav8DAABqZAkAAGplCQAAamYJAABqZwkAAGpoCQAAamkJAABqagkAAGprCQAAamwJAABqbQkAAGpuCQAAam8JAABqcAkAAGpxCQAAanIJAABqcwkAAGp0CQAAanUJAABqdgkAAGp3CQAAangJAABqeQkAAGp6CQAAansJAABqfAkAAGp9CQAAan4JAABqfwkAAGqACQAAaoEJAABqggkAAGqDCQAAagQIAABqBQgAAGoUCQAAahUJAABqiAkAAGqJCQAAaooJAABqiwkAAGqMCQAAao0JAABqjgkAAGqPCQAAajIIAABqMwgAAGqSCQAAapMJAABqlAkAAGqVCQAAapYJAABqlwkAAGqYCQAAapkJAABqmgkAAGqbCQAAapwJAABqnQkAAGqeCQAAap8JAABqoAkAAGqhCQAAaqIJAABqowkAAGqkCQAAaqUJAABqpgkAAGqnCQAAaqgJAABqqQkAAGqqCQAAaqsJAABqrAkAAGqtCQAAaq4JAABqrwkAAGrWCAAAatcIAABqsgkAAGqzCQAAarQJAABqtQkAAGq2CQAAarcJAABquAkAAGq5CQAAagIJAABqAwkAAGqiBwAAaqMHAABqvgkAAGq/CQAAasAJAABqwQkAAGqcCAAAap0IAABqxAkAAGrFCQAAasYJAABqxwkAAGrICQAAaskJAABq3gkAAGrfCQAAaswJAABqzQkAAGoCBgAAagMGAABq0AkAAGrRCQAAatIJAABq0wkAAGrUCQAAatUJAABqzgYAAGrPBgAAatgJAABq2QkAAGq8CQAAar0JAABq3AkAAGrdCQAAasoJAABqywkAAGrgCQAAauEJAABq4gkAAGrjCQAAaq4FAABqrwUAAHVqhi4AAH1yVFcAAChqiC4AAGqJLgAAaoouAABqiy4AAGqMLgAAao0uAABqji4AAGqPLgAAapAuAABqkS4AAGqSLgAAapMuAABq4i8AAGrjLwAAapYuAABqly4AAGqYLgAAapkuAABq8DEAAGrxMQAAapwuAABqnS4AAGqeLgAAap8uAABqoC4AAGqhLgAAaqIuAABqoy4AAGqkLgAAaqUuAABqpi4AAGqnLgAAaqguAABqqS4AAGqqLgAAaqsuAABqrC4AAGqtLgAAaq4uAABqry4AAGqwLgAAarEuAABqsi4AAGqzLgAAarQuAABqtS4AAGq2LgAAarcuAABquC4AAGq5LgAAarouAABquy4AAGq8LgAAar0uAABqvi4AAGq/LgAAasAuAABqwS4AAGrELgAAasUuAABqxi4AAGrHLgAAasguAABqyS4AAGrKLgAAassuAABqUDEAAGpRMQAAas4uAABqzy4AAGrQLgAAatEuAABq1C4AAGrVLgAAatYuAABq1y4AAGraLgAAatsuAABq3C4AAGrdLgAAat4uAABq3y4AAGrgLgAAauEuAABq4i4AAGrjLgAAauQuAABq5S4AAGrmLgAAaucuAABq6C4AAGrpLgAAauouAABq6y4AAGrsLgAAau0uAABq7i4AAGrvLgAAalgxAABqWTEAAGryLgAAavMuAABq9C4AAGr1LgAAavYuAABq9y4AAGr4LwAAavkvAABq+i4AAGr7LgAAavwuAABq/S4AAGr+LgAAav8uAABqAC8AAGoBLwAAagIvAABqAy8AAGoELwAAagUvAABqBi8AAGoHLwAAaggvAABqCS8AAGoKLwAAagsvAABqDC8AAGoNLwAAag4vAABqDy8AAGoQLwAAahEvAABqEi8AAGoTLwAAasAxAABqwTEAAGpQLwAAalEvAABqGC8AAGoZLwAAahovAABqGy8AAGocLwAAah0vAABqHi8AAGofLwAAaiAvAABqIS8AAGoiLwAAaiMvAABqJC8AAGolLwAAaiYvAABqJy8AAGooLwAAaikvAABqKi8AAGorLwAAaiwvAABqLS8AAGouLwAAai8vAABqMC8AAGoxLwAAajIvAABqMy8AAGo0LwAAajUvAABqNi8AAGo3LwAAajgvAABqOS8AAGo6LwAAajsvAABqIjEAAGojMQAAajwvAABqPS8AAGo+LwAAaj8vAABqQC8AAGpBLwAAakIvAABqQy8AAGpGLwAAakcvAABqSC8AAGpJLwAAakovAABqSy8AAGpMLwAAak0vAABqTi8AAGpPLwAAahYvAABqFy8AAGpSLwAAalMvAABqVC8AAGpVLwAAalYvAABqVy8AAGpYLwAAalkvAABqWi8AAGpbLwAAalwvAABqXS8AAGpeLwAAal8vAABqYC8AAGphLwAAamIvAABqYy8AAGpkLwAAamUvAABqZi8AAGpnLwAAamgvAABqaS8AAGpqLwAAamsvAABqbC8AAGptLwAAam4vAABqby8AAGpwLwAAanEvAABqci8AAGpzLwAAanQvAABqdS8AAGp2LwAAancvAABqeC8AAGp5LwAAanovAABqey8AAGoMMAAAag0wAABqgC8AAGqBLwAAaoIvAABqgy8AAGqELwAAaoUvAABqRC8AAGpFLwAAaogvAABqiS8AAGqKLwAAaosvAABqjC8AAGqNLwAAapAvAABqkS8AAGqSLwAAapMvAABqlC8AAGqVLwAAapYvAABqly8AAGqYLwAAapkvAABqmi8AAGqbLwAAapwvAABqnS8AAGqeLwAAap8vAABqoC8AAGqhLwAAao4vAABqjy8AAGqkLwAAaqUvAABqpi8AAGqnLwAAaqgvAABqqS8AAGqqLwAAaqsvAABqrC8AAGqtLwAAaq4vAABqry8AAGqwLwAAarEvAABqsi8AAGqzLwAAarQvAABqtS8AAGq2LwAAarcvAABquC8AAGq5LwAAarovAABquy8AAGq8LwAAar0vAABqvi8AAGq/LwAAasAvAABqwS8AAGrCLwAAasMvAABqxC8AAGrFLwAAasYvAABqxy8AAGrILwAAaskvAABqyi8AAGrLLwAAaswvAABqzS8AAGrOLwAAas8vAABq0C8AAGrRLwAAatIvAABq0y8AAGrULwAAatUvAABq1i8AAGrXLwAAatgvAABq2S8AAGraLwAAatsvAABq3C8AAGrdLwAAat4vAABq3y8AAGrgLwAAauEvAABqlC4AAGqVLgAAauQvAABq5S8AAGrmLwAAaucvAABq6C8AAGrpLwAAauovAABq6y8AAGrsLwAAau0vAABq7i8AAGrvLwAAavAvAABq8S8AAGryLwAAavMvAABq9C8AAGr1LwAAavYvAABq9y8AAGr4LgAAavkuAABqcDAAAGpxMAAAavovAABq+y8AAGr8LwAAav0vAABq/i8AAGr/LwAAagAwAABqATAAAGoCMAAAagMwAABqBDAAAGoFMAAAagYwAABqBzAAAGoIMAAAagkwAABqCjAAAGoLMAAAanwvAABqfS8AAGoOMAAAag8wAABqEDAAAGoRMAAAahIwAABqEzAAAGoUMAAAahUwAABqFjAAAGoXMAAAahgwAABqGTAAAGoaMAAAahswAABqHDAAAGodMAAAah4wAABqHzAAAGogMAAAaiEwAABqIjAAAGojMAAAaiQwAABqJTAAAGomMAAAaicwAABqKDAAAGopMAAAajIwAABqMzAAAGosMAAAai0wAABqLjAAAGovMAAAajAwAABqMTAAAGoqMAAAaiswAABqNDAAAGo1MAAAajYwAABqNzAAAGo4MAAAajkwAABqOjAAAGo7MAAAajwwAABqPTAAAGo+MAAAaj8wAABq0i4AAGrTLgAAakIwAABqQzAAAGrUMAAAatUwAABqhi8AAGqHLwAAakgwAABqSTAAAGpKMAAAakswAABq1jAAAGrXMAAAak4wAABqTzAAAGpQMAAAalEwAABqwjAAAGrDMAAAalQwAABqVTAAAGpWMAAAalcwAABqWDAAAGpZMAAAalowAABqWzAAAGpcMAAAal0wAABqXjAAAGpfMAAAamAwAABqYTAAAGpiMAAAamMwAABqZDAAAGplMAAAamYwAABqZzAAAGpoMAAAamkwAABqajAAAGprMAAAamwwAABqbTAAAGpuMAAAam8wAABqQDAAAGpBMAAAanIwAABqczAAAGp0MAAAanUwAABqdjAAAGp3MAAAangwAABqeTAAAGp6MAAAanswAABqfDAAAGp9MAAAan4wAABqfzAAAGqAMAAAaoEwAABqgjAAAGqDMAAAakwyAABqTTIAAGqGMAAAaocwAABqiDAAAGqJMAAAaoowAABqizAAAGqMMAAAao0wAABqjjAAAGqPMAAAapgxAABqmTEAAGqSMAAAapMwAABqlDAAAGqVMAAAapYwAABqlzAAAGqYMAAAapkwAABqmjAAAGqbMAAAapwwAABqnTAAAGpGMAAAakcwAABqoDAAAGqhMAAAaqIwAABqozAAAGpUMgAAalUyAABqpjAAAGqnMAAAaqgwAABqqTAAAGqqMAAAaqswAABqrDAAAGqtMAAAajYyAABqNzIAAGquMAAAaq8wAABqsDAAAGqxMAAAarIwAABqszAAAGq0MAAAarUwAABqtjAAAGq3MAAAargwAABquTAAAGq6MAAAarswAABqvDAAAGq9MAAAar4wAABqvzAAAGrAMAAAasEwAABqxDAAAGrFMAAAasYwAABqxzAAAGrIMAAAaskwAABqyjAAAGrLMAAAaswwAABqzTAAAGrOMAAAas8wAABq0DAAAGrRMAAAatIwAABq0zAAAGpEMAAAakUwAABqTDAAAGpNMAAAatgwAABq2TAAAGraMAAAatswAABq3DAAAGrdMAAAat4wAABq3zAAAGrgMAAAauEwAABq4jAAAGrjMAAAauQwAABq5TAAAGrmMAAAaucwAABq6DAAAGrpMAAAauowAABq6zAAAGrsMAAAau0wAABq7jAAAGrvMAAAavAwAABq8TAAAGryMAAAavMwAABq9DAAAGr1MAAAavYwAABq9zAAAGr4MAAAavkwAABqXDIAAGpdMgAAavwwAABq/TAAAGr+MAAAav8wAABqADEAAGoBMQAAagIxAABqAzEAAGoEMQAAagUxAABq2C4AAGrZLgAAaggxAABqCTEAAGoKMQAAagsxAABqDDEAAGoNMQAAag4xAABqDzEAAGoQMQAAahExAABqEjEAAGoTMQAAamIyAABqYzIAAGoWMQAAahcxAABqGDEAAGoZMQAAahoxAABqGzEAAGocMQAAah0xAABqHjEAAGofMQAAaiAxAABqITEAAGqiLwAAaqMvAABqJDEAAGolMQAAaiYxAABqJzEAAGooMQAAaikxAABqKjEAAGorMQAAaiwxAABqLTEAAGouMQAAai8xAABqMDEAAGoxMQAAaooxAABqizEAAGo0MQAAajUxAABqNjEAAGo3MQAAajgxAABqOTEAAGo6MQAAajsxAABqPDEAAGo9MQAAaj4xAABqPzEAAGpAMQAAakExAABqQjEAAGpDMQAAakQxAABqRTEAAGpGMQAAakcxAABqSDEAAGpJMQAAakoxAABqSzEAAGpMMQAAak0xAABqtjEAAGq3MQAAaswuAABqzS4AAGpSMQAAalMxAABqBjEAAGoHMQAAalYxAABqVzEAAGrwLgAAavEuAABqWjEAAGpbMQAAalwxAABqXTEAAGpeMQAAal8xAABqYDEAAGphMQAAamIxAABqYzEAAGpkMQAAamUxAABqZjEAAGpnMQAAamgxAABqaTEAAGpqMQAAamsxAABqbDEAAGptMQAAam4xAABqbzEAAGpwMQAAanExAABqcjEAAGpzMQAAanQxAABqdTEAAGp2MQAAancxAABqeDEAAGp5MQAAanoxAABqezEAAGp8MQAAan0xAABqfjEAAGp/MQAAaoAxAABqgTEAAGqCMQAAaoMxAABqhjEAAGqHMQAAaogxAABqiTEAAGoyMQAAajMxAABqjDEAAGqNMQAAao4xAABqjzEAAGqQMQAAapExAABqkjEAAGqTMQAAapQxAABqlTEAAGoGMgAAagcyAABqljEAAGqXMQAAapAwAABqkTAAAGqaMQAAapsxAABqnDEAAGqdMQAAap4xAABqnzEAAGqgMQAAaqExAABqojEAAGqjMQAAaqQxAABqpTEAAGqmMQAAaqcxAABqDDIAAGoNMgAAaqgxAABqqTEAAGqqMQAAaqsxAABqVDEAAGpVMQAAasgxAABqyTEAAGquMQAAaq8xAABqsDEAAGqxMQAAarIxAABqszEAAGq0MQAAarUxAABqTjEAAGpPMQAAargxAABquTEAAGq6MQAAarsxAABqvDEAAGq9MQAAasIuAABqwy4AAGrCMQAAasMxAABqxDEAAGrFMQAAasYxAABqxzEAAGqsMQAAaq0xAABqyjEAAGrLMQAAaswxAABqzTEAAGrOMQAAas8xAABq0DEAAGrRMQAAatIxAABq0zEAAGq+MQAAar8xAABq1jEAAGrXMQAAatgxAABq2TEAAGraMQAAatsxAABq3DEAAGrdMQAAat4xAABq3zEAAGrgMQAAauExAABq4jEAAGrjMQAAauQxAABq5TEAAGrmMQAAaucxAABq6DEAAGrpMQAAauoxAABq6zEAAGrsMQAAau0xAABq7jEAAGrvMQAAapouAABqmy4AAGryMQAAavMxAABq1DEAAGrVMQAAavYxAABq9zEAAGr4MQAAavkxAABq+jEAAGr7MQAAavwxAABq/TEAAGr+MQAAav8xAABqADIAAGoBMgAAagIyAABqAzIAAGoEMgAAagUyAABqFC8AAGoVLwAAaggyAABqCTIAAGoKMgAAagsyAABqhDEAAGqFMQAAag4yAABqDzIAAGoQMgAAahEyAABqEjIAAGoTMgAAahQyAABqFTIAAGqKMgAAaosyAABqGDIAAGoZMgAAahoyAABqGzIAAGocMgAAah0yAABqHjIAAGofMgAAaiAyAABqITIAAGoiMgAAaiMyAABqJDIAAGolMgAAaiYyAABqJzIAAGooMgAAaikyAABqKjIAAGorMgAAaiwyAABqLTIAAGouMgAAai8yAABqMDIAAGoxMgAAajIyAABqMzIAAGo0MgAAajUyAABqfi8AAGp/LwAAajgyAABqOTIAAGo6MgAAajsyAABqPDIAAGo9MgAAaj4yAABqPzIAAGpAMgAAakEyAABqQjIAAGpDMgAAalIwAABqUzAAAGpGMgAAakcyAABqSDIAAGpJMgAAakoyAABqSzIAAGqEMAAAaoUwAABqTjIAAGpPMgAAapIyAABqkzIAAGpSMgAAalMyAABqpDAAAGqlMAAAalYyAABqVzIAAGpYMgAAalkyAABqWjIAAGpbMgAAavQxAABq9TEAAGr6MAAAavswAABqXjIAAGpfMgAAamAyAABqYTIAAGoUMQAAahUxAABqZDIAAGplMgAAamYyAABqZzIAAGpoMgAAamkyAABqajIAAGprMgAAamwyAABqbTIAAGpuMgAAam8yAABqcDIAAGpxMgAAanIyAABqczIAAGp0MgAAanUyAABqdjIAAGp3MgAAangyAABqeTIAAGp6MgAAansyAABqnjAAAGqfMAAAanwyAABqfTIAAGp+MgAAan8yAABqgDIAAGqBMgAAaoIyAABqgzIAAGqEMgAAaoUyAABqhjIAAGqHMgAAaogyAABqiTIAAGoWMgAAahcyAABqjDIAAGqNMgAAao4yAABqjzIAAGqQMgAAapEyAABqUDIAAGpRMgAAapQyAABqlTIAAGpEMgAAakUyAABqljIAAGqXMgAAapgyAABqmTIAAGqaMgAAapsyAABqnDIAAGqdMgAAap4yAABqnzIAAGqgMgAAaqEyAABqojIAAGqjMgAAaqQyAABqpTIAAGqmMgAAaqcyAAB1agIEAAB9clVXAAAoaigeAABqKR4AAGoSIAAAahMgAABqKh4AAGorHgAAaiweAABqLR4AAGpGHgAAakceAABqDAQAAGoNBAAAajAeAABqMR4AAGoyHgAAajMeAABqNB4AAGo1HgAAaoQhAABqhSEAAGrcHwAAat0fAABqGiAAAGobIAAAamwhAABqbSEAAGo2HgAAajceAABqOB4AAGo5HgAAamwgAABqbSAAAGoeIAAAah8gAABqICAAAGohIAAAalYgAABqVyAAAGo6HgAAajseAABqPB4AAGo9HgAAaj4eAABqPx4AAGqiIQAAaqMhAABqdB8AAGp1HwAAaqoeAABqqx4AAGqeIQAAap8hAABq+CAAAGr5IAAAakQeAABqRR4AAGokIAAAaiUgAABqFCAAAGoVIAAAakgeAABqSR4AAGomIAAAaicgAABqGiEAAGobIQAAai4eAABqLx4AAGooIAAAaikgAABqTB4AAGpNHgAAaiogAABqKyAAAGoWIAAAahcgAABqTh4AAGpPHgAAalAeAABqUR4AAGpSHgAAalMeAABqLiAAAGovIAAAavogAABq+yAAAGowIAAAajEgAABqVB4AAGpVHgAAajIgAABqMyAAAGpaIAAAalsgAABqVh4AAGpXHgAAalgeAABqWR4AAGodBAAAah4EAABqOCAAAGo5IAAAaloeAABqWx4AAGpcHgAAal0eAABqPCAAAGo9IAAAal4eAABqXx4AAGpgHgAAamEeAABqmiAAAGqbIAAAamIeAABqYx4AAGpkHgAAamUeAABqgiEAAGqDIQAAamYeAABqZx4AAGpCIAAAakMgAABqaB4AAGppHgAAamoeAABqax4AAGpEIAAAakUgAABqdiAAAGp3IAAAagQEAABqBQQAAGoGBAAAagcEAABqRiAAAGpHIAAAam4eAABqbx4AAGpwHgAAanEeAABqJiEAAGonIQAAanIeAABqcx4AAGp0HgAAanUeAABqHCAAAGodIAAAanYeAABqdx4AAGp0IQAAanUhAABqSiAAAGpLIAAAavIgAABq8yAAAGr+IAAAav8gAABqTiAAAGpPIAAAalAgAABqUSAAAGp4HgAAankeAABqeh4AAGp7HgAAanweAABqfR4AAGp+HgAAan8eAABqHiEAAGofIQAAaoAeAABqgR4AAGqCHgAAaoMeAABqhB4AAGqFHgAAaoYeAABqhx4AAGqIHgAAaokeAABqNCAAAGo1IAAAalQhAABqVSEAAGpcIAAAal0gAABqjB4AAGqNHgAAal4gAABqXyAAAGqOHgAAao8eAABqOiEAAGo7IQAAapIeAABqkx4AAGpgIAAAamEgAABqlB4AAGqVHgAAamIgAABqYyAAAGpkIAAAamUgAABqPCEAAGo9IQAAapYeAABqlx4AAGoCIQAAagMhAABq3CAAAGrdIAAAaoYfAABqhx8AAGpmIAAAamcgAABqmh4AAGqbHgAAapweAABqnR4AAGpAIQAAakEhAABqaCAAAGppIAAAamogAABqayAAAGqeHgAAap8eAABqoB4AAGqhHgAAau4eAABq7x4AAGqkHgAAaqUeAABqIiAAAGojIAAAam4gAABqbyAAAGqmHgAAaqceAABqcCAAAGpxIAAAajQhAABqNSEAAGqoHgAAaqkeAABqQiEAAGpDIQAAamkFAABqagUAAGqsHgAAaq0eAABqmCAAAGqZIAAAaq4eAABqrx4AAGpyIAAAanMgAABqsB4AAGqxHgAAarIeAABqsx4AAGq0HgAAarUeAABqth4AAGq3HgAAaroeAABqux4AAGp6IAAAansgAABqfCAAAGp9IAAAan4gAABqfyAAAGqAIAAAaoEgAABqvB4AAGq9HgAAargeAABquR4AAGqCIAAAaoMgAABqwB4AAGrBHgAAaoYgAABqhyAAAGqIIAAAaokgAABqWCAAAGpZIAAAaoogAABqiyAAAGqMIAAAao0gAABqxB4AAGrFHgAAasYeAABqxx4AAGpUIAAAalUgAABqkCAAAGqRIAAAasoeAABqyx4AAGqSIAAAapMgAABqSiEAAGpLIQAAasweAABqzR4AAGqaIQAAapshAABqeCAAAGp5IAAAapYgAABqlyAAAGrOHgAAas8eAABq0B4AAGrRHgAAatIeAABq0x4AAGo+IQAAaj8hAABqBiEAAGoHIQAAapwgAABqnSAAAGrUHgAAatUeAABqACEAAGoBIQAAap4gAABqnyAAAGpKHgAAakseAABq1iEAAGrXIQAAatYeAABq1x4AAGrYHgAAatkeAABq2h4AAGrbHgAAatweAABq3R4AAGreHgAAat8eAABqjiAAAGqPIAAAaqIgAABqoyAAAGq2IAAAarcgAABqQh4AAGpDHgAAauAeAABq4R4AAGriHgAAauMeAABqUCEAAGpRIQAAaqYgAABqpyAAAGrmHgAAauceAABqCgQAAGoLBAAAaoQgAABqhSAAAGroHgAAaukeAABq6h4AAGrrHgAAauweAABq7R4AAGoKIQAAagshAABqqCAAAGqpIAAAaqIeAABqox4AAGrwHgAAavEeAABqrCAAAGqtIAAAavIeAABq8x4AAGr0HgAAavUeAABqriAAAGqvIAAAasIeAABqwx4AAGqyIAAAarMgAABqUiEAAGpTIQAAarQgAABqtSAAAGr2HgAAavceAABq+B4AAGr5HgAAar4gAABqvyAAAGq4IAAAarkgAABqLCAAAGotIAAAarogAABquyAAAGq8IAAAar0gAABq+h4AAGr7HgAAasAgAABqwSAAAGrCIAAAasMgAABq/B4AAGr9HgAAav4eAABq/x4AAGrGIAAAascgAABqriEAAGqvIQAAai4hAABqLyEAAGqYHwAAapkfAABqyiAAAGrLIAAAagIfAABqAx8AAGoEHwAAagUfAABqBh8AAGoHHwAAagofAABqCx8AAGoMHwAAag0fAABqDh8AAGoPHwAAakofAABqSx8AAGobBAAAahwEAABqsiEAAGqzIQAAahAfAABqER8AAGrQIAAAatEgAABqEh8AAGoTHwAAahQfAABqFR8AAGoWHwAAahcfAABq1CAAAGrVIAAAahgfAABqGR8AAGrWIAAAatcgAABq2CAAAGrZIAAAatogAABq2yAAAGpGHwAAakcfAABqGh8AAGobHwAAahwfAABqHR8AAGreIAAAat8gAABqtCEAAGq1IQAAah4fAABqHx8AAGriIAAAauMgAABqIB8AAGohHwAAaiIfAABqIx8AAGokHwAAaiUfAABqJh8AAGonHwAAauggAABq6SAAAGooHwAAaikfAABq6iAAAGrrIAAAarghAABquSEAAGrsIAAAau0gAABq7iAAAGrvIAAAavAgAABq8SAAAGrgHwAAauEfAABq9CAAAGr1IAAAavYgAABq9yAAAGoqHwAAaisfAABqFCEAAGoVIQAAanQgAABqdSAAAGosHwAAai0fAABq/CAAAGr9IAAAakwgAABqTSAAAGouHwAAai8fAABqYCEAAGphIQAAajAfAABqMR8AAGq6IQAAarshAABqMh8AAGozHwAAajYgAABqNyAAAGo0HwAAajUfAABqxCAAAGrFIAAAagQhAABqBSEAAGo2HwAAajcfAABqph8AAGqnHwAAahIEAABqYgUAAGo6HwAAajsfAABqOB8AAGo5HwAAaj4fAABqPx8AAGpAHwAAakEfAABqDCEAAGoNIQAAag4hAABqDyEAAGpCHwAAakMfAABqRB8AAGpFHwAAal4FAABqXwUAAGoTBAAAahQEAABqSB8AAGpJHwAAahIhAABqEyEAAGrMIAAAas0gAABqZCEAAGplIQAAas4gAABqzyAAAGoWIQAAahchAABqGCEAAGoZIQAAakwfAABqTR8AAGpOHwAAak8fAABqUB8AAGpRHwAAalIfAABqUx8AAGpUHwAAalUfAABqVh8AAGpXHwAAalgfAABqWR8AAGpaHwAAalsfAABqyCEAAGrJIQAAajogAABqOyAAAGr6HwAAavsfAABqICEAAGohIQAAaooeAABqix4AAGpeHwAAal8fAABqYB8AAGphHwAAahwhAABqHSEAAGpiHwAAamMfAABq0iAAAGrTIAAAamQfAABqZR8AAGpmHwAAamcfAABqaB8AAGppHwAAamofAABqax8AAGpsHwAAam0fAABqbh8AAGpvHwAAaiwhAABqLSEAAGo+IAAAaj8gAABqcB8AAGpxHwAAalwfAABqXR8AAGpyHwAAanMfAABqMCEAAGoxIQAAahkEAABqGgQAAGpAHgAAakEeAABqdh8AAGp3HwAAajIhAABqMyEAAGoIHwAAagkfAABqeB8AAGp5HwAAajYhAABqNyEAAGpAIAAAakEgAABqeh8AAGp7HwAAanwfAABqfR8AAGp+HwAAan8fAABqgB8AAGqBHwAAarAgAABqsSAAAGq+HgAAar8eAABqOCEAAGo5IQAAapAeAABqkR4AAGqCHwAAaoMfAABqhB8AAGqFHwAAapgeAABqmR4AAGqIHwAAaokfAABqpB8AAGqlHwAAakYhAABqRyEAAGpIIQAAakkhAABqih8AAGqLHwAAaowfAABqjR8AAGpMIQAAak0hAABqTiEAAGpPIQAAao4fAABqjx8AAGrkHgAAauUeAABqkB8AAGqRHwAAapIfAABqkx8AAGqUHwAAapUfAABqlh8AAGqXHwAAagAfAABqAR8AAGpWIQAAalchAABqWCEAAGpZIQAAapofAABqmx8AAGqcHwAAap0fAABqpCAAAGqlIAAAalohAABqWyEAAGprBQAAamwFAABqnh8AAGqfHwAAaqAfAABqoR8AAGpeIQAAal8hAABqCAQAAGoJBAAAaqIfAABqox8AAGpsHgAAam0eAABqyB4AAGrJHgAAamIhAABqYyEAAGpjBQAAamQFAABqqB8AAGqpHwAAaqofAABqqx8AAGpmIQAAamchAABqrB8AAGqtHwAAamghAABqaSEAAGquHwAAaq8fAABqIiEAAGojIQAAakQhAABqRSEAAGokIQAAaiUhAABqPB8AAGo9HwAAaoYhAABqhyEAAGoVBAAAahYEAABqbiEAAGpvIQAAarAfAABqsR8AAGqyHwAAarMfAABqSCAAAGpJIAAAanAhAABqcSEAAGpyIQAAanMhAABqtB8AAGq1HwAAarYfAABqtx8AAGrgIAAAauEgAABqeCEAAGp5IQAAargfAABquR8AAGp6IQAAanshAABqKCEAAGopIQAAamAFAABqYQUAAGp8IQAAan0hAABqfiEAAGp/IQAAarofAABqux8AAGqUIAAAapUgAABqvB8AAGq9HwAAahcEAABqGAQAAGqAIQAAaoEhAABqKiEAAGorIQAAasAfAABqwR8AAGoYIAAAahkgAABqwh8AAGrDHwAAaoghAABqiSEAAGrEHwAAasUfAABqiiEAAGqLIQAAaowhAABqjSEAAGqOIQAAao8hAABqoCAAAGqhIAAAasYfAABqxx8AAGqSIQAAapMhAABq5CAAAGrlIAAAapQhAABqlSEAAGrIHwAAaskfAABqyh8AAGrLHwAAapYhAABqlyEAAGrMHwAAas0fAABqzh8AAGrPHwAAapghAABqmSEAAGrQHwAAatEfAABqdiEAAGp3IQAAauYgAABq5yAAAGqcIQAAap0hAABq0h8AAGrTHwAAaqAhAABqoSEAAGpnBQAAamgFAABqpCEAAGqlIQAAaqYhAABqpyEAAGqoIQAAaqkhAABqqiEAAGqrIQAAaqogAABqqyAAAGqsIQAAaq0hAABqaiEAAGprIQAAatQfAABq1R8AAGrIIAAAaskgAABqsCEAAGqxIQAAatYfAABq1x8AAGrYHwAAatkfAABq2h8AAGrbHwAAalwhAABqXSEAAGq2IQAAarchAABq3h8AAGrfHwAAag4EAABqDwQAAGrGIQAAaschAABq4h8AAGrjHwAAauQfAABq5R8AAGrmHwAAaucfAABqvCEAAGq9IQAAar4hAABqvyEAAGroHwAAaukfAABq6h8AAGrrHwAAauwfAABq7R8AAGrAIQAAasEhAABqwiEAAGrDIQAAasQhAABqxSEAAGpSIAAAalMgAABq7h8AAGrvHwAAasohAABqyyEAAGrgIQAAauEhAABqzCEAAGrNIQAAavAfAABq8R8AAGryHwAAavMfAABq9B8AAGr1HwAAas4hAABqzyEAAGrQIQAAatEhAABq9h8AAGr3HwAAatIhAABq0yEAAGrUIQAAatUhAABqkCEAAGqRIQAAauIhAABq4yEAAGr4HwAAavkfAABq2CEAAGrZIQAAahAEAABqEQQAAGr8HwAAav0fAABq/h8AAGr/HwAAagAgAABqASAAAGraIQAAatshAABqCCEAAGoJIQAAatwhAABq3SEAAGoCIAAAagMgAABqZQUAAGpmBQAAagQgAABqBSAAAGq+HwAAar8fAABq3iEAAGrfIQAAahAhAABqESEAAGoGIAAAagcgAABqCCAAAGoJIAAAagogAABqCyAAAGoMIAAAag0gAABq5CEAAGrlIQAAag4gAABqDyAAAGoQIAAAahEgAAB1ajYjAAB9clZXAAAoajwjAABqPSMAAGo4IwAAajkjAABqOiMAAGo7IwAAak4jAABqTyMAAGo+IwAAaj8jAABqYCMAAGphIwAAakAjAABqQSMAAGpCIwAAakMjAABqUiMAAGpTIwAAalQjAABqVSMAAGpWIwAAalcjAABqWCMAAGpZIwAAalojAABqWyMAAGpcIwAAal0jAABqRCMAAGpFIwAAakYjAABqRyMAAGpIIwAAakkjAABqXiMAAGpfIwAAakojAABqSyMAAGpMIwAAak0jAABqUCMAAGpRIwAAamIjAABqYyMAAGpkIwAAamUjAAB1aqgyAAB9cldXAAAoaqoyAABqqzIAAGqsMgAAaq0yAABqcDcAAGpxNwAAaq4yAABqrzIAAGqwMgAAarEyAABqsjIAAGqzMgAAatY1AABq1zUAAGq2MgAAarcyAABquDIAAGq5MgAAah44AABqHzgAAGq+MgAAar8yAABqwDIAAGrBMgAAasIyAABqwzIAAGrEMgAAasUyAABqxjIAAGrHMgAAaiA4AABqITgAAGrMMgAAas0yAABqzjIAAGrPMgAAatAyAABq0TIAAGrUMgAAatUyAABq1jIAAGrXMgAAatgyAABq2TIAAGraMgAAatsyAABq3DIAAGrdMgAAat4yAABq3zIAAGrgMgAAauEyAABq4jIAAGrjMgAAauQyAABq5TIAAGrmMgAAaucyAABqxDMAAGrFMwAAauoyAABq6zIAAGrsMgAAau0yAABqFjcAAGoXNwAAau4yAABq7zIAAGrwMgAAavEyAABq8jIAAGrzMgAAavQyAABq9TIAAGr2MgAAavcyAABq+DIAAGr5MgAAarA3AABqsTcAAGr8MgAAav0yAABq/jIAAGr/MgAAagAzAABqATMAAGoCMwAAagMzAABqBjMAAGoHMwAAaggzAABqCTMAAGqQOAAAapE4AABqCjMAAGoLMwAAagwzAABqDTMAAGoOMwAAag8zAABqEjMAAGoTMwAAahQzAABqFTMAAGrmNwAAauc3AABqajUAAGprNQAAahozAABqGzMAAGocMwAAah0zAABqHjMAAGofMwAAaiAzAABqITMAAGoiMwAAaiMzAABqJDMAAGolMwAAaiYzAABqJzMAAGooMwAAaikzAABq+DUAAGr5NQAAaiwzAABqLTMAAGrSMwAAatMzAABqMDMAAGoxMwAAajIzAABqMzMAAGo0MwAAajUzAABqNjMAAGo3MwAAajgzAABqOTMAAGoYNwAAahk3AABqPDMAAGo9MwAAaj4zAABqPzMAAGpAMwAAakEzAABq3jQAAGrfNAAAakQzAABqRTMAAGpGMwAAakczAABqSDMAAGpJMwAAajY4AABqNzgAAGpMMwAAak0zAABq0jIAAGrTMgAAalAzAABqUTMAAGpSMwAAalMzAABqVDMAAGpVMwAAalYzAABqVzMAAGpYMwAAalkzAABqyDIAAGrJMgAAavgzAABq+TMAAGpeMwAAal8zAABqYDMAAGphMwAAamIzAABqYzMAAGpmMwAAamczAABqaDMAAGppMwAAamozAABqazMAAGr8NQAAav01AABqbjMAAGpvMwAAanAzAABqcTMAAGpyMwAAanMzAABqdDMAAGp1MwAAanYzAABqdzMAAGo+OAAAaj84AABqejMAAGp7MwAAanwzAABqfTMAAGp+MwAAan8zAABqgDMAAGqBMwAAaoIzAABqgzMAAGqEMwAAaoUzAABqJDcAAGolNwAAaogzAABqiTMAAGpkMwAAamUzAABqjDMAAGqNMwAAalY3AABqVzcAAGqQMwAAapEzAABq6jcAAGrrNwAAauYzAABq5zMAAGqWMwAAapczAABqmDMAAGqZMwAAapozAABqmzMAAGqcMwAAap0zAABqnjMAAGqfMwAAaqAzAABqoTMAAGqiMwAAaqMzAABq6jgAAGrrOAAAaqYzAABqpzMAAGqoMwAAaqkzAABqqjMAAGqrMwAAaqwzAABqrTMAAGquMwAAaq8zAABqCDYAAGoJNgAAakY4AABqRzgAAGq0MwAAarUzAABqtjMAAGq3MwAAargzAABquTMAAGq6MwAAarszAABqvDMAAGq9MwAAar4zAABqvzMAAGrwNAAAavE0AABqwjMAAGrDMwAAaugyAABq6TIAAGrGMwAAasczAABqyDMAAGrJMwAAaswzAABqzTMAAGrOMwAAas8zAABq8jQAAGrzNAAAai4zAABqLzMAAGrWMwAAatczAABq2DMAAGrZMwAAaio1AABqKzUAAGraMwAAatszAABq3DMAAGrdMwAAat4zAABq3zMAAGrgMwAAauEzAABq4jMAAGrjMwAAavY0AABq9zQAAGqSMwAAapMzAABq6DMAAGrpMwAAauozAABq6zMAAGowNwAAajE3AABq7jMAAGrvMwAAavYzAABq9zMAAGosNwAAai03AABq8jMAAGrzMwAAavQzAABq9TMAAGrwMwAAavEzAABq+jMAAGr7MwAAavwzAABq/TMAAGr+MwAAav8zAABqADQAAGoBNAAAagI0AABqAzQAAGoENAAAagU0AABqBjQAAGoHNAAAagg0AABqCTQAAGo4NwAAajk3AABqDDQAAGoNNAAAaqA4AABqoTgAAGoANQAAagE1AABqEjQAAGoTNAAAahQ0AABqFTQAAGoYNAAAahk0AABqGjQAAGobNAAAahw0AABqHTQAAGoeNAAAah80AABqIDQAAGohNAAAaiI0AABqIzQAAGokNAAAaiU0AABqJjQAAGonNAAAaig0AABqKTQAAGoqNAAAais0AABqLjQAAGovNAAAajA0AABqMTQAAGoyNAAAajM0AABqNjQAAGo3NAAAajg0AABqOTQAAGo6NAAAajs0AABqPDQAAGo9NAAAaj40AABqPzQAAGpANAAAakE0AABqnjcAAGqfNwAAakQ0AABqRTQAAGpGNAAAakc0AABqSDQAAGpJNAAAako0AABqSzQAAGpMNAAAak00AABqTjQAAGpPNAAAalA0AABqUTQAAGpUNAAAalU0AABqVjQAAGpXNAAAalg0AABqWTQAAGpaNAAAals0AABqXDQAAGpdNAAAal40AABqXzQAAGoONQAAag81AABqYjQAAGpjNAAAamQ0AABqZTQAAGpmNAAAamc0AABqaDQAAGppNAAAamo0AABqazQAAGpsNAAAam00AABqbjQAAGpvNAAAanA0AABqcTQAAGpyNAAAanM0AABqdDQAAGp1NAAAanY0AABqdzQAAGooNwAAaik3AABqejQAAGp7NAAAan40AABqfzQAAGqANAAAaoE0AABqgjQAAGqDNAAAaoQ0AABqhTQAAGoONAAAag80AABqiDQAAGqJNAAAaoo0AABqizQAAGqMNAAAao00AABqjjQAAGqPNAAAalo4AABqWzgAAGqSNAAAapM0AABqlDQAAGqVNAAAapY0AABqlzQAAGqYNAAAapk0AABqeDcAAGp5NwAAapo0AABqmzQAAGqcNAAAap00AABqnjQAAGqfNAAAaqA0AABqoTQAAGqiNAAAaqM0AABqpDQAAGqlNAAAaqg0AABqqTQAAGpiOAAAamM4AABqqjQAAGqrNAAAaqw0AABqrTQAAGquNAAAaq80AABqsDQAAGqxNAAAarI0AABqszQAAGq0NAAAarU0AABqtjQAAGq3NAAAarg0AABquTQAAGq8NAAAar00AABqRDYAAGpFNgAAar40AABqvzQAAGrANAAAasE0AABqJDUAAGolNQAAajI2AABqMzYAAGrGNAAAasc0AABqyDQAAGrJNAAAaso0AABqyzQAAGrMNAAAas00AABqzjQAAGrPNAAAatA0AABq0TQAAGrSNAAAatM0AABqODYAAGo5NgAAatY0AABq1zQAAGpYNwAAalk3AABq2jQAAGrbNAAAatw0AABq3TQAAGpCMwAAakMzAABq4DQAAGrhNAAAalwzAABqXTMAAGp+NgAAan82AABq5jQAAGrnNAAAaug0AABq6TQAAGrqNAAAaus0AABq7jQAAGrvNAAAasAzAABqwTMAAGrQMwAAatEzAABq9DQAAGr1NAAAauQzAABq5TMAAGr4NAAAavk0AABq+jQAAGr7NAAAavw0AABq/TQAAGr+NAAAav80AABqEDQAAGoRNAAAagI1AABqAzUAAGoENQAAagU1AABqEDMAAGoRMwAAagg1AABqCTUAAGoKNQAAags1AABqMjUAAGozNQAAamA0AABqYTQAAGoQNQAAahE1AABqEjUAAGoTNQAAapQzAABqlTMAAGoWNQAAahc1AABqGDUAAGoZNQAAaho1AABqGzUAAGocNQAAah01AABqHjUAAGofNQAAaro0AABquzQAAGoiNQAAaiM1AABqwjQAAGrDNAAAaiY1AABqJzUAAGooNQAAaik1AABq5DQAAGrlNAAAaiw1AABqLTUAAGouNQAAai81AABqMDUAAGoxNQAAagw1AABqDTUAAGo0NQAAajU1AABqNjUAAGo3NQAAar41AABqvzUAAGo6NQAAajs1AABqPDUAAGo9NQAAaj41AABqPzUAAGpANQAAakE1AABqbjcAAGpvNwAAakQ1AABqRTUAAGpGNQAAakc1AABqSDUAAGpJNQAAamY3AABqZzcAAGpKNQAAaks1AABqTDUAAGpNNQAAak41AABqTzUAAGpQNQAAalE1AABqTDYAAGpNNgAAalQ1AABqVTUAAGpWNQAAalc1AABqWDUAAGpZNQAAalo1AABqWzUAAGpcNQAAal01AABqXjUAAGpfNQAAamI1AABqYzUAAGpkNQAAamU1AABqZjUAAGpnNQAAanw4AABqfTgAAGpgNQAAamE1AABqYDgAAGphOAAAaiY4AABqJzgAAGpsNQAAam01AABqbjUAAGpvNQAAanA1AABqcTUAAGpyNQAAanM1AABqdDUAAGp1NQAAanY1AABqdzUAAGp4NQAAank1AABqejUAAGp7NQAAanw1AABqfTUAAGp+NQAAan81AABqGDMAAGoZMwAAaoI1AABqgzUAAGqENQAAaoU1AABqhjUAAGqHNQAAaog1AABqiTUAAGqKNQAAaos1AABqjDUAAGqNNQAAao41AABqjzUAAGqQNQAAapE1AABqkjUAAGqTNQAAapg4AABqmTgAAGqUNQAAapU1AABqljUAAGqXNQAAapg1AABqmTUAAGqaNQAAaps1AABqejcAAGp7NwAAap41AABqnzUAAGqgNQAAaqE1AABqojUAAGqjNQAAaqQ1AABqpTUAAGqqNQAAaqs1AABqrDUAAGqtNQAAaq41AABqrzUAAGqwNQAAarE1AABqsjUAAGqzNQAAarQ1AABqtTUAAGq2NQAAarc1AABquDUAAGq5NQAAaro1AABquzUAAGq8NQAAar01AABqpjQAAGqnNAAAaig4AABqKTgAAGrCNQAAasM1AABqxDUAAGrFNQAAaoI3AABqgzcAAGrINQAAask1AABqzDUAAGrNNQAAas41AABqzzUAAGrQNQAAatE1AABq0jUAAGrTNQAAatQ1AABq1TUAAGq0MgAAarUyAABq2DUAAGrZNQAAato1AABq2zUAAGrcNQAAat01AABq3jUAAGrfNQAAauA1AABq4TUAAGriNQAAauM1AABqZjYAAGpnNgAAaiw0AABqLTQAAGroNQAAauk1AABq6jUAAGrrNQAAapQ4AABqlTgAAGruNQAAau81AABqajYAAGprNgAAapY4AABqlzgAAGr2NQAAavc1AABqNDQAAGo1NAAAavo1AABq+zUAAGpsMwAAam0zAABq/jUAAGr/NQAAagA2AABqATYAAGoCNgAAagM2AABqBDYAAGoFNgAAagY2AABqBzYAAGqwMwAAarEzAABqCjYAAGoLNgAAagw2AABqDTYAAGoONgAAag82AABqEDYAAGoRNgAAahI2AABqEzYAAGoUNgAAahU2AABqFjYAAGoXNgAAahg2AABqGTYAAGoaNgAAahs2AABqHDYAAGodNgAAah42AABqHzYAAGogNgAAaiE2AABqkjcAAGqTNwAAaiQ2AABqJTYAAGoEMwAAagUzAABqKDYAAGopNgAAaio2AABqKzYAAGosNgAAai02AABqLjYAAGovNgAAajA2AABqMTYAAGrENAAAasU0AABqNDYAAGo1NgAAagg5AABqCTkAAGrUNAAAatU0AABqOjYAAGo7NgAAajw2AABqPTYAAGo+NgAAaj82AABqQDYAAGpBNgAAakI2AABqQzYAAGogNQAAaiE1AABqRjYAAGpHNgAAasQ4AABqxTgAAGpINgAAakk2AABqSjYAAGpLNgAAalI1AABqUzUAAGpONgAAak82AABqUDYAAGpRNgAAalI2AABqUzYAAGpUNgAAalU2AABqVjYAAGpXNgAAalg2AABqWTYAAGpaNgAAals2AABqXDYAAGpdNgAAal42AABqXzYAAGqaNwAAaps3AABqYjYAAGpjNgAAamQ2AABqZTYAAGrkNQAAauU1AABqaDYAAGppNgAAavA1AABq8TUAAGpuNgAAam82AABqcDYAAGpxNgAAanI2AABqczYAAGp0NgAAanU2AABqdjYAAGp3NgAAang2AABqeTYAAGp6NgAAans2AABqfDYAAGp9NgAAamw2AABqbTYAAGqANgAAaoE2AABqgjYAAGqDNgAAaoQ2AABqhTYAAGq6MgAAarsyAABqiDYAAGqJNgAAaoo2AABqizYAAGqmNwAAaqc3AABqjjYAAGqPNgAAapA2AABqkTYAAGqUNgAAapU2AABqljYAAGqXNgAAapg2AABqmTYAAGqaNgAAaps2AABqnDYAAGqdNgAAap42AABqnzYAAGqgNgAAaqE2AABqojYAAGqjNgAAaqQ2AABqpTYAAGqGNgAAaoc2AABqqDYAAGqpNgAAaqo2AABqqzYAAGpkOAAAamU4AABqrDYAAGqtNgAAaq42AABqrzYAAGqwNgAAarE2AABqsjYAAGqzNgAAarQ2AABqtTYAAGq2NgAAarc2AABqnDgAAGqdOAAAak4zAABqTzMAAGq6NgAAars2AABqvDYAAGq9NgAAasw4AABqzTgAAGrANgAAasE2AABqwjYAAGrDNgAAasQ2AABqxTYAAGrGNgAAasc2AABqyDYAAGrJNgAAaso2AABqyzYAAGrMNgAAas02AABq8jUAAGrzNQAAatA2AABq0TYAAGrSNgAAatM2AABq1DYAAGrVNgAAatY2AABq1zYAAGrYNgAAatk2AABq2jYAAGrbNgAAat42AABq3zYAAGrgNgAAauE2AABq4jYAAGrjNgAAaso1AABqyzUAAGrmNgAAauc2AABq6DYAAGrpNgAAauo2AABq6zYAAGrsNgAAau02AABq7jYAAGrvNgAAajg4AABqOTgAAGryNgAAavM2AABqzjgAAGrPOAAAavY2AABq9zYAAGr6NgAAavs2AABq/DYAAGr9NgAAav42AABq/zYAAGoANwAAagE3AABq+DYAAGr5NgAAalozAABqWzMAAGoGNwAAagc3AABqCDcAAGoJNwAAauI0AABq4zQAAGoKNwAAags3AABqDDcAAGoNNwAAasg4AABqyTgAAGoQNwAAahE3AABqEjcAAGoTNwAAahQ3AABqFTcAAGrKMwAAasszAABqOjMAAGo7MwAAaho3AABqGzcAAGocNwAAah03AABqHjcAAGofNwAAaiA3AABqITcAAGoiNwAAaiM3AABqhjMAAGqHMwAAaiY3AABqJzcAAGoqNwAAais3AABqgDUAAGqBNQAAakA4AABqQTgAAGouNwAAai83AABqwDgAAGrBOAAAauwzAABq7TMAAGoyNwAAajM3AABqNDcAAGo1NwAAajY3AABqNzcAAGoKNAAAags0AABqNjYAAGo3NgAAaj43AABqPzcAAGpANwAAakE3AABq7DgAAGrtOAAAakI3AABqQzcAAGpENwAAakU3AABq3DYAAGrdNgAAago4AABqCzgAAGpINwAAakk3AABqSjcAAGpLNwAAakw3AABqTTcAAGquOAAAaq84AABqTjcAAGpPNwAAalA3AABqUTcAAGoiOQAAaiM5AABqUjcAAGpTNwAAalQ3AABqVTcAAGoGNQAAagc1AABqQjQAAGpDNAAAatg0AABq2TQAAGpaNwAAals3AABqXDcAAGpdNwAAal43AABqXzcAAGpgNwAAamE3AABqZDcAAGplNwAAaqQzAABqpTMAAGpoNwAAamk3AABqajcAAGprNwAAamw3AABqbTcAAGr6MgAAavsyAABqhjQAAGqHNAAAanQ3AABqdTcAAGp2NwAAanc3AABqPDcAAGo9NwAAapw1AABqnTUAAGp8NwAAan03AABqfjcAAGp/NwAAaoA3AABqgTcAAGrGNQAAasc1AABq0jcAAGrTNwAAaoQ3AABqhTcAAGqGNwAAaoc3AABqiDcAAGqJNwAAaoo3AABqizcAAGqONwAAao83AABqkDcAAGqRNwAAaiI2AABqIzYAAGqUNwAAapU3AABqljcAAGqXNwAAapg3AABqmTcAAGpyNwAAanM3AABqnDcAAGqdNwAAaqA3AABqoTcAAGqiNwAAaqM3AABqpDcAAGqlNwAAaow2AABqjTYAAGqoNwAAaqk3AABq1jcAAGrXNwAAaqw3AABqrTcAAGpCNQAAakM1AABqpjUAAGqnNQAAato4AABq2zgAAGq0NwAAarU3AABqtjcAAGq3NwAAarg3AABquTcAAGqyNwAAarM3AABqvDcAAGq9NwAAaiY2AABqJzYAAGq+NwAAar83AABqwDcAAGrBNwAAarg2AABquTYAAGr4OAAAavk4AABqxDcAAGrFNwAAasY3AABqxzcAAGrKNwAAass3AABqzDcAAGrNNwAAas43AABqzzcAAGqGOAAAaoc4AABqrjcAAGqvNwAAatQ3AABq1TcAAGqqNwAAaqs3AABq2DcAAGrZNwAAato3AABq2zcAAGrcNwAAat03AABq3jcAAGrfNwAAauA3AABq4TcAAGriNwAAauM3AABq5DcAAGrlNwAAaug3AABq6TcAAGrKMgAAassyAABq7jcAAGrvNwAAavA3AABq8TcAAGryNwAAavM3AABq9DcAAGr1NwAAanw0AABqfTQAAGocOAAAah04AABq+DcAAGr5NwAAavo3AABq+zcAAGoAOQAAagE5AABq/DcAAGr9NwAAav43AABq/zcAAGoAOAAAagE4AABqAjgAAGoDOAAAagQ4AABqBTgAAGoGOAAAagc4AABqCDgAAGoJOAAAas42AABqzzYAAGoMOAAAag04AABqDjgAAGoPOAAAahA4AABqETgAAGoSOAAAahM4AABqjjMAAGqPMwAAaoozAABqizMAAGoYOAAAahk4AABqGjgAAGobOAAAahQ1AABqFTUAAGrQNwAAatE3AABqvDIAAGq9MgAAavA2AABq8TYAAGoiOAAAaiM4AABqJDgAAGolOAAAahY0AABqFzQAAGoOOQAAag85AABqLDgAAGotOAAAai44AABqLzgAAGowOAAAajE4AABqMjgAAGozOAAAajo3AABqOzcAAGpKMwAAakszAABqYDYAAGphNgAAajo4AABqOzgAAGo8OAAAaj04AABqujcAAGq7NwAAatQzAABq1TMAAGpCOAAAakM4AABqRDgAAGpFOAAAarIzAABqszMAAGpIOAAAakk4AABqSjgAAGpLOAAAakw4AABqTTgAAGpOOAAAak84AABq1jgAAGrXOAAAalA4AABqUTgAAGpSOAAAalM4AABqVDgAAGpVOAAAalY4AABqVzgAAGr2NwAAavc3AABqRjcAAGpHNwAAalg4AABqWTgAAGqQNAAAapE0AABqXDgAAGpdOAAAal44AABqXzgAAGp4NAAAank0AABqODUAAGo5NQAAalI0AABqUzQAAGp0OAAAanU4AABqZjgAAGpnOAAAamg4AABqaTgAAGpqOAAAams4AABq7DQAAGrtNAAAam44AABqbzgAAGpwOAAAanE4AABqcjgAAGpzOAAAauQ2AABq5TYAAGp2OAAAanc4AABqeDgAAGp5OAAAano4AABqezgAAGpoNQAAamk1AABqfjgAAGp/OAAAaoA4AABqgTgAAGqCOAAAaoM4AABqhDgAAGqFOAAAaio4AABqKzgAAGqIOAAAaok4AABqijgAAGqLOAAAaow4AABqjTgAAGqOOAAAao84AABqwDUAAGrBNQAAapI4AABqkzgAAGrsNQAAau01AABq9DUAAGr1NQAAaiozAABqKzMAAGqaOAAAaps4AABqqDUAAGqpNQAAap44AABqnzgAAGqiOAAAaqM4AABqpjYAAGqnNgAAaqQ4AABqpTgAAGqmOAAAaqc4AABqqDgAAGqpOAAAaqo4AABqqzgAAGqsOAAAaq04AABqYjcAAGpjNwAAarA4AABqsTgAAGqyOAAAarM4AABqtDgAAGq1OAAAarY4AABqtzgAAGq4OAAAark4AABqujgAAGq7OAAAarw4AABqvTgAAGq+OAAAar84AABqNDgAAGo1OAAAavQ2AABq9TYAAGrCOAAAasM4AABqkjYAAGqTNgAAasY4AABqxzgAAGoONwAAag83AABqyjgAAGrLOAAAatA4AABq0TgAAGrSOAAAatM4AABq1DgAAGrVOAAAangzAABqeTMAAGrYOAAAatk4AABq3DgAAGrdOAAAauY1AABq5zUAAGreOAAAat84AABq4DgAAGrhOAAAauI4AABq4zgAAGrkOAAAauU4AABq5jgAAGrnOAAAaug4AABq6TgAAGqMNwAAao03AABqbDgAAGptOAAAau44AABq7zgAAGrwOAAAavE4AABq8jgAAGrzOAAAavQ4AABq9TgAAGr2OAAAavc4AABqwjcAAGrDNwAAavo4AABq+zgAAGr8OAAAav04AABq/jgAAGr/OAAAahQ4AABqFTgAAGoCOQAAagM5AABqBDkAAGoFOQAAagY5AABqBzkAAGrsNwAAau03AABqCjkAAGoLOQAAagw5AABqDTkAAGq+NgAAar82AABqEDkAAGoROQAAahI5AABqEzkAAGoWOAAAahc4AABqFDkAAGoVOQAAahY5AABqFzkAAGosOQAAai05AABqAjcAAGoDNwAAahg5AABqGTkAAGoaOQAAahs5AABqHDkAAGodOQAAah45AABqHzkAAGogOQAAaiE5AABqFjMAAGoXMwAAaiQ5AABqJTkAAGoENwAAagU3AABqJjkAAGonOQAAaig5AABqKTkAAGoqOQAAais5AABqyDcAAGrJNwAAai45AABqLzkAAHVqAVAAAH1yWFcAAChqA1AAAGoEUAAAaqtVAABqrFUAAGpzUAAAanRQAABqB1AAAGoIUAAAah1UAABqHlQAAGoLUAAAagxQAABqK1MAAGosUwAAag9QAABqEFAAAGprUAAAamxQAABqE1AAAGoUUAAAai1TAABqLlMAAGoXUAAAahhQAABqGVAAAGoaUAAAahtRAABqHFEAAGodUAAAah5QAABqH1AAAGogUAAAaiFQAABqIlAAAGrFVQAAasZVAABqI1AAAGokUAAAaiVQAABqJlAAAGoRUQAAahJRAABqKVAAAGoqUAAAaitQAABqLFAAAGotUAAAai5QAABqCVQAAGoKVAAAai9QAABqMFAAAGoxUAAAajJQAABqM1AAAGo0UAAAajVQAABqNlAAAGo3UAAAajhQAABqOVAAAGo6UAAAajtQAABqPFAAAGo9UAAAaj5QAABqP1AAAGpAUAAAakFQAABqQlAAAGpDUAAAakRQAABqRVAAAGpGUAAAakdQAABqSFAAAGpJUAAAakpQAABqK1QAAGosVAAAak1QAABqTlAAAGorUgAAaixSAABqUVAAAGpSUAAAai1SAABqLlIAAGohUQAAaiJRAABqS1QAAGpMVAAAaldQAABqWFAAAGpZUAAAalpQAABqXVAAAGpeUAAAal9QAABqYFAAAGphUAAAamJQAABqMVQAAGoyVAAAamVQAABqZlAAAGpnUAAAamhQAABqaVAAAGpqUAAAam1QAABqblAAAGpvUAAAanBQAABqcVAAAGpyUAAAandQAABqeFAAAGp5UAAAanpQAABqe1AAAGp8UAAAan1QAABqflAAAGp/UAAAaoBQAABqZ1QAAGpoVAAAaoFQAABqglAAAGqDUAAAaoRQAABqhVAAAGqGUAAAaodQAABqiFAAAGqJUAAAaopQAABqP1MAAGpAUwAAao1QAABqjlAAAGqPUAAAapBQAABqk1AAAGqUUAAAapVQAABqllAAAGqXUAAAaphQAABqmVAAAGqaUAAAamdVAABqaFUAAGqbUAAAapxQAABqnVAAAGqeUAAAap9QAABqoFAAAGqhUAAAaqJQAABqo1AAAGqkUAAAaqVQAABqplAAAGqnUAAAaqhQAABqqVAAAGqqUAAAaq1QAABqrlAAAGqvUAAAarBQAABqsVAAAGqyUAAAarNQAABqtFAAAGq1UAAAarZQAABqt1AAAGq4UAAAarlQAABqulAAAGq7UAAAarxQAABqvVAAAGq+UAAAar9QAABqwFAAAGrBUAAAasJQAABqxVAAAGrGUAAAasdQAABqyFAAAGovUQAAajBRAABqy1AAAGrMUAAAas1QAABqzlAAAGrPUAAAatBQAABq0VAAAGrSUAAAatNQAABq1FAAAGrVUAAAatZQAABq11AAAGrYUAAAatlQAABq2lAAAGrbUAAAatxQAABqB1QAAGoIVAAAat1QAABq3lAAAGrfUAAAauBQAABq2VUAAGraVQAAauNQAABq5FAAAGrlUAAAauZQAABqOVEAAGo6UQAAaulQAABq6lAAAGrrUAAAauxQAABqRVIAAGpGUgAAau9QAABq8FAAAGofVgAAaiBWAABq81AAAGr0UAAAavVQAABq9lAAAGr3UAAAavhQAABq+VAAAGr6UAAAavtQAABq/FAAAGr9UAAAav5QAABq/1AAAGoAUQAAagFRAABqAlEAAGoDUQAAagRRAABqBVEAAGoGUQAAagdRAABqCFEAAGoJUQAAagpRAABqC1EAAGoMUQAAag1RAABqDlEAAGoPUQAAahBRAABqE1EAAGoUUQAAahVRAABqFlEAAGoXUQAAahhRAABqEVAAAGoSUAAAahtQAABqHFAAAGodUQAAah5RAABqH1EAAGogUQAAalVQAABqVlAAAGojUQAAaiRRAABqJVEAAGomUQAAaidRAABqKFEAAGqrUAAAaqxQAABqK1EAAGosUQAAai1RAABqLlEAAGrJUAAAaspQAABqMVEAAGoyUQAAajNRAABqNFEAAGo1UQAAajZRAABq51AAAGroUAAAajtRAABqPFEAAGpTUgAAalRSAABqP1EAAGpAUQAAaklRAABqSlEAAGpFUQAAakZRAABqw1AAAGrEUAAAakFRAABqQlEAAGpLUQAAakxRAABqW1UAAGpcVQAAavlTAABq+lMAAGpRUQAAalJRAABqU1EAAGpUUQAAalVRAABqVlEAAGpXUQAAalhRAABqWVEAAGpaUQAAaltRAABqXFEAAGpdUQAAal5RAABqB1YAAGoIVgAAal9RAABqYFEAAGphUQAAamJRAABqY1EAAGpkUQAAauFQAABq4lAAAGpnUQAAamhRAABqaVEAAGpqUQAAamtRAABqbFEAAGptUQAAam5RAABqb1EAAGpwUQAAanFRAABqclEAAGpdUwAAal5TAABqdVEAAGp2UQAAakNRAABqRFEAAGp5UQAAanpRAABqe1EAAGp8UQAAan1RAABqflEAAGr5VAAAavpUAABqf1EAAGqAUQAAaoFRAABqglEAAGqDUQAAaoRRAABqhVEAAGqGUQAAaodRAABqiFEAAGqJUQAAaopRAABqi1EAAGqMUQAAao1RAABqjlEAAGqPUQAAapBRAABqkVEAAGqSUQAAamVVAABqZlUAAGqVUQAAapZRAABql1EAAGqYUQAAaplRAABqmlEAAGqbUQAAapxRAABqn1EAAGqgUQAAaqFRAABqolEAAGqjUQAAaqRRAABqa1UAAGpsVQAAaqdRAABqqFEAAGqpUQAAaqpRAABqq1EAAGqsUQAAaq1RAABqrlEAAGqvUQAAarBRAABqb1UAAGpwVQAAarFRAABqslEAAGqzUQAAarRRAABqX1MAAGpgUwAAardRAABquFEAAGq5UQAAarpRAABqu1EAAGq8UQAAar1RAABqvlEAAGq/UQAAasBRAABqW1AAAGpcUAAAasNRAABqxFEAAGrFUQAAasZRAABqx1EAAGrIUQAAaslRAABqylEAAGrLUQAAasxRAABqzVEAAGrOUQAAamNUAABqZFQAAGrRUQAAatJRAABq9VUAAGr2VQAAaqVVAABqplUAAGrVUQAAatZRAABq11EAAGrYUQAAamdTAABqaFMAAGrbUQAAatxRAABq3VEAAGreUQAAasNVAABqxFUAAGrfUQAAauBRAABq4VEAAGriUQAAav9UAABqAFUAAGrHVQAAashVAABq5VEAAGrmUQAAanFSAABqclIAAGrrUQAAauxRAABq7VEAAGruUQAAau9RAABq8FEAAGrxUQAAavJRAABq81EAAGr0UQAAas9RAABq0FEAAGr3UQAAavhRAABqZVEAAGpmUQAAavtRAABq/FEAAGqDVQAAaoRVAABqAVIAAGoCUgAAagNSAABqBFIAAGp3UgAAanhSAABqB1IAAGoIUgAAaglSAABqClIAAGoNUgAAag5SAABqD1IAAGoQUgAAahFSAABqElIAAGoTUgAAahRSAABqFVIAAGoWUgAAar9UAABqwFQAAGoXUgAAahhSAABqGVIAAGoaUgAAahtSAABqHFIAAGodUgAAah5SAABqKVYAAGoqVgAAah9SAABqIFIAAGohUgAAaiJSAABqI1IAAGokUgAAaiVSAABqJlIAAGonUgAAaihSAABqc1MAAGp0UwAAak9QAABqUFAAAGpTUAAAalRQAABqL1IAAGowUgAAajFSAABqMlIAAGozUgAAajRSAABqNVIAAGo2UgAAajdSAABqOFIAAGo5UgAAajpSAABqO1IAAGo8UgAAaj1SAABqPlIAAGo/UgAAakBSAABqQVIAAGpCUgAAakNSAABqRFIAAGrtUAAAau5QAABqR1IAAGpIUgAAaklSAABqSlIAAGpLUgAAakxSAABqTVIAAGpOUgAAandRAABqeFEAAGpRUgAAalJSAABqPVEAAGo+UQAAaldSAABqWFIAAGpZUgAAalpSAABqW1IAAGpcUgAAal1SAABqXlIAAGpfUgAAamBSAABqYVIAAGpiUgAAamNSAABqZFIAAGpnUgAAamhSAABqg1MAAGqEUwAAamtSAABqbFIAAGptUgAAam5SAABqb1IAAGpwUgAAaulRAABq6lEAAGodVQAAah5VAABqc1IAAGp0UgAAanVSAABqdlIAAGoFUgAAagZSAABqeVIAAGp6UgAAaolSAABqilIAAGp9UgAAan5SAABqf1IAAGqAUgAAaoFSAABqglIAAGqDUgAAaoRSAABq01EAAGrUUQAAaodSAABqiFIAAGp7UgAAanxSAABqjVIAAGqOUgAAao9SAABqkFIAAGqRUgAAapJSAABqk1IAAGqUUgAAapVSAABqllIAAGqXUgAAaphSAABqmVIAAGqaUgAAaptSAABqnFIAAGqdUgAAap5SAABqn1IAAGqgUgAAaqFSAABqolIAAGqjUgAAaqRSAABqpVIAAGqmUgAAaqdSAABqqFIAAGqpUgAAaqpSAABqrVIAAGquUgAAarFSAABqslIAAGq1UgAAarZSAABqiVMAAGqKUwAAarlSAABqulIAAGq7UgAAarxSAABqv1IAAGrAUgAAasFSAABqwlIAAGrDUgAAasRSAABqxVIAAGrGUgAAasdSAABqyFIAAGrJUgAAaspSAABqy1IAAGrMUgAAas1SAABqzlIAAGrPUgAAatBSAABq51EAAGroUQAAatVSAABq1lIAAGrXUgAAathSAABq2VIAAGraUgAAattSAABq3FIAAGrdUgAAat5SAABq31IAAGrgUgAAauFSAABq4lIAAGrjUgAAauRSAABq5VIAAGrmUgAAao1TAABqjlMAAGrpUgAAaupSAABq61IAAGrsUgAAau1SAABq7lIAAGrvUgAAavBSAABq8VIAAGryUgAAavNSAABq9FIAAGr1UgAAavZSAABq91IAAGr4UgAAavlSAABq+lIAAGr7UgAAavxSAABql1MAAGqYUwAAarNVAABqtFUAAGoBUwAAagJTAABqA1MAAGoEUwAAagVTAABqBlMAAGoHUwAAaghTAABqCVMAAGoKUwAAagtTAABqDFMAAGoNUwAAag5TAABqD1MAAGoQUwAAahFTAABqElMAAGoTUwAAahRTAABqFVMAAGoWUwAAahdTAABqGFMAAGoZUwAAahpTAABqG1MAAGocUwAAah1TAABqHlMAAGofUwAAaiBTAABqnVEAAGqeUQAAaiNTAABqJFMAAGolUwAAaiZTAABqJ1MAAGooUwAAailTAABqKlMAAGoNUAAAag5QAABqFVAAAGoWUAAAajFTAABqMlMAAGozUwAAajRTAABqNVMAAGo2UwAAajdTAABqOFMAAGo5UwAAajpTAABqO1MAAGo8UwAAaj1TAABqPlMAAGqLUAAAaoxQAABqFVYAAGoWVgAAakFTAABqQlMAAGpDUwAAakRTAABqRVMAAGpGUwAAakdTAABqSFMAAGpJUwAAakpTAABqc1QAAGp0VAAAaktTAABqTFMAAGpNUwAAak5TAABqT1MAAGpQUwAAalFTAABqUlMAAGoZUQAAahpRAABqU1MAAGpUUwAAalVTAABqVlMAAGpXUwAAalhTAABqWVMAAGpaUwAAaltTAABqXFMAAGpzUQAAanRRAABqtVEAAGq2UQAAanVTAABqdlMAAGpjUwAAamRTAABqZVMAAGpmUwAAatlRAABq2lEAAGppUwAAampTAABqa1MAAGpsUwAAam1TAABqblMAAGqpVAAAaqpUAABqT1EAAGpQUQAAailSAABqKlIAAGp3UwAAanhTAABqeVMAAGp6UwAAantTAABqfFMAAGp9UwAAan5TAABqf1MAAGqAUwAAaoFTAABqglMAAGppUgAAampSAABqhVMAAGqGUwAAaotSAABqjFIAAGq3UgAAarhSAABqi1MAAGqMUwAAao9TAABqkFMAAGqRUwAAapJTAABqk1MAAGqUUwAAapVTAABqllMAAGr9UgAAav5SAABqmVMAAGqaUwAAaptTAABqnFMAAGqdUwAAap5TAABqn1MAAGqgUwAAaqFTAABqolMAAGqjUwAAaqRTAABqpVMAAGqmUwAAaqdTAABqqFMAAGqpUwAAaqpTAABqq1MAAGqsUwAAaq1TAABqrlMAAGqvUwAAarBTAABqsVMAAGqyUwAAarNTAABqtFMAAGq1UwAAarZTAABqt1MAAGq4UwAAarlTAABqulMAAGq7UwAAarxTAABqO1QAAGo8VAAAar1TAABqvlMAAGoLUgAAagxSAABqwVMAAGrCUwAAasdTAABqyFMAAGpHUQAAakhRAABqzVMAAGrOUwAAas9TAABq0FMAAGrRUwAAatJTAABq01MAAGrUUwAAatVTAABq1lMAAGrXUwAAathTAABq2VMAAGraUwAAattTAABq3FMAAGrVVQAAatZVAABqwVEAAGrCUQAAauFTAABq4lMAAGrjUwAAauRTAABq5VMAAGrmUwAAaulTAABq6lMAAGrrUwAAauxTAABq7VMAAGruUwAAau9TAABq8FMAAGrxUwAAavJTAABq81MAAGr0UwAAavVTAABq9lMAAGqJVQAAaopVAABqv1MAAGrAUwAAav9RAABqAFIAAGrFUwAAasZTAABq/1MAAGoAVAAAaqtSAABqrFIAAGoDVAAAagRUAABqBVQAAGoGVAAAajdRAABqOFEAAGrRUgAAatJSAABqC1QAAGoMVAAAarNSAABqtFIAAGrfUwAAauBTAABqD1QAAGoQVAAAahFUAABqElQAAGoTVAAAahRUAABqF1QAAGoYVAAAahlUAABqGlQAAGobVAAAahxUAABqCVAAAGoKUAAAah9UAABqIFQAAGohVAAAaiJUAABqw1MAAGrEUwAAaiVUAABqJlQAAGonVAAAaihUAABqKVQAAGoqVAAAaktQAABqTFAAAGotVAAAai5UAABqL1QAAGowVAAAamNQAABqZFAAAGrhVQAAauJVAABqNVQAAGo2VAAAajdUAABqOFQAAGo5VAAAajpUAABqyVMAAGrKUwAAaj1UAABqPlQAAGo/VAAAakBUAABqQVQAAGpCVAAAakNUAABqRFQAAGpFVAAAakZUAABqR1QAAGpIVAAAaklUAABqSlQAAGonUAAAaihQAABqTVQAAGpOVAAAak9UAABqUFQAAGpRVAAAalJUAABqU1QAAGpUVAAAalVUAABqVlQAAGpZVAAAalpUAABqW1QAAGpcVAAAaqdUAABqqFQAAGpdVAAAal5UAABqX1QAAGpgVAAAamFUAABqYlQAAGrxUAAAavJQAABqZVQAAGpmVAAAaq9SAABqsFIAAGppVAAAampUAABqI1QAAGokVAAAamtUAABqbFQAAGptVAAAam5UAABqb1QAAGpwVAAAanFUAABqclQAAGpPUgAAalBSAABqdVQAAGp2VAAAaodUAABqiFQAAGrRVAAAatJUAABqe1QAAGp8VAAAan1UAABqflQAAGp/VAAAaoBUAABqgVQAAGqCVAAAaoNUAABqhFQAAGqFVAAAaoZUAABq51IAAGroUgAAaolUAABqilQAAGrTVAAAatRUAABqjVQAAGqOVAAAao9UAABqkFQAAGqRVAAAapJUAABqk1QAAGqUVAAAapVUAABqllQAAGqXVAAAaphUAABqmVQAAGqaVAAAaptUAABqnFQAAGrXVAAAathUAABqn1QAAGqgVAAAaqFUAABqolQAAGqlVAAAaqZUAABqYVMAAGpiUwAAam9TAABqcFMAAGqrVAAAaqxUAABq41EAAGrkUQAAatlUAABq2lQAAGqxVAAAarJUAABqs1QAAGq0VAAAarVUAABqtlQAAGq3VAAAarhUAABquVQAAGq6VAAAartUAABqvFQAAGq9VAAAar5UAABqTVEAAGpOUQAAasFUAABqwlQAAGrDVAAAasRUAABqxVQAAGrGVAAAasdUAABqyFQAAGrJVAAAaspUAABqy1QAAGrMVAAAas1UAABqzlQAAGqFUgAAaoZSAABqvVUAAGq+VQAAas9UAABq0FQAAGp5VAAAanpUAABqi1QAAGqMVAAAatVUAABq1lQAAGqdVAAAap5UAABqr1QAAGqwVAAAattUAABq3FQAAGrdVAAAat5UAABq31QAAGrgVAAAauFUAABq4lQAAGrjVAAAauRUAABq5VQAAGrmVAAAaudUAABq6FQAAGrpVAAAaupUAABq61QAAGrsVAAAau1UAABq7lQAAGrnUwAAauhTAABq8VQAAGryVAAAavNUAABq9FQAAGqtVAAAaq5UAABq9VQAAGr2VAAAavdUAABq+FQAAGp3VAAAanhUAABq+1QAAGr8VAAAav1UAABq/lQAAGoBVQAAagJVAABqA1UAAGoEVQAAagVVAABqBlUAAGoHVQAAaghVAABqCVUAAGoKVQAAagtVAABqDFUAAGoNVQAAag5VAABqD1UAAGoQVQAAahFVAABqElUAAGoTVQAAahRVAABqFVUAAGoWVQAAahdVAABqGFUAAGoDVgAAagRWAABqBVAAAGoGUAAAau9UAABq8FQAAGofVQAAaiBVAABqIVUAAGoiVQAAaiNVAABqJFUAAGoFVgAAagZWAABqJ1UAAGooVQAAailVAABqKlUAAGorVQAAaixVAABqLVUAAGouVQAAaglWAABqClYAAGoxVQAAajJVAABqM1UAAGo0VQAAajVVAABqNlUAAGo3VQAAajhVAABqOVUAAGo6VQAAajtVAABqPFUAAGo9VQAAaj5VAABqP1UAAGpAVQAAakFVAABqQlUAAGr3UwAAavhTAABqRVUAAGpGVQAAailRAABqKlEAAGpHVQAAakhVAABqSVUAAGpKVQAAaktVAABqTFUAAGpNVQAAak5VAABqT1UAAGpQVQAAalFVAABqUlUAAGpVVQAAalZVAABqV1UAAGpYVQAAallVAABqWlUAAGr1UQAAavZRAABqXVUAAGpeVQAAal9VAABqYFUAAGr7UwAAavxTAABqdVUAAGp2VQAAamFVAABqYlUAAGpjVQAAamRVAABqk1EAAGqUUQAAapFQAABqklAAAGppVQAAampVAABqpVEAAGqmUQAAam1VAABqblUAAGr9UwAAav5TAABqcVUAAGpyVQAAanNVAABqdFUAAGr5UQAAavpRAABqd1UAAGp4VQAAanlVAABqelUAAGp7VQAAanxVAABqfVUAAGp+VQAAan9VAABqgFUAAGqBVQAAaoJVAABq/VEAAGr+UQAAaoVVAABqhlUAAGoBVAAAagJUAABqE1YAAGoUVgAAao1VAABqjlUAAGqPVQAAapBVAABqkVUAAGqSVQAAapNVAABqlFUAAGqVVQAAapZVAABql1UAAGqYVQAAaplVAABqmlUAAGqHVQAAaohVAABqnVUAAGqeVQAAap9VAABqoFUAAGqhVQAAaqJVAABqo1UAAGqkVQAAamVSAABqZlIAAGqnVQAAaqhVAABqqVUAAGqqVQAAavFVAABq8lUAAGrTUgAAatRSAABqrVUAAGquVQAAaq9VAABqsFUAAGqxVQAAarJVAABq/1IAAGoAUwAAarVVAABqtlUAAGoZVgAAahpWAABquVUAAGq6VQAAartVAABqvFUAAGoVVAAAahZUAABqv1UAAGrAVQAAasFVAABqwlUAAGoNVAAAag5UAABqcVMAAGpyUwAAalVSAABqVlIAAGrJVQAAaspVAABqy1UAAGrMVQAAas1VAABqzlUAAGrPVQAAatBVAABq0VUAAGrSVQAAatNVAABq1FUAAGrdUwAAat5TAABq11UAAGrYVQAAalNVAABqVFUAAGrbVQAAatxVAABq3VUAAGreVQAAat9VAABq4FUAAGozVAAAajRUAABq41UAAGrkVQAAauVVAABq5lUAAGrnVQAAauhVAABq6VUAAGrqVQAAautVAABq7FUAAGrtVQAAau5VAABqdVAAAGp2UAAAardVAABquFUAAGrzVQAAavRVAABqIVMAAGoiUwAAaodTAABqiFMAAGr3VQAAavhVAABq+VUAAGr6VQAAavtVAABq/FUAAGr9VQAAav5VAABq/1UAAGoAVgAAagFWAABqAlYAAGoZVQAAahpVAABqJVUAAGomVQAAakNVAABqRFUAAGovVQAAajBVAABqC1YAAGoMVgAAag1WAABqDlYAAGrvVQAAavBVAABqD1YAAGoQVgAAaiVWAABqJlYAAGoRVgAAahJWAABqi1UAAGqMVQAAaldUAABqWFQAAGoXVgAAahhWAABqG1UAAGocVQAAaptVAABqnFUAAGobVgAAahxWAABqHVYAAGoeVgAAaqNUAABqpFQAAGoxVgAAajJWAABqIVYAAGoiVgAAaiNWAABqJFYAAGovUwAAajBTAABqJ1YAAGooVgAAar1SAABqvlIAAGorVgAAaixWAABqLVYAAGouVgAAai9WAABqMFYAAGrLUwAAasxTAAB1aoQjAAB9cllXAAAoaggkAABqCSQAAGpeJAAAal8kAABqCiQAAGoLJAAAapwjAABqnSMAAGqGIwAAaocjAABqiCMAAGqJIwAAag4kAABqDyQAAGoQJAAAahEkAABqiiMAAGqLIwAAahQkAABqFSQAAGqMIwAAao0jAABqjiMAAGqPIwAAahgkAABqGSQAAGoaJAAAahskAABqkCMAAGqRIwAAapIjAABqkyMAAGqUIwAAapUjAABqliMAAGqXIwAAapgjAABqmSMAAGqaIwAAapsjAABqPCQAAGo9JAAAaiAkAABqISQAAGoeJAAAah8kAABqDCQAAGoNJAAAap4jAABqnyMAAGokJAAAaiUkAABqoCMAAGqhIwAAaqIjAABqoyMAAGqkIwAAaqUjAABqpiMAAGqnIwAAaqgjAABqqSMAAGoqJAAAaiskAABqSCQAAGpJJAAAamQkAABqZSQAAGosJAAAai0kAABqLiQAAGovJAAAaqojAABqqyMAAGqsIwAAaq0jAABqMiQAAGozJAAAajQkAABqNSQAAGquIwAAaq8jAABqNiQAAGo3JAAAarAjAABqsSMAAGo4JAAAajkkAABqZiQAAGpnJAAAarIjAABqsyMAAGq0IwAAarUjAABqOiQAAGo7JAAAarYjAABqtyMAAGowJAAAajEkAABqPiQAAGo/JAAAargjAABquSMAAGoWJAAAahckAABquiMAAGq7IwAAakAkAABqQSQAAGpYJAAAalkkAABqaiQAAGprJAAAatwjAABq3SMAAGq+IwAAar8jAABqHCQAAGodJAAAasAjAABqwSMAAGpEJAAAakUkAABqwiMAAGrDIwAAaiIkAABqIyQAAGrEIwAAasUjAABqxiMAAGrHIwAAasgjAABqySMAAGrKIwAAassjAABqSiQAAGpLJAAAaswjAABqzSMAAGomJAAAaickAABqziMAAGrPIwAAatAjAABq0SMAAGrSIwAAatMjAABqKCQAAGopJAAAatQjAABq1SMAAGrWIwAAatcjAABqEiQAAGoTJAAAak4kAABqTyQAAGrYIwAAatkjAABqVCQAAGpVJAAAalYkAABqVyQAAGraIwAAatsjAABqvCMAAGq9IwAAalokAABqWyQAAGreIwAAat8jAABq4CMAAGrhIwAAauIjAABq4yMAAGrkIwAAauUjAABq5iMAAGrnIwAAalwkAABqXSQAAGroIwAAaukjAABq6iMAAGrrIwAAauwjAABq7SMAAGruIwAAau8jAABqcCQAAGpxJAAAakYkAABqRyQAAGpgJAAAamEkAABqYiQAAGpjJAAAavAjAABq8SMAAGryIwAAavMjAABq9CMAAGr1IwAAavYjAABq9yMAAGpoJAAAamkkAABq+CMAAGr5IwAAakIkAABqQyQAAGpQJAAAalEkAABq+iMAAGr7IwAAamwkAABqbSQAAGpMJAAAak0kAABq/CMAAGr9IwAAav4jAABq/yMAAGpuJAAAam8kAABqUiQAAGpTJAAAagAkAABqASQAAGoCJAAAagMkAABqBCQAAGoFJAAAanIkAABqcyQAAGoGJAAAagckAAB1anQkAAB9clpXAAAoanwkAABqfSQAAGqAJAAAaoEkAABqhCQAAGqFJAAAaogkAABqiSQAAGqKJAAAaoskAABqkCQAAGqRJAAAapIkAABqkyQAAGqUJAAAapUkAABqfiQAAGp/JAAAapwkAABqnSQAAGqeJAAAap8kAABqoiQAAGqjJAAAaqgkAABqqSQAAGqqJAAAaqskAABqsiQAAGqzJAAAarQkAABqtSQAAGroJAAAaukkAABqACUAAGoBJQAAasQkAABqxSQAAGrIJAAAaskkAABq1CQAAGrVJAAAatgkAABq2SQAAGrcJAAAat0kAABq4CQAAGrhJAAAauIkAABq4yQAAGrkJAAAauUkAABq5iQAAGrnJAAAar4kAABqvyQAAGqwJAAAarEkAABq9iQAAGr3JAAAavokAABq+yQAAGr8JAAAav0kAABqmCQAAGqZJAAAagIlAABqAyUAAGrMJAAAas0kAABqBiUAAGoHJQAAangkAABqeSQAAGp2JAAAanckAABqrCQAAGqtJAAAasYkAABqxyQAAGqMJAAAao0kAABqjiQAAGqPJAAAapYkAABqlyQAAGqGJAAAaockAABqoCQAAGqhJAAAarokAABquyQAAGqmJAAAaqckAABqeiQAAGp7JAAAaq4kAABqryQAAGq2JAAAarckAABq8iQAAGrzJAAAargkAABquSQAAGq8JAAAar0kAABqwCQAAGrBJAAAapokAABqmyQAAGqkJAAAaqUkAABqwiQAAGrDJAAAas4kAABqzyQAAGrQJAAAatEkAABq0iQAAGrTJAAAatYkAABq1yQAAGraJAAAatskAABq3iQAAGrfJAAAauokAABq6yQAAGrsJAAAau0kAABq7iQAAGrvJAAAavAkAABq8SQAAGqCJAAAaoMkAABq9CQAAGr1JAAAavgkAABq+SQAAGr+JAAAav8kAABqyiQAAGrLJAAAagQlAABqBSUAAHVqHwQAAH1yW1cAAChqKSUAAGoqJQAAajclAABqOCUAAGquKwAAaq8rAABqLyUAAGowJQAAapopAABqmykAAGozJQAAajQlAABqYC4AAGphLgAAajooAABqOygAAGo/JQAAakAlAABqQSUAAGpCJQAAakMlAABqRCUAAGpHJQAAakglAABqTSUAAGpOJQAAalklAABqWiUAAGpAKAAAakEoAABqYyUAAGpkJQAAamclAABqaCUAAGqEJgAAaoUmAABqbSUAAGpuJQAAaoAmAABqgSYAAGp5JQAAanolAABqeyUAAGp8JQAAan0lAABqfiUAAGp/JQAAaoAlAABqZicAAGpnJwAAaoMlAABqhCUAAGo5JQAAajolAABqiSUAAGqKJQAAao0lAABqjiUAAGqRJQAAapIlAABqnSUAAGqeJQAAap8lAABqoCUAAGqjJQAAaqQlAABqrSUAAGquJQAAaq8lAABqsCUAAGqzJQAAarQlAABqtSUAAGq2JQAAarslAABqvCUAAGq/JQAAasAlAABqwyUAAGrEJQAAasklAABqyiUAAGooLgAAaikuAABqJQQAAGrRJQAAatIlAABq0yUAAGrUJQAAatUlAABq2CUAAGrZJQAAatolAABq2yUAAGrcJQAAat0lAABq3iUAAGrfJQAAauAlAABq4SUAAGrkJQAAauUlAABq6CUAAGrpJQAAauolAABq6yUAAGo0KgAAajUqAABqWigAAGpbKAAAalwuAABqXS4AAGoAJgAAagEmAABqBCYAAGoFJgAAagomAABqCyYAAGoQJgAAahEmAABqEiYAAGoTJgAAahwmAABqHSYAAGoeJgAAah8mAABqZigAAGpnKAAAaiImAABqIyYAAGrkKwAAauUrAABqui0AAGq7LQAAajAmAABqMSYAAGo0JgAAajUmAABqNiYAAGo3JgAAamooAABqaygAAGosKgAAai0qAABqQiYAAGpDJgAAakQmAABqRSYAAGpOJgAAak8mAABq7iwAAGrvLAAAalomAABqWyYAAGpcJgAAal0mAABqYCYAAGphJgAAamYmAABqZyYAAGpoJgAAamkmAABqbiYAAGpvJgAAanAmAABqcSYAAGpyJgAAanMmAABqdCYAAGp1JgAAatYrAABq1ysAAGp+JgAAan8mAABqgiYAAGqDJgAAaoYmAABqhyYAAGqIJgAAaokmAABqWioAAGpbKgAAapAmAABqkSYAAGqwKQAAarEpAABqmiYAAGqbJgAAapwmAABqnSYAAGqgJgAAaqEmAABqpCYAAGqlJgAAanooAABqeygAAGrkLAAAauUsAABqqiYAAGqrJgAAarYmAABqtyYAAGq4JgAAarkmAABq4iwAAGrjLAAAar4mAABqvyYAAGrAJgAAasEmAABqwiYAAGrDJgAAavolAABq+yUAAGrKJgAAassmAABqziYAAGrPJgAAatYmAABq1yYAAGqOJgAAao8mAABq3iYAAGrfJgAAauYmAABq5yYAAGrQKAAAatEoAABq+iYAAGr7JgAAavwmAABq/SYAAGoZLQAAahotAABqBicAAGoHJwAAaggnAABqCScAAGoOJwAAag8nAABqECcAAGoRJwAAahInAABqEycAAGoWJwAAahcnAABqIioAAGojKgAAahonAABqGycAAGocJwAAah0nAABqHicAAGofJwAAaiInAABqIycAAGokJwAAaiUnAABqKicAAGorJwAAajAnAABqMScAAGoyJwAAajMnAABqsikAAGqzKQAAapQoAABqlSgAAGo6JwAAajsnAABqwCcAAGrBJwAAakInAABqQycAAGpGJwAAakcnAABqTicAAGpPJwAAalAnAABqUScAAGpSJwAAalMnAABqXikAAGpfKQAAalYnAABqVycAAGoqJgAAaismAABqXCcAAGpdJwAAaq4pAABqrykAAGpgJwAAamEnAABqYicAAGpjJwAAamgnAABqaScAAGpsJwAAam0nAABqbicAAGpvJwAAanAnAABqcScAAGp0JwAAanUnAABquisAAGq7KwAAanonAABqeycAAGpULAAAalUsAABqficAAGp/JwAAaoInAABqgycAAGqKJwAAaosnAABqkCcAAGqRJwAAapInAABqkycAAGqUJwAAapUnAABqnCcAAGqdJwAAar4rAABqvysAAGqkJwAAaqUnAABqpicAAGqnJwAAaqgnAABqqScAAGqsJwAAaq0nAABqYCgAAGphKAAAarAnAABqsScAAGq0JwAAarUnAABqhCsAAGqFKwAAar4nAABqvycAAGrGJwAAascnAABqyicAAGrLJwAAatwnAABq3ScAAGrgJwAAauEnAABq5CcAAGrlJwAAauYnAABq5ycAAGrqJwAAausnAABqSi0AAGpLLQAAavAnAABq8ScAAGryJwAAavMnAABq9icAAGr3JwAAavgnAABq+ScAAGr6JwAAavsnAABq/CcAAGr9JwAAas4rAABqzysAAGoCKAAAagMoAABqBCgAAGoFKAAAagYoAABqBygAAGoOKAAAag8oAABqEigAAGoTKAAAahQoAABqFSgAAGqoKAAAaqkoAABqGigAAGobKAAAahwoAABqHSgAAGroJwAAauknAABqKigAAGorKAAAai4oAABqLygAAGqELgAAaoUuAABqNigAAGo3KAAAajslAABqPCUAAGo8KAAAaj0oAABqAC4AAGoBLgAAaj4oAABqPygAAGqqJwAAaqsnAABqRCgAAGpFKAAAakIqAABqQyoAAGpMKAAAak0oAABqUigAAGpTKAAAalgoAABqWSgAAGruJQAAau8lAABqXCgAAGpdKAAAarIoAABqsygAAGogJgAAaiEmAABqPiYAAGo/JgAAakomAABqSyYAAGpeJgAAal8mAABqcCgAAGpxKAAAanQoAABqdSgAAGp2KAAAancoAABqeCgAAGp5KAAAaqYmAABqpyYAAGr0LAAAavUsAABqfCgAAGp9KAAAan4oAABqfygAAGqEKAAAaoUoAABqiCgAAGqJKAAAaoooAABqiygAAGqSKAAAapMoAABqQigAAGpDKAAAapooAABqmygAAGqcKAAAap0oAABq7CsAAGrtKwAAauwnAABq7ScAAGqmKAAAaqcoAABqFigAAGoXKAAAaq4oAABqrygAAGq2KAAAarcoAABquCgAAGq5KAAAasAoAABqwSgAAGq8KAAAar0oAABqxCgAAGrFKAAAasYoAABqxygAAGrIKAAAaskoAABqyigAAGrLKAAAas4oAABqzygAAGrWKAAAatcoAABq2igAAGrbKAAAat4oAABq3ygAAGrqKAAAausoAABq7igAAGrvKAAAavAoAABq8SgAAGr0KAAAavUoAABq+CgAAGr5KAAAavooAABq+ygAAGoEKQAAagUpAABqCikAAGoLKQAAagQtAABqBS0AAGoaKQAAahspAABqHCkAAGodKQAAah4pAABqHykAAGrQLAAAatEsAABqJikAAGonKQAAaigpAABqKSkAAGoqKQAAaispAABqMCkAAGoxKQAAajIpAABqMykAAGo0KQAAajUpAABqNikAAGo3KQAAajwpAABqPSkAAGo+KQAAaj8pAABqQCkAAGpBKQAAavAqAABq8SoAAGpyKwAAanMrAABqSikAAGpLKQAAakwpAABqTSkAAGo+LAAAaj8sAABq4iYAAGrjJgAAalQpAABqVSkAAGpYKQAAalkpAABq8CwAAGrxLAAAamApAABqYSkAAGpiKQAAamMpAABqZCkAAGplKQAAamgpAABqaSkAAGpuKQAAam8pAABq9CoAAGr1KgAAanIpAABqcykAAGp0KQAAanUpAABqeCkAAGp5KQAAav4sAABq/ywAAGp8KQAAan0pAABqfikAAGp/KQAAaogpAABqiSkAAGqKKQAAaospAABqjCkAAGqNKQAAao4pAABqjykAAGqUKQAAapUpAABqlikAAGqXKQAAapgpAABqmSkAAGqcKQAAap0pAABqCi4AAGoLLgAAaqApAABqoSkAAGqMLAAAao0sAABqrCkAAGqtKQAAai0lAABqLiUAAGq4KQAAarkpAABqvikAAGq/KQAAasApAABqwSkAAGrCKQAAasMpAABqxikAAGrHKQAAavYoAABq9ygAAGrKKQAAasspAABqzCkAAGrNKQAAas4pAABqzykAAGrQKQAAatEpAABqBCwAAGoFLAAAatgpAABq2SkAAGrcKQAAat0pAABq3ikAAGrfKQAAauApAABq4SkAAGrkKQAAauUpAABq6ikAAGrrKQAAauwpAABq7SkAAGr0KQAAavUpAABqcCwAAGpxLAAAavgpAABq+SkAAGr6KQAAavspAABqACoAAGoBKgAAagIqAABqAyoAAGokLAAAaiUsAABqBioAAGoHKgAAagwqAABqDSoAAGoSKgAAahMqAABqFioAAGoXKgAAahgqAABqGSoAAGpiJgAAamMmAABqVCcAAGpVJwAAaiosAABqKywAAGokKgAAaiUqAABqKCoAAGopKgAAagYmAABqByYAAGoyKgAAajMqAABqLiwAAGovLAAAajwqAABqPSoAAGoAKAAAagEoAABqbCsAAGptKwAAakYoAABqRygAAGpQKgAAalEqAABqVCoAAGpVKgAAaoAoAABqgSgAAGoyLAAAajMsAABqXioAAGpfKgAAaqooAABqqygAAGo0LAAAajUsAABqaCoAAGppKgAAamoqAABqayoAAGpsKgAAam0qAABqbioAAGpvKgAAai4pAABqLykAAGp+KgAAan8qAABqUikAAGpTKQAAaoIqAABqgyoAAGq6KQAAarspAABqiCoAAGqJKgAAao4qAABqjyoAAGqSKgAAapMqAABqlioAAGqXKgAAanInAABqcycAAGp0KgAAanUqAABqpCoAAGqlKgAAaqAsAABqoSwAAGqoKgAAaqkqAABqqioAAGqrKgAAaq4qAABqryoAAGoAKwAAagErAABqtCoAAGq1KgAAargqAABquSoAAGogKwAAaiErAABqvCoAAGq9KgAAajYrAABqNysAAGrEKgAAasUqAABqxioAAGrHKgAAasoqAABqyyoAAGrOKgAAas8qAABq0CoAAGrRKgAAatIqAABq0yoAAGrUKgAAatUqAABqSiwAAGpLLAAAatoqAABq2yoAAGrEKwAAasUrAABq4CoAAGrhKgAAauoqAABq6yoAAGrsKgAAau0qAABq8ioAAGrzKgAAavgqAABq+SoAAGpiLAAAamMsAABq6iYAAGrrJgAAagQrAABqBSsAAGoGKwAAagcrAABqUiwAAGpTLAAAag4rAABqDysAAGoQKwAAahErAABqFisAAGoXKwAAahorAABqGysAAGocKwAAah0rAABqHisAAGofKwAAaiIrAABqIysAAGomKwAAaicrAABqKisAAGorKwAAaiwrAABqLSsAAGouKwAAai8rAABqMCsAAGoxKwAAajgrAABqOSsAAGr+LQAAav8tAABqPisAAGo/KwAAalQoAABqVSgAAGqlJQAAaqYlAABqSisAAGpLKwAAak4rAABqTysAAGpSKwAAalMrAABqVCsAAGpVKwAAalorAABqWysAAGpcLAAAal0sAABqXisAAGpfKwAAal4sAABqXywAAGpSLgAAalMuAABqZisAAGpnKwAAamgrAABqaSsAAGr4JgAAavkmAABqeCsAAGp5KwAAaiwuAABqLS4AAGp8KwAAan0rAABqgCsAAGqBKwAAaoIrAABqgysAAGqKKwAAaosrAABqjCsAAGqNKwAAapImAABqkyYAAGqQKwAAapErAABqlCsAAGqVKwAAapYrAABqlysAAGqeKwAAap8rAABqqisAAGqrKwAAaqwrAABqrSsAAGq0KwAAarUrAABquCsAAGq5KwAAaoQqAABqhSoAAGrCKwAAasMrAABqdiwAAGp3LAAAatInAABq0ycAAGrIKwAAaskrAABqyisAAGrLKwAAatArAABq0SsAAGqSKQAAapMpAABqYigAAGpjKAAAat4rAABq3ysAAGroKwAAaukrAABq9ioAAGr3KgAAau4rAABq7ysAAGr0KwAAavUrAABq+CsAAGr5KwAAavorAABq+ysAAGr+KwAAav8rAABqCiwAAGoLLAAAaiYoAABqJygAAGqGLQAAaoctAABqECwAAGoRLAAAahosAABqGywAAGocLAAAah0sAABqHiwAAGofLAAAaiIsAABqIywAAGoEKgAAagUqAABq6CgAAGrpKAAAanArAABqcSsAAGo4LAAAajksAABqOiwAAGo7LAAAakAsAABqQSwAAGpELAAAakUsAABq0isAAGrTKwAAakgsAABqSSwAAGrYKgAAatkqAABqTiwAAGpPLAAAan4sAABqfywAAGoKKwAAagsrAABqQisAAGpDKwAAamQsAABqZSwAAGpoLAAAamksAABqbCwAAGptLAAAam4sAABqbywAAGqwKwAAarErAABqdCwAAGp1LAAAanosAABqeywAAGqALAAAaoEsAABqgiwAAGqDLAAAaoosAABqiywAAGqOLAAAao8sAABqkCwAAGqRLAAAahAqAABqESoAAGqSLAAAapMsAABqmCwAAGqZLAAAapwsAABqnSwAAGqiLAAAaqMsAABqpiwAAGqnLAAAaqosAABqqywAAGpwKQAAanEpAABqtiwAAGq3LAAAargsAABquSwAAGq6LAAAarssAABqwCwAAGrBLAAAasIsAABqwywAAGrGLQAAasctAABqziwAAGrPLAAAatIsAABq0ywAAGrULAAAatUsAABqxCkAAGrFKQAAatgsAABq2SwAAGraLAAAatssAABq3iwAAGrfLAAAauYsAABq5ywAAGorJQAAaiwlAABq8iwAAGrzLAAAavYsAABq9ywAAGr4LAAAavksAABqligAAGqXKAAAagItAABqAy0AAGrLJQAAaswlAABqDS0AAGoOLQAAahEtAABqEi0AAGoTLQAAahQtAABqFS0AAGoWLQAAahstAABqHC0AAGojLQAAaiQtAABqFiwAAGoXLAAAai0tAABqLi0AAGpCLAAAakMsAABqMy0AAGo0LQAAajctAABqOC0AAGo5LQAAajotAABqOy0AAGo8LQAAaiApAABqISkAAGpCLQAAakMtAABqRC0AAGpFLQAAakYtAABqRy0AAGoYKwAAahkrAABqTC0AAGpNLQAAalAtAABqUS0AAGqsKgAAaq0qAABqJC4AAGolLgAAagIpAABqAykAAGpeLQAAal8tAABqVigAAGpXKAAAanItAABqcy0AAGp0LQAAanUtAABqdi0AAGp3LQAAangtAABqeS0AAGp6LQAAanstAABqnigAAGqfKAAAaoItAABqgy0AAGqELQAAaoUtAABqii0AAGqLLQAAagwpAABqDSkAAGqSLQAAapMtAABqli0AAGqXLQAAapgtAABqmS0AAGqaLQAAapstAABqfCwAAGp9LAAAap4tAABqny0AAGpEKQAAakUpAABq0CcAAGrRJwAAaqYtAABqpy0AAGp6KQAAanspAABqgikAAGqDKQAAarItAABqsy0AAGq0LQAAarUtAABqti0AAGq3LQAAanwmAABqfSYAAGrELQAAasUtAABqyi0AAGrLLQAAaiYqAABqJyoAAGrILQAAasktAABq3C0AAGrdLQAAauItAABq4y0AAGrkLQAAauUtAABq5i0AAGrnLQAAavAtAABq8S0AAGp+LQAAan8tAABq9C0AAGr1LQAAavYtAABq9y0AAGrWLAAAatcsAABqriwAAGqvLAAAaqItAABqoy0AAGoELgAAagUuAABqEC4AAGoRLgAAahIuAABqEy4AAGoULgAAahUuAABqFi4AAGoXLgAAavIrAABq8ysAAGocLgAAah0uAABqIC4AAGohLgAAaiYuAABqJy4AAGpGLgAAakcuAABqbC0AAGptLQAAai4uAABqLy4AAGo0LgAAajUuAABqOC4AAGo5LgAAajwuAABqPS4AAGpALgAAakEuAABqQi4AAGpDLgAAakQuAABqRS4AAGoeKAAAah8oAABqTC4AAGpNLgAAah0tAABqHi0AAGpQLgAAalEuAABqwSUAAGrCJQAAalQuAABqVS4AAGpYLgAAalkuAABqWi4AAGpbLgAAal4uAABqXy4AAGpiLgAAamMuAABqZC4AAGplLgAAamguAABqaS4AAGpyLgAAanMuAABqeC4AAGp5LgAAan4uAABqfy4AAGonJQAAaiglAABqdyUAAGp4JQAAajElAABqMiUAAGo1JQAAajYlAABqPSUAAGo+JQAAatwsAABq3SwAAGpJJQAAakolAABqSyUAAGpMJQAAak8lAABqUCUAAGpRJQAAalIlAABqUyUAAGpUJQAAalUlAABqViUAAGpdJQAAal4lAABqYSUAAGpiJQAAavosAABq+ywAAGppJQAAamolAABqayUAAGpsJQAAajgnAABqOScAAGpxJQAAanIlAABqcyUAAGp0JQAAanUlAABqdiUAAGqBJQAAaoIlAABqhSUAAGqGJQAAaoclAABqiCUAAGqPJQAAapAlAABqlSUAAGqWJQAAagYtAABqBy0AAGqZJQAAapolAABqmyUAAGqcJQAAaiIoAABqIygAAGrWKQAAatcpAABqpyUAAGqoJQAAaqslAABqrCUAAGqxJQAAarIlAABqvSUAAGq+JQAAapAoAABqkSgAAGrFJQAAasYlAABqzSUAAGrOJQAAas8lAABq0CUAAGrmJQAAauclAABq7CUAAGrtJQAAavIlAABq8yUAAGr0JQAAavUlAABq9iUAAGr3JQAAasQmAABqxSYAAGrmKQAAaucpAABq/iUAAGr/JQAAagImAABqAyYAAGoIJgAAagkmAABqDCYAAGoNJgAAag4mAABqDyYAAGoUJgAAahUmAABqGiYAAGobJgAAaporAABqmysAAGpkJgAAamUmAABqJCYAAGolJgAAaiYmAABqJyYAAGooJgAAaikmAABq8ikAAGrzKQAAai4mAABqLyYAAGoyJgAAajMmAABqcCoAAGpxKgAAajomAABqOyYAAGo8JgAAaj0mAABqQCYAAGpBJgAAasAtAABqwS0AAGpGJgAAakcmAABqSCYAAGpJJgAAakwmAABqTSYAAGr2KQAAavcpAABqUiYAAGpTJgAAalQmAABqVSYAAGpWJgAAalcmAABqKS0AAGoqLQAAaognAABqiScAAGoOKgAAag8qAABqaiYAAGprJgAAamwmAABqbSYAAGqMLQAAao0tAABqsCwAAGqxLAAAanYmAABqdyYAAGrULQAAatUtAABqKy0AAGosLQAAaowmAABqjSYAAGraJgAAatsmAABqai4AAGprLgAAapYmAABqlyYAAGrMKwAAas0rAABqniYAAGqfJgAAaqImAABqoyYAAGqTJQAAapQlAABqrCYAAGqtJgAAarImAABqsyYAAGq0JgAAarUmAABquiYAAGq7JgAAarwmAABqvSYAAGrwJQAAavElAABqxiYAAGrHJgAAasgmAABqySYAAGrMJgAAas0mAABq0iYAAGrTJgAAatQmAABq1SYAAGrYJgAAatkmAABq3CYAAGrdJgAAauAmAABq4SYAAGrkJgAAauUmAABq7iYAAGrvJgAAauwmAABq7SYAAGryJgAAavMmAABq9CYAAGr1JgAAavYmAABq9yYAAGo+LQAAaj8tAABq/iYAAGr/JgAAagAnAABqAScAAGoCJwAAagMnAABqBCcAAGoFJwAAamonAABqaycAAGoKJwAAagsnAABqDCcAAGoNJwAAahQnAABqFScAAGrwKwAAavErAABqGCcAAGoZJwAAaiAnAABqIScAAGooJwAAaiknAABqLCcAAGotJwAAai4nAABqLycAAGo0JwAAajUnAABqCi0AAGoLLQAAajwnAABqPScAAGo+JwAAaj8nAABqQCcAAGpBJwAAakQnAABqRScAAGp6KgAAansqAABqSCcAAGpJJwAAakonAABqSycAAGpMJwAAak0nAABqHCoAAGodKgAAak4tAABqTy0AAGoeKgAAah8qAABqWCcAAGpZJwAAalonAABqWycAAGpeJwAAal8nAABqZCcAAGplJwAAaugtAABq6S0AAGp4JwAAanknAABqNicAAGo3JwAAanwnAABqfScAAGqAJwAAaoEnAABqhCcAAGqFJwAAaoYnAABqhycAAGqMKgAAao0qAABqKioAAGorKgAAapYnAABqlycAAGqYJwAAapknAABq0CYAAGrRJgAAap4nAABqnycAAGqgJwAAaqEnAABqoicAAGqjJwAAajQrAABqNSsAAGquJwAAaq8nAABqsicAAGqzJwAAarYnAABqtycAAGq4JwAAarknAABquicAAGq7JwAAasQnAABqxScAAGrIJwAAasknAABqzCcAAGrNJwAAas4nAABqzycAAGrWJwAAatcnAABq2CcAAGrZJwAAatonAABq2ycAAGriJwAAauMnAABqGC4AAGoZLgAAavQnAABq9ScAAGpQLAAAalEsAABqPioAAGo/KgAAagooAABqCygAAGoMKAAAag0oAABqECgAAGoRKAAAalwtAABqXS0AAGqCKAAAaoMoAABqGCgAAGoZKAAAapAqAABqkSoAAGogKAAAaiEoAABqJCgAAGolKAAAaiwoAABqLSgAAGpGKgAAakcqAABqMigAAGozKAAAajQoAABqNSgAAGo4KAAAajkoAABqNiwAAGo3LAAAal8lAABqYCUAAGpvJQAAanAlAABqSCgAAGpJKAAAakooAABqSygAAGpuLQAAam8tAABqTigAAGpPKAAAalAoAABqUSgAAGpwLQAAanEtAABqLioAAGovKgAAal4oAABqXygAAGpkKAAAamUoAABqaCgAAGppKAAAam4oAABqbygAAGpyKAAAanMoAABqiiYAAGqLJgAAaugmAABq6SYAAGpYKgAAalkqAABqjCgAAGqNKAAAao4oAABqjygAAGqMJwAAao0nAABqmCgAAGqZKAAAanwtAABqfS0AAGqiKAAAaqMoAABqpCgAAGqlKAAAagYsAABqBywAAGpiKgAAamMqAABqsCgAAGqxKAAAarklAABquiUAAGq0KAAAarUoAABqvigAAGq/KAAAarooAABquygAAGrCKAAAasMoAABqzCgAAGrNKAAAaqgtAABqqS0AAGrSKAAAatMoAABq1CgAAGrVKAAAatgoAABq2SgAAGrcKAAAat0oAABq4CgAAGrhKAAAauIoAABq4ygAAGrmKAAAaucoAABq7CgAAGrtKAAAavIoAABq8ygAAGr8KAAAav0oAABq/igAAGr/KAAAagApAABqASkAAGqLJQAAaowlAABqBikAAGoHKQAAajYuAABqNy4AAGoIKQAAagkpAABqkC0AAGqRLQAAag4pAABqDykAAGoSKQAAahMpAABqFCkAAGoVKQAAapQtAABqlS0AAGoYKQAAahkpAABqIikAAGojKQAAaiQpAABqJSkAAGosKQAAai0pAABq5CgAAGrlKAAAajgpAABqOSkAAGo6KQAAajspAABqQikAAGpDKQAAakYpAABqRykAAGpIKQAAakkpAABqGioAAGobKgAAak4pAABqTykAAGpQKQAAalEpAABqWikAAGpbKQAAalwpAABqXSkAAGqaLAAAapssAABqbCkAAGptKQAAarwnAABqvScAAGrgLAAAauEsAABqdikAAGp3KQAAaq4tAABqry0AAGqwLQAAarEtAABqhCkAAGqFKQAAaoYpAABqhykAAGqkLQAAaqUtAABqkCkAAGqRKQAAaigoAABqKSgAAGqkKQAAaqUpAABqpikAAGqnKQAAaqgpAABqqSkAAGq8LQAAar0tAABqtCkAAGq1KQAAarwpAABqvSkAAGpXJQAAalglAABqyCkAAGrJKQAAatQpAABq1SkAAGqhJQAAaqIlAABqqSUAAGqqJQAAatopAABq2ykAAGrHJQAAasglAABq4ikAAGrjKQAAaoYqAABqhyoAAGr8JQAAav0lAABq6CkAAGrpKQAAau4pAABq7ykAAGrwKQAAavEpAABqLCYAAGotJgAAalAmAABqUSYAAGr8KQAAav0pAABq/ikAAGr/KQAAaggqAABqCSoAAGoKKgAAagsqAABq8CYAAGrxJgAAahQqAABqFSoAAGruJwAAau8nAABqzi0AAGrPLQAAaponAABqmycAAGowKgAAajEqAABqOCoAAGo5KgAAajoqAABqOyoAAGpaLQAAalstAABqQCoAAGpBKgAAaoApAABqgSkAAGpEKgAAakUqAABqMCgAAGoxKAAAakgqAABqSSoAAGpKKgAAaksqAABqTCoAAGpNKgAAak4qAABqTyoAAGpSKgAAalMqAABqVioAAGpXKgAAaiwsAABqLSwAAGrCJwAAasMnAABqXCoAAGpdKgAAamAqAABqYSoAAGpkKgAAamUqAABqSi4AAGpLLgAAanIqAABqcyoAAGqeKgAAap8qAABqdioAAGp3KgAAangqAABqeSoAAGp8KgAAan0qAABqgCoAAGqBKgAAauIrAABq4ysAAGqKKgAAaosqAABqlCoAAGqVKgAAapgqAABqmSoAAGrgLQAAauEtAABqnCoAAGqdKgAAaqAqAABqoSoAAGqiKgAAaqMqAABq4ioAAGrjKgAAarAqAABqsSoAAGqyKgAAarMqAABqtioAAGq3KgAAaroqAABquyoAAGooKwAAaikrAABqvioAAGq/KgAAasAqAABqwSoAAGrCKgAAasMqAABqyCoAAGrJKgAAaswqAABqzSoAAGrWJQAAatclAABq3CoAAGrdKgAAat4qAABq3yoAAGrkKgAAauUqAABq5ioAAGrnKgAAaugqAABq6SoAAGruKgAAau8qAABq+ioAAGr7KgAAavwqAABq/SoAAGoIKwAAagkrAABq8i0AAGrzLQAAagwrAABqDSsAAGoSKwAAahMrAABqFCsAAGoVKwAAamUlAABqZiUAAGokKwAAaiUrAABqaC0AAGppLQAAajIrAABqMysAAGo6KwAAajsrAABqPCsAAGo9KwAAakArAABqQSsAAGpmKgAAamcqAABqRCsAAGpFKwAAakgrAABqSSsAAGpQKwAAalErAABqVisAAGpXKwAAdShqWCsAAGpZKwAAamArAABqYSsAAGpkKwAAamUrAABqtyUAAGq4JQAAamorAABqaysAAGquJgAAaq8mAABqbisAAGpvKwAAanYrAABqdysAAGoWJgAAahcmAABqeisAAGp7KwAAan4rAABqfysAAGqGKwAAaocrAABqeiYAAGp7JgAAao4rAABqjysAAGqSKwAAapMrAABqqCYAAGqpJgAAarAmAABqsSYAAGqYKwAAapkrAABqnCsAAGqdKwAAaqArAABqoSsAAGqiKwAAaqMrAABqCC4AAGoJLgAAaqYrAABqpysAAGqoKwAAaqkrAABqIQQAAGoiBAAAarYrAABqtysAAGpMKwAAak0rAABqvCsAAGq9KwAAaqYqAABqpyoAAGrAKwAAasErAABqjicAAGqPJwAAav4nAABq/ycAAGrUKwAAatUrAABq2CsAAGrZKwAAatorAABq2ysAAGrcKwAAat0rAABq6isAAGrrKwAAaqAoAABqoSgAAGr2KwAAavcrAABq/CsAAGr9KwAAagAsAABqASwAAGoCLAAAagMsAABqVikAAGpXKQAAaggsAABqCSwAAGoMLAAAag0sAABqDiwAAGoPLAAAahIsAABqEywAAGoULAAAahUsAABqnikAAGqfKQAAahgsAABqGSwAAGq2KQAAarcpAABqdCsAAGp1KwAAatIpAABq0ykAAGogLAAAaiEsAABqJiwAAGonLAAAaigsAABqKSwAAGogKgAAaiEqAABqoikAAGqjKQAAajAsAABqMSwAAGr+KgAAav8qAABqPCwAAGo9LAAAakYsAABqRywAAGqyKwAAarMrAABqTCwAAGpNLAAAalYsAABqVywAAGpuLgAAam8uAABqWCwAAGpZLAAAalosAABqWywAAGpcKwAAal0rAABqxisAAGrHKwAAamAsAABqYSwAAGpmLAAAamcsAABqaiwAAGprLAAAagIrAABqAysAAGp4LAAAanksAABq4CsAAGrhKwAAapgmAABqmSYAAGqELAAAaoUsAABqiCwAAGqJLAAAanIsAABqcywAAGqULAAAapUsAABqliwAAGqXLAAAaqQsAABqpSwAAGqeLAAAap8sAABqqCwAAGqpLAAAaqwsAABqrSwAAGpYJgAAalkmAABqsiwAAGqzLAAAarQsAABqtSwAAGq8LAAAar0sAABqviwAAGq/LAAAaoAtAABqgS0AAGrILAAAasksAABqyiwAAGrLLAAAaswsAABqzSwAAGr4JQAAavklAABqMC4AAGoxLgAAaugsAABq6SwAAGrqLAAAaussAABq7CwAAGrtLAAAakUlAABqRiUAAGpbJQAAalwlAABq3icAAGrfJwAAavwsAABq/SwAAGoALQAAagEtAABqiCsAAGqJKwAAapclAABqmCUAAGoILQAAagktAABqDy0AAGoQLQAAahctAABqGC0AAGriJQAAauMlAABqqikAAGqrKQAAah8tAABqIC0AAGohLQAAaiItAABqOCYAAGo5JgAAaiUtAABqJi0AAGonLQAAaigtAABqeCYAAGp5JgAAai8tAABqMC0AAGoxLQAAajItAABqNS0AAGo2LQAAaiMEAABqPS0AAGpALQAAakEtAABqSC0AAGpJLQAAasQsAABqxSwAAGqGLAAAaocsAABqUi0AAGpTLQAAalQtAABqVS0AAGpgLQAAamEtAABqZC0AAGplLQAAamYtAABqZy0AAGpqLQAAamstAABqGCYAAGoZJgAAamwoAABqbSgAAGqGKAAAaocoAABqJAQAAGoMLQAAaqwoAABqrSgAAGoIKAAAagkoAABqiC0AAGqJLQAAanYnAABqdycAAGqOLQAAao8tAABqFikAAGoXKQAAalYtAABqVy0AAGqcLQAAap0tAABqoC0AAGqhLQAAamItAABqYy0AAGoQKQAAahEpAABqqi0AAGqrLQAAaqwtAABqrS0AAGq4LQAAarktAABq1CcAAGrVJwAAar4tAABqvy0AAGrCLQAAasMtAABqYisAAGpjKwAAaswtAABqzS0AAGpYLQAAalktAABqZikAAGpnKQAAatAtAABq0S0AAGrSLQAAatMtAABq1i0AAGrXLQAAatgtAABq2S0AAGraLQAAatstAABq3i0AAGrfLQAAapoqAABqmyoAAGrqLQAAaustAABq1ioAAGrXKgAAau4tAABq7y0AAGr6LQAAavstAABq/C0AAGr9LQAAamopAABqaykAAGoCLgAAagMuAABqBi4AAGoHLgAAaqQrAABqpSsAAGoMLgAAag0uAABqDi4AAGoPLgAAauYrAABq5ysAAGoaLgAAahsuAABqHi4AAGofLgAAakYrAABqRysAAGoiLgAAaiMuAABqKi4AAGorLgAAajIuAABqMy4AAGo2KgAAajcqAABqOi4AAGo7LgAAasYsAABqxywAAGo+LgAAaj8uAABq+C0AAGr5LQAAapQmAABqlSYAAGpILgAAakkuAABqTi4AAGpPLgAAaiYnAABqJycAAGpWLgAAalcuAABqZi4AAGpnLgAAamwuAABqbS4AAGrsLQAAau0tAABqcC4AAGpxLgAAanQuAABqdS4AAGp2LgAAancuAABqei4AAGp7LgAAanwuAABqfS4AAGqALgAAaoEuAABqgi4AAGqDLgAAdWoIJQAAfXJcVwAAKGoKJQAAagslAABqDCUAAGoNJQAAag4lAABqDyUAAGoQJQAAahElAABqEiUAAGoTJQAAahQlAABqFSUAAGoWJQAAahclAABqHCUAAGodJQAAah4lAABqHyUAAGoYJQAAahklAABqGiUAAGobJQAAaiAlAABqISUAAGoiJQAAaiMlAABqJCUAAGolJQAAdWomBAAAfXJdVwAAKGrnCQAAaugJAABq6QkAAGrqCQAAausJAABq7AkAAGrtCQAAau4JAABq7wkAAGrwCQAAavEJAABq8gkAAGrzCQAAavQJAABqFxQAAGoYFAAAavcJAABq+AkAAGr5CQAAavoJAABq+wkAAGr8CQAAav0JAABq/gkAAGr/CQAAagAKAABqAQoAAGoCCgAAagMKAABqBAoAAGoFCgAAagYKAABqBwoAAGoICgAAagkKAABqCgoAAGoLCgAAagwKAABqDQoAAGoOCgAAag8KAABqEAoAAGoRCgAAahIKAABqEwoAAGoUCgAAah8UAABqIBQAAGoXCgAAahgKAABqGQoAAGoaCgAAahsKAABqHAoAAGodCgAAah4KAABqHwoAAGogCgAAaocXAABqiBcAAGojCgAAaiQKAABqJQoAAGomCgAAaicKAABqKAoAAGopCgAAaioKAABqKwoAAGosCgAAai0KAABqLgoAAGovCgAAajAKAABqMQoAAGoyCgAAajMKAABqNAoAAGo1CgAAajYKAABqNwoAAGo4CgAAajkKAABqOgoAAGo7CgAAajwKAABqPQoAAGo+CgAAaj8KAABqQAoAAGpBCgAAakIKAABqQwoAAGpECgAAakUKAABqRgoAAGpHCgAAakgKAABqSQoAAGpKCgAAai0UAABqLhQAAGpNCgAAak4KAABqTwoAAGpQCgAAalEKAABqUgoAAGqLGgAAaowaAABqUwoAAGpUCgAAalUKAABqVgoAAGpXCgAAalgKAABqWQoAAGpaCgAAalsKAABqXAoAAGpdCgAAal4KAABqXwoAAGpgCgAAamEKAABqYgoAAGpjCgAAamQKAABqZQoAAGpmCgAAamcKAABqaAoAAGppCgAAamoKAABqXQ0AAGpeDQAAam0KAABqbgoAAGrRGAAAatIYAABqbwoAAGpwCgAAanEKAABqcgoAAGqdHQAAap4dAABqcwoAAGp0CgAAanUKAABqdgoAAGp3CgAAangKAABqeQoAAGp6CgAAansKAABqfAoAAGp9CgAAan4KAABqfwoAAGqACgAAaoEKAABqggoAAGqDCgAAaoQKAABqMgQAAGozBAAAaoUKAABqhgoAAGrvGgAAavAaAABqiQoAAGqKCgAAavEaAABq8hoAAGqXFwAAapgXAABqjwoAAGqQCgAAapEKAABqkgoAAGqTCgAAapQKAABqlQoAAGqWCgAAapcKAABqmAoAAGpbHAAAalwcAABqmQoAAGqaCgAAapsKAABqnAoAAGqdCgAAap4KAABqnwoAAGqgCgAAavccAABq+BwAAGqjCgAAaqQKAABqpQoAAGqmCgAAaqcKAABqqAoAAGqpCgAAaqoKAABqkRkAAGqSGQAAaqsKAABqrAoAAGqtCgAAaq4KAABqrwoAAGqwCgAAarEKAABqsgoAAGqVDQAAapYNAABqtQoAAGq2CgAAarcKAABquAoAAGq5CgAAaroKAABquwoAAGq8CgAAar0KAABqvgoAAGq/CgAAasAKAABqwQoAAGrCCgAAasMKAABqxAoAAGrFCgAAasYKAABqxwoAAGrICgAAaskKAABqygoAAGrLCgAAaswKAABqzQoAAGrOCgAAas8KAABq0AoAAGrRCgAAatIKAABquQ8AAGq6DwAAaqcXAABqqBcAAGrVCgAAatYKAABq5xAAAGroEAAAatcKAABq2AoAAGrZCgAAatoKAABq2woAAGrcCgAAat0KAABq3goAAGrfCgAAauAKAABq4QoAAGriCgAAauMKAABq5AoAAGrlCgAAauYKAABq5woAAGroCgAAaukKAABq6goAAGrrCgAAauwKAABqkxAAAGqUEAAAau8KAABq8AoAAGrxCgAAavIKAABq8woAAGr0CgAAavcKAABq+AoAAGr5CgAAavoKAABq+woAAGr8CgAAav0KAABq/goAAGr/CgAAagALAABqAQsAAGoCCwAAagMLAABqBAsAAGoFCwAAagYLAABqBwsAAGoICwAAaqcNAABqqA0AAGoLCwAAagwLAABqDQsAAGoOCwAAag8LAABqEAsAAGpbFAAAalwUAABqEwsAAGoUCwAAahULAABqFgsAAGoXCwAAahgLAABqGQsAAGoaCwAAahsLAABqHAsAAGpRBQAAalIFAABqsxcAAGq0FwAAaiMLAABqJAsAAGolCwAAaiYLAABqJwsAAGooCwAAaikLAABqKgsAAGorCwAAaiwLAABqLQsAAGouCwAAai8LAABqMAsAAGoxCwAAajILAABqMwsAAGo0CwAAajULAABqNgsAAGo3CwAAajgLAABqOQsAAGo6CwAAajsLAABqPAsAAGo9CwAAaj4LAABqPwsAAGpACwAAakELAABqQgsAAGpDCwAAakQLAABqRQsAAGpGCwAAakcLAABqSAsAAGpJCwAAakoLAABqSwsAAGpMCwAAak0LAABqTgsAAGpPCwAAalALAABqUQsAAGpSCwAAalMLAABqVAsAAGpVCwAAalYLAABqVwsAAGpYCwAAalkLAABqWgsAAGpbCwAAalwLAABqXQsAAGpeCwAAal8LAABqYAsAAGphCwAAamILAABqYwsAAGpkCwAAamULAABqZgsAAGpnCwAAamgLAABqaQsAAGpqCwAAamsLAABqbAsAAGptCwAAam4LAABqbwsAAGpwCwAAanELAABqcgsAAGpzCwAAanQLAABqdQsAAGp2CwAAancLAABqeAsAAGp5CwAAanoLAABqewsAAGp8CwAAan0LAABqfgsAAGp/CwAAaoALAABqgQsAAGqCCwAAaoMLAABqhAsAAGqFCwAAaoYLAABqbRMAAGpuEwAAaokLAABqigsAAGqLCwAAaowLAABqjQsAAGqOCwAAahsbAABqHBsAAGqRCwAAapILAABqkwsAAGqUCwAAapULAABqlgsAAGqXCwAAapgLAABqHRsAAGoeGwAAapsLAABqnAsAAGqdCwAAap4LAABqnwsAAGqgCwAAaqELAABqogsAAGrBFwAAasIXAABqpQsAAGqmCwAAaqcLAABqqAsAAGqpCwAAaqoLAABqIRsAAGoiGwAAaq0LAABqrgsAAGqvCwAAarALAABqsQsAAGqyCwAAarMLAABqtAsAAGq1CwAAarYLAABqtwsAAGq4CwAAarkLAABqugsAAGq7CwAAarwLAABqvQsAAGq+CwAAarcNAABquA0AAGrBCwAAasILAABqZRkAAGpmGQAAasMLAABqxAsAAGrFCwAAasYLAABqxwsAAGrICwAAaisbAABqLBsAAGrLCwAAaswLAABqzQsAAGrOCwAAas8LAABq0AsAAGrRCwAAatILAABq0wsAAGrUCwAAatULAABq1gsAAGofEQAAaiARAABq2QsAAGraCwAAatsLAABq3AsAAGrdCwAAat4LAABq3wsAAGrgCwAAauELAABq4gsAAGrjCwAAauQLAABq5QsAAGrmCwAAaucLAABq6AsAAGrpCwAAauoLAABq6wsAAGrsCwAAau8LAABq8AsAAGrxCwAAavILAABq/w8AAGoAEAAAavMLAABq9AsAAGr1CwAAavYLAABq9wsAAGr4CwAAavkLAABq+gsAAGr7CwAAavwLAABq/QsAAGr+CwAAav8LAABqAAwAAGobEQAAahwRAABqAwwAAGoEDAAAagUMAABqBgwAAGoHDAAAaggMAABqCQwAAGoKDAAAagsMAABqDAwAAGoNDAAAag4MAABqDwwAAGoQDAAAahEMAABqEgwAAGoTDAAAahQMAABqFQwAAGoWDAAAahcMAABqGAwAAGoZDAAAahoMAABqGwwAAGocDAAAah0MAABqHgwAAGofDAAAaiAMAABqIQwAAGoiDAAAaiMMAABqJAwAAGolDAAAaiYMAABqJwwAAGooDAAAaikMAABqKgwAAGorDAAAaiwMAABqLQwAAGouDAAAai8MAABqMAwAAGoxDAAAajIMAABqMwwAAGo0DAAAajUMAABqNgwAAGo3DAAAajgMAABqOQwAAGo6DAAAav0OAABq/g4AAGo9DAAAaj4MAABqPwwAAGpADAAAakMMAABqRAwAAGo2BAAAajcEAABqRQwAAGpGDAAAakcMAABqSAwAAGpJDAAAakoMAABqSwwAAGpMDAAAak0MAABqTgwAAGpPDAAAalAMAABqUQwAAGpSDAAAalMMAABqVAwAAGpXDAAAalgMAABqWQwAAGpaDAAAalsMAABqXAwAAGpdDAAAal4MAABqXwwAAGpgDAAAamEMAABqYgwAAGpjDAAAamQMAABqQxsAAGpEGwAAamcMAABqaAwAAGppDAAAamoMAABqawwAAGpsDAAAajUFAABqNgUAAGptDAAAam4MAABqbwwAAGpwDAAAanEMAABqcgwAAGpzDAAAanQMAABqdwwAAGp4DAAAankMAABqegwAAGp7DAAAanwMAABqfwwAAGqADAAAaoEMAABqggwAAGqDDAAAaoQMAABqhQwAAGqGDAAAaocMAABqiAwAAGqJDAAAaooMAABqiwwAAGqMDAAAao0MAABqjgwAAGqPDAAAapAMAABqkQwAAGqSDAAAapMMAABqlAwAAGqZDAAAapoMAABqmwwAAGqcDAAAap0MAABqngwAAGqfDAAAaqAMAABqoQwAAGqiDAAAaqMMAABqpAwAAGonHQAAaigdAABqEwUAAGoUBQAAaqcMAABqqAwAAGrfHAAAauAcAABqqwwAAGqsDAAAaq0MAABqrgwAAGqvDAAAarAMAABqsQwAAGqyDAAAaocUAABqiBQAAGq3DAAAargMAABquQwAAGq6DAAAarsMAABqvAwAAGq9DAAAar4MAABqiRQAAGqKFAAAasEMAABqwgwAAGrDDAAAasQMAABqxQwAAGrGDAAAat0NAABq3g0AAGrJDAAAasoMAABq3RQAAGreFAAAavUXAABq9hcAAGrNDAAAas4MAABqzwwAAGrQDAAAatEMAABq0gwAAGrTDAAAatQMAABq1QwAAGrWDAAAamUbAABqZhsAAGrXDAAAatgMAABq2QwAAGraDAAAatsMAABq3AwAAGrdDAAAat4MAABqXRsAAGpeGwAAaosUAABqjBQAAGpfGwAAamAbAABq4QwAAGriDAAAauMMAABq5AwAAGrbGgAAatwaAABq5QwAAGrmDAAAaucMAABq6AwAAGrpDAAAauoMAABq6wwAAGrsDAAAav0XAABq/hcAAGrxDAAAavIMAABq5w0AAGroDQAAavUMAABq9gwAAGphGwAAamIbAABq9wwAAGr4DAAAavkMAABq+gwAAGr7DAAAavwMAABq/QwAAGr+DAAAav8MAABqAA0AAGoBDQAAagINAABqAw0AAGoEDQAAagUNAABqBg0AAGoHDQAAaggNAABqCQ0AAGoKDQAAajkRAABqOhEAAGoNDQAAag4NAABqDw0AAGoQDQAAahENAABqEg0AAGoTDQAAahQNAABqFQ0AAGoWDQAAagccAABqCBwAAGoZDQAAahoNAABqGw0AAGocDQAAah0NAABqHg0AAGofDQAAaiANAABqIQ0AAGoiDQAAaiMNAABqJA0AAGrtDQAAau4NAABqJw0AAGooDQAAakMFAABqRAUAAGr/FwAAagAYAABqKw0AAGosDQAAai0NAABqLg0AAGrxDQAAavINAABqMQ0AAGoyDQAAajMNAABqNA0AAGo1DQAAajYNAABqNw0AAGo4DQAAajkNAABqOg0AAGo7DQAAajwNAABqPQ0AAGo+DQAAaj8NAABqQA0AAGpBDQAAakINAABqQw0AAGpEDQAAamsbAABqbBsAAGpHDQAAakgNAABqSQ0AAGpKDQAAaksNAABqTA0AAGoXBQAAahgFAABqTw0AAGpQDQAAalENAABqUg0AAGpTDQAAalQNAABqVQ0AAGpWDQAAalcNAABqWA0AAGpZDQAAaloNAABqXw0AAGpgDQAAamENAABqYg0AAGpjDQAAamQNAABqZQ0AAGpmDQAAamcNAABqaA0AAGppDQAAamoNAABqaw0AAGpsDQAAam0NAABqbg0AAGpvDQAAanANAABqcQ0AAGpyDQAAanMNAABqdA0AAGp1DQAAanYNAABqdw0AAGp4DQAAankNAABqeg0AAGp7DQAAanwNAABqpRUAAGqmFQAAan0NAABqfg0AAGp/DQAAaoANAABqgw0AAGqEDQAAaoUNAABqhg0AAGqHDQAAaogNAABqiQ0AAGqKDQAAamsKAABqbAoAAGqNDQAAao4NAABqjw0AAGqQDQAAapENAABqkg0AAGqTDQAAapQNAABqswoAAGq0CgAAapcNAABqmA0AAGpPBQAAalAFAABqmw0AAGqcDQAAanUbAABqdhsAAGoVBQAAahYFAABqBw4AAGoIDgAAaqENAABqog0AAGqjDQAAaqQNAABqCQsAAGoKCwAAaqkNAABqqg0AAGo5FwAAajoXAABqqw0AAGqsDQAAaq0NAABqrg0AAGqvDQAAarANAABqsQ0AAGqyDQAAarMNAABqtA0AAGq1DQAAarYNAABqvwsAAGrACwAAaoMVAABqhBUAAGq5DQAAaroNAABquw0AAGq8DQAAar0NAABqvg0AAGq/DQAAasANAABqPgQAAGo/BAAAasENAABqwg0AAGrDDQAAasQNAABqYxEAAGpkEQAAascNAABqyA0AAGrJDQAAasoNAABqyw0AAGrMDQAAas8NAABq0A0AAGrRDQAAatINAABqxxkAAGrIGQAAausdAABq7B0AAGqXDAAAapgMAABq1Q0AAGrWDQAAatcNAABq2A0AAGrbDQAAatwNAABqxwwAAGrIDAAAat8NAABq4A0AAGrhDQAAauINAABq4w0AAGrkDQAAag8FAABqEAUAAGrlDQAAauYNAABq8wwAAGr0DAAAaukNAABq6g0AAGrrDQAAauwNAABqJQ0AAGomDQAAai8NAABqMA0AAGrzDQAAavQNAABq9Q0AAGr2DQAAavcNAABq+A0AAGpNDQAAak4NAABq+w0AAGr8DQAAaoMbAABqhBsAAGr/DQAAagAOAABqMR0AAGoyHQAAagEOAABqAg4AAGoDDgAAagQOAABqhRsAAGqGGwAAagUOAABqBg4AAGqfDQAAaqANAABqCQ4AAGoKDgAAagsOAABqDA4AAGoNDgAAag4OAABq+Q0AAGr6DQAAahEOAABqEg4AAGoTDgAAahQOAABqFQ4AAGoWDgAAahcOAABqGA4AAGoZDgAAahoOAABqHQ4AAGoeDgAAah8OAABqIA4AAGohDgAAaiIOAABqIw4AAGokDgAAagsFAABqDAUAAGolDgAAaiYOAABqJw4AAGooDgAAaikOAABqKg4AAGotDgAAai4OAABqLw4AAGowDgAAajEOAABqMg4AAGozDgAAajQOAABqNQ4AAGo2DgAAajcOAABqOA4AAGo5DgAAajoOAABqixsAAGqMGwAAaj0OAABqPg4AAGo/DgAAakAOAABqQQ4AAGpCDgAAakMOAABqRA4AAGpFDgAAakYOAABqRw4AAGpIDgAAakkOAABqSg4AAGpLDgAAakwOAABqTQ4AAGpODgAAak8OAABqUA4AAGo5BQAAajoFAABqUQ4AAGpSDgAAalMOAABqVA4AAGpVDgAAalYOAABqVw4AAGpYDgAAalkOAABqWg4AAGpbDgAAalwOAABqXQ4AAGpeDgAAal8OAABqYA4AAGphDgAAamIOAABqqQwAAGqqDAAAamUOAABqZg4AAGpnDgAAamgOAABqaQ4AAGpqDgAAamsOAABqbA4AAGptDgAAam4OAABqbw4AAGpwDgAAanEOAABqcg4AAGpzDgAAanQOAABqdQ4AAGp2DgAAancOAABqeA4AAGp5DgAAanoOAABq1RQAAGrWFAAAan0OAABqfg4AAGp/DgAAaoAOAABqgQ4AAGqCDgAAaoMOAABqhA4AAGqFDgAAaoYOAABqhw4AAGqIDgAAaiMFAABqJAUAAGqJDgAAaooOAABqiw4AAGqMDgAAao0OAABqjg4AAGqPDgAAapAOAABqhREAAGqGEQAAapMOAABqlA4AAGqVDgAAapYOAABqlw4AAGqYDgAAapkOAABqmg4AAGqbDgAAapwOAABqnQ4AAGqeDgAAapsbAABqnBsAAGqhDgAAaqIOAABqow4AAGqkDgAAaqUOAABqpg4AAGqnDgAAaqgOAABqqQ4AAGqqDgAAaqsOAABqrA4AAGqtDgAAaq4OAABqrw4AAGqwDgAAarEOAABqsg4AAGqzDgAAarQOAABquxgAAGq8GAAAarUOAABqtg4AAGq3DgAAargOAABquQ4AAGq6DgAAarsOAABqvA4AAGq9DgAAar4OAABqNxsAAGo4GwAAar8OAABqwA4AAGrBDgAAasIOAABqww4AAGrEDgAAascOAABqyA4AAGrJDgAAasoOAABqyw4AAGrMDgAAas0OAABqzg4AAGptEgAAam4SAABqYx0AAGpkHQAAag0FAABqDgUAAGrRDgAAatIOAABq0w4AAGrUDgAAatUOAABq1g4AAGrXDgAAatgOAABq2Q4AAGraDgAAatsOAABq3A4AAGrdDgAAat4OAABq3w4AAGrgDgAAauEOAABq4g4AAGrjDgAAauQOAABq5Q4AAGrmDgAAaukOAABq6g4AAGrrDgAAauwOAABq7Q4AAGruDgAAau8OAABq8A4AAGrxDgAAavIOAABqmQ0AAGqaDQAAavUOAABq9g4AAGr3DgAAavgOAABqlxEAAGqYEQAAavkOAABq+g4AAGr7DgAAavwOAABq/w4AAGoADwAAagEPAABqAg8AAGoDDwAAagQPAABqBQ8AAGoGDwAAagkPAABqCg8AAGrRGwAAatIbAABqDQ8AAGoODwAAag8PAABqEA8AAGrxFAAAavIUAABqGQUAAGoaBQAAahUPAABqFg8AAGoXDwAAahgPAABqGQ8AAGoaDwAAahsPAABqHA8AAGodDwAAah4PAABqHw8AAGogDwAAaiEPAABqIg8AAGojDwAAaiQPAABqJQ8AAGomDwAAaicPAABqKA8AAGopDwAAaioPAABqLQ8AAGouDwAAai8PAABqMA8AAGoxDwAAajIPAABqMw8AAGo0DwAAajUPAABqNg8AAGo3DwAAajgPAABqOQ8AAGo6DwAAajsPAABqPA8AAGo9DwAAaj4PAABqPw8AAGpADwAAakEPAABqQg8AAGpDDwAAakQPAABqRQ8AAGpGDwAAasMbAABqxBsAAGpJDwAAakoPAABqSw8AAGpMDwAAak0PAABqTg8AAGpRDwAAalIPAABqUw8AAGpUDwAAalUPAABqVg8AAGpXDwAAalgPAABqWQ8AAGpaDwAAaiwEAABqLQQAAGpbDwAAalwPAABqXQ8AAGpeDwAAal8PAABqYA8AAGqpFgAAaqoWAABqMQUAAGoyBQAAamMPAABqZA8AAGqLEgAAaowSAABqZw8AAGpoDwAAamkPAABqag8AAGprDwAAamwPAABqbQ8AAGpuDwAAam8PAABqcA8AAGpxDwAAanIPAABqcw8AAGp0DwAAancPAABqeA8AAGp5DwAAanoPAABqew8AAGp8DwAAan0PAABqfg8AAGp/DwAAaoAPAABqgQ8AAGqCDwAAaoMPAABqhA8AAGqFDwAAaoYPAABqhw8AAGqIDwAAaokPAABqig8AAGpLBQAAakwFAABqiw8AAGqMDwAAalMFAABqVAUAAGqPDwAAapAPAABqkQ8AAGqSDwAAam0dAABqbh0AAGpvGAAAanAYAABqKAQAAGopBAAAapcPAABqmA8AAGqZDwAAapoPAABqmw8AAGqcDwAAap0PAABqng8AAGqfDwAAaqAPAABqoQ8AAGqiDwAAaqMPAABqpA8AAGqlDwAAaqYPAABqpw8AAGqoDwAAaqkPAABqqg8AAGqrDwAAaqwPAABqrQ8AAGquDwAAaq8PAABqsA8AAGqxDwAAarIPAABquREAAGq6EQAAarUPAABqtg8AAGq3DwAAargPAABquw8AAGq8DwAAar0PAABqvg8AAGq/DwAAasAPAABqwQ8AAGrCDwAAasMPAABqxA8AAGrFDwAAasYPAABqxw8AAGrIDwAAaskPAABqyg8AAGrLDwAAaswPAABqzQ8AAGrODwAAas8PAABq0A8AAGrRDwAAatIPAABq0w8AAGrUDwAAatUPAABq1g8AAGrXDwAAatgPAABq2Q8AAGraDwAAat8PAABq4A8AAGrhDwAAauIPAABq4w8AAGrkDwAAaucPAABq6A8AAGrpDwAAauoPAABq6w8AAGrsDwAAau0PAABq7g8AAGrvDwAAavAPAABq8Q8AAGryDwAAavMPAABq9A8AAGr1DwAAavYPAABq9w8AAGr4DwAAavkPAABq+g8AAGr7DwAAavwPAABq/Q8AAGr+DwAAausbAABq7BsAAGpjDgAAamQOAABqBw8AAGoIDwAAagMQAABqBBAAAGp/HAAAaoAcAABqBxAAAGoIEAAAahsFAABqHAUAAGoJEAAAagoQAABqCxAAAGoMEAAAag0QAABqDhAAAGrbDwAAatwPAABqERAAAGoSEAAAahsOAABqHA4AAGoVEAAAahYQAABqFxAAAGoYEAAAahkQAABqGhAAAGpVDAAAalYMAABqHRAAAGoeEAAAah8QAABqIBAAAGohEAAAaiIQAABqIxAAAGokEAAAat8bAABq4BsAAGp7HAAAanwcAABqJxAAAGooEAAAaikQAABqKhAAAGorEAAAaiwQAABqLRAAAGouEAAAai8QAABqMBAAAGoxEAAAajIQAABqMxAAAGo0EAAAajUQAABqNhAAAGo3EAAAajgQAABqORAAAGo6EAAAajsQAABqPBAAAGo9EAAAaj4QAABqPxAAAGpAEAAAakEQAABqQhAAAGpTGAAAalQYAABqQxAAAGpEEAAAakUQAABqRhAAAGpHEAAAakgQAABqSRAAAGpKEAAAaksQAABqTBAAAGpNEAAAak4QAABqTxAAAGpQEAAAalEQAABqUhAAAGpTEAAAalQQAABqVRAAAGpWEAAAalcQAABqWBAAAGpZEAAAaloQAABqWxAAAGpcEAAAal0QAABqXhAAAGpfEAAAamAQAABq7w0AAGrwDQAAamMQAABqZBAAAGplEAAAamYQAABqZxAAAGpoEAAAamkQAABqahAAAGqZGAAAapoYAABqbRAAAGpuEAAAam8QAABqcBAAAGpxEAAAanIQAABqKxUAAGosFQAAanUQAABqdhAAAGp3EAAAangQAABqeRAAAGp6EAAAansQAABqfBAAAGp9EAAAan4QAABqfxAAAGqAEAAAaoEQAABqghAAAGqDEAAAaoQQAABqhRAAAGqGEAAAaocQAABqiBAAAGqJEAAAaooQAABqixAAAGqMEAAAao0QAABqjhAAAGqPEAAAapAQAABqkRAAAGqSEAAAapUQAABqlhAAAGqXEAAAapgQAABq9RsAAGr2GwAAapsQAABqnBAAAGqdEAAAap4QAABqnxAAAGqgEAAAaqEQAABqohAAAGqjEAAAaqQQAABqpRAAAGqmEAAAaqkQAABqqhAAAGptGAAAam4YAABqqxAAAGqsEAAAaqUYAABqphgAAGqvEAAAarAQAABqsRAAAGqyEAAAarMQAABqtBAAAGq1EAAAarYQAABqtxAAAGq4EAAAarkQAABquhAAAGq7EAAAarwQAABq4REAAGriEQAAar8QAABqwBAAAGrBEAAAasIQAABqwxAAAGrEEAAAasUQAABqxhAAAGrHEAAAasgQAABqyRAAAGrKEAAAassQAABqzBAAAGrNEAAAas4QAABqzxAAAGrQEAAAatEQAABq0hAAAGrTEAAAatQQAABq1xAAAGrYEAAAatkQAABq2hAAAGrbEAAAatwQAABq3RAAAGreEAAAakEMAABqQgwAAGrjEAAAauQQAABq5RAAAGrmEAAAaqsLAABqrAsAAGrpEAAAauoQAABq6xAAAGrsEAAAau0QAABq7hAAAGrvEAAAavAQAABq8RAAAGryEAAAavMQAABq9BAAAGr1EAAAavYQAABqfxcAAGqAFwAAavcQAABq+BAAAGr5EAAAavoQAABq+xAAAGr8EAAAav0QAABq/hAAAGr/EAAAagARAABqAREAAGoCEQAAausRAABq7BEAAGqxGAAAarIYAABqBxEAAGoIEQAAagkRAABqChEAAGoLEQAAagwRAABqDREAAGoOEQAAag8RAABqEBEAAGoREQAAahIRAABqExEAAGoUEQAAahURAABqFhEAAGq/GwAAasAbAABqFxEAAGoYEQAAahkRAABqGhEAAGoBDAAAagIMAABqHREAAGoeEQAAajsMAABqPAwAAGohEQAAaiIRAABqIxEAAGokEQAAaiURAABqJhEAAGonEQAAaigRAABqfQwAAGp+DAAAai0RAABqLhEAAGovEQAAajARAABqMREAAGoyEQAAajMRAABqNBEAAGo1EQAAajYRAABqNxEAAGo4EQAAagsNAABqDA0AAGo7EQAAajwRAABqPREAAGo+EQAAaj8RAABqQBEAAGpXBQAAalgFAABqQREAAGpCEQAAakMRAABqRBEAAGpnGAAAamgYAABqWw0AAGpcDQAAakcRAABqSBEAAGpJEQAAakoRAABqSxEAAGpMEQAAar0YAABqvhgAAGpPEQAAalARAABqUREAAGpSEQAAalMRAABqVBEAAGpVEQAAalYRAABqVxEAAGpYEQAAalkRAABqWhEAAGr5EQAAavoRAABqXREAAGpeEQAAal8RAABqYBEAAGphEQAAamIRAABqxQ0AAGrGDQAAamURAABqZhEAAGpnEQAAamgRAABqaREAAGpqEQAAamsRAABqbBEAAGptEQAAam4RAABqcREAAGpyEQAAanMRAABqdBEAAGp1EQAAanYRAABqyxYAAGrMFgAAancRAABqeBEAAGp5EQAAanoRAABqHQsAAGoeCwAAansRAABqfBEAAGp9EQAAan4RAABqfxEAAGqAEQAAaoERAABqghEAAGqDEQAAaoQRAABqkQ4AAGqSDgAAaocRAABqiBEAAGq/HAAAasAcAABqiREAAGqKEQAAaosRAABqjBEAAGqNEQAAao4RAABqjxEAAGqQEQAAapERAABqkhEAAGqTEQAAapQRAAB1KGrzDgAAavQOAABqWQUAAGpaBQAAapkRAABqmhEAAGqbEQAAapwRAABqnREAAGqeEQAAal0VAABqXhUAAGqhEQAAaqIRAABqoxEAAGqkEQAAaqURAABqphEAAGqnEQAAaqgRAABqxxgAAGrIGAAAag8OAABqEA4AAGqrEQAAaqwRAABqJxwAAGooHAAAaq8RAABqsBEAAGqxEQAAarIRAABqsxEAAGq0EQAAarURAABqthEAAGq3EQAAargRAABqsw8AAGq0DwAAarsRAABqvBEAAGq9EQAAar4RAABqDxAAAGoQEAAAar8RAABqwBEAAGorHAAAaiwcAABqwxEAAGrEEQAAasURAABqxhEAAGrHEQAAasgRAABqyREAAGrKEQAAassRAABqzBEAAGovHAAAajAcAABqzxEAAGrQEQAAatERAABq0hEAAGrTEQAAatQRAABq1REAAGrWEQAAatcRAABq2BEAAGrZEQAAatoRAABqYxUAAGpkFQAAat0RAABq3hEAAGrfEQAAauARAABqvRAAAGq+EAAAauMRAABq5BEAAGrlEQAAauYRAABq3xAAAGrgEAAAaukRAABq6hEAAGoDEQAAagQRAABqPxMAAGpAEwAAamkVAABqahUAAGrxEQAAavIRAABqEQUAAGoSBQAAavMRAABq9BEAAGr1EQAAavYRAABq9xEAAGr4EQAAalsRAABqXBEAAGr7EQAAavwRAABqExIAAGoUEgAAav8RAABqABIAAGptFQAAam4VAABqAxIAAGoEEgAAagcSAABqCBIAAGoJEgAAagoSAABqCxIAAGoMEgAAag0SAABqDhIAAGoPEgAAahASAABqERIAAGoSEgAAav0RAABq/hEAAGoVEgAAahYSAABqFxIAAGoYEgAAahkSAABqGhIAAGobEgAAahwSAABqHRIAAGoeEgAAah8SAABqIBIAAGohEgAAaiISAABqIxIAAGokEgAAaiUSAABqJhIAAGonEgAAaigSAABqKRIAAGoqEgAAaisSAABqLBIAAGotEgAAai4SAABqLxIAAGowEgAAajESAABqMhIAAGozEgAAajQSAABqNRIAAGo2EgAAajcSAABqOBIAAGo5EgAAajoSAABqOxIAAGo8EgAAaj0SAABqPhIAAGo/EgAAakASAABqQRIAAGpCEgAAakMSAABqRBIAAGpHEgAAakgSAABqSxIAAGpMEgAAak0SAABqThIAAGpPEgAAalASAABqURIAAGpSEgAAalMSAABqVBIAAGpVEgAAalYSAABqVxIAAGpYEgAAalkSAABqWhIAAGpbEgAAalwSAABqXRIAAGpeEgAAal8SAABqYBIAAGphEgAAamISAABqYxIAAGpkEgAAaqkZAABqqhkAAGplEgAAamYSAABqZxIAAGpoEgAAamkSAABqahIAAGprEgAAamwSAABqRRIAAGpGEgAAanESAABqchIAAGpzEgAAanQSAABqdRIAAGp2EgAAancSAABqeBIAAGrdGAAAat4YAABqexIAAGp8EgAAan0SAABqfhIAAGrNDQAAas4NAABqgRIAAGqCEgAAalMcAABqVBwAAGqDEgAAaoQSAABqhRIAAGqGEgAAaocSAABqiBIAAGqJEgAAaooSAABqjRIAAGqOEgAAao8SAABqkBIAAGqHFQAAaogVAABqkxIAAGqUEgAAapUSAABqlhIAAGqXEgAAapgSAABqmRIAAGqaEgAAapsSAABqnBIAAGqdEgAAap4SAABqnxIAAGqgEgAAaqESAABqohIAAGqjEgAAaqQSAABq6RgAAGrqGAAAaqcSAABqqBIAAGqpEgAAaqoSAABqqxIAAGqsEgAAaq0SAABqrhIAAGqvEgAAarASAABqBRIAAGoGEgAAarMSAABqtBIAAGq1EgAAarYSAABqtxIAAGq4EgAAarkSAABquhIAAGq7EgAAarwSAABqvRIAAGq+EgAAar8SAABqwBIAAGrBEgAAasISAABqwxIAAGrEEgAAasUSAABqxhIAAGrHEgAAasgSAABqyRIAAGrKEgAAassSAABqzBIAAGrNEgAAas4SAABqzxIAAGrQEgAAatESAABq0hIAAGrTEgAAatQSAABqCQUAAGoKBQAAatUSAABq1hIAAGrXEgAAatgSAABq2RIAAGraEgAAatsSAABq3BIAAGrfGgAAauAaAABq3RIAAGreEgAAat8SAABq4BIAAGrhEgAAauISAABq4xIAAGrkEgAAaucSAABq6BIAAGo7FwAAajwXAABq6xIAAGrsEgAAau0SAABq7hIAAGrvEgAAavASAABq8RIAAGryEgAAavMSAABq9BIAAGr1EgAAavYSAABq9xIAAGr4EgAAavkSAABq+hIAAGr7EgAAavwSAABq/RIAAGr+EgAAav8SAABqABMAAGoBEwAAagITAABqAxMAAGoEEwAAagUTAABqBhMAAGoJEwAAagoTAABqCxMAAGoMEwAAag0TAABqDhMAAGoPEwAAahATAABqERMAAGoSEwAAahMTAABqFBMAAGqhFQAAaqIVAABqFxMAAGoYEwAAahkTAABqGhMAAGobEwAAahwTAABqHRMAAGoeEwAAah8TAABqIBMAAGohEwAAaiITAABqIxMAAGokEwAAaiUTAABqJhMAAGonEwAAaigTAABqOgQAAGo7BAAAaikTAABqKhMAAGorEwAAaiwTAABqLRMAAGouEwAAai8TAABqMBMAAGoxEwAAajITAABqMxMAAGo0EwAAajUTAABqNhMAAGo3EwAAajgTAABqOxMAAGo8EwAAaj0TAABqPhMAAGpBEwAAakITAABqQxMAAGpEEwAAakUTAABqRhMAAGp1DwAAanYPAABqSRMAAGpKEwAAaksTAABqTBMAAGrlDwAAauYPAABqTxMAAGpQEwAAalETAABqUhMAAGpTEwAAalQTAABqVRMAAGpWEwAAalcTAABqWBMAAGpZEwAAaloTAABqWxMAAGpcEwAAal0TAABqXhMAAGpfEwAAamATAABqYRMAAGpiEwAAamMTAABqZBMAAGpnEwAAamgTAABqaRMAAGpqEwAAav8YAABqABkAAGpvEwAAanATAABqsRUAAGqyFQAAanMTAABqdBMAAGp1EwAAanYTAABqdxMAAGp4EwAAankTAABqehMAAGp7EwAAanwTAABqfRMAAGp+EwAAan8TAABqgBMAAGqBEwAAaoITAABqgxMAAGqEEwAAaoUTAABqhhMAAGq5FQAAaroVAABqiRMAAGqKEwAAaosTAABqjBMAAGqNEwAAao4TAABqjxMAAGqQEwAAapETAABqkhMAAGqTEwAAapQTAABqlRMAAGqWEwAAapcTAABqmBMAAGozBQAAajQFAABqmxMAAGqcEwAAap0TAABqnhMAAGqfEwAAaqATAABqoRMAAGqiEwAAaqMTAABqpBMAAGqfGwAAaqAbAABqpxMAAGqoEwAAahcNAABqGA0AAGqrEwAAaqwTAABqrxMAAGqwEwAAarETAABqshMAAGqzEwAAarQTAABqtRMAAGq2EwAAahEZAABqEhkAAGq5EwAAaroTAABquxMAAGq8EwAAar0TAABqvhMAAGq/EwAAasATAABqwRMAAGrCEwAAasMTAABqxBMAAGrFEwAAasYTAABqxxMAAGrIEwAAaskTAABqyhMAAGrLEwAAaswTAABqzRMAAGrOEwAAas8TAABq0BMAAGrREwAAatITAABq0xMAAGrUEwAAatUTAABq1hMAAGrXEwAAatgTAABq2RMAAGraEwAAatsTAABq3BMAAGoJHQAAagodAABq3xMAAGrgEwAAauETAABq4hMAAGrjEwAAauQTAABq5RMAAGrmEwAAaucTAABq6BMAAGrpEwAAauoTAABq6xMAAGrsEwAAau0TAABq7hMAAGrvEwAAavATAABq8RMAAGryEwAAavMTAABq9BMAAGr1EwAAavYTAABq9xMAAGr4EwAAavkTAABq+hMAAGr7EwAAavwTAABq/RMAAGr+EwAAav8TAABqABQAAGoBFAAAagIUAABqAxQAAGoEFAAAagUUAABqBhQAAGoHFAAAaggUAABqCRQAAGoKFAAAagsUAABqDBQAAGoNFAAAag4UAABqDxQAAGoQFAAAam8SAABqcBIAAGoTFAAAahQUAABqFRQAAGoWFAAAatcaAABq2BoAAGr1CQAAavYJAABqGRQAAGoaFAAAahsUAABqHBQAAGodFAAAah4UAABqFQoAAGoWCgAAaiEUAABqIhQAAGqzDAAAarQMAABqJRQAAGomFAAAaicUAABqKBQAAGopFAAAaioUAABqKxQAAGosFAAAaksKAABqTAoAAGovFAAAajAUAABqMRQAAGoyFAAAascVAABqyBUAAGqZHAAAapocAABqNxQAAGo4FAAAajkUAABqOhQAAGo7FAAAajwUAABqPRQAAGo+FAAAaj8UAABqQBQAAGpBFAAAakIUAABqQxQAAGpEFAAAak8bAABqUBsAAGpFFAAAakYUAABqRxQAAGpIFAAAakkUAABqShQAAGo3BQAAajgFAABqTRQAAGpOFAAAak8UAABqUBQAAGpRFAAAalIUAABqUxQAAGpUFAAAalUUAABqVhQAAGpXFAAAalgUAABqWRQAAGpaFAAAahELAABqEgsAAGpdFAAAal4UAABqXxQAAGpgFAAAamEUAABqYhQAAGplFAAAamYUAABqaRQAAGpqFAAAamsUAABqbBQAAGptFAAAam4UAABqfxIAAGqAEgAAam8UAABqcBQAAGpxFAAAanIUAABqBwUAAGoIBQAAanMUAABqdBQAAGp1FAAAanYUAABqdxQAAGp4FAAAankUAABqehQAAGp7FAAAanwUAABqfRQAAGp+FAAAan8UAABqgBQAAGo1GQAAajYZAABqHQUAAGoeBQAAaoMUAABqhBQAAGqFFAAAaoYUAABqtQwAAGq2DAAAar8MAABqwAwAAGrVEAAAatYQAABqjRQAAGqOFAAAao8UAABqkBQAAGqRFAAAapIUAABqkxQAAGqUFAAAapUUAABqlhQAAGqXFAAAapgUAABqmRQAAGqaFAAAapsUAABqnBQAAGqdFAAAap4UAABqnxQAAGqgFAAAaqEUAABqohQAAGqjFAAAaqQUAABqpRQAAGqmFAAAaqcUAABqqBQAAGqpHAAAaqocAABqqxQAAGqsFAAAaq0UAABqrhQAAGqvFAAAarAUAABqsRQAAGqyFAAAarMUAABqtBQAAGq1FAAAarYUAABqtxQAAGq4FAAAarkUAABquhQAAGq7FAAAarwUAABqvRQAAGq+FAAAar8UAABqwBQAAGrBFAAAasIUAABqwxQAAGrEFAAAasUUAABqxhQAAGrHFAAAasgUAABqyRQAAGrKFAAAassUAABqzBQAAGrNFAAAas4UAABqzxQAAGrQFAAAatEUAABq0hQAAGrTFAAAatQUAABqIxQAAGokFAAAansOAABqfA4AAGrXFAAAatgUAABqtRwAAGq2HAAAatsUAABq3BQAAGrPDgAAatAOAABq3xQAAGrgFAAAauEUAABq4hQAAGrjFAAAauQUAABq5RQAAGrmFAAAaucUAABq6BQAAGrpFAAAauoUAABq6xQAAGrsFAAAau0UAABq7hQAAGpBBQAAakIFAABqEQ8AAGoSDwAAavMUAABq9BQAAGr1FAAAavYUAABq9xQAAGr4FAAAavkUAABq+hQAAGr7FAAAavwUAABq/RQAAGr+FAAAav8UAABqABUAAGoBFQAAagIVAABqAxUAAGoEFQAAagUVAABqBhUAAGoHFQAAaggVAABqCRUAAGoKFQAAagsVAABqDBUAAGoNFQAAag4VAABqDxUAAGoQFQAAahEVAABqEhUAAGoTFQAAahQVAABqFRUAAGoWFQAAahcVAABqGBUAAGoZFQAAahoVAABqGxUAAGocFQAAauUSAABq5hIAAGofFQAAaiAVAABqIRUAAGoiFQAAaiMVAABqJBUAAGolFQAAaiYVAABqJxUAAGooFQAAaikVAABqKhUAAGpzEAAAanQQAABqLRUAAGouFQAAaoccAABqiBwAAGovFQAAajAVAABqMRUAAGoyFQAAajMVAABqNBUAAGo1FQAAajYVAABqNxUAAGo4FQAAajkVAABqOhUAAGo7FQAAajwVAABqPRUAAGo+FQAAaj8VAABqQBUAAGpBFQAAakIVAABqQxUAAGpEFQAAakUVAABqRhUAAGpHFQAAakgVAABqSRUAAGpKFQAAaksVAABqTBUAAGpNFQAAak4VAABq0xwAAGrUHAAAalEVAABqUhUAAGpTFQAAalQVAABqVRUAAGpWFQAAalcVAABqWBUAAGpZFQAAaloVAABqWxUAAGpcFQAAap8RAABqoBEAAGpfFQAAamAVAABqYRUAAGpiFQAAatsRAABq3BEAAGplFQAAamYVAABqIxwAAGokHAAAau0RAABq7hEAAGrvEQAAavARAABqaxUAAGpsFQAAagESAABqAhIAAGpvFQAAanAVAABqcRUAAGpyFQAAanMVAABqdBUAAGp1FQAAanYVAABqdxUAAGp4FQAAansVAABqfBUAAGp9FQAAan4VAABqfxUAAGqAFQAAaoEVAABqghUAAGozGwAAajQbAABq9QoAAGr2CgAAaoUVAABqhhUAAGqREgAAapISAABqiRUAAGqKFQAAaosVAABqjBUAAGqNFQAAao4VAABqBRYAAGoGFgAAapEVAABqkhUAAGqTFQAAapQVAABqlRUAAGqWFQAAapcVAABqmBUAAGqZFQAAapoVAABqmxUAAGqcFQAAagcWAABqCBYAAGqfFQAAaqAVAABqFRMAAGoWEwAAaqMVAABqpBUAAGoHEwAAaggTAABqpxUAAGqoFQAAaqkVAABqqhUAAGqrFQAAaqwVAABqrRUAAGquFQAAaq8VAABqsBUAAGpxEwAAanITAABqsxUAAGq0FQAAarUVAABqthUAAGrhHAAAauIcAABqrRMAAGquEwAAar0VAABqvhUAAGpxGQAAanIZAABqwRUAAGrCFQAAarESAABqshIAAGrFFQAAasYVAABqMxQAAGo0FAAAaskVAABqyhUAAGrLFQAAaswVAABqzRkAAGrOGQAAaoEdAABqgh0AAGrPFQAAatAVAABq0RUAAGrSFQAAatMVAABq1BUAAGrVFQAAatYVAABq1xUAAGrYFQAAatkVAABq2hUAAGrbFQAAatwVAABq3RUAAGreFQAAat8VAABq4BUAAGrhFQAAauIVAABq4xUAAGrkFQAAauUVAABq5hUAAGrnFQAAaugVAABqdRkAAGp2GQAAaukVAABq6hUAAGrrFQAAauwVAABq7RUAAGruFQAAau8VAABq8BUAAGrxFQAAavIVAABq8xUAAGr0FQAAavUVAABq9hUAAGr3FQAAavgVAABq+RUAAGr6FQAAavsVAABq/BUAAGr9FQAAav4VAABq/xUAAGoAFgAAaqUNAABqpg0AAGoDFgAAagQWAABqjxUAAGqQFQAAap0VAABqnhUAAGoJFgAAagoWAABqCxYAAGoMFgAAag0WAABqDhYAAGoPFgAAahAWAABqERYAAGoSFgAAahUWAABqFhYAAGoXFgAAahgWAABqGRYAAGoaFgAAahsWAABqHBYAAGodFgAAah4WAABqHxYAAGogFgAAaiEWAABqIhYAAGojFgAAaiQWAABqJRYAAGomFgAAaicWAABqKBYAAGopFgAAaioWAABqKxYAAGosFgAAai0WAABqLhYAAGovFgAAajAWAABqMRYAAGoyFgAAajMWAABqNBYAAGo1FgAAajYWAABqNxYAAGo4FgAAajkWAABqOhYAAGo7FgAAajwWAABqPRYAAGo+FgAAaj8WAABqQBYAAGpBFgAAakIWAABqQxYAAGpEFgAAakUWAABqRhYAAGpHFgAAakgWAABqSRYAAGpKFgAAajwEAABqPQQAAGpNFgAAak4WAABqTxYAAGpQFgAAalEWAABqUhYAAGpTFgAAalQWAABqVRYAAGpWFgAAalcWAABqWBYAAGpZFgAAaloWAABqWxYAAGpcFgAAal0WAABqXhYAAGpfFgAAamAWAABqYRYAAGpiFgAAaucRAABq6BEAAGqnEAAAaqgQAABqZRYAAGpmFgAAam8ZAABqcBkAAGpnFgAAamgWAABqaRYAAGpqFgAAamsWAABqbBYAAGptFgAAam4WAABqbxYAAGpwFgAAanEWAABqchYAAGpzFgAAanQWAABqdRYAAGp2FgAAancWAABqeBYAAGp5FgAAanoWAABqrRsAAGquGwAAansWAABqfBYAAGp9FgAAan4WAABqfxYAAGqAFgAAaoEWAABqghYAAGqDFgAAaoQWAABqhRYAAGqGFgAAaocWAABqiBYAAGqJFgAAaooWAABqixYAAGqMFgAAao0WAABqjhYAAGqPFgAAapAWAABqkRYAAGqSFgAAapMWAABqlBYAAGqVFgAAapYWAABq9xgAAGr4GAAAapkWAABqmhYAAGqTGQAAapQZAABqnRYAAGqeFgAAap8WAABqoBYAAGqhFgAAaqIWAABqoxYAAGqkFgAAaqUWAABqphYAAGqnFgAAaqgWAABqCw8AAGoMDwAAaqsWAABqrBYAAGqtFgAAaq4WAABqrxYAAGqwFgAAarEWAABqshYAAGqzFgAAarQWAABqtRYAAGq2FgAAarcWAABquBYAAGq5FgAAaroWAABquxYAAGq8FgAAar0WAABqvhYAAGq/FgAAasAWAABqwRYAAGrCFgAAasMWAABqxBYAAGrFFgAAasYWAABqxxYAAGrIFgAAajAEAABqMQQAAGrNFgAAas4WAABqzxYAAGrQFgAAap0ZAABqnhkAAGrTFgAAatQWAABq1RYAAGrWFgAAatcWAABq2BYAAGrZFgAAatoWAABq2xYAAGrcFgAAat0WAABq3hYAAGrfFgAAauAWAABq4RYAAGriFgAAauMWAABq5BYAAGrlFgAAauYWAABqKw8AAGosDwAAaukWAABq6hYAAGrrFgAAauwWAABq7RYAAGruFgAAau8WAABq8BYAAGoTHAAAahQcAABq8RYAAGryFgAAavMWAABq9BYAAGr1FgAAavYWAABqiw0AAGqMDQAAavcWAABq+BYAAGr5FgAAavoWAABq+xYAAGr8FgAAav0WAABq/hYAAGr/FgAAagAXAABqARcAAGoCFwAAagMXAABqBBcAAGoFFwAAagYXAABqHxwAAGogHAAAagcXAABqCBcAAGoJFwAAagoXAABqCxcAAGoMFwAAag0XAABqDhcAAGoPFwAAahAXAABqERcAAGoSFwAAahMXAABqFBcAAGoVFwAAahYXAABqFxcAAGoYFwAAahkXAABqGhcAAGobFwAAahwXAABqHRcAAGoeFwAAah8XAABqIBcAAGpjHAAAamQcAABqIRcAAGoiFwAAaiMXAABqJBcAAGotBQAAai4FAABqJRcAAGomFwAAaicXAABqKBcAAGopFwAAaioXAABqKxcAAGosFwAAai0XAABqLhcAAGp5FQAAanoVAABqMRcAAGoyFwAAahsdAABqHB0AAGo1FwAAajYXAABqNxcAAGo4FwAAaksWAABqTBYAAGrdEwAAat4TAABqPRcAAGo+FwAAaj8XAABqQBcAAGpBFwAAakIXAABqQxcAAGpEFwAAakUXAABqRhcAAGpHFwAAakgXAABqJR0AAGomHQAAaksXAABqTBcAAGpNFwAAak4XAABqTxcAAGpQFwAAalEXAABqUhcAAGpTFwAAalQXAABq7QoAAGruCgAAalcXAABqWBcAAGpZFwAAaloXAABqWxcAAGpcFwAAal0XAABqXhcAAGpfFwAAamAXAABqYRcAAGpiFwAAamMXAABqZBcAAGphDwAAamIPAABqKgQAAGorBAAAaq8ZAABqsBkAAGpnFwAAamgXAABqaRcAAGpqFwAAamsXAABqbBcAAGptFwAAam4XAABqbxcAAGpwFwAAanEXAABqchcAAGqxGQAAarIZAABq5xwAAGroHAAAanUXAABqdhcAAGovHQAAajAdAABqeRcAAGp6FwAAansXAABqfBcAAGplEwAAamYTAABq0w0AAGrUDQAAaoEXAABqghcAAGqDFwAAaoQXAABqhRcAAGqGFwAAaiEKAABqIgoAAGqJFwAAaooXAABqixcAAGqMFwAAao0XAABqjhcAAGq5GQAAaroZAABqkRcAAGqSFwAAapMXAABqlBcAAGqVFwAAapYXAABqjQoAAGqOCgAAapkXAABqmhcAAGqbFwAAapwXAABqnRcAAGqeFwAAarkXAABquhcAAGqhFwAAaqIXAABqoxcAAGqkFwAAamMWAABqZBYAAGoPGQAAahAZAABqqRcAAGqqFwAAaqsXAABqrBcAAGqtFwAAaq4XAABqrxcAAGqwFwAAarEXAABqshcAAGofCwAAaiALAABqtRcAAGq2FwAAar8ZAABqwBkAAGq7FwAAarwXAABqvRcAAGq+FwAAasUOAABqxg4AAGqjCwAAaqQLAABqwxcAAGrEFwAAasUXAABqxhcAAGpRGQAAalIZAABqxxcAAGrIFwAAaskXAABqyhcAAGrLFwAAaswXAABqzRcAAGrOFwAAas8XAABq0BcAAGrRFwAAatIXAABq0xcAAGrUFwAAatUXAABq1hcAAGrXFwAAatgXAABq2RcAAGraFwAAatsXAABq3BcAAGrdFwAAat4XAABq3xcAAGrgFwAAassZAABqzBkAAGrlFwAAauYXAABqzxkAAGrQGQAAaukXAABq6hcAAGpBHQAAakIdAABq0RkAAGrSGQAAau0XAABq7hcAAGrvFwAAavAXAABq8RcAAGryFwAAapUPAABqlg8AAGrzFwAAavQXAABqywwAAGrMDAAAavcXAABq+BcAAGr5FwAAavoXAABq+xcAAGr8FwAAau8MAABq8AwAAGopDQAAaioNAABqARgAAGoCGAAAagMYAABqBBgAAGoFGAAAagYYAABqBxgAAGoIGAAAagkYAABqChgAAGoLGAAAagwYAABqDRgAAGoOGAAAag8YAABqEBgAAGoRGAAAahIYAABqExgAAGoUGAAAahUYAABqFhgAAGoXGAAAahgYAABqGRgAAGoaGAAAahsYAABqHBgAAGodGAAAah4YAABqHxgAAGogGAAAaiEYAABqIhgAAGojGAAAaiQYAABqJRgAAGomGAAAaicYAABqKBgAAGopGAAAaioYAABqTR0AAGpOHQAAai0YAABqLhgAAGovGAAAajAYAABqMRgAAGoyGAAAasMYAABqxBgAAGozGAAAajQYAABqNRgAAGo2GAAAajcYAABqOBgAAGo5GAAAajoYAABqOxgAAGo8GAAAaj0YAABqPhgAAGo/GAAAakAYAABqQRgAAGpCGAAAakMYAABqRBgAAGpFGAAAakYYAABqRxgAAGpIGAAAakkYAABqShgAAGpLGAAAakwYAABqTRgAAGpOGAAAak8YAABqUBgAAGpRGAAAalIYAABqIQUAAGoiBQAAalUYAABqVhgAAGpXGAAAalgYAABqWRgAAGpaGAAAalsYAABqXBgAAGoTDwAAahQPAABqKwUAAGosBQAAamEYAABqYhgAAGpjGAAAamQYAABqZRgAAGpmGAAAamUPAABqZg8AAGo/BQAAakAFAABqaRgAAGpqGAAAamsYAABqbBgAAGorDgAAaiwOAABqkw8AAGqUDwAAalsdAABqXB0AAGpzGAAAanQYAABqdRgAAGp2GAAAancYAABqeBgAAGp5GAAAanoYAABqexgAAGp8GAAAan0YAABqfhgAAGp/GAAAaoAYAABqgRgAAGqCGAAAaoMYAABqhBgAAGqFGAAAaoYYAABqhxgAAGqIGAAAaokYAABqihgAAGqLGAAAaowYAABqjRgAAGqOGAAAao8YAABqkBgAAGqRGAAAapIYAABqkxgAAGqUGAAAapUYAABqlhgAAGqXGAAAapgYAABqaxAAAGpsEAAAapsYAABqnBgAAGqdGAAAap4YAABqnxgAAGqgGAAAaqEYAABqohgAAGqjGAAAaqQYAABqrRAAAGquEAAAaqcYAABqqBgAAGqpGAAAaqoYAABqqxgAAGqsGAAAaq0YAABqrhgAAGqvGAAAarAYAABqBREAAGoGEQAAarMYAABqtBgAAGq1GAAAarYYAABqtxgAAGq4GAAAarkYAABquhgAAGpFEQAAakYRAABqTREAAGpOEQAAar8YAABqwBgAAGrBGAAAasIYAABqbxEAAGpwEQAAasUYAABqxhgAAGqpEQAAaqoRAABqyxgAAGrMGAAAas0YAABqzhgAAGrPGwAAatAbAABqzxgAAGrQGAAAauEQAABq4hAAAGrTGAAAatQYAABq1RgAAGrWGAAAatcYAABq2BgAAGrZGAAAatoYAABqjRkAAGqOGQAAatsYAABq3BgAAGp5EgAAanoSAABq3xgAAGrgGAAAauEYAABq4hgAAGr5GQAAavoZAABq5RgAAGrmGAAAaucYAABq6BgAAGqlEgAAaqYSAABq6xgAAGrsGAAAau0YAABq7hgAAGrvGAAAavAYAABq8RgAAGryGAAAavMYAABq9BgAAGr1GAAAavYYAABq+RgAAGr6GAAAavsYAABq/BgAAGr9GAAAav4YAABqaxMAAGpsEwAAagEZAABqAhkAAGoDGQAAagQZAABqBRkAAGoGGQAAagcZAABqCBkAAGoDGgAAagQaAABqCxkAAGoMGQAAag0ZAABqDhkAAGoFEAAAagYQAABqtxMAAGq4EwAAahMZAABqFBkAAGoVGQAAahYZAABqFxkAAGoYGQAAahkZAABqGhkAAGobGQAAahwZAABqHRkAAGoeGQAAah8ZAABqIBkAAGoFGgAAagYaAABqJRkAAGomGQAAaicZAABqKBkAAGopGQAAaioZAABqKxkAAGosGQAAai0ZAABqLhkAAGovGQAAajAZAABqMRkAAGoyGQAAajMZAABqNBkAAGqBFAAAaoIUAABqNxkAAGo4GQAAajkZAABqOhkAAGo7GQAAajwZAABqPRkAAGo+GQAAamcVAABqaBUAAGo/GQAAakAZAABqQRkAAGpCGQAAakMZAABqRBkAAGpFGQAAakYZAAB1KGpHGQAAakgZAABqSRkAAGpKGQAAaksZAABqTBkAAGpNGQAAak4ZAABq7xQAAGrwFAAAanUMAABqdgwAAGqTGgAAapQaAABqUxkAAGpUGQAAalUZAABqVhkAAGpXGQAAalgZAABqOwUAAGo8BQAAalkZAABqWhkAAGpbGQAAalwZAABqXRkAAGpeGQAAal8ZAABqYBkAAGphGQAAamIZAABqXxgAAGpgGAAAamcZAABqaBkAAGppGQAAamoZAABqDxoAAGoQGgAAam0ZAABqbhkAAGq7FQAAarwVAABqvxUAAGrAFQAAaj0FAABqPgUAAGpzGQAAanQZAABqRxMAAGpIEwAAancZAABqeBkAAGp5GQAAanoZAABqpQwAAGqmDAAAalkcAABqWhwAAGp7GQAAanwZAABqfRkAAGp+GQAAan8ZAABqgBkAAGqBGQAAaoIZAABqgxkAAGqEGQAAaoUZAABqhhkAAGqHGQAAaogZAABqiRkAAGqKGQAAaosZAABqjBkAAGrtDAAAau4MAABqjxkAAGqQGQAAapcWAABqmBYAAGqbFgAAapwWAABqlRkAAGqWGQAAapcZAABqmBkAAGqZGQAAapoZAABqmxkAAGqcGQAAatEWAABq0hYAAGqfGQAAaqAZAABqHRUAAGoeFQAAaqEZAABqohkAAGqjGQAAaqQZAABqpRkAAGqmGQAAaqcZAABqqBkAAGpLFAAAakwUAABqqxkAAGqsGQAAaq0ZAABqrhkAAGpNEwAAak4TAABqcxcAAGp0FwAAarMZAABqtBkAAGq1GQAAarYZAABqtxkAAGq4GQAAao8XAABqkBcAAGq7GQAAarwZAABqvRkAAGq+GQAAarcXAABquBcAAGrBGQAAasIZAABqwxkAAGrEGQAAasUZAABqxhkAAGojGQAAaiQZAABqyRkAAGrKGQAAauEXAABq4hcAAGrjFwAAauQXAABq5xcAAGroFwAAausXAABq7BcAAGrTGQAAatQZAABq1RkAAGrWGQAAatcZAABq2BkAAGrZGQAAatoZAABq2xkAAGrcGQAAatkNAABq2g0AAGrfGQAAauAZAABq4RkAAGriGQAAauMZAABq5BkAAGrlGQAAauYZAABq5xkAAGroGQAAaukZAABq6hkAAGrrGQAAauwZAABq7RkAAGruGQAAau8ZAABq8BkAAGodGgAAah4aAABq8xkAAGr0GQAAavUZAABq9hkAAGr3GQAAavgZAABq4xgAAGrkGAAAav0ZAABq/hkAAGr/GQAAagAaAABqARoAAGoCGgAAagkZAABqChkAAGohGQAAaiIZAABqBxoAAGoIGgAAagkaAABqChoAAGoLGgAAagwaAABqDRoAAGoOGgAAamsZAABqbBkAAGoRGgAAahIaAABqExoAAGoUGgAAahUaAABqFhoAAGoXGgAAahgaAABqGRoAAGoaGgAAahsaAABqHBoAAGrxGQAAavIZAABqHxoAAGogGgAAagEQAABqAhAAAGojGgAAaiQaAABqJRoAAGomGgAAaicaAABqKBoAAGopGgAAaioaAABqKxoAAGosGgAAai0aAABqLhoAAGo0BAAAajUEAABqLxoAAGowGgAAajEaAABqMhoAAGozGgAAajQaAABqKQUAAGoqBQAAajUaAABqNhoAAGo3GgAAajgaAABqORoAAGo6GgAAajsaAABqPBoAAGo9GgAAaj4aAABqPxoAAGpAGgAAakEaAABqQhoAAGpDGgAAakQaAABqRRoAAGpGGgAAakcaAABqSBoAAGpJGgAAakoaAABqSxoAAGpMGgAAak0aAABqThoAAGp/HQAAaoAdAABqTxoAAGpQGgAAakkFAABqSgUAAGqVEQAAapYRAABqURoAAGpSGgAAalMaAABqVBoAAGpjGQAAamQZAABqVxoAAGpYGgAAalkaAABqWhoAAGpbGgAAalwaAABqExAAAGoUEAAAal8aAABqYBoAAGphGgAAamIaAABqYxoAAGpkGgAAamUaAABqZhoAAGpnGgAAamgaAABqaRoAAGpqGgAAamsaAABqbBoAAGohGgAAaiIaAABqbRoAAGpuGgAAam8aAABqcBoAAGpxGgAAanIaAABqcxoAAGp0GgAAanUaAABqdhoAAGp3GgAAangaAABqeRoAAGp6GgAAansaAABqfBoAAGp9GgAAan4aAABqfxoAAGqAGgAAaoEaAABqghoAAGqDGgAAaoQaAABqhRoAAGqGGgAAaocaAABqiBoAAGobEAAAahwQAABqjRoAAGqOGgAAao8aAABqkBoAAGqRGgAAapIaAABq5xYAAGroFgAAapUaAABqlhoAAGqXGgAAapgaAABqmRoAAGqaGgAAapsaAABqnBoAAGqdGgAAap4aAABqRQUAAGpGBQAAaqEaAABqohoAAGqjGgAAaqQaAABqpRoAAGqmGgAAaqcaAABqqBoAAGqpGgAAaqoaAABqqxoAAGqsGgAAaq0aAABqrhoAAGqvGgAAarAaAABqsRoAAGqyGgAAarMaAABqtBoAAGq1GgAAarYaAABqtxoAAGq4GgAAarkaAABquhoAAGq7GgAAarwaAABqvRoAAGq+GgAAamcUAABqaBQAAGrBGgAAasIaAABqwxoAAGrEGgAAasUaAABqxhoAAGrHGgAAasgaAABqyRoAAGrKGgAAassaAABqzBoAAGrNGgAAas4aAABqzxoAAGrQGgAAatEaAABq0hoAAGrTGgAAatQaAABq1RoAAGrWGgAAatcLAABq2AsAAGrZGgAAatoaAABqyRYAAGrKFgAAat0aAABq3hoAAGpJEgAAakoSAABq4RoAAGriGgAAauMaAABq5BoAAGrlGgAAauYaAABq5xoAAGroGgAAaukaAABq6hoAAGrrGgAAauwaAABq7RoAAGruGgAAaocKAABqiAoAAGqLCgAAaowKAABq8xoAAGr0GgAAavUaAABq9hoAAGr3GgAAavgaAABq+RoAAGr6GgAAavsaAABq/BoAAGr9GgAAav4aAABq/xoAAGoAGwAAaqEdAABqoh0AAGrTCgAAatQKAABqBRsAAGoGGwAAagcbAABqCBsAAGoJGwAAagobAABqIQsAAGoiCwAAag0bAABqDhsAAGoPGwAAahAbAABqERsAAGoSGwAAahMbAABqFBsAAGqnHQAAaqgdAABqFxsAAGoYGwAAaocLAABqiAsAAGqPCwAAapALAABqmQsAAGqaCwAAah8bAABqIBsAAGpVBQAAalYFAABqARYAAGoCFgAAaiMbAABqJBsAAGolGwAAaiYbAABqJxsAAGooGwAAaikbAABqKhsAAGrJCwAAasoLAABqLRsAAGouGwAAai8bAABqMBsAAGrnHQAAaugdAABqMRsAAGoyGwAAak8PAABqUA8AAGo1GwAAajYbAABq3Q8AAGreDwAAajkbAABqOhsAAGovBQAAajAFAABqOxsAAGo8GwAAaj0bAABqPhsAAGo/GwAAakAbAABqQRsAAGpCGwAAamUMAABqZgwAAGpFGwAAakYbAABqRxsAAGpIGwAAakkbAABqShsAAGqvHQAAarAdAABqTRsAAGpOGwAAaqEKAABqogoAAGpRGwAAalIbAABqUxsAAGpUGwAAalUbAABqVhsAAGpXGwAAalgbAABqWRsAAGpaGwAAalsbAABqXBsAAGpHBQAAakgFAABq3wwAAGrgDAAAapkTAABqmhMAAGpjGwAAamQbAABqyRgAAGrKGAAAak8ZAABqUBkAAGpnGwAAamgbAABqaRsAAGpqGwAAakUNAABqRg0AAGptGwAAam4bAABqbxsAAGpwGwAAanEbAABqchsAAGpzGwAAanQbAABqnQ0AAGqeDQAAancbAABqeBsAAGp5GwAAanobAABqexsAAGp8GwAAan0bAABqfhsAAGqVHAAAapYcAABqfxsAAGqAGwAAaoEbAABqghsAAGr9DQAAav4NAABqORMAAGo6EwAAaocbAABqiBsAAGqJGwAAaoobAABqOw4AAGo8DgAAao0bAABqjhsAAGqPGwAAapAbAABqkRsAAGqSGwAAapMbAABqlBsAAGqVGwAAapYbAABqlxsAAGqYGwAAapkbAABqmhsAAGqfDgAAaqAOAABqnRsAAGqeGwAAaqMbAABqpBsAAGqlGwAAaqYbAABqpxsAAGqoGwAAaqkbAABqqhsAAGqrGwAAaqwbAABqqRMAAGqqEwAAaq8bAABqsBsAAGqxGwAAarIbAABqsxsAAGq0GwAAarUbAABqthsAAGrdGQAAat4ZAABqtxsAAGq4GwAAarkbAABquhsAAGq7GwAAarwbAABqvRsAAGq+GwAAalUaAABqVhoAAGrBGwAAasIbAABqRw8AAGpIDwAAasUbAABqxhsAAGrHGwAAasgbAABqJwUAAGooBQAAaskbAABqyhsAAGrLGwAAaswbAABqzRsAAGrOGwAAao0PAABqjg8AAGolBQAAaiYFAABqYxQAAGpkFAAAatMbAABq1BsAAGrVGwAAatYbAABqXRoAAGpeGgAAagsbAABqDBsAAGrXGwAAatgbAABq2RsAAGraGwAAatsbAABq3BsAAGrdGwAAat4bAABqJRAAAGomEAAAauEbAABq4hsAAGrjGwAAauQbAABq5RsAAGrmGwAAaucbAABq6BsAAGrpGwAAauobAABqpRcAAGqmFwAAau0bAABq7hsAAGrvGwAAavAbAABq8RsAAGryGwAAavMbAABq9BsAAGqZEAAAapoQAABq9xsAAGr4GwAAavkbAABq+hsAAGr7GwAAavwbAABq/RsAAGr+GwAAav8bAABqABwAAGoBHAAAagIcAABqAxwAAGoEHAAAagUcAABqBhwAAGoJHAAAagocAABqCxwAAGoMHAAAag0cAABqDhwAAGq/FwAAasAXAABqAxsAAGoEGwAAag8cAABqEBwAAGoRHAAAahIcAABqKREAAGoqEQAAahUcAABqFhwAAGoXHAAAahgcAABqGRwAAGoaHAAAahscAABqHBwAAGodHAAAah4cAABqExYAAGoUFgAAaiEcAABqIhwAAGrtCwAAau4LAABqJRwAAGomHAAAaq0RAABqrhEAAGopHAAAaiocAABqwREAAGrCEQAAai0cAABqLhwAAGrNEQAAas4RAABqMRwAAGoyHAAAajMcAABqNBwAAGo1HAAAajYcAABqNxwAAGo4HAAAajkcAABqOhwAAGo7HAAAajwcAABqPRwAAGo+HAAAaj8cAABqQBwAAGpBHAAAakIcAABqQxwAAGpEHAAAakUcAABqRhwAAGpHHAAAakgcAABqSRwAAGpKHAAAakscAABqTBwAAGpNHAAAak4cAABqTxwAAGpQHAAAalEcAABqUhwAAGovFwAAajAXAABqVRwAAGpWHAAAalccAABqWBwAAGqBDQAAaoINAABqYRAAAGpiEAAAal0cAABqXhwAAGpfHAAAamAcAABqYRwAAGpiHAAAaukSAABq6hIAAGplHAAAamYcAABqZxwAAGpoHAAAamkcAABqahwAAGprHAAAamwcAABqbRwAAGpuHAAAam8cAABqcBwAAGpxHAAAanIcAABqcxwAAGp0HAAAanUcAABqdhwAAGp3HAAAangcAABqeRwAAGp6HAAAaucOAABq6A4AAGp9HAAAan4cAABqhxMAAGqIEwAAaoEcAABqghwAAGqDHAAAaoQcAABqhRwAAGqGHAAAaqUTAABqphMAAGqJHAAAaoocAABqixwAAGqMHAAAao0cAABqjhwAAGqPHAAAapAcAABqkRwAAGqSHAAAapMcAABqlBwAAGoRFAAAahIUAABqlxwAAGqYHAAAajUUAABqNhQAAGqbHAAAapwcAABqnRwAAGqeHAAAap8cAABqoBwAAGqhHAAAaqIcAABqoxwAAGqkHAAAaqUcAABqphwAAGqnHAAAaqgcAABqqRQAAGqqFAAAaqscAABqrBwAAGqtHAAAaq4cAABqrxwAAGqwHAAAai4EAABqLwQAAGqxHAAAarIcAABqsxwAAGq0HAAAatkUAABq2hQAAGq3HAAAargcAABquRwAAGq6HAAAarscAABqvBwAAGq9HAAAar4cAABqKxEAAGosEQAAasEcAABqwhwAAGrDHAAAasQcAABqxRwAAGrGHAAAasccAABqyBwAAGrJHAAAasocAABqyxwAAGrMHAAAas0cAABqzhwAAGrPHAAAatAcAABq0RwAAGrSHAAAak8VAABqUBUAAGrVHAAAatYcAABq1xwAAGrYHAAAatkcAABq2hwAAGrbHAAAatwcAABq3RwAAGreHAAAarcVAABquBUAAGrjHAAAauQcAABq5RwAAGrmHAAAavsZAABq/BkAAGrpHAAAauocAABq6xwAAGrsHAAAau0cAABq7hwAAGrvHAAAavAcAABq8RwAAGryHAAAavMcAABq9BwAAGr1HAAAavYcAABqTQUAAGpOBQAAavkcAABq+hwAAGr7HAAAavwcAABq/RwAAGr+HAAAav8cAABqAB0AAGoBHQAAagIdAABqAx0AAGoEHQAAagUdAABqBh0AAGoHHQAAaggdAABqCx0AAGoMHQAAag0dAABqDh0AAGoPHQAAahAdAABqER0AAGoSHQAAahMdAABqFB0AAGoVHQAAahYdAABqFx0AAGoYHQAAahkdAABqGh0AAGozFwAAajQXAABqHR0AAGoeHQAAah8dAABqIB0AAGohHQAAaiIdAABqIx0AAGokHQAAakkXAABqShcAAGpVFwAAalYXAABqKR0AAGoqHQAAaisdAABqLB0AAGotHQAAai4dAABqOAQAAGo5BAAAancXAABqeBcAAGpdGAAAal4YAABqMx0AAGo0HQAAap8XAABqoBcAAGo3HQAAajgdAABqOR0AAGo6HQAAajsdAABqPB0AAGo9HQAAaj4dAABqPx0AAGpAHQAAahkbAABqGhsAAGpDHQAAakQdAABqRR0AAGpGHQAAakcdAABqSB0AAGpJHQAAakodAABqSx0AAGpMHQAAaisYAABqLBgAAGr7HQAAavwdAABqUR0AAGpSHQAAalMdAABqVB0AAGpVHQAAalYdAABqVx0AAGpYHQAAalkdAABqWh0AAGpxGAAAanIYAABqXR0AAGpeHQAAalsFAABqXAUAAGpfHQAAamAdAABqYR0AAGpiHQAAaokaAABqihoAAGplHQAAamYdAABqZx0AAGpoHQAAamkdAABqah0AAGprHQAAamwdAABqoRsAAGqiGwAAam8dAABqcB0AAGpxHQAAanIdAABqcx0AAGp0HQAAanUdAABqdh0AAGoFHgAAagYeAABqeR0AAGp6HQAAansdAABqfB0AAGo1HQAAajYdAABqfR0AAGp+HQAAamUXAABqZhcAAGrNFQAAas4VAABqgx0AAGqEHQAAaoUdAABqhh0AAGqHHQAAaogdAABqiR0AAGqKHQAAaosdAABqjB0AAGqNHQAAao4dAABqjx0AAGqQHQAAapEdAABqkh0AAGqTHQAAapQdAABqlR0AAGqWHQAAapcdAABqmB0AAGqZHQAAapodAABqmx0AAGqcHQAAar8aAABqwBoAAGqfHQAAaqAdAABqARsAAGoCGwAAaqMdAABqpB0AAGqlHQAAaqYdAABqFRsAAGoWGwAAaqkdAABqqh0AAGqrHQAAaqwdAABqrR0AAGquHQAAaksbAABqTBsAAGqxHQAAarIdAABqsx0AAGq0HQAAarUdAABqth0AAGq3HQAAargdAABquR0AAGq6HQAAarsdAABqvB0AAGq9HQAAar4dAABqvx0AAGrAHQAAasEdAABqwh0AAGrDHQAAasQdAABqxR0AAGrGHQAAascdAABqyB0AAGrJHQAAasodAABqyx0AAGrMHQAAas0dAABqzh0AAGrPHQAAatAdAABq0R0AAGrSHQAAatMdAABq1B0AAGrVHQAAatYdAABq1x0AAGrYHQAAatkdAABq2h0AAGrbHQAAatwdAABq3R0AAGreHQAAat8dAABq4B0AAGrhHQAAauIdAABq4x0AAGrkHQAAauUdAABq5h0AAGofBQAAaiAFAABq6R0AAGrqHQAAapUMAABqlgwAAGrtHQAAau4dAABq7x0AAGrwHQAAavEdAABq8h0AAGrzHQAAavQdAABq9R0AAGr2HQAAavcdAABq+B0AAGr5HQAAavodAABqTx0AAGpQHQAAav0dAABq/h0AAGr/HQAAagAeAABqAR4AAGoCHgAAagMeAABqBB4AAGp3HQAAangdAABqBx4AAGoIHgAAagkeAABqCh4AAGoLHgAAagweAABqDR4AAGoOHgAAag8eAABqEB4AAGoRHgAAahIeAABqEx4AAGoUHgAAahUeAABqFh4AAGoXHgAAahgeAABqGR4AAGoaHgAAahseAABqHB4AAGodHgAAah4eAABqHx4AAGogHgAAaiEeAABqIh4AAGrDFQAAasQVAABqfRcAAGp+FwAAaiMeAABqJB4AAGolHgAAaiYeAABqnxoAAGqgGgAAdWpmIwAAfXJeVwAAKGqAIwAAaoEjAABqaiMAAGprIwAAamwjAABqbSMAAGpuIwAAam8jAABqcCMAAGpxIwAAanIjAABqcyMAAGp0IwAAanUjAABqdiMAAGp3IwAAangjAABqeSMAAGp6IwAAansjAABqfCMAAGp9IwAAan4jAABqfyMAAGpoIwAAamkjAABqgiMAAGqDIwAAdWowOQAAfXJfVwAAKGoyOQAAajM5AABqNDkAAGo1OQAAakY5AABqRzkAAGo4OQAAajk5AABqOjkAAGo7OQAAal45AABqXzkAAGo+OQAAaj85AABqQDkAAGpBOQAAakI5AABqQzkAAGpgOQAAamE5AABqNjkAAGo3OQAAalQ5AABqVTkAAGpKOQAAaks5AABqTDkAAGpNOQAAaoY5AABqhzkAAGp2OQAAanc5AABqUDkAAGpROQAAalI5AABqUzkAAGpWOQAAalc5AABqWDkAAGpZOQAAamQ5AABqZTkAAGpcOQAAal05AABqPDkAAGo9OQAAakQ5AABqRTkAAGpIOQAAakk5AABqjDkAAGqNOQAAalo5AABqWzkAAGpmOQAAamc5AABqaDkAAGppOQAAak45AABqTzkAAGpsOQAAam05AABqbjkAAGpvOQAAanA5AABqcTkAAGpyOQAAanM5AABqdDkAAGp1OQAAamo5AABqazkAAGp4OQAAank5AABqejkAAGp7OQAAan45AABqfzkAAGqAOQAAaoE5AABqgjkAAGqDOQAAaoQ5AABqhTkAAGpiOQAAamM5AABqiDkAAGqJOQAAaoo5AABqizkAAGp8OQAAan05AABqjjkAAGqPOQAAapA5AABqkTkAAHVqQAQAAH1yYFcAAChqETwAAGoSPAAAapM5AABqlDkAAGpTOwAAalQ7AABqlTkAAGqWOQAAalU7AABqVjsAAGpXOwAAalg7AABqlzkAAGqYOQAAapk5AABqmjkAAGpIBAAAakkEAABq1zkAAGrYOQAAap05AABqnjkAAGqfOQAAaqA5AABqoTkAAGqiOQAAalQEAABqVQQAAGqjOQAAaqQ5AABqWzsAAGpcOwAAaqU5AABqpjkAAGpdOwAAal47AABqpzkAAGqoOQAAaqk5AABqqjkAAGpfOwAAamA7AABqYAQAAGphBAAAaq05AABqrjkAAGqvOQAAarA5AABqZAQAAGplBAAAahk8AABqGjwAAGphOwAAamI7AABqsTkAAGqyOQAAam4EAABqbwQAAGpjOwAAamQ7AABqZTsAAGpmOwAAanIEAABqcwQAAGqzOQAAarQ5AABqcTwAAGpyPAAAakU6AABqRjoAAGqTOwAAapQ7AABqtzkAAGq4OQAAamk7AABqajsAAGpjOgAAamQ6AABqbTsAAGpuOwAAark5AABqujkAAGq7OQAAarw5AABqvTkAAGq+OQAAajc7AABqODsAAGpzOwAAanQ7AABqdTsAAGp2OwAAanc7AABqeDsAAGqxOgAAarI6AABqvzkAAGrAOQAAasE5AABqwjkAAGqrOwAAaqw7AABqlgQAAGqXBAAAasU5AABqxjkAAGrHOQAAasg5AABqyTkAAGrKOQAAans7AABqfDsAAGrXOgAAatg6AABqHzwAAGogPAAAan87AABqgDsAAGrLOQAAasw5AABqgTsAAGqCOwAAas05AABqzjkAAGqlPAAAaqY8AABqgzsAAGqEOwAAaoU7AABqhjsAAGrPOQAAatA5AABq0TkAAGrSOQAAakwEAABqTQQAAGqJOwAAaoo7AABq0TsAAGrSOwAAaloEAABqWwQAAGrTOQAAatQ5AABq1TkAAGrWOQAAamIEAABqYwQAAGqROwAAapI7AABqizsAAGqMOwAAahs6AABqHDoAAGoVOgAAahY6AABq2zkAAGrcOQAAat05AABq3jkAAGrfOQAAauA5AABqeTsAAGp6OwAAamwEAABqbQQAAGrhOQAAauI5AABqlzsAAGqYOwAAapk7AABqmjsAAGqbOwAAapw7AABq4zkAAGrkOQAAap07AABqnjsAAGp0BAAAanUEAABq1TsAAGrWOwAAap87AABqoDsAAGp8BAAAan0EAABqgAQAAGqBBAAAap88AABqoDwAAGrnOQAAaug5AABq6TkAAGrqOQAAaogEAABqiQQAAGqhOwAAaqI7AABqbzsAAGpwOwAAau05AABq7jkAAGrvOQAAavA5AABq8TkAAGryOQAAavM5AABq9DkAAGr1OQAAavY5AABqozsAAGqkOwAAalU8AABqVjwAAGqlOwAAaqY7AABq9zkAAGr4OQAAaqc7AABqqDsAAGr7OQAAavw5AABqQgQAAGpDBAAAaqk7AABqqjsAAGr9OQAAav45AABqXgQAAGpfBAAAaqs5AABqrDkAAGqtOwAAaq47AABqrzsAAGqwOwAAas87AABq0DsAAGqQBAAAapEEAABqsTsAAGqyOwAAav85AABqADoAAGoFPAAAagY8AABqtTsAAGq2OwAAaus5AABq7DkAAGq4PAAAark8AABquTsAAGq6OwAAagE6AABqAjoAAGoDOgAAagQ6AABqBToAAGoGOgAAagc6AABqCDoAAGq7OwAAarw7AABqaAQAAGppBAAAauA8AABq4TwAAGoLOgAAagw6AABqvTsAAGq+OwAAag06AABqDjoAAGq+PAAAar88AABqvzsAAGrAOwAAasE7AABqwjsAAGpwBAAAanEEAABqwzsAAGrEOwAAasA8AABqwTwAAGrFOwAAasY7AABqggQAAGqDBAAAaoQEAABqhQQAAGqGBAAAaocEAABqyTsAAGrKOwAAajc8AABqODwAAGoPOgAAahA6AABqEToAAGoSOgAAahM6AABqFDoAAGrNOwAAas47AABqkgQAAGqTBAAAaps5AABqnDkAAGoXOgAAahg6AABq0zsAAGrUOwAAahk6AABqGjoAAGrZOQAAato5AABqHToAAGoeOgAAah86AABqIDoAAGohOgAAaiI6AABq5TkAAGrmOQAAaiU6AABqJjoAAGo7PAAAajw8AABq1zsAAGrYOwAAatk7AABq2jsAAGonOgAAaig6AABq2zsAAGrcOwAAat07AABq3jsAAGpEBAAAakUEAABqKToAAGoqOgAAat87AABq4DsAAGorOgAAaiw6AABq4TsAAGriOwAAai06AABqLjoAAGrlOwAAauY7AABqUgQAAGpTBAAAai86AABqMDoAAGrnOwAAaug7AABqMToAAGoyOgAAauk7AABq6jsAAGo9PAAAaj48AABq6zsAAGrsOwAAajM6AABqNDoAAGo1OgAAajY6AABqNzoAAGo4OgAAakoEAABqSwQAAGo5OgAAajo6AABqOzoAAGo8OgAAau87AABq8DsAAGo/PAAAakA8AABqyToAAGrKOgAAalk7AABqWjsAAGrxOwAAavI7AABq8zsAAGr0OwAAaj86AABqQDoAAGpBOgAAakI6AABqQTwAAGpCPAAAakM6AABqRDoAAGr5OwAAavo7AABqZzsAAGpoOwAAakc6AABqSDoAAGr7OwAAavw7AABquzoAAGq8OgAAav87AABqADwAAGoBPAAAagI8AABqAzwAAGoEPAAAakk6AABqSjoAAGrLOgAAasw6AABqTToAAGpOOgAAak86AABqUDoAAGoLPAAAagw8AABqDTwAAGoOPAAAalM6AABqVDoAAGoHPAAAagg8AABqVToAAGpWOgAAalc6AABqWDoAAGoPPAAAahA8AABqWToAAGpaOgAAals6AABqXDoAAGoTPAAAahQ8AABqhzwAAGqIPAAAal06AABqXjoAAGpfOgAAamA6AABqeAQAAGp5BAAAahU8AABqFjwAAGoXPAAAahg8AABqYToAAGpiOgAAams7AABqbDsAAGplOgAAamY6AABqGzwAAGocPAAAah08AABqHjwAAGpQBAAAalEEAABqITwAAGoiPAAAamk6AABqajoAAGojPAAAaiQ8AABqazoAAGpsOgAAam06AABqbjoAAGqNOwAAao47AABqjzsAAGqQOwAAaik8AABqKjwAAGorPAAAaiw8AABqLTwAAGouPAAAai88AABqMDwAAGoxPAAAajI8AABqbzoAAGpwOgAAanE6AABqcjoAAGpzOgAAanQ6AABqdToAAGp2OgAAanc6AABqeDoAAGpvPAAAanA8AABqzjwAAGrPPAAAank6AABqejoAAGp7OgAAanw6AABqJTwAAGomPAAAajk8AABqOjwAAGqLPAAAaow8AABqfToAAGp+OgAAan86AABqgDoAAGqBOgAAaoI6AABqgzoAAGqEOgAAavc7AABq+DsAAGqFOgAAaoY6AABqQzwAAGpEPAAAakU8AABqRjwAAGpHPAAAakg8AABqSTwAAGpKPAAAavk5AABq+jkAAGpLPAAAakw8AABqTTwAAGpOPAAAanE7AABqcjsAAGpPPAAAalA8AABqbTwAAGpuPAAAaok6AABqijoAAGpRPAAAalI8AABqizoAAGqMOgAAalM8AABqVDwAAGqNOgAAao46AABqjzoAAGqQOgAAalc8AABqWDwAAGqROgAAapI6AABqWTwAAGpaPAAAapM6AABqlDoAAGqJPAAAaoo8AABqWzwAAGpcPAAAavU7AABq9jsAAGqXOgAAapg6AABqmToAAGqaOgAAaps6AABqnDoAAGqdOgAAap46AABqnzoAAGqgOgAAaqE6AABqojoAAGqjOgAAaqQ6AABqXzwAAGpgPAAAaqU6AABqpjoAAGqnOgAAaqg6AABqYTwAAGpiPAAAamYEAABqZwQAAGpjPAAAamQ8AABqszsAAGq0OwAAamU8AABqZjwAAGqpOgAAaqo6AABqqzoAAGqsOgAAamk8AABqajwAAGprPAAAamw8AABqlAQAAGqVBAAAaq06AABqrjoAAGqvOgAAarA6AABqtTkAAGq2OQAAanM8AABqdDwAAGpqBAAAamsEAABqszoAAGq0OgAAarU6AABqtjoAAGp1PAAAanY8AABqdzwAAGp4PAAAank8AABqejwAAGq3OgAAarg6AABquToAAGq6OgAAaoc6AABqiDoAAGr9OwAAav47AABqvToAAGq+OgAAar86AABqwDoAAGrBOgAAasI6AABqezwAAGp8PAAAaowEAABqjQQAAGrfOgAAauA6AABqwzoAAGrEOgAAasU6AABqxjoAAGpnPAAAamg8AABqgTwAAGqCPAAAapU7AABqljsAAGrNOgAAas46AABq2DwAAGrZPAAAasM5AABqxDkAAGqDPAAAaoQ8AABqxzoAAGrIOgAAaj06AABqPjoAAGqFPAAAaoY8AABqtzsAAGq4OwAAaks6AABqTDoAAGpROgAAalI6AABqzzoAAGrQOgAAatE6AABq0joAAGrTOgAAatQ6AABqZzoAAGpoOgAAaic8AABqKDwAAGpGBAAAakcEAABqjzwAAGqQPAAAatU6AABq1joAAGpdPAAAal48AABqkTwAAGqSPAAAan07AABqfjsAAGrZOgAAato6AABqlToAAGqWOgAAats6AABq3DoAAGrlOgAAauY6AABqVgQAAGpXBAAAauE6AABq4joAAGqVPAAAapY8AABqlzwAAGqYPAAAagk8AABqCjwAAGrjOgAAauQ6AABq3ToAAGreOgAAaps8AABqnDwAAGqdPAAAap48AABq5zoAAGroOgAAauk6AABq6joAAGqhPAAAaqI8AABqozwAAGqkPAAAavk6AABq+joAAGrrOgAAauw6AABqMzwAAGo0PAAAau06AABq7joAAGraPAAAats8AABq7zoAAGrwOgAAahE7AABqEjsAAGrzOgAAavQ6AABq9ToAAGr2OgAAaqs8AABqrDwAAGp2BAAAancEAABqrTwAAGquPAAAakM7AABqRDsAAGr3OgAAavg6AABqRzsAAGpIOwAAan4EAABqfwQAAGqxPAAAarI8AABqfTwAAGp+PAAAarM8AABqtDwAAGqKBAAAaosEAABq+zoAAGr8OgAAav06AABq/joAAGoJOgAAago6AABq/zoAAGoAOwAAagE7AABqAjsAAGoDOwAAagQ7AABqkzwAAGqUPAAAagU7AABqBjsAAGoHOwAAagg7AABYAQAAAFdqtTwAAGq2PAAAarc8AABqCTsAAGoKOwAAags7AABqDDsAAGqZPAAAapo8AABqwjwAAGrDPAAAalgEAABqWQQAAGrjOwAAauQ7AABqDTsAAGoOOwAAaro8AABquzwAAGq8PAAAar08AABqDzsAAGoQOwAAalwEAABqXQQAAGqnPAAAaqg8AABqEzsAAGoUOwAAasQ8AABqxTwAAGpOBAAAak8EAABqyzsAAGrMOwAAasY8AABqxzwAAGrIPAAAask8AABqFTsAAGoWOwAAaqk8AABqqjwAAGoXOwAAahg7AABqGTsAAGoaOwAAahs7AABqHDsAAGrKPAAAass8AABqfzwAAGqAPAAAao08AABqjjwAAGrMPAAAas08AABqHTsAAGoeOwAAah87AABqIDsAAGohOwAAaiI7AABq0DwAAGrRPAAAaiM7AABqJDsAAGrSPAAAatM8AABqIzoAAGokOgAAaiU7AABqJjsAAGonOwAAaig7AABqKTsAAGoqOwAAais7AABqLDsAAGotOwAAai47AABqLzsAAGowOwAAajU8AABqNjwAAGqHOwAAaog7AABqMTsAAGoyOwAAaug8AABq6TwAAGozOwAAajQ7AABqegQAAGp7BAAAaq88AABqsDwAAGo1OwAAajY7AABq8ToAAGryOgAAajk7AABqOjsAAGo7OwAAajw7AABq1jwAAGrXPAAAaj07AABqPjsAAGo/OwAAakA7AABqQTsAAGpCOwAAatw8AABq3TwAAGrePAAAat88AABqjgQAAGqPBAAAakU7AABqRjsAAGriPAAAauM8AABqSTsAAGpKOwAAauQ8AABq5TwAAGrHOwAAasg7AABqSzsAAGpMOwAAak07AABqTjsAAGrmPAAAauc8AABqTzsAAGpQOwAAalE7AABqUjsAAGrsPAAAau08AABq1DwAAGrVPAAAau07AABq7jsAAGrqPAAAaus8AABqmAQAAGqZBAAAdWruPAAAfXJhVwAAKGpSPQAAalM9AABqAD0AAGoBPQAAalY9AABqVz0AAGp0PQAAanU9AABq8DwAAGrxPAAAalg9AABqWT0AAGpaPQAAals9AABqED0AAGoRPQAAal49AABqXz0AAGpgPQAAamE9AABq9DwAAGr1PAAAamQ9AABqZT0AAGr2PAAAavc8AABqZj0AAGpnPQAAahQ9AABqFT0AAGqcPQAAap09AABqaD0AAGppPQAAavo8AABq+zwAAGr8PAAAav08AABqaj0AAGprPQAAav48AABq/zwAAGpUPQAAalU9AABqAj0AAGoDPQAAagQ9AABqBT0AAGoGPQAAagc9AABqCD0AAGoJPQAAago9AABqCz0AAGpuPQAAam89AABqcD0AAGpxPQAAanI9AABqcz0AAGoMPQAAag09AABqDj0AAGoPPQAAajo9AABqOz0AAGryPAAAavM8AABqEj0AAGoTPQAAavg8AABq+TwAAGoWPQAAahc9AABqGD0AAGoZPQAAaho9AABqGz0AAGocPQAAah09AABqHj0AAGofPQAAaiA9AABqIT0AAGoiPQAAaiM9AABqJD0AAGolPQAAaiY9AABqJz0AAGooPQAAaik9AABqKj0AAGorPQAAaiw9AABqLT0AAGouPQAAai89AABqYj0AAGpjPQAAanY9AABqdz0AAGowPQAAajE9AABqMj0AAGozPQAAanw9AABqfT0AAGo0PQAAajU9AABqNj0AAGo3PQAAaoA9AABqgT0AAGo4PQAAajk9AABqgj0AAGqDPQAAaoQ9AABqhT0AAGo8PQAAaj09AABqPj0AAGo/PQAAakA9AABqQT0AAGpCPQAAakM9AABqiD0AAGqJPQAAaoo9AABqiz0AAGpEPQAAakU9AABqRj0AAGpHPQAAao49AABqjz0AAGqQPQAAapE9AABqSD0AAGpJPQAAapQ9AABqlT0AAGqWPQAAapc9AABqmD0AAGqZPQAAapo9AABqmz0AAGqMPQAAao09AABqbD0AAGptPQAAap49AABqnz0AAGqgPQAAaqE9AABqoj0AAGqjPQAAaqQ9AABqpT0AAGqSPQAAapM9AABqSj0AAGpLPQAAaqY9AABqpz0AAGp4PQAAank9AABqqD0AAGqpPQAAano9AABqez0AAGqGPQAAaoc9AABqqj0AAGqrPQAAaqw9AABqrT0AAGpMPQAAak09AABqTj0AAGpPPQAAalA9AABqUT0AAGp+PQAAan89AABqXD0AAGpdPQAAdWqaBAAAfXJiVwAAKGqvPQAAarA9AABqI0UAAGokRQAAaiVFAABqJkUAAGqxPQAAarI9AABqsz0AAGq0PQAAaidFAABqKEUAAGopRQAAaipFAABqtT0AAGq2PQAAauM9AABq5D0AAGq3PQAAarg9AABquT0AAGq6PQAAars9AABqvD0AAGq9PQAAar49AABqvz0AAGrAPQAAasE9AABqwj0AAGoxRQAAajJFAABqM0UAAGo0RQAAajVFAABqNkUAAGrDPQAAasQ9AABqrAQAAGqtBAAAasU9AABqxj0AAGrHPQAAasg9AABqWUEAAGpaQQAAask9AABqyj0AAGo5RQAAajpFAABqO0UAAGo8RQAAass9AABqzD0AAGrNPQAAas49AABqk0IAAGqUQgAAas89AABq0D0AAGqDSwAAaoRLAABqPUUAAGo+RQAAaj9FAABqQEUAAGpBRQAAakJFAABq0T0AAGrSPQAAas9LAABq0EsAAGpDRQAAakRFAABqr0cAAGqwRwAAakVFAABqRkUAAGrVPQAAatY9AABq1z0AAGrYPQAAatk9AABq2j0AAGrbPQAAatw9AABqS0UAAGpMRQAAat09AABq3j0AAGrfPQAAauA9AABq4T0AAGriPQAAaitFAABqLEUAAGrtPgAAau4+AABqUUwAAGpSTAAAalNFAABqVEUAAGpVRQAAalZFAABqV0UAAGpYRQAAallFAABqWkUAAGpbRQAAalxFAABqLUUAAGouRQAAauU9AABq5j0AAGrnPQAAaug9AABqx0wAAGrITAAAal9FAABqYEUAAGovRQAAajBFAABq6T0AAGrqPQAAaus9AABq7D0AAGrtPQAAau49AABqYUUAAGpiRQAAamNFAABqZEUAAGrvPQAAavA9AABq8T0AAGryPQAAarVHAABqtkcAAGplRQAAamZFAABqZ0UAAGpoRQAAaptCAABqnEIAAGr1PQAAavY9AABq9z0AAGr4PQAAamlFAABqakUAAGprRQAAamxFAABq+T0AAGr6PQAAakc/AABqSD8AAGr7PQAAavw9AABq/T0AAGr+PQAAav89AABqAD4AAGoBPgAAagI+AABqWUcAAGpaRwAAam9FAABqcEUAAGoFPgAAagY+AABqcUUAAGpyRQAAagc+AABqCD4AAGoJPgAAago+AABqCz4AAGoMPgAAai1JAABqLkkAAGq6BAAAarsEAABqDT4AAGoOPgAAag8+AABqED4AAGpzRQAAanRFAABqdUUAAGp2RQAAandFAABqeEUAAGqjPwAAaqQ/AABqe0UAAGp8RQAAan1FAABqfkUAAGp/RQAAaoBFAABqgUUAAGqCRQAAagVJAABqBkkAAGpPSgAAalBKAABqg0UAAGqERQAAahE+AABqEj4AAGoTPgAAahQ+AABqhUUAAGqGRQAAahU+AABqFj4AAGrzPwAAavQ/AABqFz4AAGoYPgAAaolFAABqikUAAGpzRgAAanRGAABqGT4AAGoaPgAAao1FAABqjkUAAGrgBAAAauEEAABqkUUAAGqSRQAAaqdCAABqqEIAAGqVRQAAapZFAABql0UAAGqYRQAAaplFAABqmkUAAGrmBAAAaucEAABqHT4AAGoePgAAaiE+AABqIj4AAGotQAAAai5AAABqoUUAAGqiRQAAaqNFAABqpEUAAGojPgAAaiQ+AABqJT4AAGomPgAAaic+AABqKD4AAGrVQwAAatZDAABqKz4AAGosPgAAagdJAABqCEkAAGotPgAAai4+AABqLz4AAGowPgAAalNKAABqVEoAAGrTTAAAatRMAABqMT4AAGoyPgAAaqVGAABqpkYAAGqnRQAAaqhFAABqMz4AAGo0PgAAaqlFAABqqkUAAGo1PgAAajY+AABqvUcAAGq+RwAAaqtFAABqrEUAAGqVQAAAapZAAABqr0UAAGqwRQAAao1GAABqjkYAAGqTSwAAapRLAABqv0cAAGrARwAAarNFAABqtEUAAGo3PgAAajg+AABqkUsAAGqSSwAAardFAABquEUAAGq5RQAAarpFAABqa0AAAGpsQAAAajk+AABqOj4AAGrhQAAAauJAAABqwUUAAGrCRQAAajs+AABqPD4AAGrDRQAAasRFAABqPT4AAGo+PgAAasVFAABqxkUAAGo/PgAAakA+AABqY0kAAGpkSQAAakE+AABqQj4AAGojQAAAaiRAAABqx0UAAGrIRQAAakU+AABqRj4AAGrJRQAAaspFAABqW0oAAGpcSgAAakc+AABqSD4AAGpJPgAAako+AABqy0UAAGrMRQAAaitBAABqLEEAAGpLPgAAakw+AABqlUsAAGqWSwAAas9FAABq0EUAAGrRRQAAatJFAABqTT4AAGpOPgAAak8+AABqUD4AAGpdSgAAal5KAABq00UAAGrURQAAapdLAABqmEsAAGrVRQAAatZFAABqYUEAAGpiQQAAapNGAABqlEYAAGrbRQAAatxFAABqUUIAAGpSQgAAas1IAABqzkgAAGpRPgAAalI+AABqhUwAAGqGTAAAalM+AABqVD4AAGrfRQAAauBFAABqVT4AAGpWPgAAalc+AABqWD4AAGp9RgAAan5GAABq4gQAAGrjBAAAalk+AABqWj4AAGppSgAAampKAABqWz4AAGpcPgAAauFFAABq4kUAAGpdPgAAal4+AABqfUoAAGp+SgAAal8+AABqYD4AAGrjRQAAauRFAABqYT4AAGpiPgAAaudFAABq6EUAAGrpRQAAaupFAABqYz4AAGpkPgAAamU+AABqZj4AAGpxTAAAanJMAABqZz4AAGpoPgAAamk+AABqaj4AAGprPgAAamw+AABqbT4AAGpuPgAAavFFAABq8kUAAGrzRQAAavRFAABqbz4AAGpwPgAAanE+AABqcj4AAGpzPgAAanQ+AABq90UAAGr4RQAAanU+AABqdj4AAGqtSAAAaq5IAABqdz4AAGp4PgAAaqYEAABqpwQAAGqlTAAAaqZMAABqez4AAGp8PgAAavlFAABq+kUAAGotTAAAai5MAABqsAQAAGqxBAAAaklCAABqSkIAAGp9PgAAan4+AABqfz4AAGqAPgAAav1FAABq/kUAAGqBPgAAaoI+AABqgz4AAGqEPgAAav9FAABqAEYAAGoBRgAAagJGAABqgUgAAGqCSAAAaoU+AABqhj4AAGqHPgAAaog+AABqiT4AAGqKPgAAagNGAABqBEYAAGp3QgAAanhCAABqHUwAAGoeTAAAaos+AABqjD4AAGqNPgAAao4+AABqyAQAAGrJBAAAao8+AABqkD4AAGoJRgAAagpGAABqzAQAAGrNBAAAapE+AABqkj4AAGoNRgAAag5GAABqF0kAAGoYSQAAamVKAABqZkoAAGoPRgAAahBGAABqEUYAAGoSRgAAapM+AABqlD4AAGoTRgAAahRGAABqv0IAAGrAQgAAahVGAABqFkYAAGqjRgAAaqRGAABqlz4AAGqYPgAAakdFAABqSEUAAGodRgAAah5GAABqwUIAAGrCQgAAaps+AABqnD4AAGofRgAAaiBGAABqnT4AAGqePgAAaiFGAABqIkYAAGpJRQAAakpFAABqnz4AAGqgPgAAaiNGAABqJEYAAGqhPgAAaqI+AABqG0kAAGocSQAAaqM+AABqpD4AAGonQwAAaihDAABqTUUAAGpORQAAam1KAABqbkoAAGorRgAAaixGAABqpT4AAGqmPgAAaodIAABqiEgAAGotRgAAai5GAABqpz4AAGqoPgAAai9GAABqMEYAAGqrPgAAaqw+AABqMUYAAGoyRgAAaq0+AABqrj4AAGqnRgAAaqhGAABqNUYAAGo2RgAAajdGAABqOEYAAGpRRQAAalJFAABqrz4AAGqwPgAAarE+AABqsj4AAGqzPgAAarQ+AABqP0YAAGpARgAAaoFKAABqgkoAAGpBRgAAakJGAABqQ0YAAGpERgAAakVGAABqRkYAAGq1PgAAarY+AABq3UoAAGreSgAAarc+AABquD4AAGq5PgAAaro+AABquz4AAGq8PgAAar0+AABqvj4AAGpJRgAAakpGAABqS0YAAGpMRgAAak1GAABqTkYAAGq/PgAAasA+AABqs0sAAGq0SwAAalFGAABqUkYAAGpTRgAAalRGAABqwT4AAGrCPgAAaotIAABqjEgAAGrDPgAAasQ+AABq2AQAAGrZBAAAasU+AABqxj4AAGrHPgAAasg+AABq3AQAAGrdBAAAallGAABqWkYAAGpbRgAAalxGAABqXUYAAGpeRgAAanlEAABqekQAAGrJPgAAaso+AABqyz4AAGrMPgAAas0+AABqzj4AAGrPPgAAatA+AABqY0YAAGpkRgAAahlJAABqGkkAAGrRPgAAatI+AABqZUYAAGpmRgAAatlHAABq2kcAAGrvRwAAavBHAABq0z4AAGrUPgAAatU+AABq1j4AAGrXPgAAatg+AABqsUYAAGqyRgAAats+AABq3D4AAGrRRAAAatJEAABqcUMAAGpyQwAAam9GAABqcEYAAGpxRgAAanJGAABqR0oAAGpISgAAat0+AABq3j4AAGrfPgAAauA+AABq4T4AAGriPgAAanVGAABqdkYAAGrjPgAAauQ+AABq5T4AAGrmPgAAandGAABqeEYAAGp5RgAAanpGAABq5z4AAGroPgAAaitJAABqLEkAAGrrPgAAauw+AABqe0YAAGp8RgAAar4EAABqvwQAAGq5RgAAarpGAABqgUYAAGqCRgAAau8+AABq8D4AAGpdRQAAal5FAABqhUYAAGqGRgAAaodGAABqiEYAAGrzPgAAavQ+AABqiUYAAGqKRgAAaotGAABqjEYAAGr1PgAAavY+AABq9z4AAGr4PgAAavdLAABq+EsAAGr5PgAAavo+AABq1gQAAGrXBAAAarFFAABqskUAAGqPRgAAapBGAABqPUAAAGo+QAAAapFGAABqkkYAAGqTQQAAapRBAABq2UUAAGraRQAAar1GAABqvkYAAGo/QAAAakBAAABql0YAAGqYRgAAalVGAABqVkYAAGqbRgAAapxGAABq/z4AAGoAPwAAagE/AABqAj8AAGqdRgAAap5GAABqn0YAAGqgRgAAagM/AABqBD8AAGqhRgAAaqJGAABqk0UAAGqURQAAahdGAABqGEYAAGoFPwAAagY/AABqBz8AAGoIPwAAagk/AABqCj8AAGozRgAAajRGAABqqUYAAGqqRgAAaqtGAABqrEYAAGoLPwAAagw/AABqrUYAAGquRgAAajVJAABqNkkAAGrfQgAAauBCAABqDz8AAGoQPwAAahE/AABqEj8AAGqzRgAAarRGAABqtUYAAGq2RgAAagNJAABqBEkAAGq3RgAAarhGAABqf0YAAGqARgAAartGAABqvEYAAGoxSwAAajJLAABqlUYAAGqWRgAAahM/AABqFD8AAGoVPwAAahY/AABqwUYAAGrCRgAAasNGAABqxEYAAGrFRgAAasZGAABqx0YAAGrIRgAAaslGAABqykYAAGoPQQAAahBBAABqFz8AAGoYPwAAajNJAABqNEkAAGq5TAAAarpMAABqu0UAAGq8RQAAas1GAABqzkYAAGrPRgAAatBGAABqGT8AAGoaPwAAatFGAABq0kYAAGobPwAAahw/AABqHT8AAGoePwAAaiVIAABqJkgAAGrTRgAAatRGAABqHz8AAGogPwAAatVGAABq1kYAAGohPwAAaiI/AABqIz8AAGokPwAAatdGAABq2EYAAGrZRgAAatpGAABqJT8AAGomPwAAaic/AABqKD8AAGobTAAAahxMAABq6UIAAGrqQgAAattGAABq3EYAAGrdRgAAat5GAABqKz8AAGosPwAAai0/AABqLj8AAGrfRgAAauBGAABqLz8AAGowPwAAajE/AABqMj8AAGozPwAAajQ/AABqNT8AAGo2PwAAajc/AABqOD8AAGqJRwAAaopHAABq4UYAAGriRgAAajk/AABqOj8AAGqNRAAAao5EAABqOz8AAGo8PwAAahlGAABqGkYAAGrjRgAAauRGAABqPT8AAGo+PwAAaj8/AABqQD8AAGrnRgAAauhGAABq6UYAAGrqRgAAau1HAABq7kcAAGrrRgAAauxGAABqT0UAAGpQRQAAau1GAABq7kYAAGpZSQAAalpJAABqQz8AAGpEPwAAau4EAABq7wQAAGptRQAAam5FAABqST8AAGpKPwAAaks/AABqTD8AAGrvRgAAavBGAABqTT8AAGpOPwAAavFGAABq8kYAAGpPPwAAalA/AABqi0oAAGqMSgAAalM/AABqVD8AAGpFSQAAakZJAABqVT8AAGpWPwAAalc/AABqWD8AAGpJQAAAakpAAABqz0gAAGrQSAAAandLAABqeEsAAGpbPwAAalw/AABq9UYAAGr2RgAAaidJAABqKEkAAGpdPwAAal4/AABq1UsAAGrWSwAAavdGAABq+EYAAGr5RgAAavpGAABq+0YAAGr8RgAAal8/AABqYD8AAGr1RwAAavZHAABq/UYAAGr+RgAAamE/AABqYj8AAGr/RgAAagBHAABqYz8AAGpkPwAAamU/AABqZj8AAGpnPwAAamg/AABqA0cAAGoERwAAamk/AABqaj8AAGprPwAAamw/AABqBUcAAGoGRwAAagdHAABqCEcAAGoFSAAAagZIAABqCUcAAGoKRwAAaudLAABq6EsAAGptPwAAam4/AABqbz8AAGpwPwAAanE/AABqcj8AAGpzPwAAanQ/AABqDUcAAGoORwAAag1LAABqDksAAGoPRwAAahBHAABqAUgAAGoCSAAAanU/AABqdj8AAGqPSgAAapBKAABqdz8AAGp4PwAAahNHAABqFEcAAGpNQAAAak5AAABqFUcAAGoWRwAAahdHAABqGEcAAGphRgAAamJGAABqGUcAAGoaRwAAans/AABqfD8AAGquBAAAaq8EAABqG0cAAGocRwAAan0/AABqfj8AAGp/PwAAaoA/AABq90cAAGr4RwAAah1HAABqHkcAAGofRwAAaiBHAABqIUcAAGoiRwAAaoE/AABqgj8AAGojRwAAaiRHAABqgz8AAGqEPwAAaiVHAABqJkcAAGqFPwAAaoY/AABqhz8AAGqIPwAAaok/AABqij8AAGonRwAAaihHAABqiz8AAGqMPwAAailHAABqKkcAAGrSBAAAatMEAABqK0cAAGosRwAAai1HAABqLkcAAGovRwAAajBHAABqMUcAAGoyRwAAajNHAABqNEcAAGqjTAAAaqRMAABqjT8AAGqOPwAAajVHAABqNkcAAGqPPwAAapA/AABqN0cAAGo4RwAAapE/AABqkj8AAGo7RwAAajxHAABqkz8AAGqUPwAAaj9HAABqQEcAAGqVPwAAapY/AABqlz8AAGqYPwAAakFHAABqQkcAAGqZPwAAapo/AABqmz8AAGqcPwAAap0/AABqnj8AAGqfPwAAaqA/AABqoT8AAGqiPwAAanlFAABqekUAAGqXSgAAaphKAABqpz8AAGqoPwAAapVMAABqlkwAAGqpPwAAaqo/AABqk0wAAGqUTAAAakdHAABqSEcAAGpJRwAAakpHAABq30sAAGrgSwAAauFLAABq4ksAAGpLRwAAakxHAABqTUcAAGpORwAAaj9LAABqQEsAAGpPRwAAalBHAABqrT8AAGquPwAAaq8/AABqsD8AAGq0BAAAarUEAABqU0cAAGpURwAAaqNLAABqpEsAAGpVRwAAalZHAABqV0cAAGpYRwAAagM+AABqBD4AAGqxPwAAarI/AABqsz8AAGq0PwAAarwEAABqvQQAAGqpPgAAaqo+AABqX0cAAGpgRwAAarc/AABquD8AAGq5PwAAaro/AABqZUcAAGpmRwAAars/AABqvD8AAGq9PwAAar4/AABqvz8AAGrAPwAAamlHAABqakcAAGrBPwAAasI/AABqwz8AAGrEPwAAamtHAABqbEcAAGqbSgAAapxKAABqbUcAAGpuRwAAasU/AABqxj8AAGpxRwAAanJHAABqxz8AAGrIPwAAatoEAABq2wQAAGrJPwAAaso/AABqdUcAAGp2RwAAass/AABqzD8AAGrNPwAAas4/AABqeUcAAGp6RwAAas8/AABq0D8AAGrRPwAAatI/AABq0z8AAGrUPwAAatU/AABq1j8AAGrXPwAAatg/AABqfUcAAGp+RwAAan9HAABqgEcAAGqBRwAAaoJHAABqg0cAAGqERwAAatk/AABq2j8AAGrbPwAAatw/AABqh0cAAGqIRwAAat0/AABq3j8AAGqLRwAAaoxHAABq3z8AAGrgPwAAauE/AABq4j8AAGq7TAAAarxMAABq4z8AAGrkPwAAaqQEAABqpQQAAGqvRgAAarBGAABq5T8AAGrmPwAAauc/AABq6D8AAGqRRwAAapJHAABq6T8AAGrqPwAAaus/AABq7D8AAGq9SgAAar5KAABq7UsAAGruSwAAau0/AABq7j8AAGrvPwAAavA/AABqmUcAAGqaRwAAavE/AABq8j8AAGqHRQAAaohFAABqpUoAAGqmSgAAap1HAABqnkcAAGr1PwAAavY/AABq9z8AAGr4PwAAaqFHAABqokcAAGr5PwAAavo/AABq+z8AAGr8PwAAaqdKAABqqEoAAGqlRwAAaqZHAABq/T8AAGr+PwAAav8/AABqAEAAAGoBQAAAagJAAABqA0AAAGoEQAAAagVAAABqBkAAAGqLRQAAaoxFAABqB0AAAGoIQAAAauVGAABq5kYAAGoJQAAAagpAAABqq0cAAGqsRwAAamlAAABqakAAAGoNQAAAag5AAABqQ0oAAGpESgAAagdMAABqCEwAAGqPRQAAapBFAABqrUcAAGquRwAAatM9AABq1D0AAGoRQAAAahJAAABqE0AAAGoUQAAAarFHAABqskcAAGqzRwAAarRHAABqFUAAAGoWQAAAaqdHAABqqEcAAGoXQAAAahhAAABquUcAAGq6RwAAahlAAABqGkAAAGp5TAAAanpMAABqG0AAAGocQAAAaik+AABqKj4AAGrpPgAAauo+AABqH0AAAGogQAAAaiFAAABqIkAAAGrzSwAAavRLAABqnUUAAGqeRQAAakM+AABqRD4AAGr1SwAAavZLAABqJUAAAGomQAAAaidAAABqKEAAAGoLSAAAagxIAABqwUcAAGrCRwAAasNHAABqxEcAAGorQAAAaixAAABqxUcAAGrGRwAAasdHAABqyEcAAGqfRQAAaqBFAABqyUcAAGrKRwAAai9AAABqMEAAAGr7SwAAavxLAABqzUcAAGrORwAAas9HAABq0EcAAGpnSQAAamhJAABq0UcAAGrSRwAAatNHAABq1EcAAGoxQAAAajJAAABq1UcAAGrWRwAAatdHAABq2EcAAGqeBAAAap8EAABqp0kAAGqoSQAAajNAAABqNEAAAGo1QAAAajZAAABquUoAAGq6SgAAattHAABq3EcAAGrxPgAAavI+AABqOUAAAGo6QAAAajtAAABqPEAAAGr7PgAAavw+AABq/T4AAGr+PgAAat9HAABq4EcAAGrzSgAAavRKAABqL0wAAGowTAAAauFHAABq4kcAAGrjRwAAauRHAABq5UcAAGrmRwAAakNAAABqREAAAGrpRwAAaupHAABqRUAAAGpGQAAAalNJAABqVEkAAGpHQAAAakhAAABq60cAAGrsRwAAakFJAABqQkkAAGpBPwAAakI/AABqRT8AAGpGPwAAalk/AABqWj8AAGonSwAAaihLAABq8UcAAGryRwAAavNHAABq9EcAAGrPQQAAatBBAABqXUgAAGpeSAAAavYEAABq9wQAAGpLQAAAakxAAABqeT8AAGp6PwAAalFAAABqUkAAAGpTQAAAalRAAABq+UcAAGr6RwAAaldAAABqWEAAAGpZQAAAalpAAABq+0cAAGr8RwAAaltAAABqXEAAAGpdQAAAal5AAABq/UcAAGr+RwAAarU/AABqtj8AAGpfQAAAamBAAABqsgQAAGqzBAAAamNAAABqZEAAAGppTAAAampMAABqZUAAAGpmQAAAagNIAABqBEgAAGpnQAAAamhAAABq80YAAGr0RgAAagtAAABqDEAAAGrXSwAAathLAABqCUgAAGoKSAAAavFLAABq8ksAAGopQAAAaipAAABqDUgAAGoOSAAAam9AAABqcEAAAGoPSAAAahBIAABqEUgAAGoSSAAAanFAAABqckAAAGoTSAAAahRIAABqc0AAAGp0QAAAahVIAABqFkgAAGp1QAAAanZAAABqd0AAAGp4QAAAahdIAABqGEgAAGoZSAAAahpIAABqeUAAAGp6QAAAahtIAABqHEgAAGp7QAAAanxAAABqyUoAAGrKSgAAah1IAABqHkgAAGp9QAAAan5AAABqH0gAAGogSAAAan9AAABqgEAAAGqBQAAAaoJAAABqEUwAAGoSTAAAaoNAAABqhEAAAGofPgAAaiA+AABqIUgAAGoiSAAAaiNIAABqJEgAAGqHQAAAaohAAABqy0AAAGrMQAAAaidIAABqKEgAAGqJQAAAaopAAABqi0AAAGqMQAAAao1AAABqjkAAAGqPQAAAapBAAABqKUgAAGoqSAAAamtIAABqbEgAAGorSAAAaixIAABqkUAAAGqSQAAAapNAAABqlEAAAGqtRQAAaq5FAABql0AAAGqYQAAAaplAAABqmkAAAGqbQAAAapxAAABqnUAAAGqeQAAAap9AAABqoEAAAGqhQAAAaqJAAABqo0AAAGqkQAAAaqVAAABqpkAAAGozSAAAajRIAABqNUgAAGo2SAAAaqlAAABqqkAAAGp9SQAAan5JAABq+UsAAGr6SwAAarYEAABqtwQAAGpRPwAAalI/AABqq0AAAGqsQAAAaq1AAABqrkAAAGqvQAAAarBAAABqsUAAAGqyQAAAajlIAABqOkgAAGo7SAAAajxIAABqs0AAAGq0QAAAarVAAABqtkAAAGqFQAAAaoZAAABquUAAAGq6QAAAaj9IAABqQEgAAGq7QAAAarxAAABqvUAAAGq+QAAAar9AAABqwEAAAGpBSAAAakJIAABqQ0gAAGpESAAAakVIAABqRkgAAGrBQAAAasJAAABq0AQAAGrRBAAAasNAAABqxEAAAGpHSAAAakhIAABqxUAAAGrGQAAAaktIAABqTEgAAGpNSAAAak5IAABqx0AAAGrIQAAAaoNJAABqhEkAAGrJQAAAaspAAABq50EAAGroQQAAalNIAABqVEgAAGrNQAAAas5AAABqz0AAAGrQQAAAatFAAABq0kAAAGrTQAAAatRAAABqWUgAAGpaSAAAagNKAABqBEoAAGrVQAAAatZAAABq10AAAGrYQAAAatlAAABq2kAAAGrbQAAAatxAAABqW0gAAGpcSAAAajVCAABqNkIAAGpfSAAAamBIAABq3UAAAGreQAAAamFIAABqYkgAAGqFSQAAaoZJAABq30AAAGrgQAAAar9FAABqwEUAAGphRwAAamJHAABqY0gAAGpkSAAAauVAAABq5kAAAGpnSAAAamhIAABqRUcAAGpGRwAAaudAAABq6EAAAGppSAAAampIAABqN0oAAGo4SgAAaplCAABqmkIAAGrpQAAAaupAAABq60AAAGrsQAAAam9IAABqcEgAAGrtQAAAau5AAABqwUwAAGrCTAAAau9AAABq8EAAAGrxQAAAavJAAABqcUgAAGpySAAAanNIAABqdEgAAGrkBAAAauUEAABq9UAAAGr2QAAAavdAAABq+EAAAGp3SAAAanhIAABq+UAAAGr6QAAAavtAAABq/EAAAGp5SAAAanpIAABqe0gAAGp8SAAAav1AAABq/kAAAGr/QAAAagBBAABqAUEAAGoCQQAAan9IAABqgEgAAGoDQQAAagRBAABqB0EAAGoIQQAAaglBAABqCkEAAGpHQwAAakhDAABqC0EAAGoMQQAAatVCAABq1kIAAGqJSAAAaopIAABqDUEAAGoOQQAAao1IAABqjkgAAGqPSAAAapBIAABqkUgAAGqSSAAAaqoEAABqqwQAAGqTSAAAapRIAABqlUgAAGqWSAAAahFBAABqEkEAAGqXSAAAaphIAABqmUgAAGqaSAAAahNBAABqFEEAAGoVQQAAahZBAABqF0EAAGoYQQAAahdMAABqGEwAAGoBRwAAagJHAABqn0MAAGqgQwAAahlBAABqGkEAAGqvSQAAarBJAABqG0EAAGocQQAAah1BAABqHkEAAGofQQAAaiBBAABqpUgAAGqmSAAAaqdIAABqqEgAAGqpSAAAaqpIAABqq0gAAGqsSAAAailDAABqKkMAAGojQQAAaiRBAABqLUgAAGouSAAAarFIAABqskgAAGqzSAAAarRIAABqO0kAAGo8SQAAarVIAABqtkgAAGqLSQAAaoxJAABqJUEAAGomQQAAardIAABquEgAAGonQQAAaihBAABqKUEAAGoqQQAAartIAABqvEgAAGrNRQAAas5FAABqJUwAAGomTAAAao1JAABqjkkAAGotQQAAai5BAABqvUgAAGq+SAAAai9BAABqMEEAAGq/SAAAasBIAABqMUEAAGoyQQAAajNBAABqNEEAAGo1QQAAajZBAABqN0EAAGo4QQAAasVIAABqxkgAAGodSwAAah5LAABqOUEAAGo6QQAAaldEAABqWEQAAGo7QQAAajxBAABqyUgAAGrKSAAAaj1BAABqPkEAAGpRSQAAalJJAABqP0EAAGpAQQAAastIAABqzEgAAGpBQQAAakJBAABqQ0EAAGpEQQAAakVBAABqRkEAAGpHQQAAakhBAABqSUEAAGpKQQAAaktBAABqTEEAAGrUBAAAatUEAABq00gAAGrUSAAAak1BAABqTkEAAGrVSAAAatZIAABqT0EAAGpQQQAAatlIAABq2kgAAGpRQQAAalJBAABq20gAAGrcSAAAat4EAABq3wQAAGrfSAAAauBIAABq4UgAAGriSAAAanVKAABqdkoAAGrjSAAAauRIAABqU0EAAGpUQQAAauNEAABq5EQAAGrnSAAAauhIAABq6UgAAGrqSAAAautIAABq7EgAAGrtSAAAau5IAABq70gAAGrwSAAAalVBAABqVkEAAGoHRQAAaghFAABq80gAAGr0SAAAagtFAABqDEUAAGp/TAAAaoBMAABqi0wAAGqMTAAAavdIAABq+EgAAGpXQQAAalhBAAB1KGqpSgAAaqpKAABqqAQAAGqpBAAAaltBAABqXEEAAGr5SAAAavpIAABq+0gAAGr8SAAAal1BAABqXkEAAGpfQQAAamBBAABqbUAAAGpuQAAAamNBAABqZEEAAGrrRQAAauxFAABqAUkAAGoCSQAAamVBAABqZkEAAGoLRwAAagxHAABqZ0EAAGpoQQAAamlBAABqakEAAGprQQAAamxBAABqpUUAAGqmRQAAaglJAABqCkkAAGptQQAAam5BAABq3UUAAGreRQAAam9BAABqcEEAAGrjSgAAauRKAABqcUEAAGpyQQAAanNBAABqdEEAAGoNSQAAag5JAABqdUEAAGp2QQAAag9JAABqEEkAAGp3QQAAanhBAABqeUEAAGp6QQAAahFJAABqEkkAAGp7QQAAanxBAABqE0kAAGoUSQAAan1BAABqfkEAAGp/QQAAaoBBAABqbUQAAGpuRAAAaoFBAABqgkEAAGolRgAAaiZGAABqg0EAAGqEQQAAaoVBAABqhkEAAGodSQAAah5JAABqh0EAAGqIQQAAah9JAABqIEkAAGqJQQAAaopBAABqmUkAAGqaSQAAaiFJAABqIkkAAGojSQAAaiRJAABqJUkAAGomSQAAahFHAABqEkcAAGqLQQAAaoxBAABqKUkAAGoqSQAAao1BAABqjkEAAGqPQQAAapBBAABqkUEAAGqSQQAAardAAABquEAAAGovSQAAajBJAABq+AQAAGr5BAAAapVBAABqlkEAAGoxSQAAajJJAABql0EAAGqYQQAAaplBAABqmkEAAGqbQQAAapxBAABqN0kAAGo4SQAAajlJAABqOkkAAGqdQQAAap5BAABqn0EAAGqgQQAAaj1JAABqPkkAAGo5TAAAajpMAABqP0kAAGpASQAAaoNEAABqhEQAAGpDSQAAakRJAABq6UoAAGrqSgAAaqVLAABqpksAAGqhQQAAaqJBAABqR0kAAGpISQAAaklJAABqSkkAAGqjQQAAaqRBAABqS0kAAGpMSQAAagdIAABqCEgAAGo3SAAAajhIAABqTUkAAGpOSQAAaqVBAABqpkEAAGqnQQAAaqhBAABqqUEAAGqqQQAAaqtBAABqrEEAAGqtQQAAaq5BAABqr0EAAGqwQQAAarFBAABqskEAAGqzQQAAarRBAABqtUEAAGq2QQAAalVJAABqVkkAAGpXSQAAalhJAABqt0EAAGq4QQAAarlBAABqukEAAGpdSQAAal5JAABqX0kAAGpgSQAAartBAABqvEEAAGphSQAAamJJAABqvUEAAGq+QQAAar9BAABqwEEAAGrBQQAAasJBAABq0UsAAGrSSwAAasNBAABqxEEAAGqZRgAAappGAABqZUkAAGpmSQAAauwEAABq7QQAAGrHQQAAashBAABqSUgAAGpKSAAAamlJAABqakkAAGqpSQAAaqpJAABqyUEAAGrKQQAAam1JAABqbkkAAGrLQQAAasxBAABq7UUAAGruRQAAaj1DAABqPkMAAGpvSQAAanBJAABqN0AAAGo4QAAAanNJAABqdEkAAGrRQQAAatJBAABq00EAAGrUQQAAatVBAABq1kEAAGpnSgAAamhKAABqdUkAAGp2SQAAandJAABqeEkAAGrXQQAAathBAABq2UEAAGraQQAAattBAABq3EEAAGrdQQAAat5BAABqeUkAAGp6SQAAat9BAABq4EEAAGp7SQAAanxJAABq4UEAAGriQQAAau9FAABq8EUAAGqBSQAAaoJJAABqUUgAAGpSSAAAag1CAABqDkIAAGrjQQAAauRBAABq5UEAAGrmQQAAaodJAABqiEkAAGqJSQAAaopJAABq6UEAAGrqQQAAautBAABq7EEAAGrtQQAAau5BAABq8UoAAGrySgAAau9BAABq8EEAAGrxQQAAavJBAABq80EAAGr0QQAAao9JAABqkEkAAGqRSQAAapJJAABqk0kAAGqUSQAAavVBAABq9kEAAGr3QQAAavhBAABqlUkAAGqWSQAAavlBAABq+kEAAGqXSQAAaphJAABq+0EAAGr8QQAAav1BAABq/kEAAGq9RQAAar5FAABq/0EAAGoAQgAAagFLAABqAksAAGoBQgAAagJCAABqA0IAAGoEQgAAalNLAABqVEsAAGoFQgAAagZCAABqVUgAAGpWSAAAaptJAABqnEkAAGqdSQAAap5JAABqn0kAAGqgSQAAagdCAABqCEIAAGpLTAAAakxMAABqo0kAAGqkSQAAavAEAABq8QQAAGoJQgAAagpCAABqpUkAAGqmSQAAaldIAABqWEgAAGoLQgAAagxCAABqa0kAAGpsSQAAaqtJAABqrEkAAGqtSQAAaq5JAABqT0AAAGpQQAAAag9CAABqEEIAAGozTAAAajRMAABqsUkAAGqySQAAahFCAABqEkIAAGoTQgAAahRCAABqtUkAAGq2SQAAardJAABquEkAAGpPTAAAalBMAABqFUIAAGoWQgAAahdCAABqGEIAAGoZQgAAahpCAABqG0IAAGocQgAAartJAABqvEkAAGodQgAAah5CAABqH0IAAGogQgAAar1JAABqvkkAAGp7SwAAanxLAABqv0kAAGrASQAAaiFCAABqIkIAAGrBSQAAasJJAABqI0IAAGokQgAAaiVCAABqJkIAAGonQgAAaihCAABqZ0sAAGpoSwAAartLAABqvEsAAGrCBAAAasMEAABqw0kAAGrESQAAailCAABqKkIAAGrFSQAAasZJAABqx0kAAGrISQAAaitCAABqLEIAAGotQgAAai5CAABqyUkAAGrKSQAAai9IAABqMEgAAGrLSQAAasxJAABqzUkAAGrOSQAAai9CAABqMEIAAGoxQgAAajJCAABqM0IAAGo0QgAAas9JAABq0EkAAGrRSQAAatJJAABqN0IAAGo4QgAAajlCAABqOkIAAGo7QgAAajxCAABq/0cAAGoASAAAatdJAABq2EkAAGo9QgAAaj5CAABquUkAAGq6SQAAaj9CAABqQEIAAGrdSQAAat5JAABqQUIAAGpCQgAAauFJAABq4kkAAGpDQgAAakRCAABqRUIAAGpGQgAAakdCAABqSEIAAGr7RQAAavxFAABqe0cAAGp8RwAAaktCAABqTEIAAGrnSQAAauhJAABqTUIAAGpOQgAAak9CAABqUEIAAGozSgAAajRKAABq60kAAGrsSQAAatFIAABq0kgAAGrqBAAAausEAABqU0IAAGpUQgAAau1JAABq7kkAAGrvSQAAavBJAABqYUwAAGpiTAAAalVCAABqVkIAAGrxSQAAavJJAABqV0IAAGpYQgAAavVJAABq9kkAAGr3SQAAavhJAABq+UkAAGr6SQAAallCAABqWkIAAGr7SQAAavxJAABqW0IAAGpcQgAAal1CAABqXkIAAGpfQgAAamBCAABq/0kAAGoASgAAamFCAABqYkIAAGplTAAAamZMAABqY0IAAGpkQgAAasAEAABqwQQAAGplQgAAamZCAABqG0YAAGocRgAAagFKAABqAkoAAGpnQgAAamhCAABqaUIAAGpqQgAAamtCAABqbEIAAGoFSgAAagZKAABqB0oAAGoISgAAam1CAABqbkIAAGoJSgAAagpKAABqqz8AAGqsPwAAag1KAABqDkoAAGoRSwAAahJLAABqZUgAAGpmSAAAam9CAABqcEIAAGoPSgAAahBKAABqFUsAAGoWSwAAahFKAABqEkoAAGr9SAAAav5IAABqE0oAAGoUSgAAahVKAABqFkoAAGo5RwAAajpHAABqF0oAAGoYSgAAanFCAABqckIAAGpzQgAAanRCAABqGUoAAGoaSgAAanVCAABqdkIAAGpFSgAAakZKAABqBUYAAGoGRgAAahtKAABqHEoAAGp5QgAAanpCAABqD0sAAGoQSwAAah9KAABqIEoAAGohSgAAaiJKAABqe0IAAGp8QgAAan1CAABqfkIAAGolSgAAaiZKAABqf0IAAGqAQgAAaj1HAABqPkcAAGprTAAAamxMAABqgUIAAGqCQgAAailKAABqKkoAAGqDQgAAaoRCAABqK0oAAGosSgAAai1KAABqLkoAAGovSgAAajBKAABqMUoAAGoySgAAaoVCAABqhkIAAGqHQgAAaohCAABqiUIAAGqKQgAAajVKAABqNkoAAGqLQgAAaoxCAABqjUIAAGqOQgAAao9CAABqkEIAAGqRQgAAapJCAABqOUoAAGo6SgAAartHAABqvEcAAGobSwAAahxLAABquAQAAGq5BAAAajtKAABqPEoAAGo9SgAAaj5KAABqlUIAAGqWQgAAaj9KAABqQEoAAGoLRgAAagxGAABql0IAAGqYQgAAakFKAABqQkoAAGoFQQAAagZBAABqt0cAAGq4RwAAavM9AABq9D0AAGqdQgAAap5CAABqSUoAAGpKSgAAasoEAABqywQAAGpNSgAAak5KAABqn0IAAGqgQgAAaqFCAABqokIAAGqrRAAAaqxEAABqo0IAAGqkQgAAalFKAABqUkoAAGqlQgAAaqZCAABqGz4AAGocPgAAaqlCAABqqkIAAGpVSgAAalZKAABqV0oAAGpYSgAAam1IAABqbkgAAGqrQgAAaqxCAABqWUoAAGpaSgAAamtLAABqbEsAAGqtQgAAaq5CAABqr0IAAGqwQgAAamVDAABqZkMAAGpfSgAAamBKAABqs0IAAGq0QgAAamFKAABqYkoAAGq1QgAAarZCAABqY0oAAGpkSgAAardCAABquEIAAGq5QgAAarpCAABqu0IAAGq8QgAAar1CAABqvkIAAGqVPgAAapY+AABqmT4AAGqaPgAAasNCAABqxEIAAGprSgAAamxKAABqPUgAAGo+SAAAasVCAABqxkIAAGrHQgAAashCAABqyUIAAGrKQgAAam9KAABqcEoAAGpxSgAAanJKAABqnAQAAGqdBAAAastCAABqzEIAAGpzSgAAanRKAABqzUIAAGrOQgAAas9CAABq0EIAAGrRQgAAatJCAABq00IAAGrUQgAAatk+AABq2j4AAGrXQgAAathCAABq2UIAAGraQgAAattCAABq3EIAAGp3SgAAanhKAABqeUoAAGp6SgAAap1IAABqnkgAAGp7SgAAanxKAABq3UIAAGreQgAAakNHAABqREcAAGoNPwAAag4/AABq4UIAAGriQgAAauNCAABq5EIAAGp/SgAAaoBKAABq00kAAGrUSQAAauVCAABq5kIAAGrnQgAAauhCAABqg0oAAGqESgAAaik/AABqKj8AAGrrQgAAauxCAABq1UkAAGrWSQAAaiNKAABqJEoAAGqJSgAAaopKAABqoUQAAGqiRAAAau1CAABq7kIAAGrvQgAAavBCAABq8UIAAGryQgAAavNCAABq9EIAAGr1QgAAavZCAABqjUoAAGqOSgAAavdCAABq+EIAAGr5QgAAavpCAABq+0IAAGr8QgAAapFKAABqkkoAAGr9QgAAav5CAABqk0oAAGqUSgAAav9CAABqAEMAAGqVSgAAapZKAABqx0gAAGrISAAAaqU/AABqpj8AAGoBQwAAagJDAABqdUgAAGp2SAAAaplKAABqmkoAAGoDQwAAagRDAABqnUoAAGqeSgAAagVDAABqBkMAAGqfSgAAaqBKAABqoUoAAGqiSgAAaqNKAABqpEoAAGoHQwAAaghDAABqf0kAAGqASQAAattJAABq3EkAAGoJQwAAagpDAABqD0AAAGoQQAAAagtDAABqDEMAAGoNQwAAag5DAABqq0oAAGqsSgAAah1AAABqHkAAAGqvSgAAarBKAABqsUoAAGqySgAAarNKAABqtEoAAGq1SgAAarZKAABqt0oAAGq4SgAAat9JAABq4EkAAGpBQAAAakJAAABqEUMAAGoSQwAAartKAABqvEoAAGqXRwAAaphHAABqVUAAAGpWQAAAahNDAABqFEMAAGrBSgAAasJKAABqFUMAAGoWQwAAasNKAABqxEoAAGrFSgAAasZKAABqF0MAAGoYQwAAasdKAABqyEoAAGrBRAAAasJEAABqGUMAAGoaQwAAastKAABqzEoAAGobQwAAahxDAABqHUMAAGoeQwAAah9DAABqIEMAAGrRSgAAatJKAABq00oAAGrUSgAAaiFDAABqIkMAAGrVSgAAatZKAABqI0MAAGokQwAAaiVDAABqJkMAAGrXSgAAathKAABq80AAAGr0QAAAaidGAABqKEYAAGrbSgAAatxKAABqKUYAAGoqRgAAaktKAABqTEoAAGpRRwAAalJHAABqIUEAAGoiQQAAauNJAABq5EkAAGp9SAAAan5IAABq30oAAGrgSgAAajlLAABqOksAAGqJTAAAaopMAABqLUMAAGouQwAAah9LAABqIEsAAGrhSgAAauJKAABqL0MAAGowQwAAatlKAABq2koAAGoxQwAAajJDAABq5UoAAGrmSgAAak9IAABqUEgAAGqdSwAAap5LAABqjUwAAGqOTAAAaudKAABq6EoAAGqTRwAAapRHAABqM0MAAGo0QwAAajVDAABqNkMAAGo7SwAAajxLAABqN0MAAGo4QwAAaulJAABq6kkAAGrtSgAAau5KAABq70oAAGrwSgAAajlDAABqOkMAAGo7QwAAajxDAABqzUEAAGrOQQAAaj9DAABqQEMAAGqLSwAAaoxLAABq9UoAAGr2SgAAavdKAABq+EoAAGpBQwAAakJDAABq+0oAAGr8SgAAav1KAABq/koAAGpDQwAAakRDAABq/0oAAGoASwAAar9KAABqwEoAAGpxSQAAanJJAABqA0sAAGoESwAAagVLAABqBksAAGp5QwAAanpDAABqg0gAAGqESAAAagdLAABqCEsAAGqFSAAAaoZIAABqSUMAAGpKQwAAaktDAABqTEMAAGoLSwAAagxLAABqZUsAAGpmSwAAak1DAABqTkMAAGpPQwAAalBDAABqW0kAAGpcSQAAallLAABqWksAAGprRgAAamxGAABqUUMAAGpSQwAAahNLAABqFEsAAGpTQwAAalRDAABqVUMAAGpWQwAAaldDAABqWEMAAGpZQwAAalpDAABqW0MAAGpcQwAAakNLAABqREsAAGoXSwAAahhLAABqGUsAAGoaSwAAal9DAABqYEMAAGphQwAAamJDAABqW0cAAGpcRwAAamNDAABqZEMAAGohSwAAaiJLAABqsUIAAGqyQgAAaiVLAABqJksAAGpnQwAAamhDAABqaUMAAGpqQwAAaqAEAABqoQQAAGrZTAAAatpMAABqa0MAAGpsQwAAailLAABqKksAAGorSwAAaixLAABqLUsAAGouSwAAam1DAABqbkMAAGpvQwAAanBDAABqZ0cAAGpoRwAAag9DAABqEEMAAGpzQwAAanRDAABqM0sAAGo0SwAAajVLAABqNksAAGo3SwAAajhLAABqK0MAAGosQwAAanVDAABqdkMAAGp3QwAAanhDAABqPUsAAGo+SwAAakVDAABqRkMAAGpBSwAAakJLAABqXUMAAGpeQwAAasQEAABqxQQAAGp7QwAAanxDAABqfUMAAGp+QwAAakdLAABqSEsAAGp/QwAAaoBDAABqSUsAAGpKSwAAaoNDAABqhEMAAGo5RgAAajpGAABqhUMAAGqGQwAAak1LAABqTksAAGqZTAAAappMAABqT0sAAGpQSwAAaodDAABqiEMAAGqJQwAAaopDAABqi0MAAGqMQwAAao1DAABqjkMAAGo7RgAAajxGAABqVUsAAGpWSwAAap1MAABqnkwAAGpXSwAAalhLAABq9UUAAGr2RQAAap9MAABqoEwAAGrZSQAAatpJAABqS0sAAGpMSwAAao9DAABqkEMAAGpfSwAAamBLAABqb0cAAGpwRwAAaptIAABqnEgAAGo9RgAAaj5GAABqk0MAAGqUQwAAamFLAABqYksAAGqVQwAAapZDAABql0MAAGqYQwAAamNLAABqZEsAAGo9RAAAaj5EAABqmUMAAGqaQwAAaptDAABqnEMAAGrdRwAAat5HAABqnUMAAGqeQwAAaltEAABqXEQAAGqfSAAAaqBIAABqoUMAAGqiQwAAaqNDAABqpEMAAGqlQwAAaqZDAABqp0MAAGqoQwAAaqlDAABqqkMAAGqrQwAAaqxDAABqrUMAAGquQwAAaq9DAABqsEMAAGp1SwAAanZLAABqT0kAAGpQSQAAarFDAABqskMAAGpzRwAAanRHAABqs0QAAGq0RAAAanlLAABqeksAAGqzQwAAarRDAABqUUsAAGpSSwAAastEAABqzEQAAGq1QwAAarZDAABqxgQAAGrHBAAAarlDAABqukMAAGq7QwAAarxDAABqvUMAAGq+QwAAauVFAABq5kUAAGq/QwAAasBDAABqo0gAAGqkSAAAasFDAABqwkMAAGp/SwAAaoBLAABqw0MAAGrEQwAAaq1KAABqrkoAAGqBSwAAaoJLAABqxUMAAGrGQwAAandHAABqeEcAAGrHQwAAashDAABqyUMAAGrKQwAAastDAABqzEMAAGqFSwAAaoZLAABqzUMAAGrOQwAAas9DAABq0EMAAGrRQwAAatJDAABqh0sAAGqISwAAaoVKAABqhkoAAGrXRQAAathFAABq00MAAGrUQwAAaodKAABqiEoAAGr0BAAAavUEAABq10MAAGrYQwAAaolLAABqiksAAGrZQwAAatpDAABqjUsAAGqOSwAAao9LAABqkEsAAGrbQwAAatxDAABqtUUAAGq2RQAAar9LAABqwEsAAGrdQwAAat5DAABqqUcAAGqqRwAAaq9IAABqsEgAAGrfQwAAauBDAABqR0YAAGpIRgAAauFDAABq4kMAAGqZSwAAappLAABqm0sAAGqcSwAAauNDAABq5EMAAGqfSwAAaqBLAABqoUsAAGqiSwAAauVDAABq5kMAAGrnQwAAauhDAABqp0sAAGqoSwAAav1JAABq/kkAAGqpSwAAaqpLAABqq0sAAGqsSwAAavlKAABq+koAAGqtSwAAaq5LAABqr0sAAGqwSwAAagdGAABqCEYAAGrLRgAAasxGAABqFUkAAGoWSQAAarFLAABqsksAAGrpQwAAaupDAABqT0YAAGpQRgAAautDAABq7EMAAGrtQwAAau5DAABqtUsAAGq2SwAAau9DAABq8EMAAGq3SwAAarhLAABquUgAAGq6SAAAavFDAABq8kMAAGq5SwAAarpLAABq80MAAGr0QwAAavVDAABq9kMAAGr3QwAAavhDAABq+UMAAGr6QwAAavtDAABq/EMAAGq/RgAAasBGAABqvUsAAGq+SwAAav1DAABq/kMAAGrBSwAAasJLAABqw0sAAGrESwAAasVLAABqxksAAGrHSwAAashLAABq/0MAAGoARAAAaslLAABqyksAAGoBRAAAagJEAABqy0sAAGrMSwAAas1LAABqzksAAGoDRAAAagREAABq8gQAAGrzBAAAagVEAABqBkQAAGrTSwAAatRLAABqB0QAAGoIRAAAaglEAABqCkQAAGoLRAAAagxEAABqDUQAAGoORAAAagtKAABqDEoAAGrZSwAAatpLAABqD0QAAGoQRAAAattLAABq3EsAAGoRRAAAahJEAABqE0QAAGoURAAAat1LAABq3ksAAGoVRAAAahZEAABqF0QAAGoYRAAAaoVHAABqhkcAAGoZRAAAahpEAABqG0QAAGocRAAAah1EAABqHkQAAGofRAAAaiBEAABqIUQAAGoiRAAAamNHAABqZEcAAGojRAAAaiREAABqV0YAAGpYRgAAapFDAABqkkMAAGolRAAAaiZEAABq6UsAAGrqSwAAautLAABq7EsAAGqVRwAAapZHAABqJ0QAAGooRAAAailEAABqKkQAAGorRAAAaixEAABq70sAAGrwSwAAao1HAABqjkcAAGotRAAAai5EAABq5UsAAGrmSwAAai9EAABqMEQAAGoxRAAAajJEAABqwUgAAGrCSAAAastHAABqzEcAAGozRAAAajREAABq/UsAAGr+SwAAav9LAABqAEwAAGo1RAAAajZEAABqN0QAAGo4RAAAajlEAABqOkQAAGo7RAAAajxEAABqAUwAAGoCTAAAagNMAABqBEwAAGoFTAAAagZMAABq60oAAGrsSgAAai9LAABqMEsAAGo/RAAAakBEAABqCUwAAGoKTAAAasNIAABqxEgAAGoLTAAAagxMAABqQUQAAGpCRAAAakNEAABqREQAAGoNTAAAag5MAABqRUQAAGpGRAAAakdEAABqSEQAAGpJRAAAakpEAABqS0QAAGpMRAAAag9MAABqEEwAAGpNRAAAak5EAABqT0QAAGpQRAAAahNMAABqFEwAAGqPRwAAapBHAABq40sAAGrkSwAAahVMAABqFkwAAGpRRAAAalJEAABqGUwAAGoaTAAAalNEAABqVEQAAGpVRAAAalZEAABqWUQAAGpaRAAAaiNLAABqJEsAAGpfRgAAamBGAABqaUsAAGpqSwAAah9MAABqIEwAAGohTAAAaiJMAABqXUQAAGpeRAAAaiNMAABqJEwAAGpfRAAAamBEAABq5UkAAGrmSQAAaidMAABqKEwAAGopTAAAaipMAABqYUQAAGpiRAAAal1HAABqXkcAAGorTAAAaixMAABqY0QAAGpkRAAAamFAAABqYkAAAGplRAAAamZEAABqZ0QAAGpoRAAAamlEAABqakQAAGprRAAAamxEAABqbUsAAGpuSwAAajFMAABqMkwAAGrjQAAAauRAAABqNUwAAGo2TAAAam9EAABqcEQAAGpxRAAAanJEAABqc0QAAGp0RAAAajdMAABqOEwAAGp1RAAAanZEAABqb0sAAGpwSwAAav9EAABqAEUAAGp3RAAAanhEAABqxUEAAGrGQQAAakVLAABqRksAAGp7RAAAanxEAABqyUwAAGrKTAAAal1LAABqXksAAGp9RAAAan5EAABqf0QAAGqARAAAaoFEAABqgkQAAGo7TAAAajxMAABqN0UAAGo4RQAAaj1MAABqPkwAAGqFRAAAaoZEAABqcUsAAGpySwAAaj9MAABqQEwAAGpBTAAAakJMAABqQ0wAAGpETAAAaoNGAABqhEYAAGpFTAAAakZMAABqh0QAAGqIRAAAakdMAABqSEwAAGqJRAAAaopEAABqSUwAAGpKTAAAaotEAABqjEQAAGqhSQAAaqJJAABq6AQAAGrpBAAAak1MAABqTkwAAGr/SAAAagBJAABqm0cAAGqcRwAAalNMAABqVEwAAGpVTAAAalZMAABqV0wAAGpYTAAAallMAABqWkwAAGqPRAAAapBEAABqkUQAAGqSRAAAaltMAABqXEwAAGpdTAAAal5MAABqX0wAAGpgTAAAapNEAABqlEQAAGqVRAAAapZEAABql0QAAGqYRAAAamNMAABqZEwAAGodSgAAah5KAABqmUQAAGqaRAAAaptEAABqnEQAAGqiBAAAaqMEAABqn0QAAGqgRAAAatdIAABq2EgAAGqfRwAAaqBHAABqo0QAAGqkRAAAaptFAABqnEUAAGqlRAAAaqZEAABqs0kAAGq0SQAAaqdEAABqqEQAAGqpRAAAaqpEAABqbUwAAGpuTAAAam9MAABqcEwAAGqdRAAAap5EAABqrUQAAGquRAAAaq9EAABqsEQAAGqxRAAAarJEAABqc0wAAGp0TAAAag1FAABqDkUAAGp1TAAAanZMAABqtUQAAGq2RAAAandMAABqeEwAAGq3RAAAarhEAABqe0wAAGp8TAAAarlEAABqukQAAGp9TAAAan5MAABqu0QAAGq8RAAAavNJAABq9EkAAGqjRwAAaqRHAABqvUQAAGq+RAAAaoFMAABqgkwAAGq/RAAAasBEAABqg0wAAGqETAAAagtJAABqDEkAAGrOBAAAas8EAABq3UgAAGreSAAAaodMAABqiEwAAGpnRgAAamhGAABqw0QAAGrERAAAasVEAABqxkQAAGppRgAAampGAABqoUgAAGqiSAAAaidKAABqKEoAAGrHRAAAashEAABqz0oAAGrQSgAAao9MAABqkEwAAGqRTAAAapJMAABqyUQAAGrKRAAAaoFDAABqgkMAAGoRRQAAahJFAABqzUQAAGrORAAAas9EAABq0EQAAGqXTAAAaphMAABqbUYAAGpuRgAAatNEAABq1EQAAGrVRAAAatZEAABqm0wAAGqcTAAAatdEAABq2EQAAGpbSwAAalxLAABqoUwAAGqiTAAAatlEAABq2kQAAGpnTAAAamhMAABq20QAAGrcRAAAaqdMAABqqEwAAGq3QwAAarhDAABqqUwAAGqqTAAAat1EAABq3kQAAGp9SwAAan5LAABq30QAAGrgRAAAas1KAABqzkoAAGqrTAAAaqxMAABqrUwAAGquTAAAaq9MAABqsEwAAGrhRAAAauJEAABq5UgAAGrmSAAAarFMAABqskwAAGqzTAAAarRMAABq5UQAAGrmRAAAaudEAABq6EQAAGq1TAAAarZMAABq6UQAAGrqRAAAautEAABq7EQAAGrtRAAAau5EAABqt0wAAGq4TAAAau9EAABq8EQAAGrxRAAAavJEAABq80QAAGr0RAAAavVEAABq9kQAAGr3RAAAavhEAABqvUwAAGq+TAAAavlEAABq+kQAAGq/TAAAasBMAABqMUgAAGoySAAAasNMAABqxEwAAGrFTAAAasZMAABq+0QAAGr8RAAAav1EAABq/kQAAGqnQAAAaqhAAABqAUUAAGoCRQAAastMAABqzEwAAGoDRQAAagRFAABqBUUAAGoGRQAAavFIAABq8kgAAGrNTAAAas5MAABqz0wAAGrQTAAAaglFAABqCkUAAGr1SAAAavZIAABqD0UAAGoQRQAAatFMAABq0kwAAGp5PgAAano+AABqc0sAAGp0SwAAahNFAABqFEUAAGoVRQAAahZFAABqCUsAAGoKSwAAahdFAABqGEUAAGoZRQAAahpFAABq50cAAGroRwAAahtFAABqHEUAAGrVTAAAatZMAABqHUUAAGoeRQAAatdMAABq2EwAAGofRQAAaiBFAABqIUUAAGoiRQAAdWrbTAAAfXJjVwAAKGrdTAAAat5MAABq30wAAGrgTAAAauFMAABq4kwAAGrlTAAAauZMAABq7UwAAGruTAAAavFMAABq8kwAAGr1TAAAavZMAABqfU0AAGp+TQAAantNAABqfE0AAGr/TAAAagBNAABqAU0AAGoCTQAAagNNAABqBE0AAGoJTQAAagpNAABqc00AAGp0TQAAag1NAABqDk0AAGofTQAAaiBNAABqEU0AAGoSTQAAalFNAABqUk0AAGoVTQAAahZNAABqIU0AAGoiTQAAahlNAABqGk0AAGpTTQAAalRNAABqHU0AAGoeTQAAaulMAABq6kwAAGoXTQAAahhNAABqOU0AAGo6TQAAailNAABqKk0AAGorTQAAaixNAABqM00AAGo0TQAAajdNAABqOE0AAGrnTAAAauhMAABqT00AAGpQTQAAakdNAABqSE0AAGpVTQAAalZNAABqW00AAGpcTQAAal1NAABqXk0AAGphTQAAamJNAABqY00AAGpkTQAAamtNAABqbE0AAGojTQAAaiRNAABqb00AAGpwTQAAaklNAABqSk0AAGrrTAAAauxMAABqJU0AAGomTQAAau9MAABq8EwAAGrzTAAAavRMAABqRU0AAGpGTQAAamlNAABqak0AAGr5TAAAavpMAABq+0wAAGr8TAAAav1MAABq/kwAAGobTQAAahxNAABqBU0AAGoGTQAAagdNAABqCE0AAGoPTQAAahBNAABqE00AAGoUTQAAaidNAABqKE0AAGotTQAAai5NAABqL00AAGowTQAAajFNAABqMk0AAGo1TQAAajZNAABq40wAAGrkTAAAaj1NAABqPk0AAGo/TQAAakBNAABqdU0AAGp2TQAAaktNAABqTE0AAGpNTQAAak5NAABqWU0AAGpaTQAAakFNAABqQk0AAGoLTQAAagxNAABqV00AAGpYTQAAal9NAABqYE0AAGplTQAAamZNAABqZ00AAGpoTQAAavdMAABq+EwAAGptTQAAam5NAABqf00AAGqATQAAajtNAABqPE0AAGpDTQAAakRNAABqd00AAGp4TQAAanlNAABqek0AAGpxTQAAanJNAAB1aoFNAAB9cmRXAAAoaoVNAABqhk0AAGqHTQAAaohNAABqiU0AAGqKTQAAaotNAABqjE0AAGqNTQAAao5NAABqj00AAGqQTQAAapFNAABqkk0AAGppTgAAampOAABqlU0AAGqWTQAAapdNAABqmE0AAGrvTgAAavBOAABqmU0AAGqaTQAAaptNAABqnE0AAGqdTQAAap5NAABqn00AAGqgTQAAaqNNAABqpE0AAGodTgAAah5OAABqW04AAGpcTgAAaqtNAABqrE0AAGqtTQAAaq5NAABqr00AAGqwTQAAarFNAABqsk0AAGqzTQAAarRNAABqF08AAGoYTwAAarVNAABqtk0AAGrVTQAAatZNAABqqU0AAGqqTQAAagNPAABqBE8AAGq9TQAAar5NAABqv00AAGrATQAAarVOAABqtk4AAGrDTQAAasRNAABqxU0AAGrGTQAAasdNAABqyE0AAGrJTQAAaspNAABqy00AAGrMTQAAas1NAABqzk0AAGrPTQAAatBNAABq0U0AAGrSTQAAatNNAABq1E0AAGq3TQAAarhNAABq100AAGrYTQAAatlNAABq2k0AAGrdTQAAat5NAABq200AAGrcTQAAat9NAABq4E0AAGoJTwAAagpPAABq400AAGrkTQAAauVNAABq5k0AAGrnTQAAauhNAABq6U0AAGrqTQAAautNAABq7E0AAGrtTQAAau5NAABq700AAGrwTQAAavFNAABq8k0AAGrzTQAAavRNAABq9U0AAGr2TQAAavdNAABq+E0AAGorTgAAaixOAABq+00AAGr8TQAAav1NAABq/k0AAGp7TgAAanxOAABqC08AAGoMTwAAagFOAABqAk4AAGoDTgAAagROAABqBU4AAGoGTgAAagdOAABqCE4AAGoJTgAAagpOAABqC04AAGoMTgAAag9OAABqEE4AAGoRTgAAahJOAABqE04AAGoUTgAAahVOAABqFk4AAGoXTgAAahhOAABqGU4AAGoaTgAAahtOAABqHE4AAGqlTQAAaqZNAABqH04AAGogTgAAaiFOAABqIk4AAGqDTQAAaoRNAABqJU4AAGomTgAAaidOAABqKE4AAGopTgAAaipOAABq+U0AAGr6TQAAai1OAABqLk4AAGoFTwAAagZPAABqL04AAGowTgAAajFOAABqMk4AAGqLTgAAaoxOAABqNU4AAGo2TgAAajdOAABqOE4AAGo5TgAAajpOAABqO04AAGo8TgAAaj1OAABqPk4AAGo/TgAAakBOAABqQU4AAGpCTgAAakNOAABqRE4AAGpFTgAAakZOAABqR04AAGpITgAAaklOAABqSk4AAGpLTgAAakxOAABqTU4AAGpOTgAAak9OAABqUE4AAGpRTgAAalJOAABqU04AAGpUTgAAalVOAABqVk4AAGpXTgAAalhOAABqWU4AAGpaTgAAar9OAABqwE4AAGpdTgAAal5OAABqX04AAGpgTgAAamFOAABqYk4AAGpjTgAAamROAABqZU4AAGpmTgAAamdOAABqaE4AAGqTTQAAapRNAABqa04AAGpsTgAAam1OAABqbk4AAGpvTgAAanBOAABq004AAGrUTgAAanNOAABqdE4AAGqRTgAAapJOAABqd04AAGp4TgAAanlOAABqek4AAGr/TQAAagBOAABqf04AAGqATgAAaoFOAABqgk4AAGqDTgAAaoROAABqhU4AAGqGTgAAaodOAABqiE4AAGqJTgAAaopOAABqM04AAGo0TgAAao1OAABqjk4AAGqPTgAAapBOAABqdU4AAGp2TgAAapNOAABqlE4AAGqVTgAAapZOAABqx04AAGrITgAAapdOAABqmE4AAGqZTgAAappOAABqm04AAGqcTgAAap1OAABqnk4AAGqfTgAAaqBOAABqoU4AAGqiTgAAaqNOAABqpE4AAGqlTgAAaqZOAABqp04AAGqoTgAAaiNOAABqJE4AAGqpTgAAaqpOAABqq04AAGqsTgAAaq1OAABqrk4AAGqvTgAAarBOAABqsU4AAGqyTgAAaqdNAABqqE0AAGrBTQAAasJNAABqt04AAGq4TgAAarlOAABquk4AAGq7TgAAarxOAABqvU4AAGq+TgAAarlNAABquk0AAGrBTgAAasJOAABqw04AAGrETgAAasVOAABqxk4AAGrJTgAAaspOAABqy04AAGrMTgAAas1OAABqzk4AAGrRTgAAatJOAABqcU4AAGpyTgAAatVOAABq1k4AAGrXTgAAathOAABq2U4AAGraTgAAattOAABq3E4AAGrdTgAAat5OAABq304AAGrgTgAAauFOAABq4k4AAGrjTgAAauROAABq5U4AAGrmTgAAaudOAABq6E4AAGrpTgAAaupOAABqoU0AAGqiTQAAau1OAABq7k4AAGqzTgAAarROAABq8U4AAGryTgAAajVPAABqNk8AAGr1TgAAavZOAABq904AAGr4TgAAavlOAABq+k4AAGr7TgAAavxOAABq/U4AAGr+TgAAav9OAABqAE8AAGoBTwAAagJPAABqu00AAGq8TQAAas9OAABq0E4AAGoHTwAAaghPAABq4U0AAGriTQAAautOAABq7E4AAGoNTgAAag5OAABqD08AAGoQTwAAahFPAABqEk8AAGoTTwAAahRPAABqFU8AAGoWTwAAan1OAABqfk4AAGoZTwAAahpPAABqG08AAGocTwAAah1PAABqHk8AAGofTwAAaiBPAABqIU8AAGoiTwAAaiNPAABqJE8AAGolTwAAaiZPAABqJ08AAGooTwAAailPAABqKk8AAGorTwAAaixPAABqLU8AAGouTwAAai9PAABqME8AAGoNTwAAag5PAABqMU8AAGoyTwAAajNPAABqNE8AAGrzTgAAavROAABqN08AAGo4TwAAajlPAABqOk8AAGo7TwAAajxPAABqPU8AAGo+TwAAdWo/TwAAfXJlVwAAKGpDTwAAakRPAABqRU8AAGpGTwAAakdPAABqSE8AAGpJTwAAakpPAABqS08AAGpMTwAAak1PAABqTk8AAGpPTwAAalBPAABqUU8AAGpSTwAAalNPAABqVE8AAGpVTwAAalZPAABqV08AAGpYTwAAallPAABqWk8AAGpfTwAAamBPAABqXU8AAGpeTwAAaltPAABqXE8AAGphTwAAamJPAABqQU8AAGpCTwAAamVPAABqZk8AAGpnTwAAamhPAABqaU8AAGpqTwAAamtPAABqbE8AAGptTwAAam5PAABqb08AAGpwTwAAanFPAABqck8AAGpzTwAAanRPAABqdU8AAGp2TwAAandPAABqeE8AAGp5TwAAanpPAABqe08AAGp8TwAAan1PAABqfk8AAGpjTwAAamRPAABqgU8AAGqCTwAAaoNPAABqhE8AAGqFTwAAaoZPAABqh08AAGqITwAAaolPAABqik8AAGqLTwAAaoxPAABqjU8AAGqOTwAAao9PAABqkE8AAGqTTwAAapRPAABqoU8AAGqiTwAAapVPAABqlk8AAGqXTwAAaphPAABqf08AAGqATwAAaplPAABqmk8AAGqbTwAAapxPAABqnU8AAGqeTwAAap9PAABqoE8AAGqRTwAAapJPAABqo08AAGqkTwAAdWrmIQAAfXJmVwAAKGroIQAAaukhAABq6iEAAGrrIQAAau4hAABq7yEAAGrwIQAAavEhAABq8iEAAGrzIQAAavQhAABq9SEAAGr4IQAAavkhAABq+iEAAGr7IQAAavwhAABq/SEAAGr+IQAAav8hAABqACIAAGoBIgAAagIiAABqAyIAAGoEIgAAagUiAABqBiIAAGoHIgAAaggiAABqCSIAAGoKIgAAagsiAABqDCIAAGoNIgAAag4iAABqDyIAAGoQIgAAahEiAABqEiIAAGoTIgAAahQiAABqFSIAAGoWIgAAahciAABqGCIAAGoZIgAAahoiAABqGyIAAGocIgAAah0iAABqHiIAAGofIgAAaiAiAABqISIAAGoiIgAAaiMiAABqJCIAAGolIgAAaiYiAABqJyIAAGooIgAAaikiAABqKiIAAGorIgAAaiwiAABqLSIAAGowIgAAajEiAABqMiIAAGozIgAAajQiAABqNSIAAGo4IgAAajkiAABqOiIAAGo7IgAAajwiAABqPSIAAGo+IgAAaj8iAABqQCIAAGpBIgAAakIiAABqQyIAAGpEIgAAakUiAABqRiIAAGpHIgAAakgiAABqSSIAAGpKIgAAaksiAABqTCIAAGpNIgAAapQiAABqlSIAAGpQIgAAalEiAABqUiIAAGpTIgAAalQiAABqVSIAAGpWIgAAalciAABqLiIAAGovIgAAapYiAABqlyIAAGpcIgAAal0iAABqXiIAAGpfIgAAamAiAABqYSIAAGpiIgAAamMiAABqZCIAAGplIgAAamYiAABqZyIAAGpoIgAAamkiAABqaiIAAGprIgAAamwiAABqbSIAAGpuIgAAam8iAABqcCIAAGpxIgAAanIiAABqcyIAAGqiIgAAaqMiAABqdCIAAGp1IgAAavYhAABq9yEAAGp4IgAAankiAABqeiIAAGp7IgAAatgiAABq2SIAAGp8IgAAan0iAABqfiIAAGp/IgAAaoAiAABqgSIAAGqCIgAAaoMiAABqhCIAAGqFIgAAaoYiAABqhyIAAGqIIgAAaokiAABqiiIAAGqLIgAAaowiAABqjSIAAGqOIgAAao8iAABqkCIAAGqRIgAAapIiAABqkyIAAGpOIgAAak8iAABqWiIAAGpbIgAAapgiAABqmSIAAGqaIgAAapsiAABqnCIAAGqdIgAAap4iAABqnyIAAGqgIgAAaqEiAABqdiIAAGp3IgAAaqQiAABqpSIAAGqmIgAAaqciAABqqCIAAGqpIgAAaqoiAABqqyIAAGqsIgAAaq0iAABqriIAAGqvIgAAarAiAABqsSIAAGrsIQAAau0hAABqtCIAAGq1IgAAarYiAABqtyIAAGq4IgAAarkiAABquiIAAGq7IgAAarwiAABqvSIAAGq+IgAAar8iAABqwCIAAGrBIgAAauYiAABq5yIAAGrEIgAAasUiAABqxiIAAGrHIgAAasgiAABqySIAAGrKIgAAassiAABqzCIAAGrNIgAAas4iAABqzyIAAGrQIgAAatEiAABq0iIAAGrTIgAAatQiAABq1SIAAGrWIgAAatciAABq/iIAAGr/IgAAarIiAABqsyIAAGraIgAAatsiAABq3CIAAGrdIgAAat4iAABq3yIAAGrgIgAAauEiAABq4iIAAGrjIgAAauQiAABq5SIAAGrCIgAAasMiAABq6CIAAGrpIgAAauoiAABq6yIAAGoKIwAAagsjAABq7CIAAGrtIgAAau4iAABq7yIAAGomIwAAaicjAABq8iIAAGrzIgAAavQiAABq9SIAAGr2IgAAavciAABq+CIAAGr5IgAAai4jAABqLyMAAGr8IgAAav0iAABqNiIAAGo3IgAAagAjAABqASMAAGoCIwAAagMjAABqBCMAAGoFIwAAagYjAABqByMAAGoIIwAAagkjAABqWCIAAGpZIgAAagwjAABqDSMAAGoOIwAAag8jAABqECMAAGoRIwAAahIjAABqEyMAAGoUIwAAahUjAABqFiMAAGoXIwAAahgjAABqGSMAAGoaIwAAahsjAABqHCMAAGodIwAAah4jAABqHyMAAGogIwAAaiEjAABqIiMAAGojIwAAaiQjAABqJSMAAGrwIgAAavEiAABqKCMAAGopIwAAaiojAABqKyMA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AAAoatJXAABdatNXAABdatRXAABdatVXAABdatZXAABddWp2VwAAVQB1YmVqeFcAAH1yCV0AAChq0lcAAF1q01cAAF1q1FcAAF1q1VcAAF1q1lcAAF11anZXAABVAHViaA9qrFsAACmBcgpdAAB9cgtdAAAoam1XAABVC2J1bGxldF9saXN0cgxdAABqb1cAAF1yDV0AAGqxWwAAKYFyDl0AAH1yD10AAChqbVcAAFUJbGlzdF9pdGVtchBdAABqdVcAAGoKXQAAam9XAABdchFdAABqtlsAACmBchJdAAB9chNdAAAoam1XAABVEWNvbXBhY3RfcGFyYWdyYXBochRdAABqdVcAAGoOXQAAam9XAABdchVdAABqu1sAACmBchZdAAB9chddAAAoam1XAABVCXJlZmVyZW5jZXIYXQAAanVXAABqEl0AAGpvVwAAXXIZXQAAanFXAABYIwAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UgbW9kdWxlchpdAACFgXIbXQAAfXIcXQAAKGp1VwAAahZdAABqdlcAAGreVwAAdWJhanhXAAB9ch1dAAAoauBXAABdauFXAABdauJXAABdVQphbmNob3JuYW1lVQBq5FcAAF1q41cAAF1VCGludGVybmFsiFUGcmVmdXJpaPp1anZXAABVAHViYWp4VwAAfXIeXQAAKGrgVwAAXWrhVwAAXWriVwAAXWrjVwAAXWrkVwAAXXVqdlcAAFUAdWJhanhXAAB9ch9dAAAoauBXAABdauFXAABdauJXAABdauNXAABdauRXAABddWp2VwAAVQB1YmFqeFcAAH1yIF0AAChq4FcAAF1q4VcAAF1q4lcAAF1q41cAAF1q5FcAAF11anZXAABVAHViaBBqrFsAACmBciFdAAB9ciJdAAAoam1XAABVC2J1bGxldF9saXN0ciNdAABqb1cAAF1yJF0AAGqxWwAAKYFyJV0AAH1yJl0AAChqbVcAAFUJbGlzdF9pdGVtciddAABqdVcAAGohXQAAam9XAABdcihdAABqtlsAACmBcildAAB9cipdAAAoam1XAABVEWNvbXBhY3RfcGFyYWdyYXBocitdAABqdVcAAGolXQAAam9XAABdcixdAABqu1sAACmBci1dAAB9ci5dAAAoam1XAABVCXJlZmVyZW5jZXIvXQAA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1FcAAF1q1VcAAF1q1lcAAF11anZXAABVAHViaBVqrFsAACmBcqhdAAB9cqldAAAoam1XAABqI10AAGpvVwAAXXKqXQAAarFbAAApgXKrXQAAfXKsXQAAKGptVwAAaiddAABqdVcAAGqoXQAAam9XAABdcq1dAABqtlsAACmBcq5dAAB9cq9dAAAoam1XAABqK10AAGp1VwAAaqtdAABqb1cAAF1ysF0AAGq7WwAAKYFysV0AAH1ysl0AAChqbVcAAGovXQAAanVXAABqrl0AAGpvVwAAXXKzXQAAanFXAABYIAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIgbW9kdWxlcrRdAACFgXK1XQAAfXK2XQAAKGp1VwAAarFdAABqdlcAAGofWAAAdWJhanhXAAB9crddAAAoau5XAABdau9XAABdavBXAABdVQphbmNob3JuYW1lVQBq8lcAAF1q8VcAAF1VCGludGVybmFsiFUGcmVmdXJpanIBAAB1anZXAABVAHViYWp4VwAAfXK4XQAAKGruVwAAXWrvVwAAXWrwVwAAXWrxVwAAXWryVwAAXXVqdlcAAFUAdWJhanhXAAB9crldAAAoau5XAABdau9XAABdavBXAABdavFXAABdavJXAABddWp2VwAAVQB1YmFqeFcAAH1yul0AAChq7lcAAF1q71cAAF1q8FcAAF1q8VcAAF1q8lcAAF11anZXAABVAHViaBZqrFsAACmBcrtdAAB9crxdAAAoam1XAABqI10AAGpvVwAAXXK9XQAAarFbAAApgXK+XQAAfXK/XQAAKGptVwAAaiddAABqdVcAAGq7XQAAam9XAABdcsBdAABqtlsAACmBcsFdAAB9csJdAAAoam1XAABqK10AAGp1VwAAar5dAABqb1cAAF1yw10AAGq7WwAAKYFyxF0AAH1yxV0AAChqbVcAAGovXQAAanVXAABqwV0AAGpvVwAAXXLGXQAAanFXAABYLQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyIG1vZHVsZXLHXQAAhYFyyF0AAH1yyV0AAChqdVcAAGrEXQAAanZXAABqJ1gAAHViYWp4VwAAfXLKXQAAKGruVwAAXWrvVwAAXWrwVwAAXVUKYW5jaG9ybmFtZVUAavJXAABdavFXAABdVQhp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AABqsVsAACmBcgVeAAB9cgZeAAAoam1XAABqPl0AAGp1VwAAagJeAABqb1cAAF1yB14AAGq2WwAAKYFyCF4AAH1yCV4AAChqbVcAAGpCXQAAanVXAABqBV4AAGpvVwAAXXIKXgAAartbAAApgXILXgAAfXIMXgAAKGptVwAAakZdAABqdVcAAGoIXgAAam9XAABdcg1eAABqcVcAAFgqAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IgbW9kdWxlcg5eAACFgXIPXgAAfXIQXgAAKGp1VwAAagteAABqdlcAAGo3WAAAdWJhanhXAAB9chFeAAAoavxXAABdav1XAABdav5XAABdVQphbmNob3JuYW1lVQBqAFgAAF1q/1cAAF1VCGludGVybmFsiFUGcmVmdXJpaJF1anZXAABVAHViYWp4VwAAfXISXgAAKGr8VwAAXWr9VwAAXWr+VwAAXWr/VwAAXWoAWAAAXXVqdlcAAFUAdWJhanhXAAB9chNeAAAoavxXAABdav1XAABdav5XAABdav9XAABdagBYAABddWp2VwAAVQB1YmFqeFcAAH1yFF4AAChq/FcAAF1q/VcAAF1q/lcAAF1q/1cAAF1qAFgAAF11anZXAABVAHViaBlqrFsAACmBchVeAAB9chZeAAAoam1XAABqI10AAGpvVwAAXXIXXgAAarFbAAApgXIYXgAAfXIZXgAAKGptVwAAaiddAABqdVcAAGoVXgAAam9XAABdchpeAABqtlsAACmBchteAAB9chxeAAAoam1XAABqK10AAGp1VwAAahheAABqb1cAAF1yHV4AAGq7WwAAKYFyHl4AAH1yH14AAChqbVcAAGovXQAAanVXAABqG14AAGpvVwAAXXIgXgAAanFXAABYJgAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0gbW9kdWxlciFeAACFgXIiXgAAfXIjXgAAKGp1VwAAah5eAABqdlcAAGo/WAAAdWJhanhXAAB9ciReAAAoau5XAABdau9XAABdavBXAABdVQphbmNob3JuYW1lVQBq8lcAAF1q8VcAAF1VCGludGVybmFsiFUGcmVmdXJpaokBAAB1anZXAABVAHViYWp4VwAAfXIlXgAAKGruVwAAXWrvVwAAXWrwVwAAXWrxVwAA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VwAAfXLFXgAAKGp4WAAAXWp5WAAAXWp6WAAAXWp7WAAAXWp8WAAAXXVqdlcAAFUAdWJhanhXAAB9csZeAAAoanhYAABdanlYAABdanpYAABdantYAABdanxYAABddWp2VwAAVQB1YmggaqxbAAApgXLHXgAAfXLIXgAAKGptVwAAao9eAABqb1cAAF1yyV4AAGqxWwAAKYFyyl4AAH1yy14AAChqbVcAAGqTXgAAanVXAABqx14AAGpvVwAAXXLMXgAAarZbAAApgXLNXgAAfXLOXgAAKGptVwAAapdeAABqdVcAAGrKXgAAam9XAABdcs9eAABqu1sAACmBctBeAAB9ctFeAAAoam1XAABqm14AAGp1VwAAas1eAABqb1cAAF1y0l4AAGpxVwAAWCgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUgbW9kdWxlctNeAACFgXLUXgAAfXLVXgAAKGp1VwAAatBeAABqdlcAAGqDWAAAdWJhanhXAAB9ctZeAAAoanhYAABdanlYAABdanpYAABdVQphbmNob3JuYW1lVQBqfFgAAF1qe1gAAF1VCGludGVybmFsiFUGcmVmdXJpatMBAAB1anZXAABVAHViYWp4VwAAfXLXXgAAKGp4WAAAXWp5WAAAXWp6WAAAXWp7WAAAXWp8WAAAXXVqdlcAAFUAdWJhanhXAAB9ctheAAAoanhYAABdanlYAABdanpYAABdantYAABdanxYAABddWp2VwAAVQB1YmFqeFcAAH1y2V4AAChqeFgAAF1qeVgAAF1qelgAAF1qe1gAAF1qfFgAAF11anZXAABVAHViaCFqrFsAACmBctpeAAB9ctteAAAoam1XAABqgFwAAGpvVwAAXXLcXgAAarFbAAApgXLdXgAAfXLeXgAAKGptVwAAaoRcAABqdVcAAGraXgAAam9XAABdct9eAABqtlsAACmBcuBeAAB9cuFeAAAoam1XAABqiFwAAGp1VwAAat1eAABqb1cAAF1y4l4AAGq7WwAAKYFy414AAH1y5F4AAChqbVcAAGqMXAAAanVXAABq4F4AAGpvVwAAXXLlXgAAanFXAABYIgAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBtb2R1bGVy5l4AAIWBcudeAAB9cuheAAAoanVXAABq414A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xV8AAH1yxl8AAChqbVcAAGq0XwAAanVXAABqwl8AAGpvVwAAXXLHXwAAanFXAABYCgAAAFN1Ym1vZHVsZXNyyF8AAIWBcslfAAB9cspfAAAoanVXAABqxV8AAGp2VwAAWAoAAABTdWJtb2R1bGVzdWJhanhXAAB9cstfAAAoatZYAABdatdYAABdathYAABdVQphbmNob3JuYW1lVQsjc3VibW9kdWxlc2raWAAAXWrZWAAAXVUIaW50ZXJuYWyIVQZyZWZ1cmlqul8AAHVqdlcAAFUAdWJhanhXAAB9csxfAAAoatZYAABdatdYAABdathYAABdatlYAABdatpYAABddWp2VwAAVQB1YmqsWwAAKYFyzV8AAH1yzl8AAChqbVcAAGqoXwAAanVXAABqv18AAGpvVwAAXXLPXwAAam9cAAApgXLQXwAAfXLRXwAAKGp1VwAAas1fAABqdlcAAFUAam9XAABdanJcAABLDGp4VwAAfXLSXwAAKGrWWAAAXWrXWAAAXVUEZ2xvYolVDWluY2x1ZGVoaWRkZW6JatpYAABdVQZwYXJlbnRqul8AAFUIbnVtYmVyZWRLAFUMaW5jbHVkZWZpbGVzXXLTXwAAKGrSVgAAatNWAABq1FYAAGrVVgAAatZWAABq11YAAGrYVgAAatlWAABlVQdjYXB0aW9uTlUHZW50cmllc11y1F8AAChOatJWAACGctVfAABOatNWAACGctZfAABOatRWAACGctdfAABOatVWAACGcthfAABOatZWAACGctlfAABOatdWAACGctpfAABOathWAACGcttfAABOatlWAACGctxfAABlatlYAABdathYAABdVQhtYXhkZXB0aEr/////VQp0aXRsZXNvbmx5iVUGaGlkZGVuiXVqbVcAAFUHdG9jdHJlZXLdXwAAanhcAABYUgAAAC9ob21lL2pib25vZnJlL1dvcmtzcGFjZS9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL3NvdXJjZS9hcGFjaGVfYmVhbS51dGlscy5yc3R1YmFqeFcAAH1y3l8AAChq1lgAAF1q11gAAF1q2FgAAF1q2VgAAF1q2lgAAF11anZXAABVAHViZWp4VwAAfXLfXwAAKGrWWAAAXWrXWAAAXWrYWAAAXWrZWAAAXWraWAAAXXVqdlcAAFUAdWJh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cHRoSv////9VCnRpdGxlc29ubHmJVQZoaWRkZW6JdWptVwAAantdAABqeFwAAGriZgAAdWJhanhXAAB9cgpnAAAoauBXAABdauFXAABdauJXAABdauNXAABdauRXAABddWp2VwAAVQB1YmVqeFcAAH1yC2cAAChq4FcAAF1q4VcAAF1q4lcAAF1q41cAAF1q5FcAAF11anZXAABVAHViZWp4VwAAfXIMZwAAKGrgVwAAXWrhVwAAXWriVwAAXWrjVwAAXWrkVwAAXXVqdlcAAFUAdWJlanhXAAB9cg1nAAAoauBXAABdauFXAABdauJXAABdauNXAABdauRXAABddWp2VwAAVQB1YmFqeFcAAH1yDmcAAChq4FcAAF1q4VcAAF1q4lcAAF1q41cAAF1q5FcAAF11anZXAABVAHViaHNqrFsAACmBcg9nAAB9chBnAAAoam1XAABqI10AAGpvVwAAXXIRZwAAarFbAAApgXISZwAAfXITZwAAKGptVwAAaiddAABqdVcAAGoPZwAAam9XAABdchRnAABqtlsAACmBchVnAAB9chZnAAAoam1XAABqK10AAGp1VwAAahJnAABqb1cAAF1yF2cAAGq7WwAAKYFyGGcAAH1yGWcAAChqbVcAAGovXQAAanVXAABqFWcAAGpvVwAAXXIaZwAAanFXAABYHwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NpbyBtb2R1bGVyG2cAAIWBchxnAAB9ch1nAAAoanVXAABqGGcAAGp2VwAAaiFbAAB1YmFqeFcAAH1yHmcAAChq7lcAAF1q71cAAF1q8FcAAF1VCmFuY2hvcm5hbWVVAGryVwAAXWrxVwAAXVUIaW50ZXJuYWyIVQZyZWZ1cmlqtwIAAHVqdlcAAFUAdWJhanhXAAB9ch9nAAAoau5XAABdau9XAABdavBXAABdavFXAABdavJXAABddWp2VwAAVQB1YmFqeFcAAH1yIGcAAChq7lcAAF1q71cAAF1q8FcAAF1q8VcAAF1q8lcAAF11anZXAABVAHViYWp4VwAAfXIhZwAAKGruVwAAXWrvVwAAXWrwVwAAXWrxVwAAXWryVwAAXXVqdlcAAFUAdWJodGqsWwAAKYFyImcAAH1yI2cAAChqbVcAAGo6XQAAam9XAABdciRnAABqsVsAACmBciVnAAB9ciZn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XXLEaQAAaklfAABhhVJyxWkAAGolVwAAamYDAABdcsZpAABq3l0AAGGFUnLHaQAAai5XAABqZgMAAF1yyGkAAGrlZwAAYYVScslpAABqzVYAAGpmAwAAXXLKaQAAakJkAABhhVJyy2kAAGr2VgAAamYDAABdcsxpAABqklwAAGGFUnLNaQAAahdXAABqZgMAAF1yzmkAAGqhXgAAYYVScs9pAABqz1YAAGpmAwAAXXLQaQAAakJkAABhhVJy0WkAAGrzVgAAamYDAABdctJpAABqklwAAGGFUnLTaQAAaiBXAABqZgMAAF1y1GkAAGqfZwAAYYVSctVpAABqL1cAAGpmAwAAXXLWaQAAauVnAABhhVJy12kAAGoHVwAAamYDAABdcthpAABqxmYAAGGFUnLZaQAAatZWAABqZgMAAF1y2mkAAGq6XwAAYYVScttpAABqHVcAAGpmAwAAXXLcaQAAalhnAABhhVJy3WkAAGo7VwAAamYDAABdct5pAABqsmgAAGGFUnLfaQAAaiNXAABqZgMAAF1y4GkAAGreXQAAYYVScuFpAABqGlcAAGpmAwAAXXLiaQAAal9dAABhhVJy42kAAGpBVwAAamYDAABdcuRpAABqdGIAAGGFUnLlaQAAaulWAABqZgMAAF1y5mkAAGqSXAAAYYVScudpAABq4FYAAGpmAwAAXXLoaQAAahlgAABhhVJy6WkAAGr9VgAAamYDAABdcuppAABqxmYAAGGFUnLraQAAai1XAABqZgMAAF1y7GkAAGrlZwAAYYVScu1pAABqw1YAAGpmAwAAXXLuaQAAapllAABhhVJy72kAAGpJVwAAamYDAABdcvBpAABq/GgAAGGFUnLxaQAAaghXAABqZgMAAF1y8mkAAGrGZgAAYYVScvNpAABq4VYAAGpmAwAAXXL0aQAAahlgAABhhVJy9WkAAGoDVwAAamYDAABdcvZpAABqxmYAAGGFUnL3aQAAavVWAABqZgMAAF1y+GkAAGqSXAAAYYVScvlpAABqEFcAAGpmAwAAXXL6aQAAauNgAABhhVJy+2kAAGo5VwAAamYDAABdcvxpAABqsmgAAGGFUnL9aQAAavBWAABqZgMAAF1y/mkAAGqSXAAAYYVScv9pAABq11YAAGpmAwAAXXIAagAAarpfAABhhVJyAWoAAGrkVgAAamYDAABdcgJqAABqMmYAAGGFUnIDagAAakVXAABqZgMAAF1yBGoAAGr8aAAAYYVScgVqAABqTlcAAGpmAwAAXXIGagAAavxoAABhhVJyB2oAAGrTVgAAamYDAABdcghqAABqul8AAGGFUnIJagAAaidXAABqZgMAAF1yCmoAAGqLZAAAYYVScgtqAABqFFcAAGpmAwAAXXIMagAAaqFeAABhhVJyDWoAAGrcVgAAamYDAABdcg5qAABqGWAAAGGFUnIPagAAagpXAABqZgMAAF1yEGoAAGrGZgAAYYVSchFqAABqxVYAAGpmAwAAXXISagAAapllAABhhVJyE2oAAGrqVgAAamYDAABdchRqAABqklwAAGGFUnIVagAAakJXAABqZgMAAF1yFmoAAGp0YgAAYYVSchdqAABqUFcAAGpmAwAAXXIYagAAavxoAABhhVJyGWoAAGo9VwAAamYDAABdchpqAABqsmgAAGGFUnIbagAAajFXAABqZgMAAF1yHGoAAGpHaAAAYYVSch1qAABqIVcAAGpmAwAAXXIeagAAap9nAABhhVJyH2oAAGrsVgAAamYDAABdciBqAABqklwAAGGFUnIhagAAakxXAABqZgMAAF1yImoAAGr8aAAAYYVSciNqAABqDFcAAGpmAwAAXXIkagAAauNgAABhhVJyJWoAAGoOVwAAamYDAABdciZqAABq42AAAGGFUnInagAAagBXAABqZgMAAF1yKGoAAGrGZgAAYYVScilqAABqTVcAAGpmAwAAXXIqagAAavxoAABhhVJyK2oAAGr0VgAAamYDAABdcixqAABqklwAAGGFUnItagAAatBWAABqZgMAAF1yLmoAAGpCZAAAYYVSci9qAABq8VYAAGpmAwAAXXIwagAAapJcAABhhVJyMWoAAGosVwAAamYDAABdcjJqAABq5WcAAGGFUnIzagAAag1XAABqZgMAAF1yNGoAAGrjYAAAYYVScjVqAABqNFcAAGpmAwAAXXI2agAAagRiAABhhVJyN2oAAHVVDXJlcmVhZF9hbHdheXNyOGoAAGpmAwAAXYVScjlqAABVC3JlZl9jb250ZXh0cjpqAAB9VQZzcmNkaXJyO2oAAFg8AAAAL2hvbWUvamJvbm9mcmUvV29ya3NwYWNlL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3Mvc291cmNlcjxqAABVBmltYWdlc3I9agAAY3NwaGlueC51dGlsCkZpbGVuYW1lVW5pcURpY3QKcj5qAAApgXI/agAAamYDAABdhVJyQGoAAGJVB2RsZmlsZXNyQWoAAGo+agAAKYFyQmoAAGpmAwAAXYVSckNqAABiVQ52ZXJzaW9uY2hhbmdlc3JEagAAfVUKZG9jdHJlZWRpcnJFagAAWEUAAAAvaG9tZS9qYm9ub2ZyZS9Xb3Jrc3BhY2UvYmVhbS9zZGtzL3B5dGhvbi90YXJnZXQvZG9jcy9fYnVpbGQvZG9jdHJlZXNyRmoAAFUJX3dhcm5mdW5jckdqAABOVQpkb21haW5kYXRhckhqAAB9cklqAAAoVQJqc3JKagAAfXJLagAAKGqmWwAASwBVB21vZHVsZXNyTGoAAH1VB29iamVjdHNyTWoAAH11VQJweXJOagAAfXJPagAAKGqmWwAASwBqTGoAAH1yUGoAAChYHQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93clFqAAAoaJhVAFUAiXRYNAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGNyUmoAAChq21sAAFUAVQCJdFgZAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc3JTagAAKGrzWwAAVQBVAIl0WBoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY3JUagAAKGi4VQBVAIl0WCQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNyVWoAAChowFUAVQCJdFgeAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtclZqAAAoajFcAABVAFUAiXRYNgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwY3JXagAAKGpFXAAAVQBVAIl0WBcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eXJYagAAKGpZXAAAVQBVAIl0WBwAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlcllqAAAoaPpVAFUAiXRYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW9yWmoAAChqtQEAAFUAVQCJdFgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcnJbagAAKGrEAQAAVQBVAIl0WBwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlclxqAAAoal9dAABVAFUAiXRYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHJdagAAKGplAQAAVQBVAIl0WBYAAABhcGFjaGVfYmVhbS51dGlscy51cm5zcl5qAAAoaqRdAABVAFUAiXRYGQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJyX2oAAChqcgEAAFUAVQCJdFgmAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXJyYGoAAChoqVUAVQCJdFgTAAAAYXBhY2hlX2JlYW0ubWV0cmljc3JhagAAKGreXQAAVQBVAIl0WCMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcnJiagAAKGiRVQBVAIl0WB8AAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtcmNqAAAoaokBAABVAFUAiXRYIQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybXJkagAAKGqRAQAAVQBVAIl0WC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2VyZWoAAChqT14AAFUAVQCJdFgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3NyZmoAAChqpwEAAFUAVQCJdFggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2tyZ2oAAChqdl4AAFUAVQCJdFgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlscmhqAAAoau4CAABVAFUAiXRYEwAAAGFwYWNoZV9iZWFtLnRlc3RpbmdyaWoAAChqoV4AAFUAVQCJdFghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lcmpqAAAoatMBAABVAFUAiXRYCwAAAGFwYWNoZV9iZWFtcmtqAAAoapJcAABVAFUAiXRYGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcHJsagAAKGriAQAAVQBVAIl0WCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc3JtagAAKGrxAQAAVQBVAIl0WB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXJybmoAAChqCAIAAFUAVQCJdFgZAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpb3JvagAAKGoQAgAAVQBVAIl0WBgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxycGoAAChqMQIAAFUAVQCJdFgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW9ycWoAAChqSV8AAFUAVQCJdFhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVycnJqAAAoakACAABVAFUAiXRYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZXJzagAAKGpIAgAAVQBVAIl0WB0AAABhcGFjaGVfYmVhbS5jb2RlcnMudHlwZWNvZGVyc3J0agAAKGqiXwAAVQBVAIl0WBEAAABhcGFjaGVfYmVhbS51dGlsc3J1agAAKGq6XwAAVQBVAIl0WCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHNydmoAAChqbgIAAFUAVQCJdFgjAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNyd2oAAChqdgIAAFUAVQCJdFgbAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpcnhqAAAoahlgAABVAFUAiXRYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXJ5agAAKGp+AgAAVQBVAIl0WDIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlcnJ6agAAKGqFAgAAVQBVAIl0WB0AAABhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9uc3J7agAAKGoXAQAAVQBVAIl0WBcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYnJ8agAAKGqJYAAAVQBVAIl0WBkAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlscn1qAAAoartgAABVAFUAiXRYHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJyfmoAAChqz2AAAFUAVQCJdFgTAAAAYXBhY2hlX2JlYW0ucnVubmVyc3J/agAAKGrjYAAAVQBVAIl0WB0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3KAagAAKGonAwAAVQBVAIl0WBwAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rcoFqAAAoaswCAABVAFUAiXRYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3JygmoAAChqqQIAAFUAVQCJdFgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcnKDagAAKGraAgAAVQBVAIl0WB4AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2VyhGoAAChq4QIAAFUAVQCJdFgbAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5coVqAAAoaucCAABVAFUAiXRYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxyhmoAAChq9QIAAFUAVQCJdFgfAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbXKHagAAKGr8AgAAVQBVAIl0WB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrcohqAAAoagQDAABVAFUAiXRYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRocolqAAAoajNoAABVAFUAiXRYFQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pb3KKagAAKGogAwAAVQBVAIl0WBIAAABhcGFjaGVfYmVhbS5jb2RlcnNyi2oAAChqBGIAAFUAVQCJdFgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnlyjGoAAChqOWIAAFUAVQCJdFgdAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnNyjWoAAChqQwMAAFUAVQCJdFg3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3KOagAAKGpgYgAAVQBVAIl0WBIAAABhcGFjaGVfYmVhbS5pby5nY3Byj2oAAChqdGIAAFUAVQCJdFgaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXJykGoAAChoiVUAVQCJdFgeAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtcpFqAAAoaKBVAFUAiXRYGgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVycpJqAAAoak0BAABVAFUAiXRYGwAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc3KTagAAKGqgAQAAVQBVAIl0WBoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc3KUagAAKGjHVQBVAIl0WDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlcpVqAAAoaiFjAABVAFUAiXRYHgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZXKWagAAKGjVVQBVAIl0WCAAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc3KXagAAKGpQAgAAVQBVAIl0WB4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHNymGoAAChqDAMAAFUAVQCJdFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZXKZagAAKGjrVQBVAIl0WBMAAABhcGFjaGVfYmVhbS52ZXJzaW9ucppqAAAoaoFjAABVAFUAiXRYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXNym2oAAChqlWMAAFUAVQCJdFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlcnKcagAAKGoBAQAAVQBVAIl0WBEAAABhcGFjaGVfYmVhbS5lcnJvcnKdagAAKGq8YwAAVQBVAIl0WC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9ycp5qAAAoah8BAABVAFUAiXRYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVycp9qAAAoajQDAABVAFUAiXRYIAAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzcqBqAAAoajUBAABVAFUAiXRYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzcqFqAAAoagACAABVAFUAiXRYOQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlcnKiagAAKGpFAQAAVQBVAIl0WCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Vyo2oAAChqVQEAAFUAVQCJdFgZAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc3KkagAAKGpeAQAAVQBVAIl0WB8AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxcqVqAAAoakJkAABVAFUAiXRYIAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtcqZqAAAoanoBAABVAFUAiXRYFAAAAGFwYWNoZV9iZWFtLmludGVybmFscqdqAAAoaotkAABVAFUAiXRYLgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGNyqGoAAChq12QAAFUAVQCJdFgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXJyqWoAAChq62QAAFUAVQCJdFgfAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbHKqagAAKGq9AQAAVQBVAIl0WB4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb25yq2oAAChqPQEAAFUAVQCJdFgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvcqxqAAAoassBAABVAFUAiXRYOAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjcq1qAAAoajhlAABVAFUAiXRYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXKuagAAKGrbAQAAVQBVAIl0WBIAAABhcGFjaGVfYmVhbS5wdmFsdWVyr2oAAChqX2UAAFUAVQCJdFgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0crBqAAAoahgCAABVAFUAiXRYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5crFqAAAoaiACAABVAFUAiXRYFgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXNysmoAAChqmWUAAFUAVQCJdFgXAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnlys2oAAChqKQIAAFUAVQCJdFgjAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWVytGoAAChq5WUAAFUAVQCJdFgdAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHNytWoAAChqOwMAAFUAVQCJdFguAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcnK2agAAKGpfAgAAVQBVAIl0WBgAAABhcGFjaGVfYmVhbS51dGlscy5wbHVnaW5yt2oAAChqZgIAAFUAVQCJdFgYAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwcrhqAAAoajJmAABVAFUAiXRYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzcrlqAAAoaowCAABVAFUAiXRYMAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwY3K6agAAKGp3ZgAAVQBVAIl0WBQAAABhcGFjaGVfYmVhbS5pby52Y2Zpb3K7agAAKGqbAgAAVQBVAIl0WDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVycrxqAAAoap5mAABVAFUAiXRYMQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGNyvWoAAChqsmYAAFUAVQCJdFgOAAAAYXBhY2hlX2JlYW0uaW9yvmoAAChqxmYAAFUAVQCJdFgYAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvcr9qAAAoarcCAABVAFUAiXRYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VycsBqAAAoar4CAABVAFUAiXRYHwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNywWoAAChqxQIAAFUAVQCJdFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3RywmoAAChqWGcAAFUAVQCJdFgiAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcnLDagAAKGqLZwAAVQBVAIl0WBMAAABhcGFjaGVfYmVhbS5vcHRpb25zcsRqAAAoap9nAABVAFUAiXRYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zcsVqAAAoahMDAABVAFUAiXRYHAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3dyxmoAAChq5WcAAFUAVQCJdFggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWxyx2oAAChqR2gAAFUAVQCJdFgZAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXLIagAAKGouAwAAVQBVAIl0WBQAAABhcGFjaGVfYmVhbS5waXBlbGluZXLJagAAKGqLaAAAVQBVAIl0WCQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxyymoAAChqSwMAAFUAVQCJdFgVAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzcstqAAAoarJoAABVAFUAiXRYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc3LMagAAKGroaAAAVQBVAIl0WBoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdHLNagAAKGr8aAAAVQBVAIl0WB0AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZXLOagAAKGo4aQAAVQBVAIl0dWpNagAAfXLPagAAKFgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbi5tYWtlX2ZuctBqAABqSAIAAFgGAAAAbWV0aG9khlhcAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX01JU1NJTkdfR0NTX1BBVEhy0WoAAGofAQAAWAkAAABhdHRyaWJ1dGWGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GctJqAABqvgIAAFgJAAAAYXR0cmlidXRlhlg8AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfQVBQRU5EctNqAABq5wIAAFgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5kdW1wX3Nlc3Npb25y1GoAAGrPYAAAWAgAAABmdW5jdGlvboZYVAAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja3LVagAAakMDAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25y1moAAGj6WAYAAABtZXRob2SGaoBqAABqJwMAAFUGbW9kdWxlctdqAACGWCgAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVycthqAABq81sAAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkNBTkNFTExJTkdy2WoAAGiJWAkAAABhdHRyaWJ1dGWGWDkAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXJy2moAAGpDAwAAWAUAAABjbGFzc4ZYUQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLmRpc3BsYXlfZGF0YXLbagAAarUBAABYBgAAAG1ldGhvZIZYZQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5hZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyctxqAABqRVwAAFgIAAAAZnVuY3Rpb26GWEQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2lua1dyaXRlci5Xcml0ZXLdagAAak9eAABYBgAAAG1ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXNy3moAAGpVAQAAWAgAAABmdW5jdGlvboZYKwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLkNsb2NrLnRpbWVy32oAAGp2XgAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXJy4GoAAGoEAwAAWAYAAABtZXRob2SGWEoAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuc3RvcF9wb3NpdGlvbnLhagAAanYCAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci5hc19jbG91ZF9vYmplY3Ry4moAAGrzWwAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcnLjagAAaikCAABYCAAAAGZ1bmN0aW9uhlg7AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFly5GoAAGrnAgAAWAkAAABhdHRyaWJ1dGWGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsub25fZWxlbWVudHLlagAAaggCAABYBgAAAG1ldGhvZIZqYGoAAGipVQZtb2R1bGVy5moAAIZqYWoAAGreXQAAVQZtb2R1bGVy52oAAIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWNy6GoAAGrzWwAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5hcHBseV9QVHJhbnNmb3JtculqAABoiVgGAAAAbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzLm5ld19wcm9jZXNzX2ZucupqAABqNAMAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuY2FsbF9mdW5jdGlvbl9rd3LragAAaicDAABYCAAAAGZ1bmN0aW9uhlgoAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc3RvcmVfZmFzdHLsagAAaicDAABYCAAAAGZ1bmN0aW9uhlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycu1qAABqSAIAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uaXNfbWVyZ2luZ3LuagAAaJhYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzBy72oAAGonAwAAWAgAAABmdW5jdGlvboZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzFy8GoAAGonAwAAWAgAAABmdW5jdGlvboZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzJy8WoAAGonAwAAWAgAAABmdW5jdGlvboZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzNy8moAAGonAwAAWAgAAABmdW5jdGlvboZYQwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfc3BsaXRy82oAAGpDAwAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lci5nZXRfaW1wbHL0agAAaJhYDAAAAHN0YXRpY21ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0ucmVuYW1lcvVqAABqegEAAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZXL2agAAahMDAABYBQAAAGNsYXNzhlg8AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycvdqAABq81sAAFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmFzX2Nsb3VkX29iamVjdHL4agAAavNbAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2Vfc3VidHJhY3Ry+WoAAGonAwAAWAgAAABmdW5jdGlvboZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFueXL6agAAaggCAABYBQAAAGNsYXNzhlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLmZyb21fcnVubmVyX2FwaXL7agAAaggCAABYDAAAAHN0YXRpY21ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMuZ2V0X2FsbF9vcHRpb25zcvxqAABowFgGAAAAbWV0aG9khlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeS5jcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZXL9agAAajliAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ucv5qAABqQwMAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uTWVyZ2VDb250ZXh0Lm1lcmdlcv9qAABomFgGAAAAbWV0aG9khlhQAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlci5leHRyYWN0X2FsbF90aW1lcnNyAGsAAGq+AgAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRlcgFrAABqMVwAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uV2F0ZXJtYXJrUmVwb3J0ZXJQYXJhbXICawAAakgCAABYCQAAAGF0dHJpYnV0ZYZYXAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX2Z1bGxfc3RyaW5nX21hdGNocgNrAABqHwEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5zcGxpdHRhYmxlcgRrAABq4QIAAFgJAAAAYXR0cmlidXRlhlgvAAAAYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm5yBWsAAGqkXQAAWAsAAABjbGFzc21ldGhvZIZYOgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXJyBmsAAGqMAgAAWAUAAABjbGFzc4ZYRAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuZXhwYW5kcgdrAABqtQEAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMubWtkaXJzcghrAABox1gMAAAAc3RhdGljbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2Uuc291cmNlc3IJawAAaPpYCQAAAGF0dHJpYnV0ZYZYPgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlcgprAABq5wIAAFgMAAAAc3RhdGljbWV0aG9khlhOAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTZXJ2aWNlci5Db250cm9scgtrAABqd2YAAFgGAAAAbWV0aG9khlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmdldF9leGVjdXRpb25fY29udGV4dHIMawAAamUBAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luLmdldF9hbGxfc3ViY2xhc3Nlc3INawAAamYCAABYCwAAAGNsYXNzbWV0aG9khlhZAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm5yDmsAAGohYwAAWAUAAABjbGFzc4ZYSwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMuQ09NUFVURV9BUElfU0VSVklDRXIPawAAaMBYCQAAAGF0dHJpYnV0ZYZqk2oAAGqgAQAAatdqAACGWD4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlLmNyZWF0ZV9lbnRpdGllc3IQawAAaOtYCAAAAGZ1bmN0aW9uhlgyAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuRnV6emVkRXhwb25lbnRpYWxJbnRlcnZhbHNyEWsAAGopAgAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZS5mb3JtYXRyEmsAAGrnAgAAWAkAAABhdHRyaWJ1dGWGWCUAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mby5kYXRhchNrAABqmwIAAFgJAAAAYXR0cmlidXRlhmqaagAAaoFjAABVBm1vZHVsZXIUawAAhlglAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcHIVawAAauIBAABYBQAAAGNsYXNzhlhXAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VychZrAABqRVwAAFgFAAAAY2xhc3OGarxqAABqnmYAAFUGbW9kdWxlchdrAACGWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUGFpcldpdGhSZXN0cmljdGlvbkZuchhrAABqPQEAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLmNsb3NlZHIZawAAai4DAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwucnVuX3VzaW5nX3RocmVhZHBvb2xyGmsAAGq7YAAAWAgAAABmdW5jdGlvboZYPwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5EYXRhU3R1YnIbawAAandmAABYBQAAAGNsYXNzhmqwagAAahgCAABVBm1vZHVsZXIcawAAhlgxAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5uZXdfc2F2ZV9tb2R1bGVfZGljdHIdawAAas9gAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWNyHmsAAGrzWwAAWAYAAABtZXRob2SGWFAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZXIfawAAah8BAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyciBrAABqSAIAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIud3JpdGVfbXV0YXRpb25zciFrAABoqVgIAAAAZnVuY3Rpb26GWCcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm5yImsAAGpIAgAAWAUAAABjbGFzc4ZYUgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uRGVsZXRlRnJvbURhdGFzdG9yZS50b19kZWxldGVfbXV0YXRpb25yI2sAAGq1AQAAWAwAAABzdGF0aWNtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rLnNjaGVtYV9hc19qc29uciRrAABq5wIAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLkNIVU5LX1NJWkVyJWsAAGouAwAAWAkAAABhdHRyaWJ1dGWGWDsAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZS5uZXdfdHJhY2tlcnImawAAanYCAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfbG9jYWxzcidrAABqJwMAAFgIAAAAZnVuY3Rpb26GWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVscihrAABqkQEAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLnJlc2V0cilrAABqCAIAAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLlR5cGVJbmZlcmVuY2VFcnJvcnIqawAAalUBAABYCQAAAGV4Y2VwdGlvboZYWQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRocitrAABqHwEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLnNob3VsZF9maXJlcixrAABqCAIAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX3VpbnQ2NHItawAAajFcAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY3IuawAAavNbAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvLmluZmVyX291dHB1dF90eXBlci9rAABqSAIAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIuaXNfa2V5X3ZhbGlkcjBrAABoqVgIAAAAZnVuY3Rpb26GWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIub25fZmlyZXIxawAAaggCAABYBgAAAG1ldGhvZIZquGoAAGoyZgAAVQZtb2R1bGVyMmsAAIZqzmoAAGo4aQAAajJrAACGWEcAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvcnIzawAAah8BAABYBQAAAGNsYXNzhlglAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmV4aXN0c3I0awAAarcCAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5TdGFuZGFyZE9wdGlvbnMuREVGQVVMVF9SVU5ORVJyNWsAAGjAWAkAAABhdHRyaWJ1dGWGWDkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5VUklfU0NIRU1BX1BBVFRFUk5yNmsAAGjHWAkAAABhdHRyaWJ1dGWGWDoAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5MZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VycjdrAABqQwMAAFgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuTGFyZ2VzdFBlcktleXI4awAAavEBAABYDAAAAHN0YXRpY21ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4ucmVzZXRyOWsAAGoIAgAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVEcjprAABq5wIAAFgJAAAAYXR0cmlidXRlhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uc3RhcnRfYnVuZGxlcjtrAABqSAIAAFgGAAAAbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkcjxrAABqmwIAAFgFAAAAY2xhc3OGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5sb2FkX2NvbnN0cj1rAABqJwMAAFgIAAAAZnVuY3Rpb26GWDsAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuaW5pdGlhbGl6ZV93cml0ZXI+awAAaswCAABYBgAAAG1ldGhvZIZql2oAAGpQAgAAatdqAACGWFEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuaXNfcm9vdF90cmFuc2Zvcm1yP2sAAGplAQAAWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZXJAawAAaiFjAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXlyQWsAAGpIAgAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cy5vZmZzZXRyQmsAAGiYWAkAAABhdHRyaWJ1dGWGWCoAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMucGF0Y2hfcmV0cnlyQ2sAAGoMAwAAWAgAAABmdW5jdGlvboZYHwAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXRyRGsAAGpfZQAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5jaGVja19vdXRwdXRyRWsAAGqgAQAAWAgAAABmdW5jdGlvboZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50LnJlc2V0ckZrAABqCAIAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmRlbGV0ZV9iYXRjaHJHawAAarcCAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tX3J1bm5lcl9hcGlySGsAAGpfZQAAWAwAAABzdGF0aWNtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uRXhwbG9kZVdpbmRvd3NGbnJJawAAaj0BAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnNySmsAAGiYWAUAAABjbGFzc4ZYIwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0TWFwcktrAABqSAIAAFgIAAAAZnVuY3Rpb26GWCUAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuTWV0cmljckxrAABo1VgFAAAAY2xhc3OGampqAABq0wEAAGocawAAhlg2AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkU3RyaW5nc0Zyb21QdWJTdWIuZXhwYW5kck1rAABqcgEAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHRyTmsAAGiJWAUAAABjbGFzc4ZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuZGVmYXVsdF9sYWJlbHJPawAAakgCAABYBgAAAG1ldGhvZIZqdGoAAGqiXwAAajJrAACGWD4AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW4ubm90aWZ5X29ic2VydmVyc3JQawAAajhpAABYBgAAAG1ldGhvZIZqeGoAAGoZYAAAVQZtb2R1bGVyUWsAAIZYPgAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyclJrAABo+lgGAAAAbWV0aG9khmp6agAAaoUCAABVBm1vZHVsZXJTawAAhlgtAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5XaW5kb3dlZFZhbHVlclRrAABqxQIAAFgJAAAAYXR0cmlidXRlhlgzAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlci5jaGVja19kb25lclVrAABq2wEAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLmluZmVyX291dHB1dF90eXBlclZrAABqSAIAAFgGAAAAbWV0aG9khmqDagAAatoCAABqHGsAAIZYJgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLkNsb2NrcldrAABqdl4AAFgFAAAAY2xhc3OGWCMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uY29weXJYawAAarcCAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5cllrAABq8QEAAFgFAAAAY2xhc3OGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0clprAABqSAIAAFgGAAAAbWV0aG9khlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnRyW2sAAGrxAQAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVTdHJpbmdzVG9QdWJTdWIuZXhwYW5kclxrAABqcgEAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluLmZyb21fc3RyaW5ncl1rAABqvQEAAFgMAAAAc3RhdGljbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25yXmsAAGj6WAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5vbl9lbGVtZW50cl9rAABqCAIAAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyYGsAAGrzWwAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uLmV4cGFuZHJhawAAakgCAABYBgAAAG1ldGhvZIZYUwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnBvbGxfZm9yX2pvYl9jb21wbGV0aW9ucmJrAABq62QAAFgMAAAAc3RhdGljbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV90cnVlX2RpdmlkZXJjawAAaicDAABYCAAAAGZ1bmN0aW9uhlgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMuc3RydWN0X3RvX2RpY3RyZGsAAGo7AwAAWAgAAABmdW5jdGlvboZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5leHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWRyZWsAAGqnAQAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5QaXBlbGluZVN0YXRlTWF0Y2hlcnJmawAAaowCAABYBQAAAGNsYXNzhlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4uZXhwYW5kcmdrAABqSAIAAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy5mcm9tX2RpY3Rpb25hcnlyaGsAAGjAWAsAAABjbGFzc21ldGhvZIZYRQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbnJpawAAakMDAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGVyamsAAGoEAwAAWAYAAABtZXRob2SGWG4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybXJrawAAautkAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtcmxrAABqkQEAAFgFAAAAY2xhc3OGaqJqAABqRQEAAGocawAAhlgnAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmNvcHl0cmVlcm1rAABqtwIAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluLnJlZ2lzdGVyX29ic2VydmVycm5rAABqOGkAAFgGAAAAbWV0aG9khmqjagAAalUBAABq12oAAIZYVQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmpzb25fc3RyaW5nX3RvX2J5dGVfYXJyYXlyb2sAAGrrZAAAWAwAAABzdGF0aWNtZXRob2SGWB8AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVycnBrAABq81sAAFgFAAAAY2xhc3OGWCwAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnRyeV9zcGxpdHJxawAAatsBAABYBgAAAG1ldGhvZIZYQQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RVbm1lcmdlZFN0YXRlcnJrAABqZQEAAFgFAAAAY2xhc3OGaq1qAABqOGUAAGpRawAAhlgxAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X3NjaGVtZXJzawAAaMdYDAAAAHN0YXRpY21ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Db250cm9sU3R1YnJ0awAAandmAABYBQAAAGNsYXNzhlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLnRlc3RfbWV0aG9kcnVrAABqNAMAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlLnZhbHVlcnZrAABqMQIAAFgJAAAAYXR0cmlidXRlhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkU3RyaW5nc0Zyb21QdWJTdWIudG9waWNyd2sAAGpyAQAAWAkAAABhdHRyaWJ1dGWGWGAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuc2NoZWR1bGVfcGVuZGluZ191bmJsb2NrZWRfdGFza3NyeGsAAGplAQAAWAYAAABtZXRob2SGWFYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfbWF0Y2hlcnJ5awAAapVjAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2Rlci5kZWNvZGVyemsAAGrnAgAAWAYAAABtZXRob2SGWFgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5zZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5cntrAABq62QAAFgLAAAAY2xhc3NtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmNvcHlyfGsAAGp6AQAAWAYAAABtZXRob2SGWG0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLkNvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IudmlzaXRfdHJhbnNmb3Jtcn1rAABqqQIAAFgGAAAAbWV0aG9khlhCAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fdWludDY0cn5rAABqMVwAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcn9rAABqpwEAAFgFAAAAY2xhc3OGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9jb252ZXJ0coBrAABqJwMAAFgIAAAAZnVuY3Rpb26GWDYAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uc3BsaXRygWsAAGqJAQAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlcoJrAABqT14AAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5TaWRlSW5wdXRQYXJhbXKDawAAakgCAABYCQAAAGF0dHJpYnV0ZYZYOwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci53cmFwcGVycoRrAABqBAMAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLnVuaW9uX2xpc3RyhWsAAGpVAQAAWAgAAABmdW5jdGlvboZYVQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3RyhmsAAGqFAgAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uZGlzcGxheV9kYXRhcodrAABqSAIAAFgGAAAAbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRfY291bnRyiGsAAGoxXAAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS53aXRoX291dHB1dF90eXBlc3KJawAAapEBAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkJvdW5kZWRXaW5kb3dyimsAAGiYWAUAAABjbGFzc4ZYRgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyLmFwcGx5X1Rlc3RTdHJlYW1yi2sAAGrEAQAAWAYAAABtZXRob2SGalVqAABowGrnagAAhlgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5lbmNvZGVyjGsAAGrzWwAAWAYAAABtZXRob2SGWB8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuTWFwco1rAABqSAIAAFgIAAAAZnVuY3Rpb26GWCgAAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uV3JpdGVUb0F2cm8uZXhwYW5kco5rAABqIAMAAFgGAAAAbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uco9rAABqQwMAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmZyb21fdHlwZV9oaW50cpBrAABq81sAAFgMAAAAc3RhdGljbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uZXhwYW5kcpFrAABqkQEAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmV4aXN0c3KSawAAai4DAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uc3BsaXRyk2sAAGigWAYAAABtZXRob2SGal1qAABqZQEAAFUGbW9kdWxlcpRrAACGWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5yZW5hbWVylWsAAGjHWAwAAABzdGF0aWNtZXRob2SGWEQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIuSm9iU2VydmljZXKWawAAakUBAABYBQAAAGNsYXNzhlgqAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubG9hZF9jbG9zdXJlcpdrAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfbW9kdWxvcphrAABqJwMAAFgIAAAAZnVuY3Rpb26GWEYAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5hc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlcplrAABqNQEAAFgIAAAAZnVuY3Rpb26GWGEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmluZmVyX291dHB1dF90eXBlcpprAABqIWMAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UuZXN0aW1hdGVfc2l6ZXKbawAAaPpYBgAAAG1ldGhvZIZqZWoAAGpPXgAAahdrAACGamdqAABqdl4AAGoXawAAhlhBAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dC5ERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkVynGsAAGrLAQAAWAkAAABhdHRyaWJ1dGWGWCIAAABhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZucp1rAABqpF0AAFgFAAAAY2xhc3OGWGAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5kZWZhdWx0X3R5cGVfaGludHNynmsAAGoTAwAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zbGljZV8wcp9rAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zbGljZV8xcqBrAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zbGljZV8ycqFrAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zbGljZV8zcqJrAABqJwMAAFgIAAAAZnVuY3Rpb26GWC8AAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZS5zcGxpdHKjawAAaPpYBgAAAG1ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3NypGsAAGqnAQAAWAUAAABjbGFzc4ZYOwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9ub25lcqVrAABqfgIAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmFuZ2VypmsAAGp2AgAAWAUAAABjbGFzc4ZYOgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlci5nZXRyp2sAAGqLZwAAWAYAAABtZXRob2SGanJqAABqQAIAAGocawAAhlg1AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Qcm90b0NvZGVyLmlzX2RldGVybWluaXN0aWNyqGsAAGrzWwAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLmRpc3RyaWJ1dGlvbnKpawAAaLhYDAAAAHN0YXRpY21ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5QZXJLZXlyqmsAAGrxAQAAWAwAAABzdGF0aWNtZXRob2SGWDgAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcnKrawAAatsBAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlRpbWVzdGFtcFBhcmFtcqxrAABqSAIAAFgJAAAAYXR0cmlidXRlhlgqAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNlcq1rAABq5wIAAFgFAAAAY2xhc3OGWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsub25fZmlyZXKuawAAaggCAABYBgAAAG1ldGhvZIZqhGoAAGrhAgAAalNrAACGWDIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5jb3VudHKvawAAal4BAABYCQAAAGF0dHJpYnV0ZYZqx2oAAGpHaAAAapRrAACGWC4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvcrBrAABqPQEAAFgFAAAAY2xhc3OGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5leHBhbmRysWsAAGpIAgAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXJysmsAAGoEAwAAWAUAAABjbGFzc4ZqjWoAAGpDAwAAauZqAACGWDcAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uZGVsZXRlcrNrAABqiQEAAFgGAAAAbWV0aG9khmqPagAAanRiAABqU2sAAIZYYAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfbWF0Y2hlcnK0awAAautkAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuY2xvc2VytWsAAGouAwAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpci5nZXRfcGF0aHK2awAAagwDAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoLnNldF9ydW5uaW5nX2luX2djZXK3awAAajNoAABYCAAAAGZ1bmN0aW9uhlgzAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUuZnJvbV9qc29uX3ZhbHVlcrhrAABq5WUAAFgIAAAAZnVuY3Rpb26GWDsAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2Rlci5mcm9tX3R5cGVfaGludHK5awAAavNbAABYDAAAAHN0YXRpY21ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLnJldHJ5X29uX3JwY19lcnJvcnK6awAAaKlYCAAAAGZ1bmN0aW9uhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy51cGRhdGVfcGh5c2ljYWxyu2sAAGqnAQAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy5hc3NpZ25yvGsAAGiYWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplUGVyS2V5cr1rAABq8QEAAFgMAAAAc3RhdGljbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5tYXhfdGltZXN0YW1wcr5rAABomFgGAAAAbWV0aG9khlgkAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLmFzc2VydF90aGF0cr9rAABqMQIAAFgIAAAAZnVuY3Rpb26GWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4uaXNfbWVyZ2luZ3LAawAAaJhYBgAAAG1ldGhvZIZYGwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXLBawAAatsBAABYBQAAAGNsYXNzhlhBAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXJywmsAAGopAgAAWAgAAABmdW5jdGlvboZYMAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5oYXNoYWJsZXLDawAAalUBAABYCAAAAGZ1bmN0aW9uhlg6AAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9zcGxpdHLEawAAakMDAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3NyxWsAAGpIAgAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3NyxmsAAGpPXgAAWAUAAABjbGFzc4ZYYgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX1BST0pFQ1RfTlVNQkVScsdrAABqHwEAAFgJAAAAYXR0cmlidXRlhlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkuc2hvdWxkX2ZpcmVyyGsAAGoIAgAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlci5BZGFwdGl2ZVRocm90dGxlcnLJawAAaoUCAABYBQAAAGNsYXNzhlgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVucsprAABoiVgGAAAAbWV0aG9khlhOAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIuYXBwbHlfX0dyb3VwQWxzb0J5V2luZG93cstrAABqxAEAAFgGAAAAbWV0aG9khlhHAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmVyzGsAAGp2AgAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdHLNawAAal4BAABYBQAAAGNsYXNzhlghAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0cs5rAABqywEAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5nZXRfZ2xvYmFscs9rAABqVQEAAFgGAAAAbWV0aG9khlheAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuaXNfc3RyZWFtaW5nX2NyZWF0ZXLQawAAapVjAABYDAAAAHN0YXRpY21ldGhvZIZYWQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuZXhwYW5kctFrAABqNAMAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5jb3VudGVyctJrAABouFgMAAAAc3RhdGljbWV0aG9khmq6agAAandmAABqUWsAAIZYKgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5Db3VudGVyLmluY3LTawAAaNVYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfYXR0cnLUawAAaicDAABYCAAAAGZ1bmN0aW9uhlg4AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmdldF93aW5kb3dpbmdy1WsAAGr8AgAAWAYAAABtZXRob2SGalxqAABqX10AAGpTawAAhlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLWawAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUuaW5mZXJfb3V0cHV0X3R5cGVy12sAAGpIAgAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIucmVzZXRy2GsAAGoIAgAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsLkFyZ3VtZW50UGxhY2Vob2xkZXJy2WsAAGq7YAAAWAUAAABjbGFzc4ZqyWoAAGqLaAAAalFrAACGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfc3Vic2NyctprAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5tYWtlX2Z1bmN0aW9ucttrAABqJwMAAFgIAAAAZnVuY3Rpb26GWDIAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLndyaXRlYWJsZXLcawAAai4DAABYBgAAAG1ldGhvZIZYIgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5WYWx1ZXNy3WsAAGruAgAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2Rlci5lbmNvZGVy3msAAGrnAgAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MuYXNzaWduct9rAABomFgGAAAAbWV0aG9khlhDAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLgawAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGlja2xlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnLhawAAavNbAABYBgAAAG1ldGhvZIZYSQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLnJldHJ5X29uX2lvX2Vycm9yX2FuZF9zZXJ2ZXJfZXJyb3Jy4msAAGqMAgAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWUudmFsdWVy42sAAGiYWAkAAABhdHRyaWJ1dGWGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF9zbGljZXLkawAAaicDAABYCAAAAGZ1bmN0aW9uhlhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuVHJhbnNmb3JtRXhlY3V0b3IuYXR0ZW1wdF9jYWxscuVrAABokVgGAAAAbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX1BhckRvcuZrAABq62QAAFgGAAAAbWV0aG9khlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkR5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbnLnawAAak9eAABYBQAAAGNsYXNzhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9wb3dlcnLoawAAaicDAABYCAAAAGZ1bmN0aW9uhlgsAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXJy6WsAAGrzWwAAWAUAAABjbGFzc4ZYIQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5pc19lbXB0eXLqawAAajECAABYCAAAAGZ1bmN0aW9uhlgeAAAAYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9ucutrAABqX2UAAFgFAAAAY2xhc3OGWD4AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLsawAAavNbAABYDAAAAHN0YXRpY21ldGhvZIZYSAAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZHLtawAAakMDAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cy5kZWZhdWx0X3dpbmRvd19tYXBwaW5nX2Zucu5rAABqbgIAAFgIAAAAZnVuY3Rpb26GWDMAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXJy72sAAGrzWwAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvLmV4cGFuZHLwawAAaiADAABYBgAAAG1ldGhvZIZqdWoAAGq6XwAAatdqAACGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbXBvcnRfZnJvbXLxawAAaicDAABYCAAAAGZ1bmN0aW9uhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLnNpemVy8msAAGiYWAkAAABhdHRyaWJ1dGWGandqAABqdgIAAGrnagAAhlg3AAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbnLzawAAatsBAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX2xpc3Ry9GsAAGonAwAAWAgAAABmdW5jdGlvboZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJy9WsAAGpIAgAAWAwAAABzdGF0aWNtZXRob2SGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5sb2FkX2Zhc3Ry9msAAGonAwAAWAgAAABmdW5jdGlvboZYKQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLnJlcGxhY2VfYWxscvdrAABqi2gAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmpvaW5y+GsAAGqJAQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5tYXhy+WsAAGpeAQAAWAkAAABhdHRyaWJ1dGWGWDQAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMubWltZV90eXBlcvprAABqLgMAAFgLAAAAY2xhc3NtZXRob2SGWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nLmZyb21fcnVubmVyX2FwaXL7awAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2Vy/GsAAGi4WAYAAABtZXRob2SGao5qAABqYGIAAGpRawAAhlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfUFJPSkVDVF9JRHL9awAAah8BAABYCQAAAGF0dHJpYnV0ZYZYMwAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UucmVhZHL+awAAauECAABYBgAAAG1ldGhvZIZYSwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlLmNhbmNlbHL/awAAakUBAABYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnIAbAAAavNbAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi53aW5kb3dpbmdyAWwAAGpfZQAAWAkAAABhdHRyaWJ1dGWGWCkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ub3BlbnICbAAAai4DAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF90b3ByA2wAAGonAwAAWAgAAABmdW5jdGlvboZYMQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN5bW1ldHJpY19iaW5hcnlfb3ByBGwAAGonAwAAWAgAAABmdW5jdGlvboZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93LnVuaW9ucgVsAABomFgGAAAAbWV0aG9khmqfagAAajQDAABqlGsAAIZYUgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5leHRyYWN0X2FsbF90aW1lcnNyBmwAAGplAQAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLnJlc2V0cgdsAABqCAIAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGVyCGwAAGpVAQAAWAUAAABjbGFzc4ZYSAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eXIJbAAAavwCAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8uV3JpdGVUb1RGUmVjb3JkLmV4cGFuZHIKbAAAahACAABYBgAAAG1ldGhvZIZqp2oAAGqLZAAAajJrAACGWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnNlZWtyC2wAAGouAwAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGVyDGwAAGouAwAAWAsAAABjbGFzc21ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUHJvdG9Db2Rlci5mcm9tX3R5cGVfaGludHINbAAAavNbAABYDAAAAHN0YXRpY21ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2gudG9fcnVubmVyX2FwaXIObAAAaggCAABYBgAAAG1ldGhvZIZYRgAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW1yD2wAAGp2AgAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4ubWVyZ2VyEGwAAGiYWAYAAABtZXRob2SGWCMAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfbnIRbAAAaicDAABYCAAAAGZ1bmN0aW9uhlhDAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c3ISbAAAakMDAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVychNsAABomFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbnIUbAAAavEBAABYBQAAAGNsYXNzhlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhchVsAABqfgIAAFgFAAAAY2xhc3OGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuU21hbGxlc3RyFmwAAGrxAQAAWAwAAABzdGF0aWNtZXRob2SGWDEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uZXhwYW5kchdsAABq/AIAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkJvdW5kTWV0aG9kchhsAABqVQEAAFgFAAAAY2xhc3OGWCMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uZ2xvYnIZbAAAarcCAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2RvdWJsZXIabAAAajFcAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmVyG2wAAGq1AQAAWAUAAABjbGFzc4ZYOwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyLmNhY2hlchxsAABqxAEAAFgJAAAAYXR0cmlidXRlhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZGVsZXRlX2dsb2JhbHIdbAAAaicDAABYCAAAAGZ1bmN0aW9uhmq7agAAapsCAABq52oAAIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuYXNfdmlld3IebAAAakgCAABYCQAAAGF0dHJpYnV0ZYZYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5jaGVja19jYWxsch9sAABqoAEAAFgIAAAAZnVuY3Rpb26GWC0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bnBhY2tfc2VxdWVuY2VyIGwAAGonAwAAWAgAAABmdW5jdGlvboZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWVyIWwAAGiYWAUAAABjbGFzc4ZYPgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suT3V0cHV0Q2hlY2tXcmFwcGVyRG9Gbi53cmFwcGVyciJsAABqBAMAAFgGAAAAbWV0aG9khmrLagAAarJoAABq12oAAIZYLQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyLmRlY29kZXIjbAAAavNbAABYBgAAAG1ldGhvZIZqxGoAAGqfZwAAaudqAACGWEsAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25yJGwAAGpDAwAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIuYXNfY2xvdWRfb2JqZWN0ciVsAABq81sAAFgGAAAAbWV0aG9khlhQAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25yJmwAAGp2AgAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lcnInbAAAaIlYBQAAAGNsYXNzhlg3AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRHIobAAAai4DAABYCQAAAGF0dHJpYnV0ZYZYOwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycilsAABqSAIAAFgGAAAAbWV0aG9khmrNagAAavxoAABqF2sAAIZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzLmV4cGFuZHIqbAAAau4CAABYBgAAAG1ldGhvZIZYRgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyK2wAAGqRAQAAWAwAAABzdGF0aWNtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0ubWtkaXJzcixsAABqiQEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlRlc3RPcHRpb25zLnZhbGlkYXRlci1sAABowFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uV2luZG93SW50b0Zuci5sAABqSAIAAFgFAAAAY2xhc3OGWCUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uci9sAABqSAIAAFgFAAAAY2xhc3OGWCUAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5wb3Bfb25lcjBsAABqJwMAAFgIAAAAZnVuY3Rpb26GWCkAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5zcGxpdHIxbAAAatsBAABYBgAAAG1ldGhvZIZYZQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9UWVBFcjJsAABqHwEAAFgJAAAAYXR0cmlidXRlhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrcjNsAABqCAIAAFgFAAAAY2xhc3OGWEAAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZcjRsAABqQwMAAFgJAAAAYXR0cmlidXRlhmpuagAAaggCAABVBm1vZHVsZXI1bAAAhlhWAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlci5yZXF1ZXN0X2R5bmFtaWNfc3BsaXRyNmwAAGpPXgAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MuRGF0YWZsb3dNZXRyaWNzcjdsAABq6GgAAFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuU2V0dXBPcHRpb25zcjhsAABowFgFAAAAY2xhc3OGWGEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9Gbi5wcm9jZXNzcjlsAABqIWMAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRyOmwAAGoxXAAAWAYAAABtZXRob2SGWFMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucmVtYWluaW5nX3NwbGl0X3BvaW50c3I7bAAAak9eAABYCQAAAGF0dHJpYnV0ZYZYQQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5EeW5hbWljU3BsaXRSZXF1ZXN0cjxsAABqT14AAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLndyaXRlcj1sAABqLgMAAFgGAAAAbWV0aG9khlgjAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2VyPmwAAGrbAQAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLmdldF93aW5kb3dfY29kZXJyP2wAAGiYWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXJyQGwAAGqLZwAAWAUAAABjbGFzc4ZYPAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLm1ha2Vfa2luZF9zdGF0c19xdWVyeXJBbAAAaKlYCAAAAGZ1bmN0aW9uhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5lbmRyQmwAAGiYWAkAAABhdHRyaWJ1dGWGWDEAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5lc3RpbWF0ZV9zaXplckNsAABq2wEAAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c3JEbAAAakMDAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZnJFbAAAaikCAABYCAAAAGZ1bmN0aW9uhlhFAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9uckZsAABqQwMAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cuZW5kckdsAABomFgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZS5TT1JUQllySGwAAGpNAQAAWAkAAABhdHRyaWJ1dGWGWDEAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnJlYWRsaW5lcklsAABqLgMAAFgGAAAAbWV0aG9khlgaAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWRySmwAAGrbAQAAWAUAAABjbGFzc4ZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlci5zaG91bGRfZmlyZXJLbAAAaggCAABYBgAAAG1ldGhvZIZYXAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50ckxsAABqNAMAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnNpemVyTWwAAGoxXAAAWAYAAABtZXRob2SGWFMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YnJObAAAakVcAABYBQAAAGNsYXNzhlg/AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfY3JlYXRlck9sAABq5wIAAFgMAAAAc3RhdGljbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyclBsAABqCAIAAFgFAAAAY2xhc3OGWCUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLkV2ZW50clFsAABq/AIAAFgFAAAAY2xhc3OGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfdGhyZWVyUmwAAGonAwAAWAgAAABmdW5jdGlvboZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnRvX3J1bm5lcl9hcGlyU2wAAGoIAgAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJUbAAAakgCAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLnNwbGl0clVsAABqdgIAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlNwbGl0UmVzdHJpY3Rpb25Gbi5wcm9jZXNzclZsAABqPQEAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEVyV2wAAGrnAgAAWAkAAABhdHRyaWJ1dGWGWCsAAABhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS50b19ydW5uZXJfYXBpclhsAABqi2gAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4ubWVyZ2VyWWwAAGiYWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlNUT1BQRURyWmwAAGiJWAkAAABhdHRyaWJ1dGWGWDQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuU3RhbmRhcmRPcHRpb25zcltsAABowFgFAAAAY2xhc3OGWCsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmFwcGx5clxsAABqSAIAAFgGAAAAbWV0aG9khlhHAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrcG9pbnRyXWwAAGp2AgAAWAYAAABtZXRob2SGWCIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVyLndyaXRlcl5sAABq2wEAAFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc3JfbAAAaLhYBQAAAGNsYXNzhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uYXNzaWducmBsAABomFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbC5UcmFuc2Zvcm1SZXN1bHRyYWwAAGr1AgAAWAUAAABjbGFzc4ZYTQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlLmdldFN0YXRlcmJsAABqRQEAAFgGAAAAbWV0aG9khlhdAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5nZXRfd2luZG93aW5ncmNsAABqIWMAAFgGAAAAbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlcmRsAABqi2gAAFgFAAAAY2xhc3OGWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uRWxlbWVudEFuZFJlc3RyaWN0aW9ucmVsAABqPQEAAFgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lLnJ1bnJmbAAAatMBAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUucmVhZHJnbAAAai4DAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uTWF0Y2hSZXN1bHRyaGwAAGouAwAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9tdWx0aXBseXJpbAAAaicDAABYCAAAAGZ1bmN0aW9uhlhPAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuYXBwbHlfQ29tYmluZVZhbHVlc3JqbAAAautkAABYBgAAAG1ldGhvZIZYTgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Mb2dnaW5nU2VydmljZXIuTG9nZ2luZ3JrbAAAandmAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuTUlOX0ZSQUNUSU9OX09GX0ZJTEVTX1RPX1NUQVRybGwAAGrhAgAAWAkAAABhdHRyaWJ1dGWGWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyLlRlc3REYXRhZmxvd1J1bm5lci5ydW5ybWwAAGqeZgAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuQ29Hcm91cEJ5S2V5LmV4cGFuZHJubAAAau4CAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnlyb2wAAGrnAgAAWAUAAABjbGFzc4ZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkZpbmlzaENvbWJpbmUucHJvY2Vzc3JwbAAAahMDAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLkFzc2lnbkNvbnRleHRycWwAAGiYWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLmdldF93aW5kb3dpbmdycmwAAGpIAgAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLm9uX2ZpcmVyc2wAAGoIAgAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rLndyaXRlcnJ0bAAAaucCAABYBgAAAG1ldGhvZIZqUWoAAGiYajVsAACGWD8AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJydWwAAGrzWwAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfcnNoaWZ0cnZsAABqJwMAAFgIAAAAZnVuY3Rpb26GalNqAABq81sAAGoyawAAhmpUagAAaLhq52oAAIZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0uYWRkcndsAABqSwMAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9tYXRjaGVycnhsAABqi2gAAFgGAAAAbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseS5mcm9tX3J1bm5lcl9hcGlyeWwAAGoIAgAAWAwAAABzdGF0aWNtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXJyemwAAGrzWwAAWAUAAABjbGFzc4ZYJwAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbi5vZnJ7bAAAauIBAABYDAAAAHN0YXRpY21ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcnJ8bAAAaJhYBgAAAG1ldGhvZIZYIQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLnJ1bnJ9bAAAaotoAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlLmdldF9uYW1lcn5sAABqVQEAAFgGAAAAbWV0aG9khlhTAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyLkpvYlNlcnZpY2UuZ2V0U3RhdGVTdHJlYW1yf2wAAGpFAQAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5NZWFuLlBlcktleS5leHBhbmRygGwAAGrxAQAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuLmZyb21fcnVubmVyX2FwaXKBbAAAaqRdAABYCwAAAGNsYXNzbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS5zaXplcoJsAABqMVwAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVuX3RyYW5zZm9ybXKDbAAAaIlYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuRFJBSU5JTkdyhGwAAGiJWAkAAABhdHRyaWJ1dGWGWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIuSm9iU2VydmljZS5ydW5yhWwAAGpFAQAAWAYAAABtZXRob2SGWCMAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeXKGbAAAaicDAABYCAAAAGZ1bmN0aW9uhmptagAAavEBAABqNWwAAIZYVQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlLmdldE1lc3NhZ2VTdHJlYW1yh2wAAGpFAQAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5vcGVucohsAABox1gMAAAAc3RhdGljbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlcnKJbAAAak9eAABYBQAAAGNsYXNzhlgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkdaSVByimwAAGouAwAAWAkAAABhdHRyaWJ1dGWGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GcotsAABqvgIAAFgJAAAAYXR0cmlidXRlhlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuYXBwbHlfV3JpdGVUb0JpZ1F1ZXJ5coxsAABq62QAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclBvc2l0aW9uco1sAABqT14AAFgFAAAAY2xhc3OGWCQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXJyjmwAAGrzWwAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnNwbGl0co9sAABox1gMAAAAc3RhdGljbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbS5nZXRfZGljdHKQbAAAan4CAABYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUuY3JlYXRlX2NvbW1pdHKRbAAAaOtYCAAAAGZ1bmN0aW9uhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuUGVyS2V5cpJsAABq8QEAAFgFAAAAY2xhc3OGWCoAAABhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLlJlYWRGcm9tVEZSZWNvcmRyk2wAAGoQAgAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVuYXJ5X3Bvc2l0aXZlcpRsAABqJwMAAFgIAAAAZnVuY3Rpb26GWD4AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnKVbAAAavNbAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIudmFsdWVfY29kZXJylmwAAGrzWwAAWAYAAABtZXRob2SGaodqAABq/AIAAGocawAAhlgrAAAAYXBhY2hlX2JlYW0uZXJyb3IuUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcnKXbAAAarxjAABYCQAAAGV4Y2VwdGlvboZYNgAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5vcGVuX3dyaXRlcnKYbAAAaswCAABYBgAAAG1ldGhvZIZqoGoAAGo1AQAAaudqAACGWCoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW5ymWwAAGq9AQAAWAUAAABjbGFzc4ZYUwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkpPQl9QQVRURVJOcppsAABqHwEAAFgJAAAAYXR0cmlidXRlhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay5kaXNwbGF5X2RhdGFym2wAAGrnAgAAWAYAAABtZXRob2SGWEMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MuRGF0YWZsb3dNZXRyaWNzLnF1ZXJ5cpxsAABq6GgAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5VUERBVEVEcp1sAABoiVgJAAAAYXR0cmlidXRlhlgxAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkLmZpbGVfbmFtZXKebAAAapsCAABYCQAAAGF0dHJpYnV0ZYZYOwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5wcm9jZXNzcp9sAABqBAMAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZXhpc3RzcqBsAABox1gMAAAAc3RhdGljbWV0aG9khmqZagAAaOtq5moAAIZYWgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmRlc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneXKhbAAAautkAABYCwAAAGNsYXNzbWV0aG9khlhPAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuR0NTX1VSSXKibAAAah8BAABYCQAAAGF0dHJpYnV0ZYZYNgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybnKjbAAAaqRdAABYCwAAAGNsYXNzbWV0aG9khmqhagAAagACAABqFGsAAIZYMwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuY2hlY2tfYWNjZXNzaWJsZXKkbAAAaotnAABYCAAAAGZ1bmN0aW9uhlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuUGVyRWxlbWVudHKlbAAAavEBAABYBQAAAGNsYXNzhlhhAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5Qcm92aXNpb25TZXJ2aWNlU2VydmljZXIuR2V0UHJvdmlzaW9uSW5mb3KmbAAAamBiAABYBgAAAG1ldGhvZIZYIgAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZS5leHBhbmRyp2wAAGrbAQAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5nZXRfd2luZG93aW5ncqhsAABqkQEAAFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVN0cmluZ3NUb1B1YlN1Yi50b3BpY3KpbAAAanIBAABYCQAAAGF0dHJpYnV0ZYZYMwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwc3KqbAAAaLhYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5yZW5hbWVyq2wAAGq3AgAAWAYAAABtZXRob2SGWGAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9OT1RfUE9TSVRJVkVyrGwAAGofAQAAWAkAAABhdHRyaWJ1dGWGaq5qAABq2wEAAGrmagAAhlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmNyZWF0ZXKtbAAAai4DAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FT1dyrmwAAGiYWAkAAABhdHRyaWJ1dGWGWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvcnKvbAAAaJFYBQAAAGNsYXNzhlggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm5ysGwAAGpIAgAAWAUAAABjbGFzc4ZqtGoAAGrlZQAAajJrAACGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGEuY3JlYXRlX2Zyb21ysWwAAGp+AgAAWAsAAABjbGFzc21ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXJysmwAAGq+AgAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5UZW1wRGlyLmNyZWF0ZV90ZW1wX2ZpbGVys2wAAGoMAwAAWAYAAABtZXRob2SGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MuY29uc3VtZWRfc3BsaXRfcG9pbnRzcrRsAABqT14AAFgJAAAAYXR0cmlidXRlhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLmRlZmF1bHRfdHlwZV9oaW50c3K1bAAAakgCAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX2F0dHJytmwAAGonAwAAWAgAAABmdW5jdGlvboZYSQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnR5cGVfY2hlY2tfaW5wdXRzX29yX291dHB1dHNyt2wAAGqRAQAAWAYAAABtZXRob2SGWD8AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsud3JpdGVfZW5jb2RlZF9yZWNvcmRyuGwAAGrMAgAAWAYAAABtZXRob2SGWBsAAABhcGFjaGVfYmVhbS5lcnJvci5CZWFtRXJyb3JyuWwAAGq8YwAAWAkAAABleGNlcHRpb26GWDYAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXJyumwAAGqLZwAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLnByb2Nlc3Nyu2wAAGpIAgAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1YnK8bAAAanIBAABYBQAAAGNsYXNzhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5nZXRfYWNjdW11bGF0b3JfY29kZXJyvWwAAGpIAgAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uZ2V0X3ZhcmludF9zaXplcr5sAABqMVwAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuY29kZXJzcr9sAABq81sAAFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QaWNrbGVDb2RlcnLAbAAAavNbAABYBQAAAGNsYXNzhlgsAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uVmFyaWFudEluZm8uZmllbGRfY291bnRywWwAAGqbAgAAWAkAAABhdHRyaWJ1dGWGWCwAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLkVsZW1lbnRFdmVudHLCbAAAavwCAABYBQAAAGNsYXNzhlhVAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0TWVzc2FnZVN0cmVhbXLDbAAAarJmAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyLmFwcGx5csRsAABoiVgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzcsVsAABqNAMAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25yxmwAAGrbAQAAWAYAAABtZXRob2SGWGsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZXLHbAAAah8BAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzcshsAABq7gIAAFgFAAAAY2xhc3OGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvd3LJbAAAaJhYBQAAAGNsYXNzhlgkAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLkR1cmF0aW9ucspsAABq4gEAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtLnR5cGVEaWN0cstsAABqfgIAAFgJAAAAYXR0cmlidXRlhlg1AAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb25yzGwAAGozaAAAWAkAAABleGNlcHRpb26GWEQAAABhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXLNbAAAaiACAABYCAAAAGZ1bmN0aW9uhlhaAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuUFJPSkVDVF9JRF9QQVRURVJOcs5sAABqHwEAAFgJAAAAYXR0cmlidXRlhlg/AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5EZWxldGVGcm9tRGF0YXN0b3Jlcs9sAABqtQEAAFgFAAAAY2xhc3OGalZqAABqMVwAAGoyawAAhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGVy0GwAAGoIAgAAWAUAAABjbGFzc4ZYJAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlcnLRbAAAavNbAABYBQAAAGNsYXNzhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMuZ2FwX3NpemVy0mwAAGiYWAkAAABhdHRyaWJ1dGWGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX3hvcnLTbAAAaicDAABYCAAAAGZ1bmN0aW9uhlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkub25fZmlyZXLUbAAAaggCAABYBgAAAG1ldGhvZIZqWmoAAGq1AQAAauZqAACGWCoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWF0Y2hy1WwAAGouAwAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2Rlci5rZXlfY29kZXJy1mwAAGrzWwAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLm9wZW5y12wAAGigWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uc2NoZW1lcthsAABqLgMAAFgLAAAAY2xhc3NtZXRob2SGWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uc2l6ZV9vZl9maWxlc19pbl9nbG9ictlsAABqtwIAAFgGAAAAbWV0aG9khmp9agAAartgAABqMmsAAIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGUuZXhwYW5kctpsAABq7gIAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIudHJ5X2NsYWltcttsAABo+lgGAAAAbWV0aG9khlhCAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS53cml0ZV9ieXRlctxsAABqMVwAAFgGAAAAbWV0aG9khmpragAAapJcAABqFGsAAIZYKgAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LlBlcm1hbmVudEV4Y2VwdGlvbnLdbAAAaikCAABYCQAAAGV4Y2VwdGlvboZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uY3JlYXRlct5sAABqegEAAFgGAAAAbWV0aG9khmp2agAAam4CAABqNWwAAIZYIgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLlByb2ZpbGVy32wAAGpNAQAAWAUAAABjbGFzc4ZqfGoAAGqJYAAAahxrAACGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5sb2FkX25hbWVy4GwAAGonAwAAWAgAAABmdW5jdGlvboZYNwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlLmNvcHly4WwAAGpVAQAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcnLibAAAaJhYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW1y42wAAGpLAwAAWAUAAABjbGFzc4ZqiGoAAGoEAwAAatdqAACGWDQAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3QudW53cmFwcuRsAABqVQEAAFgMAAAAc3RhdGljbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2NrLnRpbWVy5WwAAGp2XgAAWAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucy5hbm5vdGF0ZXLmbAAAahcBAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLm9wZW5y52wAAGqJAQAAWAYAAABtZXRob2SGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzcuhsAABqXwIAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNy6WwAAGiJWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlci5kZWNy6mwAAGjVWAYAAABtZXRob2SGWF4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9HQ1NfT0JKRUNUcutsAABqHwEAAFgJAAAAYXR0cmlidXRlhlgwAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5pc19kZXRlcm1pbmlzdGljcuxsAABq81sAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2Nrcu1sAABqdl4AAFgFAAAAY2xhc3OGWB0AAABhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZXLubAAAaotoAABYBQAAAGNsYXNzhmqUagAAaMdqU2sAAIZYMAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV90cnVlX2RpdmlkZXLvbAAAaicDAABYCAAAAGZ1bmN0aW9uhlhNAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnBlcmNlbnRfY29tcGxldGVy8GwAAGpPXgAAWAkAAABhdHRyaWJ1dGWGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBhbGNlX29ycvFsAABqJwMAAFgIAAAAZnVuY3Rpb26GWDgAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1Yi5pZF9sYWJlbHLybAAAanIBAABYCQAAAGF0dHJpYnV0ZYZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlckVsZW1lbnQuZXhwYW5kcvNsAABq8QEAAFgGAAAAbWV0aG9khmqoagAAatdkAABqUWsAAIZYKQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rLmZpbmFsaXplX3dyaXRlcvRsAABq2wEAAFgGAAAAbWV0aG9khmqqagAAar0BAABqNWwAAIZYLgAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlLnJlYWRy9WwAAGj6WAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b25y9mwAAGpfZQAAWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZVZhcmlhYmxlLm1hdGNoX3R5cGVfdmFyaWFibGVzcvdsAABqxQIAAFgGAAAAbWV0aG9khlhNAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmhhbmRsZV9yZXN1bHRy+GwAAGplAQAAWAYAAABtZXRob2SGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlcnL5bAAAal8CAABYBQAAAGNsYXNzhlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuY2FsbF9mdW5jdGlvbl92YXJfd2ty+mwAAGonAwAAWAgAAABmdW5jdGlvboZYUgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkdDU19CVUNLRVRy+2wAAGofAQAAWAkAAABhdHRyaWJ1dGWGarNqAABqKQIAAGoUawAAhlglAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucm90X3R3b3L8bAAAaicDAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5kZWxldGVy/WwAAGp6AQAAWAYAAABtZXRob2SGardqAABqZgIAAGrXagAAhlgoAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5zYXZlX21vZHVsZXL+bAAAas9gAABYCAAAAGZ1bmN0aW9uhlhdAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfdGVzdF9tYXRjaGVycv9sAABqHwEAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5pc19rdl9jb2RlcnIAbQAAavNbAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4ub25fZmlyZXIBbQAAaggCAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5nZXRfbWF0Y2hlcnICbQAAaj0BAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUmVzdWx0LnN0YXRlcgNtAABoiVgJAAAAYXR0cmlidXRlhmpoagAAau4CAABqNWwAAIZYYgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5nZXRfdmFsdWVfb3Jfc2NoZWR1bGVfYWZ0ZXJfb3V0cHV0cgRtAABqZQEAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXJyBW0AAGiYWAUAAABjbGFzc4ZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuaGFzX2RlZmF1bHRzcgZtAABqSAIAAFgJAAAAYXR0cmlidXRlhlgwAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlR5cGVPcHRpb25zcgdtAABowFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfZmFzdHIIbQAAaicDAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemVyCW0AAGjHWAwAAABzdGF0aWNtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGUuZGlzcGxheV9kYXRhcgptAABq2wEAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIuZW5jb2RlcgttAABq81sAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlNwbGl0UmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGVyDG0AAGo9AQAAWAYAAABtZXRob2SGWCUAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kdXBfdG9wcg1tAABqJwMAAFgIAAAAZnVuY3Rpb26GWFQAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXJyDm0AAGp3ZgAAWAgAAABmdW5jdGlvboZYSgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVNlcnZpY2VyLlN0YXRlcg9tAABqd2YAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGguZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHNyEG0AAGozaAAAWAgAAABmdW5jdGlvboZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5pc19sYXRlchFtAABqCAIAAFgGAAAAbWV0aG9khlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfY2xvdWRfb3B0aW9uc3ISbQAAah8BAABYBgAAAG1ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93c3ITbQAAaJhYBQAAAGNsYXNzhlghAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzLlBvcGVuchRtAABqoAEAAFgIAAAAZnVuY3Rpb26GWD8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIuc2VydmVyFW0AAGpFAQAAWAgAAABmdW5jdGlvboZqiWoAAGozaAAAajJrAACGWEQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnIWbQAAaJhYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlchdtAABo+lgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5pbmZlcl9vdXRwdXRfdHlwZXIYbQAAakgCAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5sYXN0X3JlY29yZF9zdGFydHIZbQAAakMDAABYCQAAAGF0dHJpYnV0ZYZYZAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1yGm0AAGqVYwAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5jYWxsX2Z1bmN0aW9uX3ZhcnIbbQAAaicDAABYCAAAAGZ1bmN0aW9uhlhLAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlci5zZXRfcnVudGltZV9vcHRpb25zchxtAABqi2cAAFgLAAAAY2xhc3NtZXRob2SGWEUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeS5CdW5kbGVGYWN0b3J5LmNyZWF0ZV9idW5kbGVyHW0AAGo5YgAAWAYAAABtZXRob2SGal9qAABqcgEAAGrmagAAhlghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvch5tAABqSAIAAFgFAAAAY2xhc3OGalJqAABq21sAAGpRawAAhmpiagAAaJFqlGsAAIZYUgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLnByb2Nlc3NyH20AAGq1AQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuaXNfa3ZfY29kZXJyIG0AAGrzWwAAWAYAAABtZXRob2SGWFcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9ldmFsdWF0b3JyIW0AAGpfAgAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1Yi5nZXRfd2luZG93aW5nciJtAABqcgEAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZS5nZXRfb3V0cHV0X3R5cGVyI20AAGpIAgAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9pbnZlcnRyJG0AAGonAwAAWAgAAABmdW5jdGlvboZYKAAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5Xcml0ZVRvVGV4dC5leHBhbmRyJW0AAGrLAQAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JyJm0AAGo1AQAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0uY291bnRyJ20AAGpLAwAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5zZXRfb3B0aW9uc3IobQAAaMdYCwAAAGNsYXNzbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnBvc2l0aW9uciltAABqT14AAFgJAAAAYXR0cmlidXRlhlgzAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci53aXRoX25hbWVzciptAABouFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5kZWZhdWx0X2xhYmVscittAABqSAIAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmRlbGV0ZXIsbQAAai4DAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFueS5jb21iaW5lX29wci1tAABqCAIAAFgGAAAAbWV0aG9khlggAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uVmFyaWFudENhbGxyLm0AAGqbAgAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnByaW50X2l0ZW1yL20AAGonAwAAWAgAAABmdW5jdGlvboZYKgAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2lua3IwbQAAaswCAABYBQAAAGNsYXNzhlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZS5pc19ib3VuZGVkcjFtAABqT14AAFgGAAAAbWV0aG9khlhTAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0U3RhdGVTdHJlYW1yMm0AAGqyZgAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF90dXBsZXIzbQAAaicDAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5leGlzdHNyNG0AAGigWAYAAABtZXRob2SGaoVqAABq5wIAAGpTawAAhlg/AAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3JlZW50cmFudF9yZWFkc19zdWNjZWVkcjVtAABqNQEAAFgIAAAAZnVuY3Rpb26GWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQubWV0cmljc3I2bQAAamUBAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyN20AAGrbAQAAWAwAAABzdGF0aWNtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5tYWtlX3JlcXVlc3RyOG0AAGipWAgAAABmdW5jdGlvboZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RTdGVwQ29udGV4dHI5bQAAamUBAABYBQAAAGNsYXNzhlgnAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc3RvcmVfbWFwcjptAABqJwMAAFgIAAAAZnVuY3Rpb26GWDEAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy53aXRoX2lucHV0X3R5cGVzcjttAABqUAIAAFgIAAAAZnVuY3Rpb26GWC8AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmFzX2Nsb3VkX29iamVjdHI8bQAAavNbAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2guc2hvdWxkX2ZpcmVyPW0AAGoIAgAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY3I+bQAAavNbAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIuc3RlcHNyP20AAGi4WAkAAABhdHRyaWJ1dGWGaptqAABqlWMAAGoXawAAhlg3AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLmtleV9jb2RlcnJAbQAAavNbAABYBgAAAG1ldGhvZIZYIAAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5jYWxsckFtAABqoAEAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5qb2luckJtAABox1gMAAAAc3RhdGljbWV0aG9khlhRAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLmFkZF9CZWFtRm5EYXRhU2VydmljZXJfdG9fc2VydmVyckNtAABqd2YAAFgIAAAAZnVuY3Rpb26GWD8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50eXBlX2NoZWNrX291dHB1dHNyRG0AAGqRAQAAWAYAAABtZXRob2SGWD8AAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlci5sb2NhbF90b19nbG9iYWxyRW0AAGj6WAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2RlcnJGbQAAavNbAABYBQAAAGNsYXNzhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX0ltcHVsc2VyR20AAGrrZAAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmVySG0AAGq1AQAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLmZyb21fcnVubmVyX2FwaXJJbQAAaotoAABYDAAAAHN0YXRpY21ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwucmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzckptAABqu2AAAFgIAAAAZnVuY3Rpb26GWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyLkRvY2tlclJQQ01hbmFnZXJyS20AAGraAgAAWAUAAABjbGFzc4ZYHQAAAGFwYWNoZV9iZWFtLmVycm9yLlBWYWx1ZUVycm9yckxtAABqvGMAAFgJAAAAZXhjZXB0aW9uhlhEAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25yTW0AAGpDAwAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2suYWR2YW5jZV90aW1lck5tAABqdl4AAFgGAAAAbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubG9hZF9kZXJlZnJPbQAAaicDAABYCAAAAGZ1bmN0aW9uhmqsagAAassBAABq52oAAIZYLgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHNyUG0AAGpQAgAAWAUAAABjbGFzc4ZYOwAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UucmVhZF9yZWNvcmRzclFtAABq4QIAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLndpdGhfb3V0cHV0c3JSbQAAakgCAABYBgAAAG1ldGhvZIZYHAAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRyU20AAGqbAgAAWAUAAABjbGFzc4ZYOwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfdmFyX2ludDY0clRtAABqMVwAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkLmxpbmVyVW0AAGqbAgAAWAkAAABhdHRyaWJ1dGWGWFkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLkRlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc3JWbQAAal8CAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLlJlYWRGcm9tVmNmLmV4cGFuZHJXbQAAapsCAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUuZ2V0X29wdGlvbnJYbQAAatMBAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyclltAABqxAEAAFgFAAAAY2xhc3OGWE4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRURyWm0AAGiYWAkAAABhdHRyaWJ1dGWGWDUAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5yZXRyeV9vbl9iZWFtX2lvX2Vycm9yX2ZpbHRlcnJbbQAAaikCAABYCAAAAGZ1bmN0aW9uhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseXJcbQAAavEBAABYBQAAAGNsYXNzhlg6AAAAYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJdbQAAaqRdAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVuYXJ5X25vdHJebQAAaicDAABYCAAAAGZ1bmN0aW9uhlgoAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2FuZHJfbQAAaicDAABYCAAAAGZ1bmN0aW9uhlgpAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmNvcHlyYG0AAGouAwAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIudmFsdWVfY29kZXJyYW0AAGrzWwAAWAYAAABtZXRob2SGWEoAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLk1JTl9OVU1CRVJfT0ZfRklMRVNfVE9fU1RBVHJibQAAauECAABYCQAAAGF0dHJpYnV0ZYZYRAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VycmNtAABqsmYAAFgFAAAAY2xhc3OGWEYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5GaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3RvcmRtAABqjAIAAFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlcnJlbQAAaLhYBQAAAGNsYXNzhlgyAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkRpcmVjdE9wdGlvbnNyZm0AAGjAWAUAAABjbGFzc4ZYJgAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXIuZWxlbWVudF90eXBlcmdtAABqX2UAAFgJAAAAYXR0cmlidXRlhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLnRvX3J1bm5lcl9hcGlyaG0AAGoIAgAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLm9wZW5fZmlsZXJpbQAAauECAABYBgAAAG1ldGhvZIZYUgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJyam0AAGqyZgAAWAgAAABmdW5jdGlvboZYOQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucXVlcnlfc3BsaXR0ZXIuZ2V0X3NwbGl0c3JrbQAAagEBAABYCAAAAGZ1bmN0aW9uhlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5SZWFkRm5ybG0AAGq1AQAAWAUAAABjbGFzc4ZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuZGlzcGxheV9kYXRhcm1tAABqSAIAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkNvbmNhdFBvc2l0aW9ucm5tAABqT14AAFgFAAAAY2xhc3OGWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLkRlZmF1bHRSb290QnVuZGxlUHJvdmlkZXJyb20AAGpfAgAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdFJlc3RyaWN0aW9uRm5ycG0AAGo9AQAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm5ycW0AAGrzWwAAWAwAAABzdGF0aWNtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlNpbmdsZXRvbkNvZGVycnJtAABq81sAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5nZXRfd2luZG93X2NvZGVycnNtAABomFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5jb3B5cnRtAABooFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5SVU5OSU5HcnVtAABoiVgJAAAAYXR0cmlidXRlhlg9AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cy5nZXRfdHlwZV9oaW50c3J2bQAAalACAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5jb21wdXRlX2hhc2hyd20AAGoMAwAAWAgAAABmdW5jdGlvboZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVycnhtAABq81sAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3N1YnRyYWN0cnltAABqJwMAAFgIAAAAZnVuY3Rpb26GWFoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGVyem0AAGo0AwAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnBpcGVsaW5lcnttAABqkQEAAFgJAAAAYXR0cmlidXRlhlgtAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlRhYmxlUm93SnNvbkNvZGVycnxtAABq5wIAAFgFAAAAY2xhc3OGWEYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuTG9nZ2luZ1NlcnZpY2Vycn1tAABqd2YAAFgFAAAAY2xhc3OGWCoAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW1yfm0AAGoxXAAAWAUAAABjbGFzc4ZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9kZWZhdWx0cn9tAABqfgIAAFgGAAAAbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X29ycoBtAABqJwMAAFgIAAAAZnVuY3Rpb26GWEEAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5LmdldF9kaWN0X3RhYmxlX3NjaGVtYXKBbQAAaucCAABYDAAAAHN0YXRpY21ldGhvZIZYPwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbnKCbQAAakMDAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5vbl9tZXJnZXKDbQAAaggCAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVycoRtAABqTQEAAFgFAAAAY2xhc3OGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HcoVtAABqCAIAAFgJAAAAYXR0cmlidXRlhmpsagAAauIBAABqFGsAAIZYPgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5pbmZlcl9yZXR1cm5fdHlwZV9mdW5jcoZtAABqVQEAAFgIAAAAZnVuY3Rpb26GWF0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGVyh20AAGplAQAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucy5hc3NpZ25yiG0AAGiYWAYAAABtZXRob2SGWEoAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbnKJbQAAarUBAABYBQAAAGNsYXNzhlgjAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUuYXBwbHlyim0AAGqLaAAAWAYAAABtZXRob2SGWCEAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZC5leHBhbmRyi20AAGrbAQAAWAYAAABtZXRob2SGWFoAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tyjG0AAGpDAwAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF9jbGFzc3KNbQAAaicDAABYCAAAAGZ1bmN0aW9uhlhFAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uco5tAABqQwMAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRGcm9tVGV4dC5leHBhbmRyj20AAGrLAQAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVlLnRpbWVzdGFtcHKQbQAAaJhYCQAAAGF0dHJpYnV0ZYZYNAAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0ubWF0Y2hykW0AAGigWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uc2NoZW1lcpJtAABqiQEAAFgLAAAAY2xhc3NtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zdWJzY3Jyk20AAGonAwAAWAgAAABmdW5jdGlvboZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2t2X2NvZGVycpRtAABq81sAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc3RvcmVfZ2xvYmFscpVtAABqJwMAAFgIAAAAZnVuY3Rpb26GaoFqAABqzAIAAGpTawAAhlg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXJylm0AAGrrZAAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGVyl20AAGiJWAUAAABjbGFzc4ZYJQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGVymG0AAGruAgAAWAUAAABjbGFzc4ZYMgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwcpltAABouFgGAAAAbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaHKabQAAaggCAABYBQAAAGNsYXNzhlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c3KbbQAAakgCAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5PckZpbmFsbHkudG9fcnVubmVyX2FwaXKcbQAAaggCAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5yZW5hbWVynW0AAGouAwAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWNynm0AAGrzWwAAWAYAAABtZXRob2SGWGMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuYWRkX0FydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJyn20AAGpFXAAAWAgAAABmdW5jdGlvboZqtWoAAGo7AwAAahxrAACGWDMAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlByb2Nlc3NpbmdUaW1lRXZlbnRyoG0AAGr8AgAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5MYXJnZXN0cqFtAABq8QEAAFgMAAAAc3RhdGljbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmtyom0AAGpPXgAAWAUAAABjbGFzc4ZYUQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1YnKjbQAAakVcAABYBQAAAGNsYXNzhlhDAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLlVOU1RBUlRFRHKkbQAAakMDAABYCQAAAGF0dHJpYnV0ZYZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9hZGRypW0AAGonAwAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLlF1ZXJ5SXRlcmF0b3Jypm0AAGipWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5QYWlyV2l0aFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlcqdtAABqPQEAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNlLmRpc3BsYXlfZGF0YXKobQAAaucCAABYBgAAAG1ldGhvZIZYSAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLlJ1bnKpbQAAarJmAABYBgAAAG1ldGhvZIZYWgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnN0YXJ0X2J1bmRsZXKqbQAAahMDAABYBgAAAG1ldGhvZIZqnWoAAGq8YwAAajJrAACGWCUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZucqttAABqSAIAAFgFAAAAY2xhc3OGWDwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWNjdW11bGF0aW9uTW9kZS5BQ0NVTVVMQVRJTkdyrG0AAGoIAgAAWAkAAABhdHRyaWJ1dGWGWDcAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVycq1tAABqi2cAAFgFAAAAY2xhc3OGWEsAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5DYW5jZWxyrm0AAGqyZgAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZS50b19qc29uX3ZhbHVlcq9tAABq5WUAAFgIAAAAZnVuY3Rpb26GWC4AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyLm5hbWVzcrBtAABouFgJAAAAYXR0cmlidXRlhmrCagAAalhnAABqlGsAAIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUuZXhwYW5kcrFtAABqSAIAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93crJtAABomFgFAAAAY2xhc3OGWCUAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5wb3BfdHdvcrNtAABqJwMAAFgIAAAAZnVuY3Rpb26GWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRPTkVytG0AAGiJWAkAAABhdHRyaWJ1dGWGWC4AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIua2V5X2NvZGVycrVtAABq81sAAFgGAAAAbWV0aG9khlhjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldE1hbmlmZXN0crZtAABqRVwAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5mcm9tX3R5cGVfaGludHK3bQAAavNbAABYCwAAAGNsYXNzbWV0aG9khmqpagAAautkAABqF2sAAIZYQAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5EeW5hbWljU3BsaXRSZXN1bHRyuG0AAGpPXgAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZ2V0X2ltcGxyuW0AAGrzWwAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmpvaW5yum0AAGp6AQAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b24uZWxlbWVudF90eXBlcrttAABqX2UAAFgJAAAAYXR0cmlidXRlhmqvagAAal9lAABqUWsAAIZYSwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMuU1RPUkFHRV9BUElfU0VSVklDRXK8bQAAaMBYCQAAAGF0dHJpYnV0ZYZYKAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGVyvW0AAGouAwAAWAUAAABjbGFzc4ZqsmoAAGqZZQAAajVsAACGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2Vycr5tAABqNAMAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyLmlzX2RldGVybWluaXN0aWNyv20AAGrzWwAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpcsBtAABqkQEAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXJywW0AAGrzWwAAWAUAAABjbGFzc4ZYKAAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzLnVucGFja19Bbnlywm0AAGoAAgAAWAgAAABmdW5jdGlvboZYQgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Mb2dnaW5nU3R1YnLDbQAAandmAABYBQAAAGNsYXNzhmq/agAAarcCAABq5moAAIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnB1c2hfdmFsdWVyxG0AAGonAwAAWAgAAABmdW5jdGlvboZYVQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnByb2Nlc3NyxW0AAGoTAwAAWAYAAABtZXRob2SGWCcAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXJyxm0AAGrzWwAAWAUAAABjbGFzc4ZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHlyx20AAGpIAgAAWAUAAABjbGFzc4ZYOAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2VzcshtAABouFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uZ2V0X3dpbmRvd2luZ3LJbQAAakgCAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmZsYXR0ZW5faW5wdXRfdmlzaXRvcnLKbQAAautkAABYDAAAAHN0YXRpY21ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJyy20AAGrhAgAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5jYWxsX2Z1bmN0aW9ucsxtAABqJwMAAFgIAAAAZnVuY3Rpb26GWDkAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGVyzW0AAGrMAgAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW1yzm0AAGqJAQAAWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnN1Yl9yYW5nZV90cmFja2Vycs9tAABo+lgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJy0G0AAGiYWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9uc3LRbQAAaotnAABYCQAAAGF0dHJpYnV0ZYZYUAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMuUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyctJtAABqYGIAAFgFAAAAY2xhc3OGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLTbQAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlctRtAABqLgMAAFgLAAAAY2xhc3NtZXRob2SGWEQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZXLVbQAAaotnAABYBgAAAG1ldGhvZIZYVgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UuZXhwYW5kctZtAABqIWMAAFgGAAAAbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZS5yZWFkZXJy120AAGpPXgAAWAYAAABtZXRob2SGWBkAAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNEaWN0cthtAABqX2UAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5zdW1y2W0AAGpeAQAAWAkAAABhdHRyaWJ1dGWGWDcAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3JkctptAABqzAIAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZS5jcmVhdGVfcnVuX3F1ZXJ5ctttAABo61gIAAAAZnVuY3Rpb26GWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnLcbQAAakgCAABYBgAAAG1ldGhvZIZYSAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZ3LdbQAAaucCAABYDAAAAHN0YXRpY21ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLmFzX2Nsb3VkX29iamVjdHLebQAAavNbAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJy320AAGpIAgAAWAwAAABzdGF0aWNtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5rZXlfY29tcGFyYXRvcnLgbQAAaKlYCAAAAGZ1bmN0aW9uhmpkagAAapEBAABqNWwAAIZqZmoAAGqnAQAAapRrAACGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfZGl2aWRlcuFtAABqJwMAAFgIAAAAZnVuY3Rpb26GWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5MaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZHLibQAAahMDAABYBgAAAG1ldGhvZIZYXwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUucXVlcnlfbGF0ZXN0X3N0YXRpc3RpY3NfdGltZXN0YW1wcuNtAABqtQEAAFgMAAAAc3RhdGljbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlcuRtAABqMQIAAFgFAAAAY2xhc3OGWCoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXNy5W0AAGouAwAAWAUAAABjbGFzc4ZYLwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzcuZtAABq2wEAAFgGAAAAbWV0aG9khmpvagAAahACAABq52oAAIZYTAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hy520AAGqMAgAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5vbl9tZXJnZXLobQAAaggCAABYBgAAAG1ldGhvZIZqcGoAAGoxAgAAajVsAACGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2lua1dyaXRlcnLpbQAAak9eAABYBQAAAGNsYXNzhlhIAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ucuptAABqQwMAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbXLrbQAAajFcAABYBQAAAGNsYXNzhlglAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUub3B0aW9uc3LsbQAAaotoAABYCQAAAGF0dHJpYnV0ZYZYIAAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLlJlYWRGcm9tVmNmcu1tAABqmwIAAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nLnRvX3J1bm5lcl9hcGly7m0AAGpIAgAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5jb25zdF90eXBlcu9tAABqVQEAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlByb2Nlc3NLZXllZEVsZW1lbnRzcvBtAABqPQEAAFgFAAAAY2xhc3OGWDsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaHLxbQAAaIlYBgAAAG1ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5LkJ1bmRsZUZhY3Rvcnly8m0AAGo5YgAAWAUAAABjbGFzc4ZYJwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmRpc3BsYXlfZGF0YXLzbQAAatsBAABYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbnL0bQAAatsBAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzLmV4cGFuZHL1bQAAakgCAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5kZWxldGVy9m0AAGq3AgAAWAYAAABtZXRob2SGWCQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXJy920AAGrzWwAAWAUAAABjbGFzc4ZYIgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GaWx0ZXJy+G0AAGpIAgAAWAgAAABmdW5jdGlvboZqlWoAAGohYwAAahdrAACGWE0AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZXL5bQAAarJmAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5tYWtlX2ZucvptAABqSAIAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZXL7bQAAauECAABYBQAAAGNsYXNzhlhhAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5QdXRBcnRpZmFjdHL8bQAAakVcAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZU1ldGFkYXRhcv1tAABqLgMAAFgFAAAAY2xhc3OGaphqAABqDAMAAGo1bAAAhmqcagAAagEBAABq5moAAIZYMAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci52YWx1ZV9jb2RlcnL+bQAAavNbAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MuY29tbWl0X3BoeXNpY2Fscv9tAABqpwEAAFgGAAAAbWV0aG9khlghAAAAYXBhY2hlX2JlYW0ucHZhbHVlLkVtcHR5U2lkZUlucHV0cgBuAABqX2UAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLmlzb2Zvcm1hdHIBbgAAauIBAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLmlzX3Byb2Nlc3NfYm91bmRlZHICbgAAakgCAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS51bmlvbnIDbgAAalUBAABYCAAAAGZ1bmN0aW9uhlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGlyBG4AAGoIAgAAWAwAAABzdGF0aWNtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5DT1VOVF9UQUdyBW4AAGoIAgAAWAkAAABhdHRyaWJ1dGWGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycgZuAABqSAIAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci5uYW1lc3BhY2VzcgduAABouFgJAAAAYXR0cmlidXRlhlgwAAAAYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbi50b19ydW5uZXJfYXBpcghuAABqpF0AAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbXIJbgAAajFcAABYBQAAAGNsYXNzhlhAAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucy52YWxpZGF0ZXIKbgAAaMBYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAucHJlZGVjZXNzb3JyC24AAGriAQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm5yDG4AAGiYWAUAAABjbGFzc4ZYHgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJT3INbgAAarcCAABYBQAAAGNsYXNzhlhPAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuT1BUSU9OU3IObgAAah8BAABYCQAAAGF0dHJpYnV0ZYZYKgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLlRlc3RDbG9ja3IPbgAAanZeAABYBQAAAGNsYXNzhlhCAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUchBuAABomFgJAAAAYXR0cmlidXRlhlhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIuYXBwbHlfX0dyb3VwQnlLZXlPbmx5chFuAABqxAEAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnISbgAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZqtmoAAGpfAgAAapRrAACGWEAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuU3RhdGVTdHVichNuAABqd2YAAFgFAAAAY2xhc3OGWGUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5weXRob25fcnBjX2RpcmVjdF9ydW5uZXIuUHl0aG9uUlBDRGlyZWN0UnVubmVyLnJ1bnIUbgAAakACAABYBgAAAG1ldGhvZIZYTQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2VSZWFkZXIuZ2V0X3Byb2dyZXNzchVuAABqT14AAFgGAAAAbWV0aG9khlhCAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmFkdmFuY2VfcHJvY2Vzc2luZ190aW1lchZuAABq/AIAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmNvcHlfYmF0Y2hyF24AAGq3AgAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0ZuLnByb2Nlc3NyGG4AAGoEAwAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb24udXBkYXRlchluAABouFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZGVsZXRlchpuAABox1gMAAAAc3RhdGljbWV0aG9khlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX19OYXRpdmVXcml0ZXIbbgAAautkAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfZGl2aWRlchxuAABqJwMAAFgIAAAAZnVuY3Rpb26GWC8AAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlci5zdGFydHIdbgAAak0BAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdHIebgAAalUBAABYBQAAAGNsYXNzhlg5AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TaW5nbGV0b25Db2Rlci5pc19kZXRlcm1pbmlzdGljch9uAABq81sAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay5mb3JtYXRyIG4AAGrnAgAAWAkAAABhdHRyaWJ1dGWGWEMAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X2NsYWltciFuAABqQwMAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbnIibgAAatsBAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9yciNuAABqSAIAAFgGAAAAbWV0aG9khlgaAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmtyJG4AAGrbAQAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuU1RBUlRJTkdyJW4AAGiJWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGFyJm4AAGpIAgAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uam9pbnInbgAAai4DAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyLk1JTl9SRVFVRVNUU3IobgAAaoUCAABYCQAAAGF0dHJpYnV0ZYZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MuYXNzaWduciluAABomFgGAAAAbWV0aG9khlgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5kZWNvZGVyKm4AAGrzWwAAWAYAAABtZXRob2SGashqAABqLgMAAGpTawAAhlg8AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy52aWV3X2FzcituAABowFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2xzaGlmdHIsbgAAaicDAABYCAAAAGZ1bmN0aW9uhlhPAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmFwcGVuZF90b19jYWNoZXItbgAAamUBAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLnJlYWRfZnJvbV9zb3VyY2VyLm4AAGo1AQAAWAgAAABmdW5jdGlvboZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50Lm9uX2ZpcmVyL24AAGoIAgAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJyMG4AAGrzWwAAWAYAAABtZXRob2SGWE4AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb25yMW4AAGpDAwAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIub25fZWxlbWVudHIybgAAaggCAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlcnIzbgAAavNbAABYBgAAAG1ldGhvZIZYWQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVycjRuAABqHwEAAFgGAAAAbWV0aG9khlhKAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGFyNW4AAGq1AQAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbXBvcnRfbmFtZXI2bgAAaicDAABYCAAAAGZ1bmN0aW9uhlhBAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50MzJyN24AAGoxXAAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuRGlzdHJpYnV0aW9uLnVwZGF0ZXI4bgAAaNVYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5jb3B5cjluAABqiQEAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9zcGxpdHI6bgAAakMDAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZucjtuAABqSAIAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLmdldHI8bgAAajFcAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rLm9wZW5fd3JpdGVycj1uAABq2wEAAFgGAAAAbWV0aG9khmpjagAAaokBAABq5moAAIZYQQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3Jtcj5uAABqi2gAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2Zsb29yX2RpdmlkZXI/bgAAaicDAABYCAAAAGZ1bmN0aW9uhlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNyQG4AAGpIAgAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQlpJUDJyQW4AAGouAwAAWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLnRvX3J1bm5lcl9hcGlyQm4AAGoIAgAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5pbmZlcl9vdXRwdXRfdHlwZXJDbgAAapEBAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUuZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzckRuAABq0wEAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9yc2hpZnRyRW4AAGonAwAAWAgAAABmdW5jdGlvboZYQgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZHJGbgAAakMDAABYBgAAAG1ldGhvZIZYSgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlckduAABqlWMAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2Rlci5pc19kZXRlcm1pbmlzdGljckhuAABq81sAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJySW4AAGrbAQAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseS5mcm9tX3J1bm5lcl9hcGlySm4AAGoIAgAAWAwAAABzdGF0aWNtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseS5vbl9tZXJnZXJLbgAAaggCAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZS50aW1lc3RhbXByTG4AAGoxAgAAWAkAAABhdHRyaWJ1dGWGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zck1uAABqNAMAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQVVUT3JObgAAai4DAABYCQAAAGF0dHJpYnV0ZYZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfbHNoaWZ0ck9uAABqJwMAAFgIAAAAZnVuY3Rpb26GWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX2FuZHJQbgAAaicDAABYCAAAAGZ1bmN0aW9uhmqKagAAaiADAABqU2sAAIZYPgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbi5wcm9jZXNzclFuAABqNAMAAFgGAAAAbWV0aG9khlhVAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcnJSbgAAakVcAABYBQAAAGNsYXNzhlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuUFJPSkVDVF9OVU1CRVJfUEFUVEVSTnJTbgAAah8BAABYCQAAAGF0dHJpYnV0ZYZYTgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlLmV4cGFuZHJUbgAAaiFjAABYBgAAAG1ldGhvZIZYTwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb25yVW4AAGpDAwAAWAsAAABjbGFzc21ldGhvZIZqkWoAAGigauZqAACGWC4AAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlci5zdG9wclZuAABqTQEAAFgGAAAAbWV0aG9khmqWagAAaNVq52oAAIZYQwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyV24AAGiYWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyclhuAABq81sAAFgGAAAAbWV0aG9khlhGAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnJZbgAAaJhYDAAAAHN0YXRpY21ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLkVsZW1lbnRQYXJhbXJabgAAakgCAABYCQAAAGF0dHJpYnV0ZYZYPwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlc3JbbgAAalACAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVN0dWJyXG4AAGqyZgAAWAUAAABjbGFzc4ZqpWoAAGpCZAAAalNrAACGaqZqAABqegEAAGrmagAAhlgdAAAAYXBhY2hlX2JlYW0uZXJyb3IuUnVubmVyRXJyb3JyXW4AAGq8YwAAWAkAAABleGNlcHRpb26GWB0AAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5DbG9ja3JebgAAaikCAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVN0cmluZ3NUb1B1YlN1YnJfbgAAanIBAABYBQAAAGNsYXNzhlgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseXJgbgAAaggCAABYBQAAAGNsYXNzhlgzAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suQ2xvY2suYWR2YW5jZV90aW1lcmFuAABqdl4AAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5qb2lucmJuAABooFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cy53aXRoX291dHB1dF90eXBlc3JjbgAAalACAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uUGVyS2V5cmRuAABq8QEAAFgFAAAAY2xhc3OGdShYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUudGVsbHJlbgAAai4DAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuRkFJTEVEcmZuAABoiVgJAAAAYXR0cmlidXRlhlghAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubm9wcmduAABqJwMAAFgIAAAAZnVuY3Rpb26GWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5wcmludF9uZXdsaW5lcmhuAABqJwMAAFgIAAAAZnVuY3Rpb26GWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMuZXh0cmFjdF9jb21taXR0ZWRyaW4AAGqnAQAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1Yi5zdWJzY3JpcHRpb25yam4AAGpyAQAAWAkAAABhdHRyaWJ1dGWGWDkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5mcm9tX3J1bm5lcl9hcGlya24AAGoIAgAAWAwAAABzdGF0aWNtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRSQUlORURybG4AAGiJWAkAAABhdHRyaWJ1dGWGWDIAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUud2luZG93c3JtbgAAajECAABYCQAAAGF0dHJpYnV0ZYZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0uc3Vtcm5uAABqSwMAAFgGAAAAbWV0aG9khlhJAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeXJvbgAAal8CAABYBQAAAGNsYXNzhlg4AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeS5kaXNwbGF5X2RhdGFycG4AAGrnAgAAWAYAAABtZXRob2SGWBkAAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNMaXN0cnFuAABqX2UAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub0RpY3QuZXhwYW5kcnJuAABq8QEAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uLnRvX3J1bm5lcl9hcGlyc24AAGpfZQAAWAYAAABtZXRob2SGasFqAABqxQIAAGrXagAAhlgkAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GbG9hdENvZGVycnRuAABq81sAAFgFAAAAY2xhc3OGWEQAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZXJ1bgAAajUBAABYCAAAAGZ1bmN0aW9uhlhMAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucy5CSUdRVUVSWV9BUElfU0VSVklDRXJ2bgAAaMBYCQAAAGF0dHJpYnV0ZYZYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzLmRpY3RfdG9fc3RydWN0cnduAABqOwMAAFgIAAAAZnVuY3Rpb26GWDIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvci5zdGFydHJ4bgAAaJFYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5SYW5kb21VbmlxdWVLZXlGbnJ5bgAAaj0BAABYBQAAAGNsYXNzhlhbAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZmluaXNoX2J1bmRsZXJ6bgAAahMDAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZXJ7bgAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbXJ8bgAAavwCAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZHVwX3RvcHhyfW4AAGonAwAAWAgAAABmdW5jdGlvboZYLgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uV2F0ZXJtYXJrRXZlbnRyfm4AAGr8AgAAWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5maW5pc2hfYnVuZGxlcn9uAABqBAMAAFgGAAAAbWV0aG9khlhXAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIuQWRhcHRpdmVUaHJvdHRsZXIuc3VjY2Vzc2Z1bF9yZXF1ZXN0coBuAABqhQIAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkLmV4cGFuZHKBbgAAahACAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuQ0FOQ0VMTEVEcoJuAABoiVgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZGVsZXRlX2F0dHJyg24AAGonAwAAWAgAAABmdW5jdGlvboZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuc2Vla2FibGVyhG4AAGouAwAAWAkAAABhdHRyaWJ1dGWGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5zaWRlX2lucHV0c3KFbgAAapEBAABYCQAAAGF0dHJpYnV0ZYZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwuVGltZURvbWFpbi5XQVRFUk1BUktyhm4AAGq9AQAAWAkAAABhdHRyaWJ1dGWGWCgAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VycoduAABq2wEAAFgFAAAAY2xhc3OGal5qAABqpF0AAGoUawAAhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5zY2hlbWVyiG4AAGp6AQAAWAsAAABjbGFzc21ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5leHBhbmRyiW4AAGpIAgAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kZWZhdWx0X2xhYmVscopuAABqSAIAAFgGAAAAbWV0aG9khlhDAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkRhdGFTZXJ2aWNlcnKLbgAAandmAABYBQAAAGNsYXNzhlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tX29wdGlvbnNyjG4AAGp+AgAAWAsAAABjbGFzc21ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUucmVhZGFibGVyjW4AAGouAwAAWAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpcnKObgAAagwDAABYBQAAAGNsYXNzhlgoAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQuZ2V0X3dpbmRvd2luZ3KPbgAAatsBAABYBgAAAG1ldGhvZIZqcWoAAGpJXwAAahdrAACGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLm9uX21lcmdlcpBuAABqCAIAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmV4aXN0c3KRbgAAaokBAABYBgAAAG1ldGhvZIZYWgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9NSVNTSU5HX09QVElPTnKSbgAAah8BAABYCQAAAGF0dHJpYnV0ZYZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLm9mZnNldHKTbgAAaJhYCQAAAGF0dHJpYnV0ZYZqeWoAAGp+AgAAajVsAACGWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC5tZXRyaWNzcpRuAABoiVgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5vcGVucpVuAABqegEAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZGVsZXRlX3NsaWNlXzNylm4AAGonAwAAWAgAAABmdW5jdGlvboZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmRlbGV0ZV9zbGljZV8ycpduAABqJwMAAFgIAAAAZnVuY3Rpb26GWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfc2xpY2VfMXKYbgAAaicDAABYCAAAAGZ1bmN0aW9uhlgsAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZGVsZXRlX3NsaWNlXzBymW4AAGonAwAAWAgAAABmdW5jdGlvboZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmNvbXBhcmVfb3Bymm4AAGonAwAAWAgAAABmdW5jdGlvboZYOgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5IYXNEaXNwbGF5RGF0YS5kaXNwbGF5X2RhdGFym24AAGp+AgAAWAYAAABtZXRob2SGaoZqAABq9QIAAGqUawAAhlhAAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeXKcbgAAajUBAABYCAAAAGZ1bmN0aW9uhlhUAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmtXcml0ZXIudGFrZXNfd2luZG93ZWRfdmFsdWVzcp1uAABqT14AAFgJAAAAYXR0cmlidXRlhlheAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5hZGRfUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcnKebgAAamBiAABYCAAAAGZ1bmN0aW9uhlgoAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlcnKfbgAAaLhYBQAAAGNsYXNzhmqMagAAajliAABqF2sAAIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnJlc2V0cqBuAABqCAIAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlByb2ZpbGluZ09wdGlvbnNyoW4AAGjAWAUAAABjbGFzc4ZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXNyom4AAGqRAQAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWVyo24AAGiYWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLk91dHB1dENoZWNrV3JhcHBlckRvRm5ypG4AAGoEAwAAWAUAAABjbGFzc4ZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3NypW4AAGiYWAUAAABjbGFzc4ZYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcHKmbgAAavEBAABYBQAAAGNsYXNzhlhBAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy5kaXNwbGF5X2RhdGFyp24AAGjAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uYWRkX2VsZW1lbnRzcqhuAABq/AIAAFgGAAAAbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0YXJ0X3Bvc2l0aW9ucqluAABqdgIAAFgGAAAAbWV0aG9khmqeagAAah8BAABq52oAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uc2NoZW1lcqpuAABooFgLAAAAY2xhc3NtZXRob2SGWCYAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtc3KrbgAAaMdYBQAAAGNsYXNzhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluLlJFQUxfVElNRXKsbgAAar0BAABYCQAAAGF0dHJpYnV0ZYZYRwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLlBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX3Rvcq1uAABqjAIAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3Bvd2Vycq5uAABqJwMAAFgIAAAAZnVuY3Rpb26GWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuU21hbGxlc3RQZXJLZXlyr24AAGrxAQAAWAwAAABzdGF0aWNtZXRob2SGWEYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMudXBkYXRlX3BoeXNpY2FscrBuAABqpwEAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0xBVEVTVHKxbgAAaJhYCQAAAGF0dHJpYnV0ZYZYUQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnN0YXJ0X2J1bmRsZXKybgAAarUBAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25ys24AAGrbAQAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldHK0bgAAaotnAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9zdWNjZWVkc19hbmRfY29uc2lzdGVudHK1bgAAajUBAABYCAAAAGZ1bmN0aW9uhlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5tYXRjaHK2bgAAanoBAABYBgAAAG1ldGhvZIZYRQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZXK3bgAAaotnAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFsbHK4bgAAaggCAABYBQAAAGNsYXNzhmq5agAAaowCAABqHGsAAIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLmZpbmlzaF9idW5kbGVyuW4AAGpIAgAAWAYAAABtZXRob2SGar5qAABqxmYAAGpTawAAhlg/AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuZ2xvYmFsX3RvX2xvY2FscrpuAABo+lgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQuc2hvdWxkX2ZpcmVyu24AAGoIAgAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUHJvY2Vzc0tleWVkRWxlbWVudHMuZXhwYW5kcrxuAABqPQEAAFgGAAAAbWV0aG9khlgjAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLnNpemVyvW4AAGq3AgAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zcr5uAABowFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UucmVhZGVycr9uAABq5wIAAFgGAAAAbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbnLAbgAAaggCAABYBQAAAGNsYXNzhlg4AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluc3RhbmNlX3RvX3R5cGVywW4AAGpVAQAAWAgAAABmdW5jdGlvboZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHRywm4AAGo0AwAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05yw24AAGrbAQAAWAkAAABhdHRyaWJ1dGWGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJBbGwuY29tYmluZV9vcHLEbgAAaggCAABYBgAAAG1ldGhvZIZYRQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5pbmZlcl9vdXRwdXRfdHlwZXLFbgAAakgCAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIuaW5jcsZuAABouFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyLmdldHLHbgAAaotnAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwuaW5zZXJ0X3ZhbHVlc19pbl9hcmdzcshuAABqu2AAAFgIAAAAZnVuY3Rpb26GWCkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmtleV9jb2RlcnLJbgAAavNbAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLlR5cGVDaGVja0Vycm9ycspuAABqUAIAAFgJAAAAZXhjZXB0aW9uhlg0AAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5zcGxpdHLLbgAAauECAABYBgAAAG1ldGhvZIZqW2oAAGrEAQAAapRrAACGWCsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLlRpbWVyRmlyaW5ncsxuAABq9QIAAFgFAAAAY2xhc3OGWEwAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJlcs1uAABqsmYAAFgGAAAAbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRyzm4AAGj6WAYAAABtZXRob2SGWD8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5jbG9zdXJlX3R5cGVyz24AAGpVAQAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5tYWtlX3BhcnRpdGlvbnLQbgAAaKlYCAAAAGZ1bmN0aW9uhlgjAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW5y0W4AAGpmAgAAWAUAAABjbGFzc4ZYNgAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZXLSbgAAajFcAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvTGlzdC5leHBhbmRy024AAGrxAQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmFkZF9pbnB1dHNy1G4AAGpIAgAAWAYAAABtZXRob2SGWFUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzctVuAABqZQEAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzctZuAABqNQEAAFgIAAAAZnVuY3Rpb26GWD4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZXLXbgAAaotnAABYBgAAAG1ldGhvZIZYSAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9waXBlbGluZXLYbgAAautkAABYBgAAAG1ldGhvZIZqc2oAAGpIAgAAajVsAACGWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0ctluAABqGAIAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtctpuAABqfgIAAFgFAAAAY2xhc3OGWCsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5Eb0ZuUGFyYW1zcttuAABqSAIAAFgJAAAAYXR0cmlidXRlhlhGAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy5jb21taXRfbG9naWNhbHLcbgAAaqcBAABYBgAAAG1ldGhvZIZYRQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLdbgAAaJhYDAAAAHN0YXRpY21ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJy3m4AAGrzWwAAWAYAAABtZXRob2SGaoJqAABqqQIAAGqUawAAhlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9mbG9vcl9kaXZpZGVy324AAGonAwAAWAgAAABmdW5jdGlvboZYMAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuZ2V0X25hbWVzcGFjZXLgbgAAaLhYDAAAAHN0YXRpY21ldGhvZIZYIgAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXJy4W4AAGrbAQAAWAUAAABjbGFzc4ZYRgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Db250cm9sU2VydmljZXJy4m4AAGp3ZgAAWAUAAABjbGFzc4ZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZucuNuAABqkQEAAFgIAAAAZnVuY3Rpb26GWEQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fUmVhZHLkbgAAautkAABYBgAAAG1ldGhvZIZqkGoAAGiJahxrAACGWCAAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mb3LlbgAAapsCAABYBQAAAGNsYXNzhlhNAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX0NvbWJpbmVWYWx1ZXNy5m4AAGrrZAAAWAYAAABtZXRob2SGWCMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8ub3BlbnLnbgAAarcCAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50cuhuAABqCAIAAFgFAAAAY2xhc3OGWD8AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50NjRy6W4AAGoxXAAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW5y6m4AAGo4aQAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzcutuAABomFgFAAAAY2xhc3OGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4uREVQRU5ERU5UX1JFQUxfVElNRXLsbgAAar0BAABYCQAAAGF0dHJpYnV0ZYZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2guZnJvbV9ydW5uZXJfYXBpcu1uAABqCAIAAFgMAAAAc3RhdGljbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkub25fZWxlbWVudHLubgAAaggCAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rLmluaXRpYWxpemVfd3JpdGVy724AAGrbAQAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyLndpdGhfbmFtZXLwbgAAaLhYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljcvFuAABq81sAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMubWFrZV9mbnLybgAAakgCAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0ucmVuYW1lcvNuAABooFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLnJlbmFtZXL0bgAAaokBAABYBgAAAG1ldGhvZIZYUAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC51c2VfcHZhbHVlX2NhY2hlcvVuAABqZQEAAFgGAAAAbWV0aG9khmqxagAAaiACAABq12oAAIZYKAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmty9m4AAGrnAgAAWAUAAABjbGFzc4ZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dHL3bgAAamUBAABYBQAAAGNsYXNzhlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5VTktOT1dOcvhuAABoiVgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHly+W4AAGoIAgAAWAUAAABjbGFzc4ZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2gub25fZWxlbWVudHL6bgAAaggCAABYBgAAAG1ldGhvZIZYQQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMuZGVmYXVsdF90eXBlX2hpbnRzcvtuAABqUAIAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2RvdWJsZXL8bgAAajFcAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uZGVsZXRlcv1uAABooFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkubm9fcmV0cmllc3L+bgAAaikCAABYCAAAAGZ1bmN0aW9uhlgcAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlcnL/bgAAatsBAABYBQAAAGNsYXNzhlg1AAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5ta2RpcnNyAG8AAGigWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGlyAW8AAGoYAgAAWAYAAABtZXRob2SGWCcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuT2ZyAm8AAGrxAQAAWAwAAABzdGF0aWNtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucy5tZXJnZXIDbwAAaJhYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwuS2V5ZWRXb3JrSXRlbXIEbwAAavUCAABYBQAAAGNsYXNzhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX0ZsYXR0ZW5yBW8AAGrrZAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmVyBm8AAGiJWAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfZm91cnIHbwAAaicDAABYCAAAAGZ1bmN0aW9uhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZnJvbV9jYWxsYWJsZXIIbwAAakgCAABYDAAAAHN0YXRpY21ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LmV4cGFuZHIJbwAAakgCAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXJyCm8AAGrzWwAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUuZ2V0X3dpbmRvd2luZ3ILbwAAakgCAABYBgAAAG1ldGhvZIZYdAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtcgxvAABqNAMAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbkZuLnBhcnRpdGlvbl9mb3JyDW8AAGpIAgAAWAYAAABtZXRob2SGWE4AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25yDm8AAGpDAwAAWAYAAABtZXRob2SGasVqAABqEwMAAGqUawAAhmrGagAAauVnAABqF2sAAIZYLgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuZmx1c2hyD28AAGouAwAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3QudW53cmFwX2FsbHIQbwAAalUBAABYDAAAAHN0YXRpY21ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlcnIRbwAAakMDAABYBQAAAGNsYXNzhlhsAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFchJvAABqHwEAAFgJAAAAYXR0cmlidXRlhlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5vbl9lbGVtZW50chNvAABqCAIAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rLm9wZW5yFG8AAGrMAgAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLmxvYWRfc2Vzc2lvbnIVbwAAas9gAABYCAAAAGZ1bmN0aW9uhmpXagAAakVcAABqUWsAAIZYRwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5pc19kb25lchZvAABqZQEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5chdvAABq8QEAAFgMAAAAc3RhdGljbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9hZGRyGG8AAGonAwAAWAgAAABmdW5jdGlvboZYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW1yGW8AAGp6AQAAWAUAAABjbGFzc4ZYVAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuTG9nZ2luZ1NlcnZpY2VyX3RvX3NlcnZlcnIabwAAandmAABYCAAAAGZ1bmN0aW9uhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZXIbbwAAakgCAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIudHJ5X2NsYWltchxvAABq2wEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBlch1vAABqVQEAAFgIAAAAZnVuY3Rpb26Gar1qAABqsmYAAGpRawAAhlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseS5leHBhbmRyHm8AAGrxAQAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvLmRpc3BsYXlfZGF0YXIfbwAAaiADAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLndpdGhfb3V0cHV0X3R5cGVzciBvAABqUAIAAFgIAAAAZnVuY3Rpb26GWCIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlciFvAABqSAIAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlBFTkRJTkdyIm8AAGiJWAkAAABhdHRyaWJ1dGWGWEQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnIjbwAAavNbAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5tYXRjaHIkbwAAaokBAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUmVzdWx0LmNhbmNlbHIlbwAAaIlYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF90aHJlZXImbwAAaicDAABYCAAAAGZ1bmN0aW9uhlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5mcm9tX2NhbGxhYmxlcidvAABqSAIAAFgMAAAAc3RhdGljbWV0aG9khlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIuYXBwbHlfUmVhZFN0cmluZ3NGcm9tUHViU3VicihvAABqxAEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJucilvAABqkQEAAFgLAAAAY2xhc3NtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtLmlzX3ZhbGlkcipvAABqfgIAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubGlzdF9hcHBlbmRyK28AAGonAwAAWAgAAABmdW5jdGlvboZYOwAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlLmdldF9yYW5nZV90cmFja2VycixvAABo+lgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS53aXRoX2RlZmF1bHRzci1vAABqSAIAAFgGAAAAbWV0aG9khlhJAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0Lmhhc19jYWNoZXIubwAAamUBAABYCQAAAGF0dHJpYnV0ZYZqe2oAAGoXAQAAatdqAACGWDQAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0Zuci9vAABqBAMAAFgFAAAAY2xhc3OGWGQAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0cjBvAABqRVwAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW1yMW8AAGjHWAwAAABzdGF0aWNtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5tYWtlX2xhdGVzdF90aW1lc3RhbXBfcXVlcnlyMm8AAGipWAgAAABmdW5jdGlvboZYTwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uV3JpdGVUb0RhdGFzdG9yZS50b191cHNlcnRfbXV0YXRpb25yM28AAGq1AQAAWAwAAABzdGF0aWNtZXRob2SGWE0AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5QaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaHI0bwAAaowCAABYBgAAAG1ldGhvZIZYXAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX0dDU19QQVRIcjVvAABqHwEAAFgJAAAAYXR0cmlidXRlhlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuY3JlYXRlcjZvAABox1gMAAAAc3RhdGljbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS53aXRob3V0X2RlZmF1bHRzcjdvAABqSAIAAFgGAAAAbWV0aG9khlhcAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfSk9CX05BTUVyOG8AAGofAQAAWAkAAABhdHRyaWJ1dGWGWCAAAABhcGFjaGVfYmVhbS5lcnJvci5TaWRlSW5wdXRFcnJvcnI5bwAAarxjAABYCQAAAGV4Y2VwdGlvboZqi2oAAGoEYgAAajJrAACGWCYAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlcnI6bwAAaNVYBQAAAGNsYXNzhlg4AAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW4uZ2V0X2FsbF9wbHVnaW5fcGF0aHNyO28AAGpmAgAAWAsAAABjbGFzc21ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5jcmVhdGVyPG8AAGqJAQAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLm9mcj1vAABq4gEAAFgMAAAAc3RhdGljbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyLmFzX2Nsb3VkX29iamVjdHI+bwAAavNbAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLmZldGNoX2VudGl0aWVzcj9vAABoqVgIAAAAZnVuY3Rpb26GWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfeG9yckBvAABqJwMAAFgIAAAAZnVuY3Rpb26GWCQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwub3Blbl9zaGFyZHNyQW8AAGoxAgAAWAgAAABmdW5jdGlvboZYVwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLmRpc3BsYXlfZGF0YXJCbwAAarUBAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlLmdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yckNvAABq5WUAAFgIAAAAZnVuY3Rpb26GWDIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJEbwAAatsBAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyRW8AAGrzWwAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkckZvAABq2wEAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkuUmVpZnlXaW5kb3dzckdvAABqSAIAAFgFAAAAY2xhc3OGWDkAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlci50cnlfc3BsaXRySG8AAGj6WAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmVzdGltYXRlX3NpemVySW8AAGrzWwAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtLnNob3VsZF9kcm9wckpvAABqfgIAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGVyS28AAGqRAQAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2J5dGVyTG8AAGoxXAAAWAYAAABtZXRob2SGWEUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMuY29tbWl0X2xvZ2ljYWxyTW8AAGqnAQAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5NZXJnZUNvbnRleHRyTm8AAGiYWAUAAABjbGFzc4ZYGQAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXJyT28AAGpfZQAAWAUAAABjbGFzc4ZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmV4ZWNfc3RtdHJQbwAAaicDAABYCAAAAGZ1bmN0aW9uhlhoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmlzX3N0cmVhbWluZ19jcmVhdGVyUW8AAGrrZAAAWAwAAABzdGF0aWNtZXRob2SGWCIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuS3ZTd2FwclJvAABq7gIAAFgIAAAAZnVuY3Rpb26GWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MucHJvY2Vzc3JTbwAAakgCAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVuYXJ5X25lZ2F0aXZlclRvAABqJwMAAFgIAAAAZnVuY3Rpb26GWEUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXJyVW8AAGo0AwAAWAUAAABjbGFzc4ZYJQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmdyVm8AAGpIAgAAWAUAAABjbGFzc4ZYVgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuZ2V0X2VzdGltYXRlZF9udW1fc3BsaXRzcldvAABqtQEAAFgMAAAAc3RhdGljbWV0aG9khlhPAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuSW1wdWxzZXJYbwAAaiFjAABYBQAAAGNsYXNzhlhEAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyWW8AAGqRAQAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvcnJabwAAaJFYBQAAAGNsYXNzhlgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkNvR3JvdXBCeUtleXJbbwAAau4CAABYBQAAAGNsYXNzhlhMAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5Qcm92aXNpb25TZXJ2aWNlU3R1YnJcbwAAamBiAABYBQAAAGNsYXNzhlgsAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyby5leHBhbmRyXW8AAGogAwAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LmV4cGFuZHJebwAAakgCAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAudG9fdXRjX2RhdGV0aW1lcl9vAABq4gEAAFgGAAAAbWV0aG9khlhOAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ucmBvAABqQwMAAFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dHJhbwAAassBAABYBQAAAGNsYXNzhlhGAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljLmNvbW1pdF9waHlzaWNhbHJibwAAaqcBAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2Rlci5pc19kZXRlcm1pbmlzdGljcmNvAABq81sAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkubWFrZV9mbnJkbwAAakgCAABYBgAAAG1ldGhvZIZYXQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IuQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcnJlbwAAaqkCAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm5yZm8AAGiYWAUAAABjbGFzc4ZYKwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5EaXN0cmlidXRpb25yZ28AAGjVWAUAAABjbGFzc4ZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uYWRkX2lucHV0cmhvAABqSAIAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5Lkhhc0Rpc3BsYXlEYXRhcmlvAABqfgIAAFgFAAAAY2xhc3OGWDkAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVhyam8AAGp6AQAAWAkAAABhdHRyaWJ1dGWGWDsAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnJrbwAAavNbAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5EZWJ1Z09wdGlvbnNybG8AAGjAWAUAAABjbGFzc4ZYLwAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2Vycm1vAABo+lgFAAAAY2xhc3OGWEAAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0cm5vAABq5wIAAFgMAAAAc3RhdGljbWV0aG9khlhPAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbnJvbwAAakMDAABYCwAAAGNsYXNzbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmFkdmFuY2Vfd2F0ZXJtYXJrX3RvcnBvAABq/AIAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZGVmYXVsdF9sYWJlbHJxbwAAakgCAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yLmF3YWl0X2NvbXBsZXRpb25ycm8AAGiRWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmNyZWF0ZXJzbwAAaKBYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaXJ0bwAAapEBAABYCwAAAGNsYXNzbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuTGlmdGVkQ29tYmluZVBlcktleXJ1bwAAahMDAABYBQAAAGNsYXNzhmpZagAAaPpqU2sAAIZYLwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkcnZvAABqMVwAAFgGAAAAbWV0aG9khmqragAAaj0BAABqHGsAAIZYIwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVucndvAABqSAIAAFgFAAAAY2xhc3OGWGIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9yb290X2J1bmRsZV9wcm92aWRlcnJ4bwAAal8CAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuYXNfc2luZ2xldG9uX3ZpZXdyeW8AAGpIAgAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUGFpcldpdGhSZXN0cmljdGlvbkZuLnByb2Nlc3Nyem8AAGo9AQAAWAYAAABtZXRob2SGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2J1bmRsZXJ7bwAAamUBAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzLmZyb21fbWljcm9zcnxvAABqAAIAAFgIAAAAZnVuY3Rpb26GWDAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuVGVzdE9wdGlvbnNyfW8AAGjAWAUAAABjbGFzc4ZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzcn5vAABqSAIAAFgFAAAAY2xhc3OGWCYAAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5wYWNrX0FueXJ/bwAAagACAABYCAAAAGZ1bmN0aW9uhlg+AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25ygG8AAGj6WAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlcoFvAABqMVwAAFgGAAAAbWV0aG9khlgjAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuQ2xvY2suc2xlZXBygm8AAGopAgAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc3KDbwAAakgCAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyLnJlcG9ydF9vbmNlcoRvAABqTQEAAFgGAAAAbWV0aG9khlhPAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlci51cGRhdGVfd2F0ZXJtYXJrc3KFbwAAar4CAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG9PdmVycmlkZXKGbwAAaj0BAABYBQAAAGNsYXNzhlhEAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dC5mcm9tX3J1bm5lcl9hcGlyh28AAGoYAgAAWAwAAABzdGF0aWNtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5XaW5kb3dQYXJhbXKIbwAAakgCAABYCQAAAGF0dHJpYnV0ZYZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlcktleS5leHBhbmRyiW8AAGrxAQAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX211bHRpcGx5copvAABqJwMAAFgIAAAAZnVuY3Rpb26Gan5qAABqz2AAAGoyawAAhmp/agAAauNgAABqF2sAAIZYLwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZnJvbV9ydW5uZXJfYXBpcotvAABq81sAAFgLAAAAY2xhc3NtZXRob2SGWF4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9HQ1NfQlVDS0VUcoxvAABqHwEAAFgJAAAAYXR0cmlidXRlhlgyAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeS5leHBhbmRyjW8AAGrnAgAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5leHBhbmRyjm8AAGpIAgAAWAYAAABtZXRob2SGWGEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LnNob3VsZF9leGVjdXRlX3NlcmlhbGx5co9vAABqXwIAAFgGAAAAbWV0aG9khlhmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLmdldF9tYXRjaGVycpBvAABqNAMAAFgGAAAAbWV0aG9khlhMAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4ucHJvY2Vzc3KRbwAAarUBAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLm1hdGNocpJvAABox1gMAAAAc3RhdGljbWV0aG9khlglAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyb3KTbwAAaiADAABYBQAAAGNsYXNzhlhJAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIuYXBwbHlfQ29tYmluZVBlcktleXKUbwAAasQBAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvRGljdHKVbwAAavEBAABYBQAAAGNsYXNzhlhhAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVyLlB5dGhvblJQQ0RpcmVjdFJ1bm5lcnKWbwAAakACAABYBQAAAGNsYXNzhlhSAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuR0NTX1NDSEVNRXKXbwAAah8BAABYCQAAAGF0dHJpYnV0ZYZYIAAAAGFwYWNoZV9iZWFtLmVycm9yLlRyYW5zZm9ybUVycm9ycphvAABqvGMAAFgJAAAAZXhjZXB0aW9uhlg+AAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25ymW8AAGpDAwAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy5wZXJpb2Rymm8AAGiYWAkAAABhdHRyaWJ1dGWGWEUAAABhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXNym28AAGogAgAAWAgAAABmdW5jdGlvboZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZVZhcmlhYmxlcpxvAABqxQIAAFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy5zaXplcp1vAABomFgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMucGFja19TdHJ1Y3Rynm8AAGoAAgAAWAgAAABmdW5jdGlvboZYOgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWVyn28AAGiYWAsAAABjbGFzc21ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5LmV4cGFuZHKgbwAAavEBAABYBgAAAG1ldGhvZIZYIQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5lcXVhbF90b3KhbwAAajECAABYCAAAAGZ1bmN0aW9uhlhDAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzLmV4cGFuZHKibwAAajQDAABYBgAAAG1ldGhvZIZYRgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5pc19wcm9jZXNzX2JvdW5kZWRyo28AAGoEAwAAWAYAAABtZXRob2SGWFgAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FTkRQT0lOVF9QQVRURVJOcqRvAABqHwEAAFgJAAAAYXR0cmlidXRlhlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQudG9fcnVubmVyX2FwaXKlbwAAaggCAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLlRlc3RDbG9jay50aW1lcqZvAABqdl4AAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9jbGFpbXKnbwAAakMDAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Xb3JrZXJPcHRpb25zcqhvAABowFgFAAAAY2xhc3OGWEQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnKpbwAAaJhYDAAAAHN0YXRpY21ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIudG9fcnVubmVyX2FwaXKqbwAAavNbAABYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZXKrbwAAauECAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8uV3JpdGVUb1RGUmVjb3JkcqxvAABqEAIAAFgFAAAAY2xhc3OGWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvci5jYWxscq1vAABokVgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50cq5vAABq2wEAAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLmZyb21fcnVubmVyX2FwaXKvbwAAaggCAABYDAAAAHN0YXRpY21ldGhvZIZYIwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRGlsbENvZGVycrBvAABq81sAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleXKxbwAAakgCAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLldyaXRlVG9BdnJvLmRpc3BsYXlfZGF0YXKybwAAaiADAABYBgAAAG1ldGhvZIZYTQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkZpbmlzaENvbWJpbmUuZGVmYXVsdF90eXBlX2hpbnRzcrNvAABqEwMAAFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5sb2Fkc3K0bwAAas9gAABYCAAAAGZ1bmN0aW9uhlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIuZ2V0X2RhdGFzdG9yZXK1bwAAaKlYCAAAAGZ1bmN0aW9uhlgjAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUudmlzaXRytm8AAGqLaAAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lcrdvAABq0wEAAFgFAAAAY2xhc3OGWEgAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVNlcnZpY2VyLkRhdGFyuG8AAGp3ZgAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5taW5yuW8AAGpeAQAAWAkAAABhdHRyaWJ1dGWGWCoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uc3BsaXRyum8AAGouAwAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nLmlzX2RlZmF1bHRyu28AAGpIAgAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLm1rZGlyc3K8bwAAanoBAABYBgAAAG1ldGhvZIZqwGoAAGq+AgAAapRrAACGWFAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybXK9bwAAaj0BAABYBgAAAG1ldGhvZIZYVAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZXK+bwAAautkAABYBQAAAGNsYXNzhlhQAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIuYXBwbHlfV3JpdGVTdHJpbmdzVG9QdWJTdWJyv28AAGrEAQAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIudHJ5X2NsYWltcsBvAABqQwMAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVScsFvAABq5wIAAFgJAAAAYXR0cmlidXRlhlg5AAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfdmFyX2ludDY0csJvAABqMVwAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuY29weXLDbwAAaMdYDAAAAHN0YXRpY21ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQuZXhwYW5kcsRvAABqywEAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmZyb21fdHlwZV9oaW50csVvAABq81sAAFgMAAAAc3RhdGljbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlcsZvAABq8QEAAFgFAAAAY2xhc3OGasxqAABq6GgAAGoXawAAhlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcnLHbwAAaJhYBgAAAG1ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVycshvAABqnmYAAFgFAAAAY2xhc3OGWEMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4uc3RlcF9jb250ZXh0cslvAABqNAMAAFgJAAAAYXR0cmlidXRlhlhCAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycspvAABomFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5zcGxpdHLLbwAAanoBAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLmlzX2JvdW5kZWRyzG8AAGrbAQAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YXLNbwAAauECAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93LnN0YXJ0cs5vAABomFgJAAAAYXR0cmlidXRlhlgkAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtcs9vAABqLgMAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdy5pbnRlcnNlY3RzctBvAABomFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnLRbwAAaJhYDAAAAHN0YXRpY21ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmxhYmVsctJvAABqkQEAAFgJAAAAYXR0cmlidXRlhmpYagAAallcAABqUWsAAIZYRgAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2ty028AAGrbAQAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVWYXJpYWJsZS5iaW5kX3R5cGVfdmFyaWFibGVzctRvAABqxQIAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNy1W8AAGqRAQAAWAYAAABtZXRob2SGWFIAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVyctZvAABqd2YAAFgIAAAAZnVuY3Rpb26GWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4uZGVmYXVsdF9sYWJlbHLXbwAAakgCAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmFwcGx5X0dyb3VwQnlLZXly2G8AAGrrZAAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5tYWtlX2Nsb3N1cmVy2W8AAGonAwAAWAgAAABmdW5jdGlvboZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuZ2V0X3dhdGVybWFya3Ny2m8AAGq+AgAAWAYAAABtZXRob2SGWB8AAABhcGFjaGVfYmVhbS5lcnJvci5QaXBlbGluZUVycm9ycttvAABqvGMAAFgJAAAAZXhjZXB0aW9uhlg9AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy5xdWVyeXLcbwAAaqcBAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cy5TaWRlSW5wdXRNYXBy3W8AAGpuAgAAWAUAAABjbGFzc4ZYRAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVNlcnZpY2Vyct5vAABqd2YAAFgFAAAAY2xhc3OGWCIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVyLmNsb3Nlct9vAABq2wEAAFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5zaG91bGRfZmlyZXLgbwAAaggCAABYBgAAAG1ldGhvZIZYSQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMuREFUQUZMT1dfRU5EUE9JTlRy4W8AAGjAWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsuTEFURV9UQUdy4m8AAGoIAgAAWAkAAABhdHRyaWJ1dGWGWC8AAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbnLjbwAAaucCAABYBQAAAGNsYXNzhlg+AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZS5jcmVhdGVfcmVzcG9uc2Vy5G8AAGjrWAgAAABmdW5jdGlvboZYOwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlci50b19ydW5uZXJfYXBpcuVvAABqCAIAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMucGFyc2VfQnl0ZXNy5m8AAGoAAgAAWAgAAABmdW5jdGlvboZYKQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWNOYW1lcudvAABo1VgFAAAAY2xhc3OGWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm5y6G8AAGo0AwAAWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyculvAABqSAIAAFgGAAAAbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyby5ERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkVy6m8AAGogAwAAWAkAAABhdHRyaWJ1dGWGWD8AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50MzJy628AAGoxXAAAWAYAAABtZXRob2SGWEEAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQ2NHLsbwAAajFcAABYBgAAAG1ldGhvZIZYIgAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkRnJvbVRleHRy7W8AAGrLAQAAWAUAAABjbGFzc4ZYOQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbnLubwAAaLhYBQAAAGNsYXNzhlhKAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX0dyb3VwQnlLZXly728AAGrrZAAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnJlZ2lzdGVyX3VybnLwbwAAavNbAABYCwAAAGNsYXNzbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY3LxbwAAavNbAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZW1vdmVEdXBsaWNhdGVzcvJvAABq7gIAAFgIAAAAZnVuY3Rpb26GWDwAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXJy828AAGp2AgAAWAUAAABjbGFzc4ZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZ2xvYmFscvRvAABqJwMAAFgIAAAAZnVuY3Rpb26GWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc3L1bwAAahMDAABYBQAAAGNsYXNzhmqSagAAak0BAABq12oAAIZYMQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0Lm1lYW5y9m8AAGpeAQAAWAkAAABhdHRyaWJ1dGWGWDAAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuY2xvc2Vy928AAGrMAgAAWAYAAABtZXRob2SGWFUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ieXRlX2FycmF5X3RvX2pzb25fc3RyaW5ncvhvAABq62QAAFgMAAAAc3RhdGljbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJy+W8AAGpIAgAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWwuTW92aW5nU3VtLmhhc19kYXRhcvpvAABqSwMAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaC5JTkRFWF9UQUdy+28AAGoIAgAAWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXJy/G8AAGpDAwAAWAUAAABjbGFzc4ZYNAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5lbGVtZW50X3R5cGVy/W8AAGpVAQAAWAgAAABmdW5jdGlvboZYWAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2VSZWFkZXIucmV0dXJuc193aW5kb3dlZF92YWx1ZXNy/m8AAGpPXgAAWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIub25fbWVyZ2Vy/28AAGoIAgAAWAYAAABtZXRob2SGWCIAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLmR1bXBzcgBwAABqz2AAAFgIAAAAZnVuY3Rpb26GWC4AAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtcgFwAABooFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuZGlzcGxheV9kYXRhcgJwAABqzAIAAFgGAAAAbWV0aG9khlhDAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLlNpZGVJbnB1dE1hcC5pc19nbG9iYWxseV93aW5kb3dlZHIDcAAAam4CAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfbW9kdWxvcgRwAABqJwMAAFgIAAAAZnVuY3Rpb26GWEsAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRyBXAAAGpDAwAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmV4aXN0c3IGcAAAanoBAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZXIHcAAAasQBAABYBgAAAG1ldGhvZIZqpGoAAGpeAQAAaudqAACGWCYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50b3IIcAAAakgCAABYBQAAAGNsYXNzhlhWAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3JyCXAAAGrrZAAAWAwAAABzdGF0aWNtZXRob2SGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRGlyZWN0U3RlcENvbnRleHQuZ2V0X2tleWVkX3N0YXRlcgpwAABqZQEAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5DSFVOS19TSVpFcgtwAABqegEAAFgJAAAAYXR0cmlidXRlhlg0AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9uc3IMcAAAaMBYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZ2V0X2l0ZXJyDXAAAGonAwAAWAgAAABmdW5jdGlvboZYRAAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ucg5wAABo+lgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLkV4cGxvZGVXaW5kb3dzRm4ucHJvY2Vzc3IPcAAAaj0BAABYBgAAAG1ldGhvZIZYVgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuZ2V0X2VzdGltYXRlZF9zaXplX2J5dGVzchBwAABqtQEAAFgMAAAAc3RhdGljbWV0aG9khlggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLktleXNyEXAAAGruAgAAWAgAAABmdW5jdGlvboZYMwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2FsbHIScAAAajFcAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvTGlzdHITcAAAavEBAABYBQAAAGNsYXNzhlhjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldEFydGlmYWN0chRwAABqRVwAAFgGAAAAbWV0aG9khmppagAAaqFeAABqHGsAAIZYKAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLnJlYWRyFXAAAGrbAQAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUmFuZG9tVW5pcXVlS2V5Rm4ucHJvY2Vzc3IWcAAAaj0BAABYBgAAAG1ldGhvZIZYIgAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkRnJvbUF2cm9yF3AAAGogAwAAWAUAAABjbGFzc4ZYIQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyb3IYcAAAaiADAABYBQAAAGNsYXNzhlg7AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLldvcmtlck9wdGlvbnMudmFsaWRhdGVyGXAAAGjAWAYAAABtZXRob2SGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF9tYXByGnAAAGonAwAAWAgAAABmdW5jdGlvboZqw2oAAGqLZwAAalFrAACGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucmVtYWluaW5nX3RpbWVyG3AAAGpPXgAAWAkAAABhdHRyaWJ1dGWGWDUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvLmV4cGFuZHIccAAAaj0BAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5ta2RpcnNyHXAAAGouAwAAWAYAAABtZXRob2SGWFcAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5zdGFydF9idW5kbGVyHnAAAGq1AQAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5jb21wYXJlX3BhdGhyH3AAAGipWAgAAABmdW5jdGlvboZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rLndyaXRlcnIgcAAAak9eAABYBgAAAG1ldGhvZIZqymoAAGpLAwAAauZqAACGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLm9uX21lcmdlciFwAABqCAIAAFgGAAAAbWV0aG9khnV1VQNjcHByInAAAH1yI3AAAChVBW5hbWVzciRwAAB9aqZbAABLAFULcm9vdF9zeW1ib2xyJXAAAGNzcGhpbnguZG9tYWlucy5jcHAKU3ltYm9sCnImcAAAKYFyJ3AAAH1yKHAAAChqb1cAAF1q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D0ytaGRHQdaf1oHn9PloZUdB1p/WglAxbmhmR0HWn9aCRTGDaGdHQdaf1oJZ33ZoaEdB1p/WggcENmhpR0HWn9aB5NIPaGpHQdaf1oIhe2xoa0dB1p/Wgq8QkGhsR0HWn9aB+uxXaG1HQdaf1oIFnrZobkdB1p/WgfWGsWhvR0HWn9aCApfAaHBHQdaf1oICKa5ocUdB1p/WgfqaomhyR0HWn9aBxr0waHNHQdaf1oIXsepodEdB1p/WgijjR2h1R0HWn9aCq48yaHZHQdaf1oIrSxJod0dB1p/Wgc+comh4R0HWn9aCHJxraHlHQdaf1oIA+tdoekdB1p/WgdBLEmh7R0HWn9aB/dCmaHxHQdaf1oIppn9ofUdB1p/WghAzvmh+R0HWn9aB5bN0aH9HQdaf1oHzvKFogEdB1p/WgkbmvGiBR0HWn9aB1bCraIJHQdaf1oIDUhFog0dB1p/WgepUsHVVDGluZGV4ZW50cmllc3JlcAAAfXJmcAAAKGgGXXJncAAAKChVBnNpbmdsZXJocAAAWCYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyAobW9kdWxlKVgkAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93VQBOdHJpcAAAKGpocAAAWDoAAABUaW1lc3RhbXBDb21iaW5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpagVtAABVAE50cmpwAAAoamhwAABYSQAAAE9VVFBVVF9BVF9FT1cgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIGF0dHJpYnV0ZSlqrmwAAFUATnRya3AAAChqaHAAAFhOAAAAT1VUUFVUX0FUX0VBUkxJRVNUIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUpahBuAABVAE50cmxwAAAoamhwAABYTAAAAE9VVFBVVF9BVF9MQVRFU1QgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIGF0dHJpYnV0ZSlqsW4AAFUATnRybXAAAChqaHAAAFhaAAAAT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVEIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUpalptAABVAE50cm5wAAAoamhwAABYSgAAAGdldF9pbXBsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIHN0YXRpYyBtZXRob2QpavRqAABVAE50cm9wAAAoamhwAABYMQAAAFdpbmRvd0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylqZm8AAFUATnRycHAAAChqaHAAAFg/AAAAV2luZG93Rm4uQXNzaWduQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpanFsAABVAE50cnFwAAAoamhwAABYOAAAAGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QpamBsAABVAE50cnJwAAAoamhwAABYPgAAAFdpbmRvd0ZuLk1lcmdlQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpak5vAABVAE50cnNwAAAoamhwAABYRAAAAG1lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLk1lcmdlQ29udGV4dCBtZXRob2Qpav9qAABVAE50cnRwAAAoamhwAABYNwAAAG1lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuIG1ldGhvZClqWWwAAFUATnRydXAAAChqaHAAAFg8AAAAaXNfbWVyZ2luZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2Qpau5qAABVAE50cnZwAAAoamhwAABYQgAAAGdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKWpzbQAAVQBOdHJ3cAAAKGpocAAAWE0AAABnZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKWqjbgAAVQBOdHJ4cAAAKGpocAAAWEkAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QpatBtAABVAE50cnlwAAAoamhwAABYNgAAAEJvdW5kZWRXaW5kb3cgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWqKawAAVQBOdHJ6cAAAKGpocAAAWDsAAABlbmQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkJvdW5kZWRXaW5kb3cgYXR0cmlidXRlKWpCbAAAVQBOdHJ7cAAAKGpocAAAWEQAAABtYXhfdGltZXN0YW1wKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkJvdW5kZWRXaW5kb3cgbWV0aG9kKWq+awAAVQBOdHJ8cAAAKGpocAAAWDcAAABJbnRlcnZhbFdpbmRvdyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpaslsAABVAE50cn1wAAAoamhwAABYPgAAAHN0YXJ0IChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdyBhdHRyaWJ1dGUpas5vAABVAE50cn5wAAAoamhwAABYPAAAAGVuZCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cgYXR0cmlidXRlKWpHbAAAVQBOdHJ/cAAAKGpocAAAWEIAAABpbnRlcnNlY3RzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93IG1ldGhvZClq0G8AAFUATnRygHAAAChqaHAAAFg9AAAAdW5pb24oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cgbWV0aG9kKWoFbAAAVQBOdHKBcAAAKGpocAAAWDkAAABUaW1lc3RhbXBlZFZhbHVlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylqIWwAAFUATnRygnAAAChqaHAAAFhAAAAAdmFsdWUgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWUgYXR0cmlidXRlKWrjawAAVQBOdHKDcAAAKGpocAAAWEQAAAB0aW1lc3RhbXAgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWUgYXR0cmlidXRlKWqQbQAAVQBOdHKEcAAAKGpocAAAWDUAAABHbG9iYWxXaW5kb3cgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWqybQAAVQBOdHKFcAAAKGpocAAAWDsAAABOb25NZXJnaW5nV2luZG93Rm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWoMbgAAVQBOdHKGcAAAKGpocAAAWEYAAABpc19tZXJnaW5nKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lk5vbk1lcmdpbmdXaW5kb3dGbiBtZXRob2QpasBrAABVAE50codwAAAoamhwAABYQQAAAG1lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lk5vbk1lcmdpbmdXaW5kb3dGbiBtZXRob2QpahBsAABVAE50cohwAAAoamhwAABYNgAAAEdsb2JhbFdpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWqlbgAAVQBOdHKJcAAAKGpocAAAWEsAAAB3aW5kb3dlZF92YWx1ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIGNsYXNzIG1ldGhvZClqn28AAFUATnRyinAAAChqaHAAAFg9AAAAYXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MgbWV0aG9kKWopbgAAVQBOdHKLcAAAKGpocAAAWEcAAABnZXRfd2luZG93X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MgbWV0aG9kKWp8bAAAVQBOdHKMcAAAKGpocAAAWE4AAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIG1ldGhvZClqV24AAFUATnRyjXAAAChqaHAAAFhXAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIHN0YXRpYyBtZXRob2Qpat1uAABVAE50co5wAAAoamhwAABYNQAAAEZpeGVkV2luZG93cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpahNtAABVAE50co9wAAAoamhwAABYOwAAAHNpemUgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBhdHRyaWJ1dGUpavJrAABVAE50cpBwAAAoamhwAABYPQAAAG9mZnNldCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIGF0dHJpYnV0ZSlqQmsAAFUATnRykXAAAChqaHAAAFg8AAAAYXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBtZXRob2Qpat9rAABVAE50cpJwAAAoamhwAABYRgAAAGdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIG1ldGhvZClq4mwAAFUATnRyk3AAAChqaHAAAFhNAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIG1ldGhvZClqym8AAFUATnRylHAAAChqaHAAAFhWAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3Mgc3RhdGljIG1ldGhvZClqqW8AAFUATnRylXAAAChqaHAAAFg3AAAAU2xpZGluZ1dpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWrrbgAAVQBOdHKWcAAAKGpocAAAWD0AAABzaXplIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBhdHRyaWJ1dGUpap1vAABVAE50cpdwAAAoamhwAABYPwAAAHBlcmlvZCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MgYXR0cmlidXRlKWqabwAAVQBOdHKYcAAAKGpocAAAWD8AAABvZmZzZXQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIGF0dHJpYnV0ZSlqk24AAFUATnRymXAAAChqaHAAAFg+AAAAYXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIG1ldGhvZClqvGsAAFUATnRymnAAAChqaHAAAFhIAAAAZ2V0X3dpbmRvd19jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBtZXRob2QpasdvAABVAE50cptwAAAoamhwAABYTwAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIG1ldGhvZClqFm0AAFUATnRynHAAAChqaHAAAFhYAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBzdGF0aWMgbWV0aG9kKWpZbgAAVQBOdHKdcAAAKGpocAAAWDEAAABTZXNzaW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpakprAABVAE50cp5wAAAoamhwAABYOwAAAGdhcF9zaXplIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBhdHRyaWJ1dGUpatJsAABVAE50cp9wAAAoamhwAABYOAAAAGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBtZXRob2QpaohtAABVAE50cqBwAAAoamhwAABYQgAAAGdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgbWV0aG9kKWo/bAAAVQBOdHKhcAAAKGpocAAAWDcAAABtZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBtZXRob2QpagNvAABVAE50cqJwAAAoamhwAABYSQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zIG1ldGhvZClqE2wAAFUATnRyo3AAAChqaHAAAFhSAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBzdGF0aWMgbWV0aG9kKWrRbwAAVQBOdHKkcAAAZWgHXXKlcAAAKFUGc2luZ2xlcqZwAABYPQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMgKG1vZHVsZSlYOwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjVQBOdHKncAAAYWgIXXKocAAAKChVBnNpbmdsZXKpcAAAWCIAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzIChtb2R1bGUpWCAAAABtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc1UATnRyqnAAAChqqXAAAFgqAAAAQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpanBrAABVAE50cqtwAAAoaqlwAABYMQAAAGVuY29kZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClqjGsAAFUATnRyrHAAAChqqXAAAFgxAAAAZGVjb2RlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWoqbgAAVQBOdHKtcAAAKGqpcAAAWDsAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWrsbAAAVQBOdHKucAAAKGqpcAAAWEEAAABhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWowbgAAVQBOdHKvcAAAKGqpcAAAWDgAAABlc3RpbWF0ZV9zaXplKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWpJbwAAVQBOdHKwcAAAKGqpcAAAWDMAAABnZXRfaW1wbCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClquW0AAFUATnRysXAAAChqqXAAAFg/AAAAZnJvbV90eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBjbGFzcyBtZXRob2QpardtAABVAE50crJwAAAoaqlwAABYNgAAAGlzX2t2X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWoAbQAAVQBOdHKzcAAAKGqpcAAAWDQAAABrZXlfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QpasluAABVAE50crRwAAAoaqlwAABYNgAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWqWbAAAVQBOdHK1cAAAKGqpcAAAWDoAAABhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QpajxtAABVAE50crZwAAAoaqlwAABYPQAAAHJlZ2lzdGVyX3VybigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIGNsYXNzIG1ldGhvZClq8G8AAFUATnRyt3AAAChqqXAAAFg4AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClqqm8AAFUATnRyuHAAAChqqXAAAFhAAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgY2xhc3MgbWV0aG9kKWqLbwAAVQBOdHK5cAAAKGqpcAAAWEIAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClqWG4AAFUATnRyunAAAChqqXAAAFhJAAAAcmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBzdGF0aWMgbWV0aG9kKWpxbQAAVQBOdHK7cAAAKGqpcAAAWDEAAABTdHJVdGY4Q29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpakZtAABVAE50crxwAAAoaqlwAABYOAAAAGVuY29kZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2RlciBtZXRob2QpagttAABVAE50cr1wAAAoaqlwAABYOAAAAGRlY29kZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2RlciBtZXRob2QpaiNsAABVAE50cr5wAAAoaqlwAABYQgAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIgbWV0aG9kKWpIbgAAVQBOdHK/cAAAKGqpcAAAWC8AAABCeXRlc0NvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWr3bQAAVQBOdHLAcAAAKGqpcAAAWEAAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2RlciBtZXRob2Qpar9tAABVAE50csFwAAAoaqlwAABYPwAAAGFzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIgbWV0aG9kKWo+bwAAVQBOdHLCcAAAKGqpcAAAWEcAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIgbWV0aG9kKWoAbAAAVQBOdHLDcAAAKGqpcAAAWDAAAABWYXJJbnRDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqCm8AAFUATnRyxHAAAChqqXAAAFhBAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyIG1ldGhvZClqLmsAAFUATnRyxXAAAChqqXAAAFhIAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5WYXJJbnRDb2RlciBtZXRob2QpakVvAABVAE50csZwAAAoaqlwAABYLwAAAEZsb2F0Q29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpanRuAABVAE50csdwAAAoaqlwAABYQAAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GbG9hdENvZGVyIG1ldGhvZClq8W4AAFUATnRyyHAAAChqqXAAAFgzAAAAVGltZXN0YW1wQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpathqAABVAE50cslwAAAoaqlwAABYRAAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UaW1lc3RhbXBDb2RlciBtZXRob2Qpap5tAABVAE50cspwAAAoaqlwAABYMwAAAFNpbmdsZXRvbkNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWpybQAAVQBOdHLLcAAAKGqpcAAAWEQAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU2luZ2xldG9uQ29kZXIgbWV0aG9kKWofbgAAVQBOdHLMcAAAKGqpcAAAWDAAAABQaWNrbGVDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqwGwAAFUATnRyzXAAAChqqXAAAFhHAAAAYXNfZGV0ZXJtaW5pc3RpY19jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBpY2tsZUNvZGVyIG1ldGhvZClq4WsAAFUATnRyznAAAChqqXAAAFguAAAARGlsbENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWqwbwAAVQBOdHLPcAAAKGqpcAAAWDgAAABGYXN0UHJpbWl0aXZlc0NvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWp6bAAAVQBOdHLQcAAAKGqpcAAAWEkAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2Qpaj5tAABVAE50ctFwAAAoaqlwAABYTwAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyIG1ldGhvZClqI28AAFUATnRy0nAAAChqqXAAAFhIAAAAYXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QpauJqAABVAE50ctNwAAAoaqlwAABYRAAAAGlzX2t2X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QpajNuAABVAE50ctRwAAAoaqlwAABYQgAAAGtleV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWpAbQAAVQBOdHLVcAAAKGqpcAAAWEQAAAB2YWx1ZV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWphbQAAVQBOdHLWcAAAKGqpcAAAWC8AAABQcm90b0NvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWqObAAAVQBOdHLXcAAAKGqpcAAAWEAAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUHJvdG9Db2RlciBtZXRob2QpaqhrAABVAE50cthwAAAoaqlwAABYRQAAAGZyb21fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUHJvdG9Db2RlciBzdGF0aWMgbWV0aG9kKWoNbAAAVQBOdHLZcAAAKGqpcAAAWC8AAABUdXBsZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWrRbAAAVQBOdHLacAAAKGqpcAAAWEAAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2Qpah5rAABVAE50cttwAAAoaqlwAABYRgAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZClqa28AAFUATnRy3HAAAChqqXAAAFhFAAAAZnJvbV90eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIHN0YXRpYyBtZXRob2QpasVvAABVAE50ct1wAAAoaqlwAABYPwAAAGFzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKWr4agAAVQBOdHLecAAAKGqpcAAAWDYAAABjb2RlcnMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZClqv2wAAFUATnRy33AAAChqqXAAAFg7AAAAaXNfa3ZfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZClqIG0AAFUATnRy4HAAAChqqXAAAFg5AAAAa2V5X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2QparVtAABVAE50cuFwAAAoaqlwAABYOwAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2Qpav5tAABVAE50cuJwAAAoaqlwAABYRwAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2QpavdqAABVAE50cuNwAAAoaqlwAABYUAAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIHN0YXRpYyBtZXRob2QpauxrAABVAE50cuRwAAAoaqlwAABYNwAAAFR1cGxlU2VxdWVuY2VDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylq6WsAAFUATnRy5XAAAChqqXAAAFhIAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2RlciBtZXRob2QpavFvAABVAE50cuZwAAAoaqlwAABYTgAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIgbWV0aG9kKWrebgAAVQBOdHLncAAAKGqpcAAAWE0AAABmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2RlciBzdGF0aWMgbWV0aG9kKWq5awAAVQBOdHLocAAAKGqpcAAAWDIAAABJdGVyYWJsZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWrGbQAAVQBOdHLpcAAAKGqpcAAAWEMAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QpamNvAABVAE50cupwAAAoaqlwAABYSQAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyIG1ldGhvZClqlWwAAFUATnRy63AAAChqqXAAAFhCAAAAYXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QpaiVsAABVAE50cuxwAAAoaqlwAABYPgAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2Qpau9rAABVAE50cu1wAAAoaqlwAABYSAAAAGZyb21fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBzdGF0aWMgbWV0aG9kKWqQawAAVQBOdHLucAAAKGqpcAAAWEoAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIgbWV0aG9kKWp1bAAAVQBOdHLvcAAAKGqpcAAAWDcAAABXaW5kb3dlZFZhbHVlQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpasFtAABVAE50cvBwAAAoaqlwAABYSAAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWroagAAVQBOdHLxcAAAKGqpcAAAWEcAAABhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWrebQAAVQBOdHLycAAAKGqpcAAAWEMAAABpc19rdl9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QpapRtAABVAE50cvNwAAAoaqlwAABYQQAAAGtleV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QpatZsAABVAE50cvRwAAAoaqlwAABYQwAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyIG1ldGhvZClqeG0AAFUATnRy9XAAAChqqXAAAFhPAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWpgawAAVQBOdHL2cAAAZWgJXXL3cAAAKChVBnNpbmdsZXL4cAAAWCMAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyAobW9kdWxlKVghAAAAbW9kdWxlLWFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljVQBOdHL5cAAAKGr4cAAAWC0AAABNZXRyaWNzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYylqX2wAAFUATnRy+nAAAChq+HAAAFhCAAAAZ2V0X25hbWVzcGFjZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzIHN0YXRpYyBtZXRob2QpauBuAABVAE50cvtwAAAoavhwAABYPAAAAGNvdW50ZXIoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcyBzdGF0aWMgbWV0aG9kKWrSawAAVQBOdHL8cAAAKGr4cAAAWEEAAABkaXN0cmlidXRpb24oKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcyBzdGF0aWMgbWV0aG9kKWqpawAAVQBOdHL9cAAAKGr4cAAAWD8AAABNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYylqZW0AAFUATnRy/nAAAChq+HAAAFhDAAAAaW5jKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIgbWV0aG9kKWrGbgAAVQBOdHL/cAAAKGr4cAAAWEQAAABNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKWrubwAAVQBOdHIAcQAAKGr4cAAAWEsAAAB1cGRhdGUoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uIG1ldGhvZClqGW4AAFUATnRyAXEAAChq+HAAAFgzAAAATWV0cmljc0ZpbHRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMpap9uAABVAE50cgJxAAAoavhwAABYOgAAAHN0ZXBzIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIGF0dHJpYnV0ZSlqP20AAFUATnRyA3EAAChq+HAAAFg6AAAAbmFtZXMgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgYXR0cmlidXRlKWqwbQAAVQBOdHIEcQAAKGr4cAAAWD8AAABuYW1lc3BhY2VzIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIGF0dHJpYnV0ZSlqB24AAFUATnRyBXEAAChq+HAAAFg9AAAAd2l0aF9uYW1lKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWrwbgAAVQBOdHIGcQAAKGr4cAAAWD4AAAB3aXRoX25hbWVzKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWoqbQAAVQBOdHIHcQAAKGr4cAAAWEIAAAB3aXRoX25hbWVzcGFjZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIG1ldGhvZClq/GsAAFUATnRyCHEAAChq+HAAAFhDAAAAd2l0aF9uYW1lc3BhY2VzKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWrIbQAAVQBOdHIJcQAAKGr4cAAAWD0AAAB3aXRoX3N0ZXAoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBtZXRob2QpapltAABVAE50cgpxAAAoavhwAABYPgAAAHdpdGhfc3RlcHMoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBtZXRob2QpaqpsAABVAE50cgtxAABlaApdcgxxAAAoKGr4cAAAWC0AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgKG1vZHVsZSlYKwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNVAE50cg1xAAAoavhwAABYPwAAAFBpcGVsaW5lT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWoMcAAAVQBOdHIOcQAAKGr4cAAAWFUAAABmcm9tX2RpY3Rpb25hcnkoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyBjbGFzcyBtZXRob2QpamhrAABVAE50cg9xAAAoavhwAABYTwAAAGdldF9hbGxfb3B0aW9ucygpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zIG1ldGhvZClq/GoAAFUATnRyEHEAAChq+HAAAFhMAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMgbWV0aG9kKWqnbgAAVQBOdHIRcQAAKGr4cAAAWEcAAAB2aWV3X2FzKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMgbWV0aG9kKWorbgAAVQBOdHIScQAAKGr4cAAAWD8AAABTdGFuZGFyZE9wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucylqW2wAAFUATnRyE3EAAChq+HAAAFhPAAAAREVGQVVMVF9SVU5ORVIgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5TdGFuZGFyZE9wdGlvbnMgYXR0cmlidXRlKWo1awAAVQBOdHIUcQAAKGr4cAAAWDsAAABUeXBlT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWoHbQAAVQBOdHIVcQAAKGr4cAAAWD0AAABEaXJlY3RPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpamZtAABVAE50chZxAAAoavhwAABYQgAAAEdvb2dsZUNsb3VkT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWq+bgAAVQBOdHIXcQAAKGr4cAAAWFgAAABCSUdRVUVSWV9BUElfU0VSVklDRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucyBhdHRyaWJ1dGUpanZuAABVAE50chhxAAAoavhwAABYVwAAAENPTVBVVEVfQVBJX1NFUlZJQ0UgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgYXR0cmlidXRlKWoPawAAVQBOdHIZcQAAKGr4cAAAWFcAAABTVE9SQUdFX0FQSV9TRVJWSUNFIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zIGF0dHJpYnV0ZSlqvG0AAFUATnRyGnEAAChq+HAAAFhVAAAAREFUQUZMT1dfRU5EUE9JTlQgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgYXR0cmlidXRlKWrhbwAAVQBOdHIbcQAAKGr4cAAAWEsAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zIG1ldGhvZClqCm4AAFUATnRyHHEAAChq+HAAAFg9AAAAV29ya2VyT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWqobwAAVQBOdHIdcQAAKGr4cAAAWEYAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuV29ya2VyT3B0aW9ucyBtZXRob2QpahlwAABVAE50ch5xAAAoavhwAABYPAAAAERlYnVnT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWpsbwAAVQBOdHIfcQAAKGr4cAAAWEAAAABQcm9maWxpbmdPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpaqFuAABVAE50ciBxAAAoavhwAABYPAAAAFNldHVwT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWo4bAAAVQBOdHIhcQAAKGr4cAAAWDsAAABUZXN0T3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWp9bwAAVQBOdHIicQAAKGr4cAAAWEQAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuVGVzdE9wdGlvbnMgbWV0aG9kKWotbAAAVQBOdHIjcQAAZWgLXXIkcQAAKChqqXAAAFgnAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtIChtb2R1bGUpWCUAAABtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtVQBOdHIlcQAAKGqpcAAAWDYAAABPdXRwdXRTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSlq620AAFUATnRyJnEAAChqqXAAAFg8AAAAd3JpdGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpaoFvAABVAE50cidxAAAoaqlwAABYQQAAAHdyaXRlX2J5dGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpatJuAABVAE50cihxAAAoaqlwAABYRgAAAHdyaXRlX3Zhcl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZClqVG0AAFUATnRyKXEAAChqqXAAAFhMAAAAd3JpdGVfYmlnZW5kaWFuX2ludDY0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWrsbwAAVQBOdHIqcQAAKGqpcAAAWE0AAAB3cml0ZV9iaWdlbmRpYW5fdWludDY0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWp+awAAVQBOdHIrcQAAKGqpcAAAWEwAAAB3cml0ZV9iaWdlbmRpYW5faW50MzIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpajduAABVAE50cixxAAAoaqlwAABYTQAAAHdyaXRlX2JpZ2VuZGlhbl9kb3VibGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpahpsAABVAE50ci1xAAAoaqlwAABYOgAAAGdldCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZClqPG4AAFUATnRyLnEAAChqqXAAAFg7AAAAc2l6ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZClqgmwAAFUATnRyL3EAAChqqXAAAFhCAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0pagluAABVAE50cjBxAAAoaqlwAABYSAAAAHdyaXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0gbWV0aG9kKWoBawAAVQBOdHIxcQAAKGqpcAAAWE0AAAB3cml0ZV9ieXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0gbWV0aG9kKWrcbAAAVQBOdHIycQAAKGqpcAAAWEwAAABnZXRfY291bnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbSBtZXRob2QpaohrAABVAE50cjNxAAAoaqlwAABYRgAAAGdldCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIG1ldGhvZClqOmwAAFUATnRyNHEAAChqqXAAAFg1AAAASW5wdXRTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSlqfm0AAFUATnRyNXEAAChqqXAAAFg6AAAAc2l6ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWpNbAAAVQBOdHI2cQAAKGqpcAAAWDoAAAByZWFkKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QpanZvAABVAE50cjdxAAAoaqlwAABYPgAAAHJlYWRfYWxsKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QpahJwAABVAE50cjhxAAAoaqlwAABYPwAAAHJlYWRfYnl0ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWpMbwAAVQBOdHI5cQAAKGqpcAAAWEQAAAByZWFkX3Zhcl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWrCbwAAVQBOdHI6cQAAKGqpcAAAWEoAAAByZWFkX2JpZ2VuZGlhbl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWrpbgAAVQBOdHI7cQAAKGqpcAAAWEsAAAByZWFkX2JpZ2VuZGlhbl91aW50NjQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClqLWsAAFUATnRyPHEAAChqqXAAAFhKAAAAcmVhZF9iaWdlbmRpYW5faW50MzIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClq628AAFUATnRyPXEAAChqqXAAAFhLAAAAcmVhZF9iaWdlbmRpYW5fZG91YmxlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QpavxuAABVAE50cj5xAAAoaqlwAABYPAAAAGdldF92YXJpbnRfc2l6ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtKWq+bAAAVQBOdHI/cQAAZWgMXXJAcQAAKChqpnAAAFg/AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjIChtb2R1bGUpWD0AAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjVQBOdHJBcQAAKGqmcAAAWFwAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKWqjbQAAVQBOdHJCcQAAKGqmcAAAWGAAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYylqUm4AAFUATnRyQ3EAAChqpnAAAFhsAAAAUHV0QXJ0aWZhY3QoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlciBtZXRob2QpavxtAABVAE50ckRxAAAoaqZwAABYbwAAAENvbW1pdE1hbmlmZXN0KCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWowbwAAVQBOdHJFcQAAKGqmcAAAWHEAAABhZGRfQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKWqfbQAAVQBOdHJGcQAAKGqmcAAAWF4AAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMpak5sAABVAE50ckdxAAAoaqZwAABYYgAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMpahZrAABVAE50ckhxAAAoaqZwAABYbgAAAEdldE1hbmlmZXN0KCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlciBtZXRob2QparZtAABVAE50cklxAAAoaqZwAABYbgAAAEdldEFydGlmYWN0KCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlciBtZXRob2QpahRwAABVAE50ckpxAAAoaqZwAABYcwAAAGFkZF9BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYylq3GoAAFUATnRyS3EAAGVoDV1yTHEAAChqpnAAAFggAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgKG1vZHVsZSlYHgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eVUATnRyTXEAAGFoDl1yTnEAAChVBnNpbmdsZXJPcQAAWBQAAABhcGFjaGVfYmVhbSAobW9kdWxlKVgSAAAAbW9kdWxlLWFwYWNoZV9iZWFtVQBOdHJQcQAAYWgPXXJRcQAAKChVBnNpbmdsZXJScQAAWCUAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlIChtb2R1bGUpWCMAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZVUATnRyU3EAAChqUnEAAFg0AAAAQ29uY2F0U291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlKWoXbQAAVQBOdHJUcQAAKGpScQAAWD0AAABzb3VyY2VzIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBhdHRyaWJ1dGUpaglrAABVAE50clVxAAAoalJxAABYQgAAAGVzdGltYXRlX3NpemUoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UgbWV0aG9kKWqbawAAVQBOdHJWcQAAKGpScQAAWDoAAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBtZXRob2QpaqNrAABVAE50cldxAAAoalJxAABYRgAAAGdldF9yYW5nZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZClqLG8AAFUATnRyWHEAAChqUnEAAFg5AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBtZXRob2QpavVsAABVAE50cllxAAAoalJxAABYSQAAAGRlZmF1bHRfb3V0cHV0X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZClqUmsAAFUATnRyWnEAAChqUnEAAFg6AAAAQ29uY2F0UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlKWptbwAAVQBOdHJbcQAAKGpScQAAWEkAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QpaoBvAABVAE50clxxAAAoalJxAABYSAAAAHN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrWagAAVQBOdHJdcQAAKGpScQAAWEQAAAB0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrbbAAAVQBOdHJecQAAKGpScQAAWEQAAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpIbwAAVQBOdHJfcQAAKGpScQAAWE8AAABzZXRfY3VycmVudF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2Qpag5wAABVAE50cmBxAAAoalJxAABYTwAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyIG1ldGhvZClqXmsAAFUATnRyYXEAAChqUnEAAFhMAAAAZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrObgAAVQBOdHJicQAAKGpScQAAWEoAAABsb2NhbF90b19nbG9iYWwoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpFbQAAVQBOdHJjcQAAKGpScQAAWEoAAABnbG9iYWxfdG9fbG9jYWwoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWq6bgAAVQBOdHJkcQAAKGpScQAAWEwAAABzdWJfcmFuZ2VfdHJhY2tlcigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2Qpas9tAABVAE50cmVxAABlaBBdcmZxAAAoKFUGc2luZ2xlcmdxAABYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8gKG1vZHVsZSlYMgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvVQBOdHJocQAAKGpncQAAWEgAAABSZWFkRnJvbURhdGFzdG9yZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqG2wAAFUATnRyaXEAAChqZ3EAAFhPAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUgbWV0aG9kKWoHawAAVQBOdHJqcQAAKGpncQAAWFUAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZSBtZXRob2QpajVuAABVAE50cmtxAAAoamdxAABYVQAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqiW0AAFUATnRybHEAAChqZ3EAAFhiAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuIG1ldGhvZClqHnAAAFUATnRybXEAAChqZ3EAAFhdAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiBtZXRob2Qpah9tAABVAE50cm5xAAAoamdxAABYYgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiBtZXRob2QpakJvAABVAE50cm9xAAAoamdxAABYTwAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqbG0AAFUATnRycHEAAChqZ3EAAFhcAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuIG1ldGhvZClqsm4AAFUATnRycXEAAChqZ3EAAFhXAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiBtZXRob2QpapFvAABVAE50cnJxAAAoamdxAABYXAAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiBtZXRob2QpattqAABVAE50cnNxAAAoamdxAABYcQAAAHF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpauNtAABVAE50cnRxAAAoamdxAABYaAAAAGdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpahBwAABVAE50cnVxAAAoamdxAABYaAAAAGdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0cygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpaldvAABVAE50cnZxAAAoamdxAABYRwAAAFdyaXRlVG9EYXRhc3RvcmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8pakhtAABVAE50cndxAAAoamdxAABYYQAAAHRvX3Vwc2VydF9tdXRhdGlvbigpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmUgc3RhdGljIG1ldGhvZClqM28AAFUATnRyeHEAAChqZ3EAAFhKAAAARGVsZXRlRnJvbURhdGFzdG9yZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqz2wAAFUATnRyeXEAAChqZ3EAAFhkAAAAdG9fZGVsZXRlX211dGF0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uRGVsZXRlRnJvbURhdGFzdG9yZSBzdGF0aWMgbWV0aG9kKWojawAAVQBOdHJ6cQAAZWgRXXJ7cQAAKChVBnNpbmdsZXJ8cQAAWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyIChtb2R1bGUpWC8AAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lclUATnRyfXEAAChqfHEAAFhAAAAARGlyZWN0UnVubmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyKWpZbQAAVQBOdHJ+cQAAKGp8cQAAWFQAAABhcHBseV9Db21iaW5lUGVyS2V5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyIG1ldGhvZClqlG8AAFUATnRyf3EAAChqfHEAAFhRAAAAYXBwbHlfVGVzdFN0cmVhbSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkRpcmVjdFJ1bm5lciBtZXRob2QpaotrAABVAE50coBxAAAoanxxAABYVgAAAGFwcGx5X19Hcm91cEJ5S2V5T25seSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkRpcmVjdFJ1bm5lciBtZXRob2QpahFuAABVAE50coFxAAAoanxxAABYWQAAAGFwcGx5X19Hcm91cEFsc29CeVdpbmRvdygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkRpcmVjdFJ1bm5lciBtZXRob2QpastrAABVAE50coJxAAAoanxxAABYXAAAAGFwcGx5X1JlYWRTdHJpbmdzRnJvbVB1YlN1YigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkRpcmVjdFJ1bm5lciBtZXRob2QpaihvAABVAE50coNxAAAoanxxAABYWwAAAGFwcGx5X1dyaXRlU3RyaW5nc1RvUHViU3ViKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyIG1ldGhvZClqv28AAFUATnRyhHEAAChqfHEAAFhNAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyIG1ldGhvZClqB3AAAFUATnRyhXEAAChqfHEAAFhHAAAAY2FjaGUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyIGF0dHJpYnV0ZSlqHGwAAFUATnRyhnEAAGVoEl1yh3EAAChqUnEAAFglAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZSAobW9kdWxlKVgjAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVVAE50cohxAABhaBNdcolxAAAoKGp8cQAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQgKG1vZHVsZSlYNAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHRVAE50copxAAAoanxxAABYSgAAAEV2YWx1YXRpb25Db250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQpavduAABVAE50cotxAAAoanxxAABYWwAAAHVzZV9wdmFsdWVfY2FjaGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0IG1ldGhvZClq9W4AAFUATnRyjHEAAChqfHEAAFhSAAAAbWV0cmljcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWo2bQAAVQBOdHKNcQAAKGp8cQAAWFUAAABoYXNfY2FjaGUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBhdHRyaWJ1dGUpai5vAABVAE50co5xAAAoanxxAABYWgAAAGFwcGVuZF90b19jYWNoZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWotbgAAVQBOdHKPcQAAKGp8cQAAWFwAAABpc19yb290X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWo/awAAVQBOdHKQcQAAKGp8cQAAWFgAAABoYW5kbGVfcmVzdWx0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QpavhsAABVAE50cpFxAAAoanxxAABYYAAAAGdldF9hZ2dyZWdhdG9yX3ZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWrVbgAAVQBOdHKScQAAKGp8cQAAWGsAAABzY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWp4awAAVQBOdHKTcQAAKGp8cQAAWGAAAABnZXRfZXhlY3V0aW9uX2NvbnRleHQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0IG1ldGhvZClqDGsAAFUATnRylHEAAChqfHEAAFhYAAAAY3JlYXRlX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWp7bwAAVQBOdHKVcQAAKGp8cQAAWGgAAABjcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWqHbQAAVQBOdHKWcQAAKGp8cQAAWF0AAABleHRyYWN0X2FsbF90aW1lcnMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0IG1ldGhvZClqBmwAAFUATnRyl3EAAChqfHEAAFhSAAAAaXNfZG9uZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWoWbwAAVQBOdHKYcQAAKGp8cQAAWG0AAABnZXRfdmFsdWVfb3Jfc2NoZWR1bGVfYWZ0ZXJfb3V0cHV0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QpagRtAABVAE50cplxAAAoanxxAABYTAAAAERpcmVjdFVubWVyZ2VkU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dClqcmsAAFUATnRymnEAAChqfHEAAFhKAAAARGlyZWN0U3RlcENvbnRleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dClqOW0AAFUATnRym3EAAChqfHEAAFhaAAAAZ2V0X2tleWVkX3N0YXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RTdGVwQ29udGV4dCBtZXRob2QpagpwAABVAE50cpxxAABlaBRdcp1xAAAoKGpPcQAAWB8AAABhcGFjaGVfYmVhbS51dGlscy51cm5zIChtb2R1bGUpWB0AAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMudXJuc1UATnRynnEAAChqT3EAAFgtAAAAUnVubmVyQXBpRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnVybnMpap1rAABVAE50cp9xAAAoak9xAABYRQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4gbWV0aG9kKWpdbQAAVQBOdHKgcQAAKGpPcQAAWEAAAAByZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBjbGFzcyBtZXRob2QpagVrAABVAE50cqFxAAAoak9xAABYRwAAAHJlZ2lzdGVyX3BpY2tsZV91cm4oKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBjbGFzcyBtZXRob2QpaqNsAABVAE50cqJxAAAoak9xAABYOwAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBtZXRob2QpaghuAABVAE50cqNxAAAoak9xAABYQwAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuIGNsYXNzIG1ldGhvZClqgWwAAFUATnRypHEAAGVoFV1ypXEAACgoamdxAABYIgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIgKG1vZHVsZSlYIAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AucHVic3ViVQBOdHKmcQAAKGpncQAAWDoAAABSZWFkU3RyaW5nc0Zyb21QdWJTdWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIparxsAABVAE50cqdxAAAoamdxAABYQQAAAHRvcGljIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1YiBhdHRyaWJ1dGUpandrAABVAE50cqhxAAAoamdxAABYSAAAAHN1YnNjcmlwdGlvbiAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkU3RyaW5nc0Zyb21QdWJTdWIgYXR0cmlidXRlKWpqbgAAVQBOdHKpcQAAKGpncQAAWEQAAABpZF9sYWJlbCAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkU3RyaW5nc0Zyb21QdWJTdWIgYXR0cmlidXRlKWrybAAAVQBOdHKqcQAAKGpncQAAWEgAAABnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuUmVhZFN0cmluZ3NGcm9tUHViU3ViIG1ldGhvZClqIm0AAFUATnRyq3EAAChqZ3EAAFhBAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuUmVhZFN0cmluZ3NGcm9tUHViU3ViIG1ldGhvZClqTWsAAFUATnRyrHEAAChqZ3EAAFg5AAAAV3JpdGVTdHJpbmdzVG9QdWJTdWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIpal9uAABVAE50cq1xAAAoamdxAABYQAAAAHRvcGljIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlU3RyaW5nc1RvUHViU3ViIGF0dHJpYnV0ZSlqqWwAAFUATnRyrnEAAChqZ3EAAFhAAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVTdHJpbmdzVG9QdWJTdWIgbWV0aG9kKWpcawAAVQBOdHKvcQAAZWgWXXKwcQAAKChqZ3EAAFgvAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIgKG1vZHVsZSlYLQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlclUATnRysXEAAChqZ3EAAFhDAAAAa2V5X2NvbXBhcmF0b3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWrgbQAAVQBOdHKycQAAKGpncQAAWEEAAABjb21wYXJlX3BhdGgoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWofcAAAVQBOdHKzcQAAKGpncQAAWEIAAABnZXRfZGF0YXN0b3JlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqtW8AAFUATnRytHEAAChqZ3EAAFhBAAAAbWFrZV9yZXF1ZXN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqOG0AAFUATnRytXEAAChqZ3EAAFhDAAAAbWFrZV9wYXJ0aXRpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWrQbgAAVQBOdHK2cQAAKGpncQAAWEcAAAByZXRyeV9vbl9ycGNfZXJyb3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWq6awAAVQBOdHK3cQAAKGpncQAAWEMAAABmZXRjaF9lbnRpdGllcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpaj9vAABVAE50crhxAAAoamdxAABYQQAAAGlzX2tleV92YWxpZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpajBrAABVAE50crlxAAAoamdxAABYRAAAAHdyaXRlX211dGF0aW9ucygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpaiFrAABVAE50crpxAAAoamdxAABYUAAAAG1ha2VfbGF0ZXN0X3RpbWVzdGFtcF9xdWVyeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpajJvAABVAE50crtxAAAoamdxAABYSgAAAG1ha2Vfa2luZF9zdGF0c19xdWVyeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpakFsAABVAE50crxxAAAoamdxAABYPwAAAFF1ZXJ5SXRlcmF0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWqmbQAAVQBOdHK9cQAAZWgXXXK+cQAAKGr4cAAAWBwAAABhcGFjaGVfYmVhbS5tZXRyaWNzIChtb2R1bGUpWBoAAABtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljc1UATnRyv3EAAGFoGF1ywHEAACgoanxxAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yIChtb2R1bGUpWCoAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3JVAE50csFxAAAoanxxAABYQAAAAFRyYW5zZm9ybUV4ZWN1dG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcilqWm8AAFUATnRywnEAAChqfHEAAFhFAAAAY2FsbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvciBtZXRob2Qpaq1vAABVAE50csNxAAAoanxxAABYTQAAAGF0dGVtcHRfY2FsbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvciBtZXRob2QpauVrAABVAE50csRxAAAoanxxAABYNwAAAEV4ZWN1dG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcilqr2wAAFUATnRyxXEAAChqfHEAAFg9AAAAc3RhcnQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuRXhlY3V0b3IgbWV0aG9kKWp4bgAAVQBOdHLGcQAAKGp8cQAAWEgAAABhd2FpdF9jb21wbGV0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yIG1ldGhvZClqcm8AAFUATnRyx3EAAGVoGV1yyHEAACgoamdxAABYKAAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0gKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtVQBOdHLJcQAAKGpncQAAWDsAAABIYWRvb3BGaWxlU3lzdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtKWrObQAAVQBOdHLKcQAAKGpncQAAWEgAAABzY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIGNsYXNzIG1ldGhvZClqkm0AAFUATnRyy3EAAChqZ3EAAFhAAAAAam9pbigpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWr4awAAVQBOdHLMcQAAKGpncQAAWEEAAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWqBawAAVQBOdHLNcQAAKGpncQAAWEIAAABta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqLGwAAFUATnRyznEAAChqZ3EAAFhBAAAAbWF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqJG8AAFUATnRyz3EAAChqZ3EAAFhCAAAAY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QpajxvAABVAE50ctBxAAAoamdxAABYQAAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClq52wAAFUATnRy0XEAAChqZ3EAAFhAAAAAY29weSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWo5bgAAVQBOdHLScQAAKGpncQAAWEIAAAByZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClq9G4AAFUATnRy03EAAChqZ3EAAFhCAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QpapFuAABVAE50ctRxAAAoamdxAABYQgAAAGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWqzawAAVQBOdHLVcQAAZWgaXXLWcQAAKChqaHAAAFgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIChtb2R1bGUpWCgAAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtVQBOdHLXcQAAKGpocAAAWDcAAABQVHJhbnNmb3JtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0pamxrAABVAE50cthxAAAoamhwAABYRAAAAHNpZGVfaW5wdXRzIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpaoVuAABVAE50ctlxAAAoamhwAABYQQAAAHBpcGVsaW5lIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpanttAABVAE50ctpxAAAoamhwAABYPgAAAGxhYmVsIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpatJvAABVAE50cttxAAAoamhwAABYRQAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWooawAAVQBOdHLccQAAKGpocAAAWEgAAAB3aXRoX2lucHV0X3R5cGVzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqom4AAFUATnRy3XEAAChqaHAAAFhJAAAAd2l0aF9vdXRwdXRfdHlwZXMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWqJawAAVQBOdHLecQAAKGpocAAAWEkAAAB0eXBlX2NoZWNrX2lucHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QpatVvAABVAE50ct9xAAAoamhwAABYSQAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqQ24AAFUATnRy4HEAAChqaHAAAFhKAAAAdHlwZV9jaGVja19vdXRwdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqRG0AAFUATnRy4XEAAChqaHAAAFhUAAAAdHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QpardsAABVAE50cuJxAAAoamhwAABYPgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QpapFrAABVAE50cuNxAAAoamhwAABYRQAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWqobAAAVQBOdHLkcQAAKGpocAAAWEoAAAByZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gY2xhc3MgbWV0aG9kKWopbwAAVQBOdHLlcQAAKGpocAAAWEUAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqwG0AAFUATnRy5nEAAChqaHAAAFhNAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIGNsYXNzIG1ldGhvZClqdG8AAFUATnRy53EAAChqaHAAAFhPAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWpZbwAAVQBOdHLocQAAKGpocAAAWFgAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIHN0YXRpYyBtZXRob2QpaitsAABVAE50culxAAAoamhwAABYPQAAAHB0cmFuc2Zvcm1fZm4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSlq424AAFUATnRy6nEAAChqaHAAAFhDAAAAbGFiZWxfZnJvbV9jYWxsYWJsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtKWpLbwAAVQBOdHLrcQAAZWgbXXLscQAAKChVBnNpbmdsZXLtcQAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UgKG1vZHVsZSlYNAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2VVAE50cu5xAAAoau1xAABYRQAAAE5hdGl2ZVNvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWqCawAAVQBOdHLvcQAAKGrtcQAAWEwAAAByZWFkZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZSBtZXRob2QpatdtAABVAE50cvBxAAAoau1xAABYUAAAAGlzX2JvdW5kZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZSBtZXRob2QpajFtAABVAE50cvFxAAAoau1xAABYSwAAAE5hdGl2ZVNvdXJjZVJlYWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWqJbAAAVQBOdHLycQAAKGrtcQAAWGQAAAByZXR1cm5zX3dpbmRvd2VkX3ZhbHVlcyAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlciBhdHRyaWJ1dGUpav5vAABVAE50cvNxAAAoau1xAABYWAAAAGdldF9wcm9ncmVzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyIG1ldGhvZClqFW4AAFUATnRy9HEAAChq7XEAAFhhAAAAcmVxdWVzdF9keW5hbWljX3NwbGl0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2VSZWFkZXIgbWV0aG9kKWo2bAAAVQBOdHL1cQAAKGrtcQAAWEcAAABSZWFkZXJQcm9ncmVzcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWrGawAAVQBOdHL2cQAAKGrtcQAAWFEAAABwb3NpdGlvbiAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzIGF0dHJpYnV0ZSlqKW0AAFUATnRy93EAAChq7XEAAFhZAAAAcGVyY2VudF9jb21wbGV0ZSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzIGF0dHJpYnV0ZSlq8GwAAFUATnRy+HEAAChq7XEAAFhXAAAAcmVtYWluaW5nX3RpbWUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcyBhdHRyaWJ1dGUpahtwAABVAE50cvlxAAAoau1xAABYXgAAAGNvbnN1bWVkX3NwbGl0X3BvaW50cyAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzIGF0dHJpYnV0ZSlqtGwAAFUATnRy+nEAAChq7XEAAFhfAAAAcmVtYWluaW5nX3NwbGl0X3BvaW50cyAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzIGF0dHJpYnV0ZSlqO2wAAFUATnRy+3EAAChq7XEAAFhHAAAAUmVhZGVyUG9zaXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSlqjWwAAFUATnRy/HEAAChq7XEAAFhHAAAAQ29uY2F0UG9zaXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSlqbm0AAFUATnRy/XEAAChq7XEAAFhMAAAARHluYW1pY1NwbGl0UmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWo8bAAAVQBOdHL+cQAAKGrtcQAAWEsAAABEeW5hbWljU3BsaXRSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSlquG0AAFUATnRy/3EAAChq7XEAAFhXAAAARHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UpaudrAABVAE50cgByAAAoau1xAABYQwAAAE5hdGl2ZVNpbmsgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSlqom0AAFUATnRyAXIAAChq7XEAAFhKAAAAd3JpdGVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rIG1ldGhvZClqIHAAAFUATnRyAnIAAChq7XEAAFhJAAAATmF0aXZlU2lua1dyaXRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWrpbQAAVQBOdHIDcgAAKGrtcQAAWGAAAAB0YWtlc193aW5kb3dlZF92YWx1ZXMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVyIGF0dHJpYnV0ZSlqnW4AAFUATnRyBHIAAChq7XEAAFhPAAAAV3JpdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmtXcml0ZXIgbWV0aG9kKWrdagAAVQBOdHIFcgAAZWgcXXIGcgAAKChqfHEAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MgKG1vZHVsZSlYMAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc1UATnRyB3IAAChqfHEAAFhCAAAARGlyZWN0TWV0cmljcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MpaqRrAABVAE50cghyAAAoanxxAABYUQAAAGNvbW1pdF9sb2dpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MgbWV0aG9kKWrcbgAAVQBOdHIJcgAAKGp8cQAAWFIAAABjb21taXRfcGh5c2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcyBtZXRob2Qpav9tAABVAE50cgpyAAAoanxxAABYUgAAAHVwZGF0ZV9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzIG1ldGhvZClqu2sAAFUATnRyC3IAAChqfHEAAFhIAAAAcXVlcnkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcyBtZXRob2QpatxvAABVAE50cgxyAAAoanxxAABYQQAAAERpcmVjdE1ldHJpYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3Mpan9rAABVAE50cg1yAAAoanxxAABYUAAAAGNvbW1pdF9sb2dpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYyBtZXRob2Qpak1vAABVAE50cg5yAAAoanxxAABYUQAAAGNvbW1pdF9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMgbWV0aG9kKWpibwAAVQBOdHIPcgAAKGp8cQAAWFEAAAB1cGRhdGVfcGh5c2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZClqsG4AAFUATnRyEHIAAChqfHEAAFhTAAAAZXh0cmFjdF9jb21taXR0ZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZClqaW4AAFUATnRyEXIAAChqfHEAAFhaAAAAZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYyBtZXRob2QpamVrAABVAE50chJyAABlaB1dchNyAAAoKGrtcQAAWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jayAobW9kdWxlKVgnAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrVQBOdHIUcgAAKGrtcQAAWDEAAABDbG9jayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2spaldrAABVAE50chVyAAAoau1xAABYNgAAAHRpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suQ2xvY2sgbWV0aG9kKWrfagAAVQBOdHIWcgAAKGrtcQAAWD4AAABhZHZhbmNlX3RpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suQ2xvY2sgbWV0aG9kKWphbgAAVQBOdHIXcgAAKGrtcQAAWDUAAABSZWFsQ2xvY2sgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrKWrtbAAAVQBOdHIYcgAAKGrtcQAAWDoAAAB0aW1lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLlJlYWxDbG9jayBtZXRob2QpauVsAABVAE50chlyAAAoau1xAABYNQAAAFRlc3RDbG9jayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2spag9uAABVAE50chpyAAAoau1xAABYOgAAAHRpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suVGVzdENsb2NrIG1ldGhvZClqpm8AAFUATnRyG3IAAChq7XEAAFhCAAAAYWR2YW5jZV90aW1lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLlRlc3RDbG9jayBtZXRob2Qpak5tAABVAE50chxyAABlaB5dch1yAAAoKGpocAAAWCQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWxVAE50ch5yAAAoamhwAABYMwAAAENvR3JvdXBCeUtleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKWpbbwAAVQBOdHIfcgAAKGpocAAAWDoAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkNvR3JvdXBCeUtleSBtZXRob2Qpam5sAABVAE50ciByAAAoamhwAABYLgAAAEtleXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbClqEXAAAFUATnRyIXIAAChqaHAAAFgwAAAAVmFsdWVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwpat1rAABVAE50ciJyAAAoamhwAABYMAAAAEt2U3dhcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKWpSbwAAVQBOdHIjcgAAKGpocAAAWDoAAABSZW1vdmVEdXBsaWNhdGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwpavJvAABVAE50ciRyAAAoamhwAABYNAAAAEJhdGNoRWxlbWVudHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbClqyGwAAFUATnRyJXIAAChqaHAAAFg7AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzIG1ldGhvZClqKmwAAFUATnRyJnIAAChqaHAAAFgwAAAAUmVzaHVmZmxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwpaphtAABVAE50cidyAAAoamhwAABYNwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlIG1ldGhvZClq2mwAAFUATnRyKHIAAGVoH11yKXIAAChVBnNpbmdsZXIqcgAAWBwAAABhcGFjaGVfYmVhbS50ZXN0aW5nIChtb2R1bGUpWBoAAABtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZ1UATnRyK3IAAGFoIF1yLHIAACgoaipyAABYKgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSAobW9kdWxlKVgoAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZVUATnRyLXIAAChqKnIAAFg5AAAAVGVzdFBpcGVsaW5lIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUpardvAABVAE50ci5yAAAoaipyAABYPQAAAHJ1bigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lIG1ldGhvZClqZmwAAFUATnRyL3IAAChqKnIAAFhSAAAAZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKWpEbgAAVQBOdHIwcgAAKGoqcgAAWEQAAABnZXRfb3B0aW9uKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKWpYbQAAVQBOdHIxcgAAZWghXXIycgAAKChqT3EAAFgkAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIChtb2R1bGUpWCIAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wVQBOdHIzcgAAKGpPcQAAWDAAAABUaW1lc3RhbXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcClqFWsAAFUATnRyNHIAAChqT3EAAFg6AAAAb2YoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBzdGF0aWMgbWV0aG9kKWo9bwAAVQBOdHI1cgAAKGpPcQAAWDwAAABwcmVkZWNlc3NvcigpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wIG1ldGhvZClqC24AAFUATnRyNnIAAChqT3EAAFhAAAAAdG9fdXRjX2RhdGV0aW1lKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAgbWV0aG9kKWpfbwAAVQBOdHI3cgAAKGpPcQAAWDoAAABpc29mb3JtYXQoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBtZXRob2QpagFuAABVAE50cjhyAAAoak9xAABYLwAAAER1cmF0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXApaspsAABVAE50cjlyAAAoak9xAABYOQAAAG9mKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbiBzdGF0aWMgbWV0aG9kKWp7bAAAVQBOdHI6cgAAZWgiXXI7cgAAKChqaHAAAFgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc1UATnRyPHIAAChqaHAAAFgwAAAATWVhbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpahRsAABVAE50cj1yAAAoamhwAABYOQAAAE1lYW4uR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWpcbQAAVQBOdHI+cgAAKGpocAAAWEAAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseSBtZXRob2Qpah5vAABVAE50cj9yAAAoamhwAABYNwAAAE1lYW4uUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqZG4AAFUATnRyQHIAAChqaHAAAFg+AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uUGVyS2V5IG1ldGhvZClqgGwAAFUATnRyQXIAAChqaHAAAFgxAAAAQ291bnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWpbawAAVQBOdHJCcgAAKGpocAAAWDoAAABDb3VudC5HbG9iYWxseSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpallrAABVAE50ckNyAAAoamhwAABYQQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5HbG9iYWxseSBtZXRob2QpaqBvAABVAE50ckRyAAAoamhwAABYOAAAAENvdW50LlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpapJsAABVAE50ckVyAAAoamhwAABYPwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5QZXJLZXkgbWV0aG9kKWqJbwAAVQBOdHJGcgAAKGpocAAAWDwAAABDb3VudC5QZXJFbGVtZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqpWwAAFUATnRyR3IAAChqaHAAAFhDAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlckVsZW1lbnQgbWV0aG9kKWrzbAAAVQBOdHJIcgAAKGpocAAAWC8AAABUb3AgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWqmbgAAVQBOdHJJcgAAKGpocAAAWDkAAABPZigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZClqAm8AAFUATnRySnIAAChqaHAAAFg9AAAAUGVyS2V5KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcCBzdGF0aWMgbWV0aG9kKWqqawAAVQBOdHJLcgAAKGpocAAAWD4AAABMYXJnZXN0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcCBzdGF0aWMgbWV0aG9kKWqhbQAAVQBOdHJMcgAAKGpocAAAWD8AAABTbWFsbGVzdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZClqFmwAAFUATnRyTXIAAChqaHAAAFhEAAAATGFyZ2VzdFBlcktleSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZClqOGsAAFUATnRyTnIAAChqaHAAAFhFAAAAU21hbGxlc3RQZXJLZXkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wIHN0YXRpYyBtZXRob2Qpaq9uAABVAE50ck9yAAAoamhwAABYMgAAAFNhbXBsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpasZvAABVAE50clByAAAoamhwAABYSwAAAEZpeGVkU2l6ZUdsb2JhbGx5KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZSBzdGF0aWMgbWV0aG9kKWoXbwAAVQBOdHJRcgAAKGpocAAAWEkAAABGaXhlZFNpemVQZXJLZXkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlIHN0YXRpYyBtZXRob2Qpar1rAABVAE50clJyAAAoamhwAABYMgAAAFRvTGlzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpahNwAABVAE50clNyAAAoamhwAABYOQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub0xpc3QgbWV0aG9kKWrTbgAAVQBOdHJUcgAAKGpocAAAWDIAAABUb0RpY3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWqVbwAAVQBOdHJVcgAAKGpocAAAWDkAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9EaWN0IG1ldGhvZClqcm4AAFUATnRyVnIAAGVoI11yV3IAACgoamhwAABYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlclUATnRyWHIAAChqaHAAAFg6AAAAQWNjdW11bGF0aW9uTW9kZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWrQbAAAVQBOdHJZcgAAKGpocAAAWEYAAABESVNDQVJESU5HIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWNjdW11bGF0aW9uTW9kZSBhdHRyaWJ1dGUpaoVtAABVAE50clpyAAAoamhwAABYSAAAAEFDQ1VNVUxBVElORyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGUgYXR0cmlidXRlKWqsbQAAVQBOdHJbcgAAKGpocAAAWDMAAABUcmlnZ2VyRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilqwG4AAFUATnRyXHIAAChqaHAAAFg+AAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZClqE28AAFUATnRyXXIAAChqaHAAAFg8AAAAb25fbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbiBtZXRob2QpapBuAABVAE50cl5yAAAoamhwAABYPwAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKWrgbwAAVQBOdHJfcgAAKGpocAAAWDsAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKWoBbQAAVQBOdHJgcgAAKGpocAAAWDkAAAByZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZClqOWsAAFUATnRyYXIAAChqaHAAAFhKAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gc3RhdGljIG1ldGhvZClqBG4AAFUATnRyYnIAAChqaHAAAFhBAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZClqQm4AAFUATnRyY3IAAChqaHAAAFg4AAAARGVmYXVsdFRyaWdnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilqUGwAAFUATnRyZHIAAChqaHAAAFhDAAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKWoybgAAVQBOdHJlcgAAKGpocAAAWEEAAABvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKWr/bwAAVQBOdHJmcgAAKGpocAAAWEQAAABzaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKWpLbAAAVQBOdHJncgAAKGpocAAAWEAAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QpajFrAABVAE50cmhyAAAoamhwAABYPgAAAHJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QpathrAABVAE50cmlyAAAoamhwAABYTwAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgc3RhdGljIG1ldGhvZClqr28AAFUATnRyanIAAChqaHAAAFhGAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKWrlbwAAVQBOdHJrcgAAKGpocAAAWDgAAABBZnRlcldhdGVybWFyayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWozbAAAVQBOdHJscgAAKGpocAAAWEIAAABMQVRFX1RBRyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIGF0dHJpYnV0ZSlq4m8AAFUATnRybXIAAChqaHAAAFhAAAAAaXNfbGF0ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKWoRbQAAVQBOdHJucgAAKGpocAAAWEMAAABvbl9lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QpauVqAABVAE50cm9yAAAoamhwAABYQQAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QpaoNtAABVAE50cnByAAAoamhwAABYRAAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QpaixrAABVAE50cnFyAAAoamhwAABYQAAAAG9uX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClqrmsAAFUATnRycnIAAChqaHAAAFg+AAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClqKWsAAFUATnRyc3IAAChqaHAAAFhPAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBzdGF0aWMgbWV0aG9kKWr7agAAVQBOdHJ0cgAAKGpocAAAWEYAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QpamhtAABVAE50cnVyAAAoamhwAABYNAAAAEFmdGVyQ291bnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilq6G4AAFUATnRydnIAAChqaHAAAFg/AAAAQ09VTlRfVEFHIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBhdHRyaWJ1dGUpagVuAABVAE50cndyAAAoamhwAABYPwAAAG9uX2VsZW1lbnQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKWpfawAAVQBOdHJ4cgAAKGpocAAAWD0AAABvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2QpauhtAABVAE50cnlyAAAoamhwAABYQAAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZClqu24AAFUATnRyenIAAChqaHAAAFg8AAAAb25fZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2Qpai9uAABVAE50cntyAAAoamhwAABYOgAAAHJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZClqRmsAAFUATnRyfHIAAChqaHAAAFhLAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IHN0YXRpYyBtZXRob2QpamtuAABVAE50cn1yAAAoamhwAABYQgAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKWqlbwAAVQBOdHJ+cgAAKGpocAAAWDQAAABSZXBlYXRlZGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIpavluAABVAE50cn9yAAAoamhwAABYPwAAAG9uX2VsZW1lbnQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKWrubgAAVQBOdHKAcgAAKGpocAAAWD0AAABvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2QpaktuAABVAE50coFyAAAoamhwAABYQAAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZClqyGsAAFUATnRygnIAAChqaHAAAFg8AAAAb25fZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2QpatRsAABVAE50coNyAAAoamhwAABYOgAAAHJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZClqoG4AAFUATnRyhHIAAChqaHAAAFhLAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IHN0YXRpYyBtZXRob2QpakpuAABVAE50coVyAAAoamhwAABYQgAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKWpTbAAAVQBOdHKGcgAAKGpocAAAWDIAAABBZnRlckFueSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWr6agAAVQBOdHKHcgAAKGpocAAAWD0AAABjb21iaW5lX29wKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFueSBtZXRob2Qpai1tAABVAE50cohyAAAoamhwAABYMgAAAEFmdGVyQWxsIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIparhuAABVAE50colyAAAoamhwAABYPQAAAGNvbWJpbmVfb3AoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQWxsIG1ldGhvZClqxG4AAFUATnRyinIAAChqaHAAAFgzAAAAQWZ0ZXJFYWNoIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIpapptAABVAE50cotyAAAoamhwAABYPgAAAElOREVYX1RBRyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBhdHRyaWJ1dGUpavtvAABVAE50coxyAAAoamhwAABYPgAAAG9uX2VsZW1lbnQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBtZXRob2QpavpuAABVAE50co1yAAAoamhwAABYPAAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKWohcAAAVQBOdHKOcgAAKGpocAAAWD8AAABzaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZClqPW0AAFUATnRyj3IAAChqaHAAAFg7AAAAb25fZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZClqc2wAAFUATnRykHIAAChqaHAAAFg5AAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBtZXRob2QpagdsAABVAE50cpFyAAAoamhwAABYSgAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIHN0YXRpYyBtZXRob2Qpau1uAABVAE50cpJyAAAoamhwAABYQQAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBtZXRob2Qpag5sAABVAE50cpNyAAAoamhwAABYMwAAAE9yRmluYWxseSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWpgbgAAVQBOdHKUcgAAKGpocAAAWEoAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseSBzdGF0aWMgbWV0aG9kKWp5bAAAVQBOdHKVcgAAKGpocAAAWEEAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5PckZpbmFsbHkgbWV0aG9kKWqcbQAAVQBOdHKWcgAAZWgkXXKXcgAAKChq+HAAAFgiAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpbyAobW9kdWxlKVggAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9VAE50cphyAAAoavhwAABYNQAAAFJlYWRGcm9tVEZSZWNvcmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8papNsAABVAE50cplyAAAoavhwAABYPAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLlJlYWRGcm9tVEZSZWNvcmQgbWV0aG9kKWqBbgAAVQBOdHKacgAAKGr4cAAAWDQAAABXcml0ZVRvVEZSZWNvcmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8paqxvAABVAE50cptyAAAoavhwAABYOwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLldyaXRlVG9URlJlY29yZCBtZXRob2QpagpsAABVAE50cpxyAABlaCVdcp1yAAAoKGpocAAAWCEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgKG1vZHVsZSlYHwAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxVAE50cp5yAAAoamhwAABYNQAAAFRlc3RXaW5kb3dlZFZhbHVlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpauRtAABVAE50cp9yAAAoamhwAABYQAAAAHRpbWVzdGFtcCAoYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlIGF0dHJpYnV0ZSlqTG4AAFUATnRyoHIAAChqaHAAAFg8AAAAdmFsdWUgKGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZSBhdHRyaWJ1dGUpanZrAABVAE50cqFyAAAoamhwAABYPgAAAHdpbmRvd3MgKGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZSBhdHRyaWJ1dGUpam1uAABVAE50cqJyAAAoamhwAABYLwAAAGVxdWFsX3RvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpaqFvAABVAE50cqNyAAAoamhwAABYLwAAAGlzX2VtcHR5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpauprAABVAE50cqRyAAAoamhwAABYMgAAAGFzc2VydF90aGF0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpar9rAABVAE50cqVyAAAoamhwAABYMgAAAG9wZW5fc2hhcmRzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpakFvAABVAE50cqZyAABlaCZdcqdyAAAoau1xAABYLwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvIChtb2R1bGUpWC0AAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW9VAE50cqhyAABhaCddcqlyAAAoKGoqcgAAWFQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5weXRob25fcnBjX2RpcmVjdF9ydW5uZXIgKG1vZHVsZSlYUgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5weXRob25fcnBjX2RpcmVjdF9ydW5uZXJVAE50cqpyAAAoaipyAABYbAAAAFB5dGhvblJQQ0RpcmVjdFJ1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVyKWqWbwAAVQBOdHKrcgAAKGoqcgAAWHAAAABydW4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QucHl0aG9uX3JwY19kaXJlY3RfcnVubmVyLlB5dGhvblJQQ0RpcmVjdFJ1bm5lciBtZXRob2QpahRuAABVAE50cqxyAABlaChdcq1yAAAoKGpocAAAWCQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmVVAE50cq5yAAAoamhwAABYKwAAAERvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqsGwAAFUATnRyr3IAAChqaHAAAFg5AAAARWxlbWVudFBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUpalpuAABVAE50crByAAAoamhwAABYOwAAAFNpZGVJbnB1dFBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUpaoNrAABVAE50crFyAAAoamhwAABYOwAAAFRpbWVzdGFtcFBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUpaqxrAABVAE50crJyAAAoamhwAABYOAAAAFdpbmRvd1BhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUpaohvAABVAE50crNyAAAoamhwAABYQwAAAFdhdGVybWFya1JlcG9ydGVyUGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqAmsAAFUATnRytHIAAChqaHAAAFg3AAAARG9GblBhcmFtcyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKWrbbgAAVQBOdHK1cgAAKGpocAAAWEAAAABmcm9tX2NhbGxhYmxlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIHN0YXRpYyBtZXRob2QpaghvAABVAE50crZyAAAoamhwAABYOQAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKWpxbwAAVQBOdHK3cgAAKGpocAAAWDMAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZClqu2wAAFUATnRyuHIAAChqaHAAAFg4AAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZClqO2sAAFUATnRyuXIAAChqaHAAAFg5AAAAZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QparluAABVAE50crpyAAAoamhwAABYQgAAAGdldF9mdW5jdGlvbl9hcmd1bWVudHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKWqbbQAAVQBOdHK7cgAAKGpocAAAWD0AAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QpahhtAABVAE50crxyAAAoamhwAABYPgAAAGlzX3Byb2Nlc3NfYm91bmRlZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QpagJuAABVAE50cr1yAAAoamhwAABYQwAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZClqIGsAAFUATnRyvnIAAChqaHAAAFgwAAAAQ29tYmluZUZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpaqttAABVAE50cr9yAAAoamhwAABYPgAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpaittAABVAE50csByAAAoamhwAABYQwAAAGNyZWF0ZV9hY2N1bXVsYXRvcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClqI24AAFUATnRywXIAAChqaHAAAFg6AAAAYWRkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWpobwAAVQBOdHLCcgAAKGpocAAAWDsAAABhZGRfaW5wdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWrUbgAAVQBOdHLDcgAAKGpocAAAWEMAAABtZXJnZV9hY2N1bXVsYXRvcnMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpakBuAABVAE50csRyAAAoamhwAABYPwAAAGV4dHJhY3Rfb3V0cHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWpaawAAVQBOdHLFcgAAKGpocAAAWDYAAABhcHBseSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClqXGwAAFUATnRyxnIAAChqaHAAAFg/AAAAZm9yX2lucHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpahtvAABVAE50csdyAAAoamhwAABYRQAAAGZyb21fY2FsbGFibGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBzdGF0aWMgbWV0aG9kKWonbwAAVQBOdHLIcgAAKGpocAAAWEsAAABtYXliZV9mcm9tX2NhbGxhYmxlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gc3RhdGljIG1ldGhvZClqe24AAFUATnRyyXIAAChqaHAAAFhGAAAAZ2V0X2FjY3VtdWxhdG9yX2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWq9bAAAVQBOdHLKcgAAKGpocAAAWEgAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClqBm4AAFUATnRyy3IAAChqaHAAAFgyAAAAUGFydGl0aW9uRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqImsAAFUATnRyzHIAAChqaHAAAFhAAAAAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4gbWV0aG9kKWrXbwAAVQBOdHLNcgAAKGpocAAAWEAAAABwYXJ0aXRpb25fZm9yKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25GbiBtZXRob2Qpag1vAABVAE50cs5yAAAoamhwAABYLAAAAFBhckRvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpah5tAABVAE50cs9yAAAoamhwAABYPwAAAGRlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWq1bAAAVQBOdHLQcgAAKGpocAAAWD4AAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWpWawAAVQBOdHLRcgAAKGpocAAAWDQAAABtYWtlX2ZuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QpavptAABVAE50ctJyAAAoamhwAABYOQAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWqHawAAVQBOdHLTcgAAKGpocAAAWDMAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZClqiW4AAFUATnRy1HIAAChqaHAAAFg5AAAAd2l0aF9vdXRwdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QpalJtAABVAE50ctVyAAAoamhwAABYRAAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2Qpau1qAABVAE50ctZyAAAoamhwAABYTQAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIHN0YXRpYyBtZXRob2QpatNtAABVAE50ctdyAAAoamhwAABYMQAAAEZsYXRNYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqS2sAAFUATnRy2HIAAChqaHAAAFgtAAAATWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpao1rAABVAE50ctlyAAAoamhwAABYMAAAAEZpbHRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWr4bQAAVQBOdHLacgAAKGpocAAAWDYAAABDb21iaW5lR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqx20AAFUATnRy23IAAChqaHAAAFhEAAAAaGFzX2RlZmF1bHRzIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IGF0dHJpYnV0ZSlqBm0AAFUATnRy3HIAAChqaHAAAFg/AAAAYXNfdmlldyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBhdHRyaWJ1dGUpah5sAABVAE50ct1yAAAoamhwAABYQwAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqbW0AAFUATnRy3nIAAChqaHAAAFhEAAAAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqT2sAAFUATnRy33IAAChqaHAAAFhEAAAAd2l0aF9kZWZhdWx0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqLW8AAFUATnRy4HIAAChqaHAAAFhHAAAAd2l0aG91dF9kZWZhdWx0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqN28AAFUATnRy4XIAAChqaHAAAFhIAAAAYXNfc2luZ2xldG9uX3ZpZXcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2QpanlvAABVAE50cuJyAAAoamhwAABYPQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqXm8AAFUATnRy43IAAChqaHAAAFg0AAAAQ29tYmluZVBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWqxbwAAVQBOdHLkcgAAKGpocAAAWEEAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKWombgAAVQBOdHLlcgAAKGpocAAAWDwAAABtYWtlX2ZuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZClqZG8AAFUATnRy5nIAAChqaHAAAFhCAAAAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2QpaopuAABVAE50cudyAAAoamhwAABYOwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2Qpao5vAABVAE50cuhyAAAoamhwAABYTAAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZClq+W8AAFUATnRy6XIAAChqaHAAAFhVAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBzdGF0aWMgbWV0aG9kKWrfbQAAVQBOdHLqcgAAKGpocAAAWDQAAABDb21iaW5lVmFsdWVzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpan5vAABVAE50cutyAAAoamhwAABYPAAAAG1ha2VfZm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgbWV0aG9kKWrybgAAVQBOdHLscgAAKGpocAAAWDsAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgbWV0aG9kKWr1bQAAVQBOdHLtcgAAKGpocAAAWEwAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVZhbHVlcyBtZXRob2QpaulvAABVAE50cu5yAAAoamhwAABYVQAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgc3RhdGljIG1ldGhvZClq4GsAAFUATnRy73IAAChqaHAAAFgxAAAAR3JvdXBCeUtleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWpBawAAVQBOdHLwcgAAKGpocAAAWD4AAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWpHbwAAVQBOdHLxcgAAKGpocAAAWEYAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cyBtZXRob2QpalNvAABVAE50cvJyAAAoamhwAABYUAAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cyBtZXRob2QpasVuAABVAE50cvNyAAAoamhwAABYOAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleSBtZXRob2QpaglvAABVAE50cvRyAAAoamhwAABYSQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5IG1ldGhvZClqVGwAAFUATnRy9XIAAChqaHAAAFhSAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleSBzdGF0aWMgbWV0aG9kKWoSbgAAVQBOdHL2cgAAKGpocAAAWDAAAABQYXJ0aXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqL2wAAFUATnRy93IAAChqaHAAAFhDAAAAUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWo7bgAAVQBOdHL4cgAAKGpocAAAWEsAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuIG1ldGhvZClqxWsAAFUATnRy+XIAAChqaHAAAFg4AAAAbWFrZV9mbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uIG1ldGhvZClq0GoAAFUATnRy+nIAAChqaHAAAFg3AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24gbWV0aG9kKWphawAAVQBOdHL7cgAAKGpocAAAWDAAAABXaW5kb3dpbmcgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqVm8AAFUATnRy/HIAAChqaHAAAFg7AAAAaXNfZGVmYXVsdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nIG1ldGhvZClqu28AAFUATnRy/XIAAChqaHAAAFg+AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nIG1ldGhvZClq7m0AAFUATnRy/nIAAChqaHAAAFhHAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmcgc3RhdGljIG1ldGhvZClq+2sAAFUATnRy/3IAAChqaHAAAFgxAAAAV2luZG93SW50byAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWoIcAAAVQBOdHIAcwAAKGpocAAAWD4AAABXaW5kb3dJbnRvLldpbmRvd0ludG9GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWoubAAAVQBOdHIBcwAAKGpocAAAWEYAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvLldpbmRvd0ludG9GbiBtZXRob2QpaoNvAABVAE50cgJzAAAoamhwAABYPwAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8gbWV0aG9kKWrJbQAAVQBOdHIDcwAAKGpocAAAWEMAAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBtZXRob2Qpai9rAABVAE50cgRzAAAoamhwAABYOAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBtZXRob2QparFrAABVAE50cgVzAAAoamhwAABYSQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvIG1ldGhvZClq3G0AAFUATnRyBnMAAChqaHAAAFhSAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBzdGF0aWMgbWV0aG9kKWrWawAAVQBOdHIHcwAAKGpocAAAWC4AAABGbGF0dGVuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpandvAABVAE50cghzAAAoamhwAABYNQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbiBtZXRob2QpamdrAABVAE50cglzAAAoamhwAABYPAAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gbWV0aG9kKWpybAAAVQBOdHIKcwAAKGpocAAAWEYAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbiBtZXRob2QpailsAABVAE50cgtzAAAoamhwAABYTwAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gc3RhdGljIG1ldGhvZClq9WsAAFUATnRyDHMAAChqaHAAAFgtAAAAQ3JlYXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpaiFvAABVAE50cg1zAAAoamhwAABYPwAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKWrXawAAVQBOdHIOcwAAKGpocAAAWD0AAABnZXRfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZSBtZXRob2QpaiNtAABVAE50cg9zAAAoamhwAABYNAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlIG1ldGhvZClqsW0AAFUATnRyEHMAAChqaHAAAFg7AAAAZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlIG1ldGhvZClqC28AAFUATnRyEXMAAGVoKV1yEnMAAChqqXAAAFgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLnR5cGVjb2RlcnMgKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnMudHlwZWNvZGVyc1UATnRyE3MAAGFoKl1yFHMAAChVBnNpbmdsZXIVcwAAWBoAAABhcGFjaGVfYmVhbS51dGlscyAobW9kdWxlKVgYAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzVQBOdHIWcwAAYWgrXXIXcwAAKChqaHAAAFgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzIChtb2R1bGUpWCgAAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzVQBOdHIYcwAAKGpocAAAWEkAAABkZWZhdWx0X3dpbmRvd19tYXBwaW5nX2ZuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMpau5rAABVAE50chlzAAAoamhwAABYOQAAAFNpZGVJbnB1dE1hcCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzKWrdbwAAVQBOdHIacwAAKGpocAAAWE4AAABpc19nbG9iYWxseV93aW5kb3dlZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMuU2lkZUlucHV0TWFwIG1ldGhvZClqA3AAAFUATnRyG3MAAGVoLF1yHHMAACgoavhwAABYLAAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzIChtb2R1bGUpWCoAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNVAE50ch1zAAAoavhwAABYOgAAAE9mZnNldFJhbmdlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2VycylqpmsAAFUATnRyHnMAAChq+HAAAFhAAAAAc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmFuZ2UgbWV0aG9kKWpVbAAAVQBOdHIfcwAAKGr4cAAAWEYAAABuZXdfdHJhY2tlcigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZSBtZXRob2QpaiZrAABVAE50ciBzAAAoavhwAABYRwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMpavNvAABVAE50ciFzAAAoavhwAABYUgAAAGNoZWNrX2RvbmUoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZClqzGsAAFUATnRyInMAAChq+HAAAFhbAAAAY3VycmVudF9yZXN0cmljdGlvbigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWombAAAVQBOdHIjcwAAKGr4cAAAWFYAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWqpbgAAVQBOdHIkcwAAKGr4cAAAWFUAAABzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpauFqAABVAE50ciVzAAAoavhwAABYUQAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWoPbAAAVQBOdHImcwAAKGr4cAAAWFIAAABjaGVja3BvaW50KCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2Qpal1sAABVAE50cidzAABlaC1dcihzAAAoaqZwAABYJAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSAobW9kdWxlKVgiAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaVUATnRyKXMAAGFoLl1yKnMAACgoamhwAABYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheVUATnRyK3MAAChqaHAAAFg4AAAASGFzRGlzcGxheURhdGEgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSlqaW8AAFUATnRyLHMAAChqaHAAAFhFAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5IYXNEaXNwbGF5RGF0YSBtZXRob2QpaptuAABVAE50ci1zAAAoamhwAABYNQAAAERpc3BsYXlEYXRhIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkpahVsAABVAE50ci5zAAAoamhwAABYTwAAAGNyZWF0ZV9mcm9tX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhIGNsYXNzIG1ldGhvZClqjG4AAFUATnRyL3MAAChqaHAAAFhHAAAAY3JlYXRlX2Zyb20oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhIGNsYXNzIG1ldGhvZClqsWwAAFUATnRyMHMAAChqaHAAAFg5AAAARGlzcGxheURhdGFJdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkpatpuAABVAE50cjFzAAAoamhwAABYQwAAAHR5cGVEaWN0IChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIGF0dHJpYnV0ZSlqy2wAAFUATnRyMnMAAChqaHAAAFhGAAAAZHJvcF9pZl9ub25lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKWqlawAAVQBOdHIzcwAAKGpocAAAWEkAAABkcm9wX2lmX2RlZmF1bHQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBtZXRob2Qpan9tAABVAE50cjRzAAAoamhwAABYRQAAAHNob3VsZF9kcm9wKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKWpKbwAAVQBOdHI1cwAAKGpocAAAWEIAAABpc192YWxpZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIG1ldGhvZClqKm8AAFUATnRyNnMAAChqaHAAAFhCAAAAZ2V0X2RpY3QoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBtZXRob2QpapBsAABVAE50cjdzAABlaC9dcjhzAAAoKGpScQAAWDsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlciAobW9kdWxlKVg5AAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyVQBOdHI5cwAAKGpScQAAWE8AAABBZGFwdGl2ZVRocm90dGxlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIpaslrAABVAE50cjpzAAAoalJxAABYXQAAAE1JTl9SRVFVRVNUUyAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIuQWRhcHRpdmVUaHJvdHRsZXIgYXR0cmlidXRlKWoobgAAVQBOdHI7cwAAKGpScQAAWGAAAAB0aHJvdHRsZV9yZXF1ZXN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyIG1ldGhvZClqhmsAAFUATnRyPHMAAChqUnEAAFhiAAAAc3VjY2Vzc2Z1bF9yZXF1ZXN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyIG1ldGhvZClqgG4AAFUATnRyPXMAAGVoMF1yPnMAACgoahVzAABYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNVAE50cj9zAAAoahVzAABYNAAAAGFubm90YXRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucylq5mwAAFUATnRyQHMAAGVoMV1yQXMAAChqKnIAAFggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IgKG1vZHVsZSlYHgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYlUATnRyQnMAAGFoMl1yQ3MAACgoaqlwAABYIgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwgKG1vZHVsZSlYIAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsVQBOdHJEcwAAKGqpcAAAWDgAAABBcmd1bWVudFBsYWNlaG9sZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsKWrZawAAVQBOdHJFcwAAKGqpcAAAWEAAAAByZW1vdmVfb2JqZWN0c19mcm9tX2FyZ3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwpakptAABVAE50ckZzAAAoaqlwAABYPQAAAGluc2VydF92YWx1ZXNfaW5fYXJncygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbClqyG4AAFUATnRyR3MAAChqqXAAAFg8AAAAcnVuX3VzaW5nX3RocmVhZHBvb2woKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwpahprAABVAE50ckhzAABlaDNdcklzAAAoKGqpcAAAWCUAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyIChtb2R1bGUpWCMAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlclUATnRySnMAAChqqXAAAFg2AAAAc2F2ZV9tb2R1bGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIpav5sAABVAE50cktzAAAoaqlwAABYPwAAAG5ld19zYXZlX21vZHVsZV9kaWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKWodawAAVQBOdHJMcwAAKGqpcAAAWDAAAABkdW1wcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcilqAHAAAFUATnRyTXMAAChqqXAAAFgwAAAAbG9hZHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIparRvAABVAE50ck5zAAAoaqlwAABYNwAAAGR1bXBfc2Vzc2lvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcilq1GoAAFUATnRyT3MAAChqqXAAAFg3AAAAbG9hZF9zZXNzaW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKWoVbwAAVQBOdHJQcwAAZWg0XXJRcwAAKGrtcQAAWBwAAABhcGFjaGVfYmVhbS5ydW5uZXJzIChtb2R1bGUpWBoAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVyc1UATnRyUnMAAGFoNV1yU3MAACgoahVzAABYJgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXNVAE50clRzAAAoahVzAABYMwAAAHBvcF9vbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWowbAAAVQBOdHJVcwAAKGoVcwAAWDMAAABwb3BfdHdvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylqs20AAFUATnRyVnMAAChqFXMAAFg1AAAAcG9wX3RocmVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqJm8AAFUATnRyV3MAAChqFXMAAFg2AAAAcHVzaF92YWx1ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpasRtAABVAE50clhzAAAoahVzAABYLwAAAG5vcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamduAABVAE50cllzAAAoahVzAABYMwAAAHBvcF90b3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoDbAAAVQBOdHJacwAAKGoVcwAAWDEAAAByb3RfbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpahFsAABVAE50cltzAAAoahVzAABYMwAAAHJvdF90d28oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWr8bAAAVQBOdHJccwAAKGoVcwAAWDUAAAByb3RfdGhyZWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpSbAAAVQBOdHJdcwAAKGoVcwAAWDQAAAByb3RfZm91cigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpagdvAABVAE50cl5zAAAoahVzAABYMwAAAGR1cF90b3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoNbQAAVQBOdHJfcwAAKGoVcwAAWDEAAAB1bmFyeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaoZsAABVAE50cmBzAAAoahVzAABYOgAAAHVuYXJ5X3Bvc2l0aXZlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqlGwAAFUATnRyYXMAAChqFXMAAFg6AAAAdW5hcnlfbmVnYXRpdmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpUbwAAVQBOdHJicwAAKGoVcwAAWDgAAAB1bmFyeV9pbnZlcnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWokbQAAVQBOdHJjcwAAKGoVcwAAWDUAAAB1bmFyeV9ub3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpebQAAVQBOdHJkcwAAKGoVcwAAWDkAAAB1bmFyeV9jb252ZXJ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqgGsAAFUATnRyZXMAAChqFXMAAFg0AAAAZ2V0X2l0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoNcAAAVQBOdHJmcwAAKGoVcwAAWD8AAABzeW1tZXRyaWNfYmluYXJ5X29wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqBGwAAFUATnRyZ3MAAChqFXMAAFg4AAAAYmluYXJ5X3Bvd2VyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylqrm4AAFUATnRyaHMAAChqFXMAAFg5AAAAaW5wbGFjZV9wb3dlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpauhrAABVAE50cmlzAAAoahVzAABYOwAAAGJpbmFyeV9tdWx0aXBseSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamlsAABVAE50cmpzAAAoahVzAABYPAAAAGlucGxhY2VfbXVsdGlwbHkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqKbwAAVQBOdHJrcwAAKGoVcwAAWDoAAABpbnBsYWNlX2RpdmlkZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpahxuAABVAE50cmxzAAAoahVzAABYQAAAAGlucGxhY2VfZmxvb3JfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq324AAFUATnRybXMAAChqFXMAAFg+AAAAYmluYXJ5X3RydWVfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq72wAAFUATnRybnMAAChqFXMAAFg/AAAAaW5wbGFjZV90cnVlX2RpdmlkZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamNrAABVAE50cm9zAAAoahVzAABYOgAAAGlucGxhY2VfbW9kdWxvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqBHAAAFUATnRycHMAAChqFXMAAFg2AAAAYmluYXJ5X2FkZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaqVtAABVAE50cnFzAAAoahVzAABYNwAAAGlucGxhY2VfYWRkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqGG8AAFUATnRycnMAAChqFXMAAFg7AAAAYmluYXJ5X3N1YnRyYWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqeW0AAFUATnRyc3MAAChqFXMAAFg8AAAAaW5wbGFjZV9zdWJ0cmFjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpavlqAABVAE50cnRzAAAoahVzAABYOQAAAGJpbmFyeV9zdWJzY3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWraawAAVQBOdHJ1cwAAKGoVcwAAWDkAAABiaW5hcnlfbHNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqLG4AAFUATnRydnMAAChqFXMAAFg6AAAAaW5wbGFjZV9sc2hpZnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpPbgAAVQBOdHJ3cwAAKGoVcwAAWDkAAABiaW5hcnlfcnNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqdmwAAFUATnRyeHMAAChqFXMAAFg6AAAAaW5wbGFjZV9yc2hpZnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpFbgAAVQBOdHJ5cwAAKGoVcwAAWDYAAABiaW5hcnlfYW5kKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqX20AAFUATnRyenMAAChqFXMAAFg3AAAAaW5wbGFjZV9hbmQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpQbgAAVQBOdHJ7cwAAKGoVcwAAWDYAAABiaW5hcnlfeG9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqQG8AAFUATnRyfHMAAChqFXMAAFg3AAAAaW5wbGFjZV94b3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrTbAAAVQBOdHJ9cwAAKGoVcwAAWDUAAABiaW5hcnlfb3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqAbQAAVQBOdHJ+cwAAKGoVcwAAWDYAAABpbnBhbGNlX29yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq8WwAAFUATnRyf3MAAChqFXMAAFgzAAAAc2xpY2VfMCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpau9qAABVAE50coBzAAAoahVzAABYMwAAAHNsaWNlXzEoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrwagAAVQBOdHKBcwAAKGoVcwAAWDMAAABzbGljZV8yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq8WoAAFUATnRygnMAAChqFXMAAFgzAAAAc2xpY2VfMygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpavJqAABVAE50coNzAAAoahVzAABYOQAAAHN0b3JlX3NsaWNlXzAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqfawAAVQBOdHKEcwAAKGoVcwAAWDkAAABzdG9yZV9zbGljZV8xKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqoGsAAFUATnRyhXMAAChqFXMAAFg5AAAAc3RvcmVfc2xpY2VfMigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaqFrAABVAE50coZzAAAoahVzAABYOQAAAHN0b3JlX3NsaWNlXzMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqiawAAVQBOdHKHcwAAKGoVcwAAWDoAAABkZWxldGVfc2xpY2VfMCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpapluAABVAE50cohzAAAoahVzAABYOgAAAGRlbGV0ZV9zbGljZV8xKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqmG4AAFUATnRyiXMAAChqFXMAAFg6AAAAZGVsZXRlX3NsaWNlXzIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqXbgAAVQBOdHKKcwAAKGoVcwAAWDoAAABkZWxldGVfc2xpY2VfMygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpapZuAABVAE50cotzAAAoahVzAABYOAAAAHN0b3JlX3N1YnNjcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpapNtAABVAE50coxzAAAoahVzAABYOQAAAGJpbmFyeV9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrhbQAAVQBOdHKNcwAAKGoVcwAAWD8AAABiaW5hcnlfZmxvb3JfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqP24AAFUATnRyjnMAAChqFXMAAFg5AAAAYmluYXJ5X21vZHVsbygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaphrAABVAE50co9zAAAoahVzAABYNgAAAHByaW50X2l0ZW0oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWovbQAAVQBOdHKQcwAAKGoVcwAAWDkAAABwcmludF9uZXdsaW5lKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqaG4AAFUATnRykXMAAChqFXMAAFg3AAAAbGlzdF9hcHBlbmQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWorbwAAVQBOdHKScwAAKGoVcwAAWDcAAABsb2FkX2xvY2FscygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaidrAABVAE50cpNzAAAoahVzAABYNQAAAGV4ZWNfc3RtdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpalBvAABVAE50cpRzAAAoahVzAABYNwAAAGJ1aWxkX2NsYXNzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqjW0AAFUATnRylXMAAChqFXMAAFg7AAAAdW5wYWNrX3NlcXVlbmNlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqIGwAAFUATnRylnMAAChqFXMAAFg0AAAAZHVwX3RvcHgoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWp9bgAAVQBOdHKXcwAAKGoVcwAAWDYAAABzdG9yZV9hdHRyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqtmwAAFUATnRymHMAAChqFXMAAFg3AAAAZGVsZXRlX2F0dHIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqDbgAAVQBOdHKZcwAAKGoVcwAAWDgAAABzdG9yZV9nbG9iYWwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqVbQAAVQBOdHKacwAAKGoVcwAAWDkAAABkZWxldGVfZ2xvYmFsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqHWwAAFUATnRym3MAAChqFXMAAFg2AAAAbG9hZF9jb25zdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaj1rAABVAE50cpxzAAAoahVzAABYNQAAAGxvYWRfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpauBsAABVAE50cp1zAAAoahVzAABYNwAAAGJ1aWxkX3R1cGxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqM20AAFUATnRynnMAAChqFXMAAFg2AAAAYnVpbGRfbGlzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpavRrAABVAE50cp9zAAAoahVzAABYNQAAAGJ1aWxkX21hcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpahpwAABVAE50cqBzAAAoahVzAABYNQAAAGxvYWRfYXR0cigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpatRrAABVAE50cqFzAAAoahVzAABYNgAAAGNvbXBhcmVfb3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqabgAAVQBOdHKicwAAKGoVcwAAWDcAAABpbXBvcnRfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpajZuAABVAE50cqNzAAAoahVzAABYNwAAAGltcG9ydF9mcm9tKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq8WsAAFUATnRypHMAAChqFXMAAFg3AAAAbG9hZF9nbG9iYWwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWr0bwAAVQBOdHKlcwAAKGoVcwAAWDUAAABzdG9yZV9tYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWo6bQAAVQBOdHKmcwAAKGoVcwAAWDUAAABsb2FkX2Zhc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWr2awAAVQBOdHKncwAAKGoVcwAAWDYAAABzdG9yZV9mYXN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq7GoAAFUATnRyqHMAAChqFXMAAFg3AAAAZGVsZXRlX2Zhc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoIbQAAVQBOdHKpcwAAKGoVcwAAWDgAAABsb2FkX2Nsb3N1cmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqXawAAVQBOdHKqcwAAKGoVcwAAWDYAAABsb2FkX2RlcmVmKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqT20AAFUATnRyq3MAAChqFXMAAFg5AAAAY2FsbF9mdW5jdGlvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpasxtAABVAE50cqxzAAAoahVzAABYOQAAAG1ha2VfZnVuY3Rpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrbawAAVQBOdHKtcwAAKGoVcwAAWDgAAABtYWtlX2Nsb3N1cmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrZbwAAVQBOdHKucwAAKGoVcwAAWDcAAABidWlsZF9zbGljZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpauRrAABVAE50cq9zAAAoahVzAABYPQAAAGNhbGxfZnVuY3Rpb25fdmFyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqG20AAFUATnRysHMAAChqFXMAAFg8AAAAY2FsbF9mdW5jdGlvbl9rdygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpautqAABVAE50crFzAAAoahVzAABYQAAAAGNhbGxfZnVuY3Rpb25fdmFyX3drKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq+mwAAFUATnRysnMAAGVoNl1ys3MAACgoalJxAABYJQAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsgKG1vZHVsZSlYIwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rVQBOdHK0cwAAKGpScQAAWDUAAABGaWxlQmFzZWRTaW5rIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rKWowbQAAVQBOdHK1cwAAKGpScQAAWEIAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClqAnAAAFUATnRytnMAAChqUnEAAFg6AAAAb3BlbigpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWoUbwAAVQBOdHK3cwAAKGpScQAAWEIAAAB3cml0ZV9yZWNvcmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClq2m0AAFUATnRyuHMAAChqUnEAAFhKAAAAd3JpdGVfZW5jb2RlZF9yZWNvcmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClquGwAAFUATnRyuXMAAChqUnEAAFg7AAAAY2xvc2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClq928AAFUATnRyunMAAChqUnEAAFhGAAAAaW5pdGlhbGl6ZV93cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWo+awAAVQBOdHK7cwAAKGpScQAAWEEAAABvcGVuX3dyaXRlcigpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWqYbAAAVQBOdHK8cwAAKGpScQAAWEQAAABmaW5hbGl6ZV93cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWrNbQAAVQBOdHK9cwAAZWg3XXK+cwAAKChqfHEAAFhGAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvciAobW9kdWxlKVhEAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3JVAE50cr9zAAAoanxxAABYaAAAAENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IpamVvAABVAE50csBzAAAoanxxAABYeAAAAHZpc2l0X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLkNvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IgbWV0aG9kKWp9awAAVQBOdHLBcwAAZWg4XXLCcwAAKChqKnIAAFgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlciAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXJVAE50csNzAAAoaipyAABYOwAAAERvY2tlclJQQ01hbmFnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXIpakttAABVAE50csRzAABlaDldcsVzAAAoKGpScQAAWCcAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UgKG1vZHVsZSlYJQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2VVAE50csZzAAAoalJxAABYOQAAAEZpbGVCYXNlZFNvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlKWr7bQAAVQBOdHLHcwAAKGpScQAAWFYAAABNSU5fTlVNQkVSX09GX0ZJTEVTX1RPX1NUQVQgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgYXR0cmlidXRlKWpibQAAVQBOdHLIcwAAKGpScQAAWFgAAABNSU5fRlJBQ1RJT05fT0ZfRklMRVNfVE9fU1RBVCAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUpamxsAABVAE50cslzAAAoalJxAABYRgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqzW8AAFUATnRyynMAAChqUnEAAFhDAAAAb3Blbl9maWxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgbWV0aG9kKWppbQAAVQBOdHLLcwAAKGpScQAAWD8AAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqy24AAFUATnRyzHMAAChqUnEAAFhHAAAAZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqq28AAFUATnRyzXMAAChqUnEAAFg+AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClq/msAAFUATnRyznMAAChqUnEAAFhLAAAAZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBtZXRob2QpasttAABVAE50cs9zAAAoalJxAABYRgAAAHJlYWRfcmVjb3JkcygpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqUW0AAFUATnRy0HMAAChqUnEAAFhFAAAAc3BsaXR0YWJsZSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUpagRrAABVAE50ctFzAABlaDpdctJzAAAoKGpScQAAWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkgKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlVAE50ctNzAAAoalJxAABYOAAAAFRhYmxlUm93SnNvbkNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkpanxtAABVAE50ctRzAAAoalJxAABYPwAAAGVuY29kZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuVGFibGVSb3dKc29uQ29kZXIgbWV0aG9kKWreawAAVQBOdHLVcwAAKGpScQAAWD8AAABkZWNvZGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlRhYmxlUm93SnNvbkNvZGVyIG1ldGhvZClqemsAAFUATnRy1nMAAChqUnEAAFg6AAAAQmlnUXVlcnlEaXNwb3NpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5KWrjbwAAVQBOdHLXcwAAKGpScQAAWEgAAABDUkVBVEVfTkVWRVIgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlqwW8AAFUATnRy2HMAAChqUnEAAFhMAAAAQ1JFQVRFX0lGX05FRURFRCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKWo6awAAVQBOdHLZcwAAKGpScQAAWEoAAABXUklURV9UUlVOQ0FURSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKWpXbAAAVQBOdHLacwAAKGpScQAAWEgAAABXUklURV9BUFBFTkQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlq02oAAFUATnRy23MAAChqUnEAAFhHAAAAV1JJVEVfRU1QVFkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlq5GoAAFUATnRy3HMAAChqUnEAAFhRAAAAdmFsaWRhdGVfY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIHN0YXRpYyBtZXRob2Qpak9sAABVAE50ct1zAAAoalJxAABYUAAAAHZhbGlkYXRlX3dyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIHN0YXRpYyBtZXRob2QpagprAABVAE50ct5zAAAoalJxAABYNQAAAEJpZ1F1ZXJ5U291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkpaq1rAABVAE50ct9zAAAoalJxAABYQgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UgbWV0aG9kKWqobQAAVQBOdHLgcwAAKGpScQAAWD0AAABmb3JtYXQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZSBhdHRyaWJ1dGUpahJrAABVAE50cuFzAAAoalJxAABYPAAAAHJlYWRlcigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UgbWV0aG9kKWq/bgAAVQBOdHLicwAAKGpScQAAWDMAAABCaWdRdWVyeVNpbmsgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSlq9m4AAFUATnRy43MAAChqUnEAAFhAAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgbWV0aG9kKWqbbAAAVQBOdHLkcwAAKGpScQAAWEIAAABzY2hlbWFfYXNfanNvbigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rIG1ldGhvZClqJGsAAFUATnRy5XMAAChqUnEAAFg7AAAAZm9ybWF0IChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rIGF0dHJpYnV0ZSlqIG4AAFUATnRy5nMAAChqUnEAAFg6AAAAd3JpdGVyKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgbWV0aG9kKWp0bAAAVQBOdHLncwAAKGpScQAAWDYAAABXcml0ZVRvQmlnUXVlcnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSlqb2wAAFUATnRy6HMAAChqUnEAAFhaAAAAZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZygpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5IHN0YXRpYyBtZXRob2Qpat1tAABVAE50culzAAAoalJxAABYUgAAAHRhYmxlX3NjaGVtYV90b19kaWN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgc3RhdGljIG1ldGhvZClqbm8AAFUATnRy6nMAAChqUnEAAFhTAAAAZ2V0X2RpY3RfdGFibGVfc2NoZW1hKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgc3RhdGljIG1ldGhvZClqgW0AAFUATnRy63MAAChqUnEAAFg9AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgbWV0aG9kKWqNbwAAVQBOdHLscwAAKGpScQAAWEMAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSBtZXRob2QpanBuAABVAE50cu1zAABlaDtdcu5zAAAoKGp8cQAAWCgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsIChtb2R1bGUpWCYAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbFUATnRy73MAAChqfHEAAFg6AAAAVHJhbnNmb3JtUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsKWphbAAAVQBOdHLwcwAAKGp8cQAAWDYAAABUaW1lckZpcmluZyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbClqzG4AAFUATnRy8XMAAChqfHEAAFg4AAAAS2V5ZWRXb3JrSXRlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbClqBG8AAFUATnRy8nMAAGVoPF1y83MAACgoaipyAABYKAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0gKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtVQBOdHL0cwAAKGoqcgAAWDAAAABFdmVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSlqUWwAAFUATnRy9XMAAChqKnIAAFg3AAAARWxlbWVudEV2ZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKWrCbAAAVQBOdHL2cwAAKGoqcgAAWDkAAABXYXRlcm1hcmtFdmVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSlqfm4AAFUATnRy93MAAChqKnIAAFg+AAAAUHJvY2Vzc2luZ1RpbWVFdmVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSlqoG0AAFUATnRy+HMAAChqKnIAAFg1AAAAVGVzdFN0cmVhbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSlqfG4AAFUATnRy+XMAAChqKnIAAFhDAAAAZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0gbWV0aG9kKWrVawAAVQBOdHL6cwAAKGoqcgAAWDwAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZClqF2wAAFUATnRy+3MAAChqKnIAAFhCAAAAYWRkX2VsZW1lbnRzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2QpaqhuAABVAE50cvxzAAAoaipyAABYSgAAAGFkdmFuY2Vfd2F0ZXJtYXJrX3RvKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2QpanBvAABVAE50cv1zAAAoaipyAABYUwAAAGFkdmFuY2Vfd2F0ZXJtYXJrX3RvX2luZmluaXR5KCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2QpaglsAABVAE50cv5zAAAoaipyAABYTQAAAGFkdmFuY2VfcHJvY2Vzc2luZ190aW1lKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2QpahZuAABVAE50cv9zAABlaD1dcgB0AAAoKGoVcwAAWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrIChtb2R1bGUpWCYAAABtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja1UATnRyAXQAAChqFXMAAFg+AAAAQWJzdHJhY3REb0ZuV3JhcHBlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjaylqsmsAAFUATnRyAnQAAChqFXMAAFhGAAAAd3JhcHBlcigpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKWqEawAAVQBOdHIDdAAAKGoVcwAAWEsAAABzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyIG1ldGhvZClqamsAAFUATnRyBHQAAChqFXMAAFhGAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKWqfbAAAVQBOdHIFdAAAKGoVcwAAWEwAAABmaW5pc2hfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlciBtZXRob2Qpan9uAABVAE50cgZ0AAAoahVzAABYUQAAAGlzX3Byb2Nlc3NfYm91bmRlZCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKWqjbwAAVQBOdHIHdAAAKGoVcwAAWEEAAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrKWqkbgAAVQBOdHIIdAAAKGoVcwAAWEkAAAB3cmFwcGVyKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suT3V0cHV0Q2hlY2tXcmFwcGVyRG9GbiBtZXRob2QpaiJsAABVAE50cgl0AAAoahVzAABYPwAAAFR5cGVDaGVja1dyYXBwZXJEb0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrKWovbwAAVQBOdHIKdAAAKGoVcwAAWEcAAAB3cmFwcGVyKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrV3JhcHBlckRvRm4gbWV0aG9kKWrgagAAVQBOdHILdAAAKGoVcwAAWEcAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrV3JhcHBlckRvRm4gbWV0aG9kKWoYbgAAVQBOdHIMdAAAZWg+XXINdAAAKChq+HAAAFgpAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc1UATnRyDnQAAChq+HAAAFg/AAAAcmVhZF9mcm9tX3NvdXJjZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMpai5uAABVAE50cg90AAAoavhwAABYVAAAAGFzc2VydF9zb3VyY2VzX2VxdWFsX3JlZmVyZW5jZV9zb3VyY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWqZawAAVQBOdHIQdAAAKGr4cAAAWE0AAABhc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWo1bQAAVQBOdHIRdAAAKGr4cAAAWFAAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWombQAAVQBOdHISdAAAKGr4cAAAWF8AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWq1bgAAVQBOdHITdAAAKGr4cAAAWE0AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZmFpbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWrWbgAAVQBOdHIUdAAAKGr4cAAAWE4AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmluYXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscylqnG4AAFUATnRyFXQAAChq+HAAAFhSAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWp1bgAAVQBOdHIWdAAAZWg/XXIXdAAAKChqUnEAAFgeAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvIChtb2R1bGUpWBwAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uYXZyb2lvVQBOdHIYdAAAKGpScQAAWC0AAABSZWFkRnJvbUF2cm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF2cm9pbylqF3AAAFUATnRyGXQAAChqUnEAAFg0AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkRnJvbUF2cm8gbWV0aG9kKWrwawAAVQBOdHIadAAAKGpScQAAWDoAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRGcm9tQXZybyBtZXRob2Qpah9vAABVAE50cht0AAAoalJxAABYMAAAAFJlYWRBbGxGcm9tQXZybyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXZyb2lvKWqTbwAAVQBOdHIcdAAAKGpScQAAWE0AAABERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkQWxsRnJvbUF2cm8gYXR0cmlidXRlKWrqbwAAVQBOdHIddAAAKGpScQAAWDcAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZybyBtZXRob2Qpal1vAABVAE50ch50AAAoalJxAABYLAAAAFdyaXRlVG9BdnJvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hdnJvaW8pahhwAABVAE50ch90AAAoalJxAABYMwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uV3JpdGVUb0F2cm8gbWV0aG9kKWqOawAAVQBOdHIgdAAAKGpScQAAWDkAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLldyaXRlVG9BdnJvIG1ldGhvZClqsm8AAFUATnRyIXQAAGVoQF1yInQAAChqqXAAAFgbAAAAYXBhY2hlX2JlYW0uY29kZXJzIChtb2R1bGUpWBkAAABtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzVQBOdHIjdAAAYWhBXXIkdAAAKChq7XEAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkgKG1vZHVsZSlYMAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeVUATnRyJXQAAChq7XEAAFhCAAAAQnVuZGxlRmFjdG9yeSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkpavJtAABVAE50ciZ0AAAoau1xAABYUAAAAGNyZWF0ZV9idW5kbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeSBtZXRob2Qpah1tAABVAE50cid0AAAoau1xAABYYAAAAGNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5LkJ1bmRsZUZhY3RvcnkgbWV0aG9kKWr9agAAVQBOdHIodAAAZWhCXXIpdAAAKChqZ3EAAFgmAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMgKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vyc1UATnRyKnQAAChqZ3EAAFg7AAAAT2Zmc2V0UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycylqEW8AAFUATnRyK3QAAChqZ3EAAFhMAAAAT0ZGU0VUX0lORklOSVRZIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgYXR0cmlidXRlKWo0bAAAVQBOdHIsdAAAKGpncQAAWEoAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWqCbQAAVQBOdHItdAAAKGpncQAAWEkAAABzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QpaplvAABVAE50ci50AAAoamdxAABYTgAAAGxhc3RfcmVjb3JkX3N0YXJ0IChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgYXR0cmlidXRlKWoZbQAAVQBOdHIvdAAAKGpncQAAWEUAAAB0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZClqwG8AAFUATnRyMHQAAChqZ3EAAFhQAAAAc2V0X2N1cnJlbnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZClqaWsAAFUATnRyMXQAAChqZ3EAAFhFAAAAdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QpasRrAABVAE50cjJ0AAAoamdxAABYTQAAAGZyYWN0aW9uX2NvbnN1bWVkKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QpakZuAABVAE50cjN0AAAoamdxAABYUAAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2Qpao5tAABVAE50cjR0AAAoamdxAABYSAAAAHNwbGl0X3BvaW50cygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpEbAAAVQBOdHI1dAAAKGpncQAAWF8AAABzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjaygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrVagAAVQBOdHI2dAAAKGpncQAAWEQAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzKWraagAAVQBOdHI3dAAAKGpncQAAWE8AAABVTlNUQVJURUQgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBhdHRyaWJ1dGUpaqRtAABVAE50cjh0AAAoamdxAABYUwAAAHN0YXJ0X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBtZXRob2QpauptAABVAE50cjl0AAAoamdxAABYUgAAAHN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZClq/moAAFUATnRyOnQAAChqZ3EAAFhOAAAAdHJ5X2NsYWltKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBtZXRob2QpaiFuAABVAE50cjt0AAAoamdxAABYWQAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBtZXRob2QpamBvAABVAE50cjx0AAAoamdxAABYTgAAAHRyeV9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWrzagAAVQBOdHI9dAAAKGpncQAAWFYAAABmcmFjdGlvbl9jb25zdW1lZCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWoFcAAAVQBOdHI+dAAAKGpncQAAWFkAAABwb3NpdGlvbl90b19mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWoObwAAVQBOdHI/dAAAKGpncQAAWFkAAABmcmFjdGlvbl90b19wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWoxbgAAVQBOdHJAdAAAKGpncQAAWEEAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzKWr8bwAAVQBOdHJBdAAAKGpncQAAWFAAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWpGbAAAVQBOdHJCdAAAKGpncQAAWE8AAABzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2Qpak1tAABVAE50ckN0AAAoamdxAABYVgAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QpaiRsAABVAE50ckR0AAAoamdxAABYSwAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWqnbwAAVQBOdHJFdAAAKGpncQAAWEsAAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZClqOm4AAFUATnRyRnQAAChqZ3EAAFhWAAAAc2V0X2N1cnJlbnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZClqj2sAAFUATnRyR3QAAChqZ3EAAFhTAAAAZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZClq7WsAAFUATnRySHQAAChqZ3EAAFhOAAAAc3BsaXRfcG9pbnRzKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QpahJsAABVAE50ckl0AAAoamdxAABYZQAAAHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QpaoxtAABVAE50ckp0AAAoamdxAABYRQAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzKWo3awAAVQBOdHJLdAAAKGpncQAAWGAAAABmcmFjdGlvbl90b19wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5MZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyIGNsYXNzIG1ldGhvZClqVW4AAFUATnRyTHQAAChqZ3EAAFhgAAAAcG9zaXRpb25fdG9fZnJhY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlciBjbGFzcyBtZXRob2Qpam9vAABVAE50ck10AABlaENdck50AAAoKGqmcAAAWEAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjIChtb2R1bGUpWD4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY1UATnRyT3QAAChqpnAAAFhXAAAAUHJvdmlzaW9uU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMpalxvAABVAE50clB0AAAoaqZwAABYWwAAAFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYylq0m0AAFUATnRyUXQAAChqpnAAAFhsAAAAR2V0UHJvdmlzaW9uSW5mbygpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLlByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciBtZXRob2QpaqZsAABVAE50clJ0AAAoaqZwAABYbAAAAGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjKWqebgAAVQBOdHJTdAAAZWhEXXJUdAAAKGpScQAAWBsAAABhcGFjaGVfYmVhbS5pby5nY3AgKG1vZHVsZSlYGQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3BVAE50clV0AABhaEVdclZ0AAAoKGoqcgAAWCMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciAobW9kdWxlKVghAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyVQBOdHJXdAAAKGoqcgAAWDQAAABQaXBlbGluZVJ1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIpaidsAABVAE50clh0AAAoaipyAABYOAAAAHJ1bigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QpasprAABVAE50cll0AAAoaipyAABYQQAAAHJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QpagZvAABVAE50clp0AAAoaipyAABYOgAAAGFwcGx5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZClqxGwAAFUATnRyW3QAAChqKnIAAFhFAAAAYXBwbHlfUFRyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QpaulqAABVAE50clx0AAAoaipyAABYQgAAAHJ1bl90cmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIgbWV0aG9kKWqDbAAAVQBOdHJddAAAKGoqcgAAWDMAAABQaXBlbGluZVN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcilql20AAFUATnRyXnQAAChqKnIAAFg8AAAAVU5LTk9XTiAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpavhuAABVAE50cl90AAAoaipyAABYPQAAAFNUQVJUSU5HIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqJW4AAFUATnRyYHQAAChqKnIAAFg8AAAAU1RPUFBFRCAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpalpsAABVAE50cmF0AAAoaipyAABYPAAAAFJVTk5JTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWp1bQAAVQBOdHJidAAAKGoqcgAAWDkAAABET05FIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqtG0AAFUATnRyY3QAAChqKnIAAFg7AAAARkFJTEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqZm4AAFUATnRyZHQAAChqKnIAAFg+AAAAQ0FOQ0VMTEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqgm4AAFUATnRyZXQAAChqKnIAAFg8AAAAVVBEQVRFRCAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpap1sAABVAE50cmZ0AAAoaipyAABYPQAAAERSQUlOSU5HIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqhGwAAFUATnRyZ3QAAChqKnIAAFg8AAAARFJBSU5FRCAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpamxuAABVAE50cmh0AAAoaipyAABYPAAAAFBFTkRJTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWoibwAAVQBOdHJpdAAAKGoqcgAAWD8AAABDQU5DRUxMSU5HIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlq2WoAAFUATnRyanQAAChqKnIAAFg0AAAAUGlwZWxpbmVSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKWpOawAAVQBOdHJrdAAAKGoqcgAAWDsAAABzdGF0ZSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgYXR0cmlidXRlKWoDbQAAVQBOdHJsdAAAKGoqcgAAWEYAAAB3YWl0X3VudGlsX2ZpbmlzaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QpavFtAABVAE50cm10AAAoaipyAABYOwAAAGNhbmNlbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QpaiVvAABVAE50cm50AAAoaipyAABYPAAAAG1ldHJpY3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKWqUbgAAVQBOdHJvdAAAKGoqcgAAWEYAAABhZ2dyZWdhdGVkX3ZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QpaulsAABVAE50cnB0AABlaEZdcnF0AAAoKGpncQAAWCcAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0gKG1vZHVsZSlYJQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW1VAE50cnJ0AAAoamdxAABYOQAAAExvY2FsRmlsZVN5c3RlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtKWoBcAAAVQBOdHJzdAAAKGpncQAAWEYAAABzY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QpaqpuAABVAE50cnR0AAAoamdxAABYPgAAAGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpamJuAABVAE50cnV0AAAoamdxAABYPwAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWqTawAAVQBOdHJ2dAAAKGpncQAAWEAAAABta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpagBvAABVAE50cnd0AAAoamdxAABYPwAAAG1hdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWqRbQAAVQBOdHJ4dAAAKGpncQAAWEAAAABjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpanNvAABVAE50cnl0AAAoamdxAABYPgAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpatdsAABVAE50cnp0AAAoamdxAABYPgAAAGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpanRtAABVAE50cnt0AAAoamdxAABYQAAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZClq824AAFUATnRyfHQAAChqZ3EAAFhAAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWo0bQAAVQBOdHJ9dAAAKGpncQAAWEAAAABkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2Qpav1uAABVAE50cn50AABlaEddcn90AAAoKGoVcwAAWCMAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlciAobW9kdWxlKVghAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyVQBOdHKAdAAAKGoVcwAAWC0AAABQcm9maWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcilq32wAAFUATnRygXQAAChqFXMAAFg1AAAAU09SVEJZIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlIGF0dHJpYnV0ZSlqSGwAAFUATnRygnQAAChqFXMAAFg0AAAATWVtb3J5UmVwb3J0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyKWqEbQAAVQBOdHKDdAAAKGoVcwAAWDoAAABzdGFydCgpIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlciBtZXRob2Qpah1uAABVAE50coR0AAAoahVzAABYOQAAAHN0b3AoKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIgbWV0aG9kKWpWbgAAVQBOdHKFdAAAKGoVcwAAWEAAAAByZXBvcnRfb25jZSgpIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlciBtZXRob2QpaoRvAABVAE50coZ0AABlaEhdcod0AAAoKGoVcwAAWCQAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMgKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXNVAE50coh0AAAoahVzAABYLgAAAGNhbGwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3NlcylqQW0AAFUATnRyiXQAAChqFXMAAFg0AAAAY2hlY2tfY2FsbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzKWofbAAAVQBOdHKKdAAAKGoVcwAAWDYAAABjaGVja19vdXRwdXQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3NlcylqRWsAAFUATnRyi3QAAChqFXMAAFgvAAAAUG9wZW4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3NlcylqFG0AAFUATnRyjHQAAGVoSV1yjXQAACgoalJxAABYIwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIChtb2R1bGUpWCEAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXNVAE50co50AAAoalJxAABYMQAAAEZpbGVTeXN0ZW1zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcylqq24AAFUATnRyj3QAAChqUnEAAFhFAAAAVVJJX1NDSEVNQV9QQVRURVJOIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBhdHRyaWJ1dGUpajZrAABVAE50cpB0AAAoalJxAABYQwAAAHNldF9vcHRpb25zKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIGNsYXNzIG1ldGhvZClqKG0AAFUATnRykXQAAChqUnEAAFhDAAAAZ2V0X3NjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWpzawAAVQBOdHKSdAAAKGpScQAAWEcAAABnZXRfZmlsZXN5c3RlbSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWoxbwAAVQBOdHKTdAAAKGpScQAAWD0AAABqb2luKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpakJtAABVAE50cpR0AAAoalJxAABYPgAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2Qpao9sAABVAE50cpV0AAAoalJxAABYPwAAAG1rZGlycygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWoIawAAVQBOdHKWdAAAKGpScQAAWD4AAABtYXRjaCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWqSbwAAVQBOdHKXdAAAKGpScQAAWD8AAABjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqNm8AAFUATnRymHQAAChqUnEAAFg9AAAAb3BlbigpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWqIbAAAVQBOdHKZdAAAKGpScQAAWD0AAABjb3B5KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpasNvAABVAE50cpp0AAAoalJxAABYPwAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWqVawAAVQBOdHKbdAAAKGpScQAAWD8AAABleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqoGwAAFUATnRynHQAAChqUnEAAFg/AAAAZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpahpuAABVAE50cp10AAAoalJxAABYRwAAAGdldF9jaHVua19zaXplKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpagltAABVAE50cp50AABlaEpdcp90AAAoKGrtcQAAWEAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlIChtb2R1bGUpWD4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZVUATnRyoHQAAChq7XEAAFhSAAAAU3RyZWFtaW5nQ3JlYXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlKWpAawAAVQBOdHKhdAAAKGrtcQAAWGQAAABTdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUpag5rAABVAE50cqJ0AAAoau1xAABYbAAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm4gbWV0aG9kKWo5bAAAVQBOdHKjdAAAKGrtcQAAWFoAAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZSlqWG8AAFUATnRypHQAAChq7XEAAFhhAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UgbWV0aG9kKWrWbQAAVQBOdHKldAAAKGrtcQAAWGgAAABnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UgbWV0aG9kKWpjbAAAVQBOdHKmdAAAKGrtcQAAWGwAAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlIG1ldGhvZClqmmsAAFUATnRyp3QAAChq7XEAAFhZAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlIG1ldGhvZClqVG4AAFUATnRyqHQAAGVoS11yqXQAACgoavhwAABYJwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZVUATnRyqnQAAChq+HAAAFg0AAAATWV0cmljTmFtZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKWrnbwAAVQBOdHKrdAAAKGr4cAAAWDAAAABNZXRyaWMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSlqTGsAAFUATnRyrHQAAChq+HAAAFgxAAAAQ291bnRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKWo6bwAAVQBOdHKtdAAAKGr4cAAAWDUAAABpbmMoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLkNvdW50ZXIgbWV0aG9kKWrTawAAVQBOdHKudAAAKGr4cAAAWDUAAABkZWMoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLkNvdW50ZXIgbWV0aG9kKWrqbAAAVQBOdHKvdAAAKGr4cAAAWDYAAABEaXN0cmlidXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSlqZ28AAFUATnRysHQAAChq+HAAAFg9AAAAdXBkYXRlKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5EaXN0cmlidXRpb24gbWV0aG9kKWo4bgAAVQBOdHKxdAAAZWhMXXKydAAAKChqFXMAAFgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc1UATnRys3QAAChqFXMAAFg5AAAAV2l0aFR5cGVIaW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMpalBtAABVAE50crR0AAAoahVzAABYSAAAAGdldF90eXBlX2hpbnRzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMgbWV0aG9kKWp2bQAAVQBOdHK1dAAAKGoVcwAAWEwAAABkZWZhdWx0X3R5cGVfaGludHMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cyBtZXRob2QpavtuAABVAE50crZ0AAAoahVzAABYSgAAAHdpdGhfaW5wdXRfdHlwZXMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cyBtZXRob2QpaltuAABVAE50crd0AAAoahVzAABYSwAAAHdpdGhfb3V0cHV0X3R5cGVzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMgbWV0aG9kKWpjbgAAVQBOdHK4dAAAKGoVcwAAalECAABqym4AAFUATnRyuXQAAChqFXMAAFg/AAAAd2l0aF9pbnB1dF90eXBlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMpajttAABVAE50crp0AAAoahVzAABYQAAAAHdpdGhfb3V0cHV0X3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycylqIG8AAFUATnRyu3QAAGVoTV1yvHQAACgoamhwAABYJwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscyAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc1UATnRyvXQAAChqaHAAAFgxAAAAVGVtcERpciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKWqObgAAVQBOdHK+dAAAKGpocAAAWDoAAABnZXRfcGF0aCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpciBtZXRob2QparZrAABVAE50cr90AAAoamhwAABYQgAAAGNyZWF0ZV90ZW1wX2ZpbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlRlbXBEaXIgbWV0aG9kKWqzbAAAVQBOdHLAdAAAKGpocAAAWDkAAABjb21wdXRlX2hhc2goKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylqd20AAFUATnRywXQAAChqaHAAAFg4AAAAcGF0Y2hfcmV0cnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylqQ2sAAFUATnRywnQAAGVoTl1yw3QAACgoamdxAABYNwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlVQBOdHLEdAAAKGpncQAAWE0AAABjcmVhdGVfcnVuX3F1ZXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlKWrbbQAAVQBOdHLFdAAAKGpncQAAWEoAAABjcmVhdGVfY29tbWl0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlKWqRbAAAVQBOdHLGdAAAKGpncQAAWEwAAABjcmVhdGVfcmVzcG9uc2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUpauRvAABVAE50csd0AAAoamdxAABYTAAAAGNyZWF0ZV9lbnRpdGllcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZSlqEGsAAFUATnRyyHQAAGVoT11yyXQAAChqT3EAAFgcAAAAYXBhY2hlX2JlYW0udmVyc2lvbiAobW9kdWxlKVgaAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnZlcnNpb25VAE50csp0AABhaFBdcst0AAAoKGrtcQAAWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzIChtb2R1bGUpWDgAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlc1UATnRyzHQAAChq7XEAAFhVAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzKWpHbgAAVQBOdHLNdAAAKGrtcQAAWGEAAABnZXRfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QpanlrAABVAE50cs50AAAoau1xAABYcAAAAGlzX3N0cmVhbWluZ19jcmVhdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgc3RhdGljIG1ldGhvZClq0GsAAFUATnRyz3QAAChq7XEAAFhvAAAAZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QpahptAABVAE50ctB0AABlaFFdctF0AAAoKGpncQAAWDcAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVyIChtb2R1bGUpWDUAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlclUATnRy0nQAAChqZ3EAAFhHAAAAZ2V0X3NwbGl0cygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlcilqa20AAFUATnRy03QAAGVoUl1y1HQAACgoaqlwAABYGgAAAGFwYWNoZV9iZWFtLmVycm9yIChtb2R1bGUpWBgAAABtb2R1bGUtYXBhY2hlX2JlYW0uZXJyb3JVAE50ctV0AAAoaqlwAABYCQAAAEJlYW1FcnJvcmq5bAAAVQBOdHLWdAAAKGqpcAAAWA0AAABQaXBlbGluZUVycm9yattvAABVAE50ctd0AAAoaqlwAABYCwAAAFBWYWx1ZUVycm9yakxtAABVAE50cth0AAAoaqlwAABYCwAAAFJ1bm5lckVycm9yal1uAABVAE50ctl0AAAoaqlwAABYGQAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3Jql2wAAFUATnRy2nQAAChqqXAAAFgOAAAAU2lkZUlucHV0RXJyb3JqOW8AAFUATnRy23QAAChqqXAAAFgOAAAAVHJhbnNmb3JtRXJyb3JqmG8AAFUATnRy3HQAAGVoU11y3XQAACgoavhwAABYNwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yVQBOdHLedAAAKGr4cAAAWFIAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IpajNrAABVAE50ct90AAAoavhwAABYWwAAAE9QVElPTlMgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqDm4AAFUATnRy4HQAAChq+HAAAFhmAAAARVJSX01JU1NJTkdfT1BUSU9OIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpapJuAABVAE50cuF0AAAoavhwAABYaAAAAEVSUl9NSVNTSU5HX0dDU19QQVRIIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpatFqAABVAE50cuJ0AAAoavhwAABYaAAAAEVSUl9JTlZBTElEX0dDU19QQVRIIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpajVvAABVAE50cuN0AAAoavhwAABYagAAAEVSUl9JTlZBTElEX0dDU19CVUNLRVQgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqjG8AAFUATnRy5HQAAChq+HAAAFhqAAAARVJSX0lOVkFMSURfR0NTX09CSkVDVCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWrrbAAAVQBOdHLldAAAKGr4cAAAWGgAAABFUlJfSU5WQUxJRF9KT0JfTkFNRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWo4bwAAVQBOdHLmdAAAKGr4cAAAWG4AAABFUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWrHawAAVQBOdHLndAAAKGr4cAAAWGoAAABFUlJfSU5WQUxJRF9QUk9KRUNUX0lEIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpav1rAABVAE50cuh0AAAoavhwAABYbAAAAEVSUl9JTlZBTElEX05PVF9QT1NJVElWRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWqsbAAAVQBOdHLpdAAAKGr4cAAAWHEAAABFUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVFlQRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWoybAAAVQBOdHLqdAAAKGr4cAAAWHgAAABFUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVU5QSUNLTEFCTEUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqEm8AAFUATnRy63QAAChq+HAAAFhbAAAAR0NTX1VSSSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWqibAAAVQBOdHLsdAAAKGr4cAAAWF4AAABHQ1NfQlVDS0VUIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpavtsAABVAE50cu10AAAoavhwAABYXgAAAEdDU19TQ0hFTUUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlql28AAFUATnRy7nQAAChq+HAAAFhfAAAASk9CX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqmmwAAFUATnRy73QAAChq+HAAAFhmAAAAUFJPSkVDVF9JRF9QQVRURVJOIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpas5sAABVAE50cvB0AAAoavhwAABYagAAAFBST0pFQ1RfTlVNQkVSX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqU24AAFUATnRy8XQAAChq+HAAAFhkAAAARU5EUE9JTlRfUEFUVEVSTiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWqkbwAAVQBOdHLydAAAKGr4cAAAWFsAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2Qpah9rAABVAE50cvN0AAAoavhwAABYZAAAAGlzX3NlcnZpY2VfcnVubmVyKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIG1ldGhvZClqNG4AAFUATnRy9HQAAChq+HAAAFhnAAAAaXNfZnVsbF9zdHJpbmdfbWF0Y2goKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKWoDawAAVQBOdHL1dAAAKGr4cAAAWGQAAAB2YWxpZGF0ZV9nY3NfcGF0aCgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QpaitrAABVAE50cvZ0AAAoavhwAABYaQAAAHZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKWoSbQAAVQBOdHL3dAAAKGr4cAAAWHYAAAB2YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QpasdsAABVAE50cvh0AAAoavhwAABYaAAAAHZhbGlkYXRlX3Rlc3RfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2Qpav9sAABVAE50cvl0AABlaFRdcvp0AAAoKGp8cQAAWDUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciAobW9kdWxlKVgzAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyVQBOdHL7dAAAKGp8cQAAWGUAAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWp6bQAAVQBOdHL8dAAAKGp8cQAAWHEAAABnZXRfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUgbWV0aG9kKWqQbwAAVQBOdHL9dAAAKGp8cQAAWH8AAABnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZSBtZXRob2QpagxvAABVAE50cv50AAAoanxxAABYXQAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWpNbgAAVQBOdHL/dAAAKGp8cQAAWGQAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcyBtZXRob2QpatFrAABVAE50cgB1AAAoanxxAABYRwAAAFByb2Nlc3NFbGVtZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIpasVsAABVAE50cgF1AAAoanxxAABYTgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMgbWV0aG9kKWqibwAAVQBOdHICdQAAKGp8cQAAWFYAAABuZXdfcHJvY2Vzc19mbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMgbWV0aG9kKWrqagAAVQBOdHIDdQAAKGp8cQAAWEEAAABQcm9jZXNzRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWrobwAAVQBOdHIEdQAAKGp8cQAAWE8AAABzdGVwX2NvbnRleHQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbiBhdHRyaWJ1dGUpaslvAABVAE50cgV1AAAoanxxAABYXQAAAHNldF9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4gbWV0aG9kKWq+bQAAVQBOdHIGdQAAKGp8cQAAWEkAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbiBtZXRob2QpalFuAABVAE50cgd1AAAoanxxAABYUAAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIpalVvAABVAE50cgh1AAAoanxxAABYVwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWrCbgAAVQBOdHIJdQAAKGp8cQAAWFwAAAB0ZXN0X21ldGhvZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIgbWV0aG9kKWp1awAAVQBOdHIKdQAAKGp8cQAAWGcAAABpbnZva2VfcHJvY2Vzc19lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlciBtZXRob2QpakxsAABVAE50cgt1AABlaFVdcgx1AAAoKGpPcQAAWCYAAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscyAobW9kdWxlKVgkAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzVQBOdHINdQAAKGpPcQAAWDQAAABwYWNrX0FueSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMpan9vAABVAE50cg51AAAoak9xAABYNgAAAHVucGFja19BbnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKWrCbQAAVQBOdHIPdQAAKGpPcQAAWDcAAABwYXJzZV9CeXRlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMpauZvAABVAE50chB1AAAoak9xAABYNwAAAHBhY2tfU3RydWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscylqnm8AAFUATnRyEXUAAChqT3EAAFg3AAAAZnJvbV9taWNyb3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKWp8bwAAVQBOdHISdQAAZWhWXXITdQAAKChqKnIAAFhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyIChtb2R1bGUpWEAAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyVQBOdHIUdQAAKGoqcgAAWE8AAABKb2JTZXJ2aWNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIpapZrAABVAE50chV1AAAoaipyAABYUwAAAHJ1bigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIuSm9iU2VydmljZSBtZXRob2QpaoVsAABVAE50chZ1AAAoaipyAABYWAAAAGdldFN0YXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlIG1ldGhvZClqYmwAAFUATnRyF3UAAChqKnIAAFhWAAAAY2FuY2VsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlIG1ldGhvZClq/2sAAFUATnRyGHUAAChqKnIAAFhgAAAAZ2V0TWVzc2FnZVN0cmVhbSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdC5zZXJ2ZXIuSm9iU2VydmljZSBtZXRob2QpaodsAABVAE50chl1AAAoaipyAABYXgAAAGdldFN0YXRlU3RyZWFtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlci5Kb2JTZXJ2aWNlIG1ldGhvZClqf2wAAFUATnRyGnUAAChqKnIAAFhNAAAAc2VydmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0LnNlcnZlcilqFW0AAFUATnRyG3UAAGVoV11yHHUAACgoahVzAABYMAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSAobW9kdWxlKVguAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZVUATnRyHXUAAChqFXMAAFg+AAAAQm91bmRNZXRob2QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqGGwAAFUATnRyHnUAAChqFXMAAFg4AAAAQ29uc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqHm4AAFUATnRyH3UAAChqFXMAAFhGAAAAdW53cmFwKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdCBzdGF0aWMgbWV0aG9kKWrkbAAAVQBOdHIgdQAAKGoVcwAAWEoAAAB1bndyYXBfYWxsKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdCBzdGF0aWMgbWV0aG9kKWoQbwAAVQBOdHIhdQAAKGoVcwAAWD0AAABGcmFtZVN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpaghsAABVAE50ciJ1AAAoahVzAABYSgAAAGNsb3N1cmVfdHlwZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZSBtZXRob2Qpas9uAABVAE50ciN1AAAoahVzAABYSAAAAGNvbnN0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKWrvbQAAVQBOdHIkdQAAKGoVcwAAWEIAAABjb3B5KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlIG1ldGhvZClq4WwAAFUATnRyJXUAAChqFXMAAFhIAAAAZ2V0X2dsb2JhbCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZSBtZXRob2Qpas9rAABVAE50ciZ1AAAoahVzAABYRgAAAGdldF9uYW1lKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlIG1ldGhvZClqfmwAAFUATnRyJ3UAAChqFXMAAGpWAQAAaiprAABVAE50cih1AAAoahVzAABYQgAAAGVsZW1lbnRfdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWr9bwAAVQBOdHIpdQAAKGoVcwAAWD4AAABoYXNoYWJsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWrDawAAVQBOdHIqdQAAKGoVcwAAWEcAAABpbmZlcl9yZXR1cm5fdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWodbwAAVQBOdHIrdQAAKGoVcwAAWEwAAABpbmZlcl9yZXR1cm5fdHlwZV9mdW5jKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpaoZtAABVAE50cix1AAAoahVzAABYRgAAAGluc3RhbmNlX3RvX3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqwW4AAFUATnRyLXUAAChqFXMAAFhFAAAAa2V5X3ZhbHVlX3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Upat5qAABVAE50ci51AAAoahVzAABYOwAAAHVuaW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpagNuAABVAE50ci91AAAoahVzAABYQAAAAHVuaW9uX2xpc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqhWsAAFUATnRyMHUAAGVoWF1yMXUAACgoavhwAABYIgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgKG1vZHVsZSlYIAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzVQBOdHIydQAAKGr4cAAAWDcAAABEaXN0cmlidXRpb25SZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMpas1rAABVAE50cjN1AAAoavhwAABYPAAAAG1heCAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQgYXR0cmlidXRlKWr5awAAVQBOdHI0dQAAKGr4cAAAWDwAAABtaW4gKGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0IGF0dHJpYnV0ZSlquW8AAFUATnRyNXUAAChq+HAAAFg+AAAAY291bnQgKGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0IGF0dHJpYnV0ZSlqr2sAAFUATnRyNnUAAChq+HAAAFg8AAAAc3VtIChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUpatltAABVAE50cjd1AAAoavhwAABYPQAAAG1lYW4gKGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0IGF0dHJpYnV0ZSlq9m8AAFUATnRyOHUAAGVoWV1yOXUAAChqUnEAAFgoAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MSAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFVAE50cjp1AABhaFpdcjt1AAAoKGpncQAAWCkAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbSAobW9kdWxlKVgnAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtVQBOdHI8dQAAKGpncQAAWDkAAABHQ1NGaWxlU3lzdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbSlqGW8AAFUATnRyPXUAAChqZ3EAAFhFAAAAQ0hVTktfU0laRSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBhdHRyaWJ1dGUpagtwAABVAE50cj51AAAoamdxAABYRQAAAEdDU19QUkVGSVggKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gYXR0cmlidXRlKWpqbwAAVQBOdHI/dQAAKGpncQAAWEYAAABzY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QpaohuAABVAE50ckB1AAAoamdxAABYPgAAAGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QparptAABVAE50ckF1AAAoamdxAABYPwAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWrLbwAAVQBOdHJCdQAAKGpncQAAWEAAAABta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QparxvAABVAE50ckN1AAAoamdxAABYPwAAAG1hdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWq2bgAAVQBOdHJEdQAAKGpncQAAWEAAAABjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2Qpat5sAABVAE50ckV1AAAoamdxAABYPgAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QpapVuAABVAE50ckZ1AAAoamdxAABYPgAAAGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QpanxrAABVAE50ckd1AAAoamdxAABYQAAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClq9WoAAFUATnRySHUAAChqZ3EAAFhAAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWoGcAAAVQBOdHJJdQAAKGpncQAAWEAAAABkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2Qpav1sAABVAE50ckp1AABlaFtdckt1AAAoaqlwAABYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsIChtb2R1bGUpWBsAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW50ZXJuYWxVAE50ckx1AABhaFxdck11AAAoaqZwAABYNwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGMgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZW5kcG9pbnRzX3BiMl9ncnBjVQBOdHJOdQAAYWhdXXJPdQAAKChq7XEAAFg1AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIgKG1vZHVsZSlYMwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lclUATnRyUHUAAChq7XEAAFhGAAAARGF0YWZsb3dSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyKWqWbQAAVQBOdHJRdQAAKGrtcQAAWGUAAABwb2xsX2Zvcl9qb2JfY29tcGxldGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKWpiawAAVQBOdHJSdQAAKGrtcQAAWGgAAABncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKWoJcAAAVQBOdHJTdQAAKGrtcQAAWGMAAABmbGF0dGVuX2lucHV0X3Zpc2l0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZClqym0AAFUATnRyVHUAAChq7XEAAFhTAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClq2G4AAFUATnRyVXUAAChq7XEAAFhSAAAAcnVuX0ltcHVsc2UoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWpHbQAAVQBOdHJWdQAAKGrtcQAAWFIAAABydW5fRmxhdHRlbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QpagVvAABVAE50cld1AAAoau1xAABYXAAAAGFwcGx5X1dyaXRlVG9CaWdRdWVyeSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QpaoxsAABVAE50clh1AAAoau1xAABYVwAAAGFwcGx5X0dyb3VwQnlLZXkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWrYbwAAVQBOdHJZdQAAKGrtcQAAWFUAAABydW5fR3JvdXBCeUtleSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2Qpau9vAABVAE50clp1AAAoau1xAABYUAAAAHJ1bl9QYXJEbygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QpauZrAABVAE50clt1AAAoau1xAABYWgAAAGFwcGx5X0NvbWJpbmVWYWx1ZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWpqbAAAVQBOdHJcdQAAKGrtcQAAWFgAAABydW5fQ29tYmluZVZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QpauZuAABVAE50cl11AAAoau1xAABYTwAAAHJ1bl9SZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClq5G4AAFUATnRyXnUAAChq7XEAAFhXAAAAcnVuX19OYXRpdmVXcml0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QpahtuAABVAE50cl91AAAoau1xAABYaQAAAHNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgY2xhc3MgbWV0aG9kKWp7awAAVQBOdHJgdQAAKGrtcQAAWGsAAABkZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgY2xhc3MgbWV0aG9kKWqhbAAAVQBOdHJhdQAAKGrtcQAAWGcAAABieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIHN0YXRpYyBtZXRob2QpavhvAABVAE50cmJ1AAAoau1xAABYZwAAAGpzb25fc3RyaW5nX3RvX2J5dGVfYXJyYXkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZClqb2sAAFUATnRyY3UAAChq7XEAAFhfAAAARGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcilqvm8AAFUATnRyZHUAAChq7XEAAFhrAAAAZ2V0X21hdGNoZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZClqtGsAAFUATnRyZXUAAChq7XEAAFh5AAAAZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKWprawAAVQBOdHJmdQAAKGrtcQAAWHoAAABpc19zdHJlYW1pbmdfY3JlYXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSBzdGF0aWMgbWV0aG9kKWpRbwAAVQBOdHJndQAAZWheXXJodQAAKChqaHAAAFgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbCAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWxVAE50cml1AAAoamhwAABYNQAAAFRpbWVEb21haW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwpaplsAABVAE50cmp1AAAoamhwAABYQAAAAFdBVEVSTUFSSyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluIGF0dHJpYnV0ZSlqhm4AAFUATnRya3UAAChqaHAAAFhAAAAAUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKWqsbgAAVQBOdHJsdQAAKGpocAAAWEoAAABERVBFTkRFTlRfUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKWrsbgAAVQBOdHJtdQAAKGpocAAAWEgAAABmcm9tX3N0cmluZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gc3RhdGljIG1ldGhvZClqXWsAAFUATnRybnUAAGVoX11yb3UAACgoaipyAABYJwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbiAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vblUATnRycHUAAChqKnIAAFhBAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqhm8AAFUATnRycXUAAChqKnIAAFhNAAAAZ2V0X21hdGNoZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlNwbGl0dGFibGVQYXJEb092ZXJyaWRlIG1ldGhvZClqAm0AAFUATnRycnUAAChqKnIAAFhbAAAAZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUgbWV0aG9kKWq9bwAAVQBOdHJzdQAAKGoqcgAAWDkAAABTcGxpdHRhYmxlUGFyRG8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqsGsAAFUATnRydHUAAChqKnIAAFhAAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG8gbWV0aG9kKWoccAAAVQBOdHJ1dQAAKGoqcgAAWD8AAABFbGVtZW50QW5kUmVzdHJpY3Rpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqZWwAAFUATnRydnUAAChqKnIAAFg/AAAAUGFpcldpdGhSZXN0cmljdGlvbkZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24pahhrAABVAE50cnd1AAAoaipyAABYTAAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUGFpcldpdGhSZXN0cmljdGlvbkZuIG1ldGhvZClqp20AAFUATnRyeHUAAChqKnIAAFhHAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUGFpcldpdGhSZXN0cmljdGlvbkZuIG1ldGhvZClqem8AAFUATnRyeXUAAChqKnIAAFg8AAAAU3BsaXRSZXN0cmljdGlvbkZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24panBtAABVAE50cnp1AAAoaipyAABYSQAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXRSZXN0cmljdGlvbkZuIG1ldGhvZClqDG0AAFUATnRye3UAAChqKnIAAFhEAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXRSZXN0cmljdGlvbkZuIG1ldGhvZClqVmwAAFUATnRyfHUAAChqKnIAAFg6AAAARXhwbG9kZVdpbmRvd3NGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKWpJawAAVQBOdHJ9dQAAKGoqcgAAWEIAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5FeHBsb2RlV2luZG93c0ZuIG1ldGhvZClqD3AAAFUATnRyfnUAAChqKnIAAFg7AAAAUmFuZG9tVW5pcXVlS2V5Rm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqeW4AAFUATnRyf3UAAChqKnIAAFhDAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUmFuZG9tVW5pcXVlS2V5Rm4gbWV0aG9kKWoWcAAAVQBOdHKAdQAAKGoqcgAAWD4AAABQcm9jZXNzS2V5ZWRFbGVtZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKWrwbQAAVQBOdHKBdQAAKGoqcgAAWEUAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlByb2Nlc3NLZXllZEVsZW1lbnRzIG1ldGhvZClqvG4AAFUATnRygnUAAGVoYF1yg3UAACgoavhwAABYHgAAAGFwYWNoZV9iZWFtLmlvLnRleHRpbyAobW9kdWxlKVgcAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnRleHRpb1UATnRyhHUAAChq+HAAAFgwAAAAUmVhZEFsbEZyb21UZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby50ZXh0aW8pamFvAABVAE50coV1AAAoavhwAABYTQAAAERFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dCBhdHRyaWJ1dGUpapxrAABVAE50coZ1AAAoavhwAABYNwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEFsbEZyb21UZXh0IG1ldGhvZClqxG8AAFUATnRyh3UAAChq+HAAAFgtAAAAUmVhZEZyb21UZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby50ZXh0aW8pau1vAABVAE50coh1AAAoavhwAABYNAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEZyb21UZXh0IG1ldGhvZClqj20AAFUATnRyiXUAAChq+HAAAFgsAAAAV3JpdGVUb1RleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnRleHRpbylqzmsAAFUATnRyinUAAChq+HAAAFgzAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLnRleHRpby5Xcml0ZVRvVGV4dCBtZXRob2QpaiVtAABVAE50cot1AABlaGFdcox1AAAoaqZwAABYQQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjIChtb2R1bGUpWD8AAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGNVAE50co11AABhaGJdco51AAAoKGpncQAAWB4AAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UgKG1vZHVsZSlYHAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5pb2Jhc2VVAE50co91AAAoamdxAABYLgAAAEJvdW5kZWRTb3VyY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSlqPmwAAFUATnRykHUAAChqZ3EAAFg8AAAAZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSBtZXRob2QpakNsAABVAE50cpF1AAAoamdxAABYNAAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqMWwAAFUATnRyknUAAChqZ3EAAFhAAAAAZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKWpJbgAAVQBOdHKTdQAAKGpncQAAWDMAAAByZWFkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqFXAAAFUATnRylHUAAChqZ3EAAFhDAAAAZGVmYXVsdF9vdXRwdXRfY29kZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKWqrawAAVQBOdHKVdQAAKGpncQAAWDkAAABpc19ib3VuZGVkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqzG8AAFUATnRylnUAAChqZ3EAAFgtAAAAUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpauFuAABVAE50cpd1AAAoamdxAABYQwAAAFNQTElUX1BPSU5UU19VTktOT1dOIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIGF0dHJpYnV0ZSlqw24AAFUATnRymHUAAChqZ3EAAFg8AAAAc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QparNuAABVAE50cpl1AAAoamdxAABYOwAAAHN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpasZsAABVAE50cpp1AAAoamdxAABYNwAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZClqHG8AAFUATnRym3UAAChqZ3EAAFhCAAAAc2V0X2N1cnJlbnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpaiJuAABVAE50cpx1AAAoamdxAABYQgAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWrzawAAVQBOdHKddQAAKGpncQAAWDcAAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpanFrAABVAE50cp51AAAoamdxAABYPwAAAGZyYWN0aW9uX2NvbnN1bWVkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWpGbwAAVQBOdHKfdQAAKGpncQAAWDoAAABzcGxpdF9wb2ludHMoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpauZtAABVAE50cqB1AAAoamdxAABYUQAAAHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWrTbwAAVQBOdHKhdQAAKGpncQAAWCUAAABTaW5rIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpaiRuAABVAE50cqJ1AAAoamdxAABYNgAAAGluaXRpYWxpemVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsgbWV0aG9kKWrvbgAAVQBOdHKjdQAAKGpncQAAWDEAAABvcGVuX3dyaXRlcigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luayBtZXRob2Qpaj1uAABVAE50cqR1AAAoamdxAABYNAAAAGZpbmFsaXplX3dyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rIG1ldGhvZClq9GwAAFUATnRypXUAAChqZ3EAAFgnAAAAV3JpdGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2Upav9uAABVAE50cqZ1AAAoamdxAABYLQAAAHdyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXIgbWV0aG9kKWpebAAAVQBOdHKndQAAKGpncQAAWC0AAABjbG9zZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVyIG1ldGhvZClq328AAFUATnRyqHUAAChqZ3EAAFglAAAAUmVhZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaW9iYXNlKWpKbAAAVQBOdHKpdQAAKGpncQAAWCwAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQgbWV0aG9kKWqLbQAAVQBOdHKqdQAAKGpncQAAWDMAAABnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZClqj24AAFUATnRyq3UAAChqZ3EAAFgyAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZClq820AAFUATnRyrHUAAChqZ3EAAFg9AAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQgbWV0aG9kKWpEbwAAVQBOdHKtdQAAKGpncQAAWEYAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIHN0YXRpYyBtZXRob2QpajdtAABVAE50cq51AAAoamdxAABYJgAAAFdyaXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpasFrAABVAE50cq91AAAoamdxAABYMwAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGUgbWV0aG9kKWoKbQAAVQBOdHKwdQAAKGpncQAAWC0AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlIG1ldGhvZClqp2wAAFUATnRysXUAAChqZ3EAAFgzAAAAUmVzdHJpY3Rpb25UcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpaoduAABVAE50crJ1AAAoamdxAABYRwAAAGN1cnJlbnRfcmVzdHJpY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpavRtAABVAE50crN1AAAoamdxAABYPgAAAGNoZWNrcG9pbnQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2Qpaq5vAABVAE50crR1AAAoamdxAABYPgAAAGNoZWNrX2RvbmUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpalVrAABVAE50crV1AABlaGNdcrZ1AAAoKGqmcAAAWBsAAABhcGFjaGVfYmVhbS5wdmFsdWUgKG1vZHVsZSlYGQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wdmFsdWVVAE50crd1AAAoaqZwAABYKQAAAFBDb2xsZWN0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUpautrAABVAE50crh1AAAoaqZwAABYNAAAAHdpbmRvd2luZyAoYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uIGF0dHJpYnV0ZSlqAWwAAFUATnRyuXUAAChqpnAAAFg3AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24gbWV0aG9kKWpzbgAAVQBOdHK6dQAAKGqmcAAAWEAAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uIHN0YXRpYyBtZXRob2QpakhrAABVAE50crt1AAAoaqZwAABYKgAAAFRhZ2dlZE91dHB1dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWpEawAAVQBOdHK8dQAAKGqmcAAAWCkAAABBc1NpbmdsZXRvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWr2bAAAVQBOdHK9dQAAKGqmcAAAWDcAAABlbGVtZW50X3R5cGUgKGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc1NpbmdsZXRvbiBhdHRyaWJ1dGUparttAABVAE50cr51AAAoaqZwAABYJAAAAEFzSXRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWpPbwAAVQBOdHK/dQAAKGqmcAAAWDIAAABlbGVtZW50X3R5cGUgKGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXIgYXR0cmlidXRlKWpnbQAAVQBOdHLAdQAAKGqmcAAAWCQAAABBc0xpc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSlqcW4AAFUATnRywXUAAChqpnAAAFgkAAAAQXNEaWN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUpathtAABVAE50csJ1AAAoaqZwAABYLAAAAEVtcHR5U2lkZUlucHV0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUpagBuAABVAE50csN1AABlaGRdcsR1AAAoKGoqcgAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQgKG1vZHVsZSlYKwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHRVAE50csV1AAAoaipyAABYPwAAAFBpcGVsaW5lQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0KWrZbgAAVQBOdHLGdQAAKGoqcgAAWFYAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCBzdGF0aWMgbWV0aG9kKWqHbwAAVQBOdHLHdQAAKGoqcgAAWE0AAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQgbWV0aG9kKWoBbwAAVQBOdHLIdQAAZWhlXXLJdQAAKChqFXMAAFg4AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgKG1vZHVsZSlYNgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eVUATnRyynUAAChqFXMAAFhSAAAAY29udmVydF90b19iZWFtX3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KWrNbAAAVQBOdHLLdQAAKGoVcwAAWFMAAABjb252ZXJ0X3RvX2JlYW1fdHlwZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KWqbbwAAVQBOdHLMdQAAZWhmXXLNdQAAKGpocAAAWB8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIChtb2R1bGUpWB0AAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtc1UATnRyznUAAGFoZ11yz3UAACgoak9xAABYIAAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5IChtb2R1bGUpWB4AAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucmV0cnlVAE50ctB1AAAoak9xAABqKAIAAGrdbAAAVQBOdHLRdQAAKGpPcQAAWD0AAABGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udXRpbHMucmV0cnkpahFrAABVAE50ctJ1AAAoak9xAABYQwAAAHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlq42oAAFUATnRy03UAAChqT3EAAFhPAAAAcmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KWrCawAAVQBOdHLUdQAAKGpPcQAAWEMAAAByZXRyeV9vbl9iZWFtX2lvX2Vycm9yX2ZpbHRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucmV0cnkpalttAABVAE50ctV1AAAoak9xAABYKAAAAENsb2NrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlqXm4AAFUATnRy1nUAAChqT3EAAFguAAAAc2xlZXAoKSAoYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuQ2xvY2sgbWV0aG9kKWqCbwAAVQBOdHLXdQAAKGpPcQAAWDAAAABub19yZXRyaWVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlq/m4AAFUATnRy2HUAAChqT3EAAFg+AAAAd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlqRWwAAFUATnRy2XUAAGVoaF1y2nUAACgoaqlwAABYLAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlIChtb2R1bGUpWCoAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWVVAE50ctt1AAAoaqlwAABYTAAAAGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZSlqQ28AAFUATnRy3HUAAChqqXAAAFg/AAAAdG9fanNvbl92YWx1ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUpaq9tAABVAE50ct11AAAoaqlwAABYQQAAAGZyb21fanNvbl92YWx1ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUparhrAABVAE50ct51AABlaGldct91AAAoKGoqcgAAWCYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlscyAobW9kdWxlKVgkAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzVQBOdHLgdQAAKGoqcgAAWDoAAABkaWN0X3RvX3N0cnVjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMpanduAABVAE50cuF1AAAoaipyAABYOgAAAHN0cnVjdF90b19kaWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlscylqZGsAAFUATnRy4nUAAGVoal1y43UAACgoanxxAABYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yVQBOdHLkdQAAKGp8cQAAWFQAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcilqb24AAFUATnRy5XUAAChqfHEAAFhiAAAAZ2V0X2V2YWx1YXRvcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5IG1ldGhvZClqIW0AAFUATnRy5nUAAChqfHEAAFhtAAAAZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkgbWV0aG9kKWp4bwAAVQBOdHLndQAAKGp8cQAAWGwAAABzaG91bGRfZXhlY3V0ZV9zZXJpYWxseSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5IG1ldGhvZClqj28AAFUATnRy6HUAAChqfHEAAFhMAAAAUm9vdEJ1bmRsZVByb3ZpZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yKWr5bAAAVQBOdHLpdQAAKGp8cQAAWF0AAABnZXRfcm9vdF9idW5kbGVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuUm9vdEJ1bmRsZVByb3ZpZGVyIG1ldGhvZClq6GwAAFUATnRy6nUAAChqfHEAAFhTAAAARGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcilqb20AAFUATnRy63UAAChqfHEAAFhkAAAAZ2V0X3Jvb3RfYnVuZGxlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLkRlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIgbWV0aG9kKWpWbQAAVQBOdHLsdQAAZWhrXXLtdQAAKChqFXMAAFghAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luIChtb2R1bGUpWB8AAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luVQBOdHLudQAAKGoVcwAAWC4AAABCZWFtUGx1Z2luIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wbHVnaW4patFuAABVAE50cu91AAAoahVzAABYRwAAAGdldF9hbGxfc3ViY2xhc3NlcygpIChhcGFjaGVfYmVhbS51dGlscy5wbHVnaW4uQmVhbVBsdWdpbiBjbGFzcyBtZXRob2Qpag1rAABVAE50cvB1AAAoahVzAABYSQAAAGdldF9hbGxfcGx1Z2luX3BhdGhzKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luIGNsYXNzIG1ldGhvZClqO28AAFUATnRy8XUAAGVobF1y8nUAAChqqXAAAFghAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwIChtb2R1bGUpWB8AAABtb2R1bGUtYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwVQBOdHLzdQAAYWhtXXL0dQAAKChqKnIAAFgvAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMgKG1vZHVsZSlYLQAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc1UATnRy9XUAAChqKnIAAFhGAAAAUGlwZWxpbmVTdGF0ZU1hdGNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzKWpmawAAVQBOdHL2dQAAKGoqcgAAWFIAAABkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5QaXBlbGluZVN0YXRlTWF0Y2hlciBtZXRob2Qpaq1uAABVAE50cvd1AAAoaipyAABYWAAAAGRlc2NyaWJlX21pc21hdGNoKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLlBpcGVsaW5lU3RhdGVNYXRjaGVyIG1ldGhvZClqNG8AAFUATnRy+HUAAChqKnIAAFhXAAAAcmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMpauJrAABVAE50cvl1AAAoaipyAABYRQAAAEZpbGVDaGVja3N1bU1hdGNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzKWoGawAAVQBOdHL6dQAAKGoqcgAAWFEAAABkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5GaWxlQ2hlY2tzdW1NYXRjaGVyIG1ldGhvZClqZG0AAFUATnRy+3UAAChqKnIAAFhXAAAAZGVzY3JpYmVfbWlzbWF0Y2goKSAoYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuRmlsZUNoZWNrc3VtTWF0Y2hlciBtZXRob2QpaudtAABVAE50cvx1AABlaG5dcv11AAAoKGqmcAAAWDkAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMgKG1vZHVsZSlYNwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGNVAE50cv51AAAoaqZwAABYTQAAAEJlYW1GbkNvbnRyb2xTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpanRrAABVAE50cv91AAAoaqZwAABYUQAAAEJlYW1GbkNvbnRyb2xTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWribgAAVQBOdHIAdgAAKGqmcAAAWFkAAABDb250cm9sKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Db250cm9sU2VydmljZXIgbWV0aG9kKWoLawAAVQBOdHIBdgAAKGqmcAAAWGIAAABhZGRfQmVhbUZuQ29udHJvbFNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWoObQAAVQBOdHICdgAAKGqmcAAAWEoAAABCZWFtRm5EYXRhU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWobawAAVQBOdHIDdgAAKGqmcAAAWE4AAABCZWFtRm5EYXRhU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqi24AAFUATnRyBHYAAChqpnAAAFhTAAAARGF0YSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVNlcnZpY2VyIG1ldGhvZClquG8AAFUATnRyBXYAAChqpnAAAFhfAAAAYWRkX0JlYW1GbkRhdGFTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqQ20AAFUATnRyBnYAAChqpnAAAFhLAAAAQmVhbUZuU3RhdGVTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpahNuAABVAE50cgd2AAAoaqZwAABYTwAAAEJlYW1GblN0YXRlU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylq3m8AAFUATnRyCHYAAChqpnAAAFhVAAAAU3RhdGUoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GblN0YXRlU2VydmljZXIgbWV0aG9kKWoPbQAAVQBOdHIJdgAAKGqmcAAAWGAAAABhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylq1m8AAFUATnRyCnYAAChqpnAAAFhNAAAAQmVhbUZuTG9nZ2luZ1N0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqw20AAFUATnRyC3YAAChqpnAAAFhRAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpan1tAABVAE50cgx2AAAoaqZwAABYWQAAAExvZ2dpbmcoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkxvZ2dpbmdTZXJ2aWNlciBtZXRob2QpamtsAABVAE50cg12AAAoaqZwAABYYgAAAGFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpahpvAABVAE50cg52AABlaG9dcg92AAAoKGr4cAAAWB0AAABhcGFjaGVfYmVhbS5pby52Y2ZpbyAobW9kdWxlKVgbAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnZjZmlvVQBOdHIQdgAAKGr4cAAAWCsAAABWYXJpYW50SW5mbyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8pauVuAABVAE50chF2AAAoavhwAABYMQAAAGRhdGEgKGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRJbmZvIGF0dHJpYnV0ZSlqE2sAAFUATnRyEnYAAChq+HAAAFg4AAAAZmllbGRfY291bnQgKGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRJbmZvIGF0dHJpYnV0ZSlqwWwAAFUATnRyE3YAAChq+HAAAFgyAAAATWFsZm9ybWVkVmNmUmVjb3JkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby52Y2ZpbylqPGsAAFUATnRyFHYAAChq+HAAAFg9AAAAZmlsZV9uYW1lIChhcGFjaGVfYmVhbS5pby52Y2Zpby5NYWxmb3JtZWRWY2ZSZWNvcmQgYXR0cmlidXRlKWqebAAAVQBOdHIVdgAAKGr4cAAAWDgAAABsaW5lIChhcGFjaGVfYmVhbS5pby52Y2Zpby5NYWxmb3JtZWRWY2ZSZWNvcmQgYXR0cmlidXRlKWpVbQAAVQBOdHIWdgAAKGr4cAAAWCcAAABWYXJpYW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby52Y2ZpbylqU20AAFUATnRyF3YAAChq+HAAAFgrAAAAVmFyaWFudENhbGwgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnZjZmlvKWoubQAAVQBOdHIYdgAAKGr4cAAAWCsAAABSZWFkRnJvbVZjZiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8pau1tAABVAE50chl2AAAoavhwAABYMgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby52Y2Zpby5SZWFkRnJvbVZjZiBtZXRob2QpaldtAABVAE50chp2AABlaHBdcht2AAAoKGrtcQAAWDoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyIChtb2R1bGUpWDgAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lclUATnRyHHYAAChq7XEAAFhPAAAAVGVzdERhdGFmbG93UnVubmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyKWrIbwAAVQBOdHIddgAAKGrtcQAAWFMAAABydW4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIgbWV0aG9kKWptbAAAVQBOdHIedgAAZWhxXXIfdgAAKChqpnAAAFg6AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYyAobW9kdWxlKVg4AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGNVAE50ciB2AAAoaqZwAABYSwAAAEpvYlNlcnZpY2VTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjKWpcbgAAVQBOdHIhdgAAKGqmcAAAWE8AAABKb2JTZXJ2aWNlU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMpamNtAABVAE50ciJ2AAAoaqZwAABYVwAAAFByZXBhcmUoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWrNbgAAVQBOdHIjdgAAKGqmcAAAWFMAAABSdW4oKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWqpbQAAVQBOdHIkdgAAKGqmcAAAWFgAAABHZXRTdGF0ZSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QpavltAABVAE50ciV2AAAoaqZwAABYVgAAAENhbmNlbCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2Qpaq5tAABVAE50ciZ2AAAoaqZwAABYXgAAAEdldFN0YXRlU3RyZWFtKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZClqMm0AAFUATnRyJ3YAAChqpnAAAFhgAAAAR2V0TWVzc2FnZVN0cmVhbSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QpasNsAABVAE50cih2AAAoaqZwAABYYAAAAGFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjKWpqbQAAVQBOdHIpdgAAZWhyXXIqdgAAKGpScQAAWBcAAABhcGFjaGVfYmVhbS5pbyAobW9kdWxlKVgVAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvVQBOdHIrdgAAYWhzXXIsdgAAKChqZ3EAAFghAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvIChtb2R1bGUpWB8AAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvVQBOdHItdgAAKGpncQAAWCkAAABHY3NJTyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvKWoNbgAAVQBOdHIudgAAKGpncQAAWC4AAABvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QpauduAABVAE50ci92AAAoamdxAABYLgAAAGdsb2IoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqGWwAAFUATnRyMHYAAChqZ3EAAFgwAAAAZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QpavZtAABVAE50cjF2AAAoamdxAABYNgAAAGRlbGV0ZV9iYXRjaCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWpHawAAVQBOdHIydgAAKGpncQAAWC4AAABjb3B5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QpalhrAABVAE50cjN2AAAoamdxAABYNAAAAGNvcHlfYmF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqF24AAFUATnRyNHYAAChqZ3EAAFgyAAAAY29weXRyZWUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqbWsAAFUATnRyNXYAAChqZ3EAAFgwAAAAcmVuYW1lKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QpaqtsAABVAE50cjZ2AAAoamdxAABYMAAAAGV4aXN0cygpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWo0awAAVQBOdHI3dgAAKGpncQAAWC4AAABzaXplKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2Qpar1uAABVAE50cjh2AAAoamdxAABYPwAAAHNpemVfb2ZfZmlsZXNfaW5fZ2xvYigpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWrZbAAAVQBOdHI5dgAAZWh0XXI6dgAAKChqfHEAAFg1AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgKG1vZHVsZSlYMwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlclUATnRyO3YAAChqfHEAAFhIAAAAV2F0ZXJtYXJrTWFuYWdlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIparJsAABVAE50cjx2AAAoanxxAABYWwAAAFdBVEVSTUFSS19QT1NfSU5GIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIGF0dHJpYnV0ZSlq0moAAFUATnRyPXYAAChqfHEAAFhbAAAAV0FURVJNQVJLX05FR19JTkYgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIgYXR0cmlidXRlKWqLbAAAVQBOdHI+dgAAKGp8cQAAWFcAAABnZXRfd2F0ZXJtYXJrcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZClq2m8AAFUATnRyP3YAAChqfHEAAFhaAAAAdXBkYXRlX3dhdGVybWFya3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlciBtZXRob2QpaoVvAABVAE50ckB2AAAoanxxAABYWwAAAGV4dHJhY3RfYWxsX3RpbWVycygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZClqAGsAAFUATnRyQXYAAGVodV1yQnYAACgoahVzAABYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzVQBOdHJDdgAAKGoVcwAAWDcAAABUeXBlVmFyaWFibGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMpapxvAABVAE50ckR2AAAoahVzAABYTAAAAG1hdGNoX3R5cGVfdmFyaWFibGVzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZVZhcmlhYmxlIG1ldGhvZClq92wAAFUATnRyRXYAAChqFXMAAFhLAAAAYmluZF90eXBlX3ZhcmlhYmxlcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVWYXJpYWJsZSBtZXRob2QpatRvAABVAE50ckZ2AAAoahVzAABYOQAAAFdpbmRvd2VkVmFsdWUgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzKWpUawAAVQBOdHJHdgAAZWh2XXJIdgAAKGp8cQAAWDsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbC5weXRob25fcnBjX2RpcmVjdCAobW9kdWxlKVg5AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsLnB5dGhvbl9ycGNfZGlyZWN0VQBOdHJJdgAAYWh3XXJKdgAAKChqpnAAAFgrAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciAobW9kdWxlKVgpAAAAbW9kdWxlLWFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXJVAE50ckt2AAAoaqZwAABYOwAAAFZhbHVlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIpakBsAABVAE50ckx2AAAoaqZwAABYSQAAAGlzX2FjY2Vzc2libGUoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyIG1ldGhvZClq124AAFUATnRyTXYAAChqpnAAAFg/AAAAZ2V0KCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlciBtZXRob2QpasduAABVAE50ck52AAAoaqZwAABYQQAAAFN0YXRpY1ZhbHVlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIparpsAABVAE50ck92AAAoaqZwAABYTwAAAGlzX2FjY2Vzc2libGUoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5TdGF0aWNWYWx1ZVByb3ZpZGVyIG1ldGhvZClq1W0AAFUATnRyUHYAAChqpnAAAFhFAAAAZ2V0KCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlciBtZXRob2QpaqdrAABVAE50clF2AAAoaqZwAABYQgAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyKWqtbQAAVQBOdHJSdgAAKGqmcAAAWFMAAABydW50aW1lX29wdGlvbnMgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIgYXR0cmlidXRlKWrRbQAAVQBOdHJTdgAAKGqmcAAAWFAAAABpc19hY2Nlc3NpYmxlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIgbWV0aG9kKWq3bgAAVQBOdHJUdgAAKGqmcAAAWEYAAABnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBtZXRob2QparRuAABVAE50clV2AAAoaqZwAABYXAAAAHNldF9ydW50aW1lX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBjbGFzcyBtZXRob2QpahxtAABVAE50clZ2AAAoaqZwAABYQQAAAGNoZWNrX2FjY2Vzc2libGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIpaqRsAABVAE50cld2AABlaHhdclh2AAAoavhwAABYHAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMgKG1vZHVsZSlYGgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5vcHRpb25zVQBOdHJZdgAAYWh5XXJadgAAKChqfHEAAFg1AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMgKG1vZHVsZSlYMwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc1UATnRyW3YAAChqfHEAAFhLAAAATGlmdGVkQ29tYmluZVBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMpanVvAABVAE50clx2AAAoanxxAABYUgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5MaWZ0ZWRDb21iaW5lUGVyS2V5IG1ldGhvZClq4m0AAFUATnRyXXYAAChqfHEAAFhYAAAAUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zKWr1bwAAVQBOdHJedgAAKGp8cQAAWGUAAABzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMgbWV0aG9kKWqqbQAAVQBOdHJfdgAAKGp8cQAAWGAAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzIG1ldGhvZClqxW0AAFUATnRyYHYAAChqfHEAAFhmAAAAZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyBtZXRob2QpanpuAABVAE50cmF2AAAoanxxAABYawAAAGRlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyBtZXRob2Qpap5rAABVAE50cmJ2AAAoanxxAABYRQAAAEZpbmlzaENvbWJpbmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zKWr2agAAVQBOdHJjdgAAKGp8cQAAWE0AAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkZpbmlzaENvbWJpbmUgbWV0aG9kKWpwbAAAVQBOdHJkdgAAKGp8cQAAWFgAAABkZWZhdWx0X3R5cGVfaGludHMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZSBtZXRob2QparNvAABVAE50cmV2AABlaHpdcmZ2AAAoau1xAABYJQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cgKG1vZHVsZSlYIwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93VQBOdHJndgAAYWh7XXJodgAAKChqqXAAAFgmAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGggKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aFUATnRyaXYAAChqqXAAAFg+AAAAc2V0X3J1bm5pbmdfaW5fZ2NlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aClqt2sAAFUATnRyanYAAChqqXAAAFgXAAAAQXV0aGVudGljYXRpb25FeGNlcHRpb25qzGwAAFUATnRya3YAAChqqXAAAFhDAAAAZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoKWoQbQAAVQBOdHJsdgAAZWh8XXJtdgAAKGp8cQAAWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmV4cGVyaW1lbnRhbCAobW9kdWxlKVgnAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsVQBOdHJudgAAYWh9XXJvdgAAKChqUnEAAFgiAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSAobW9kdWxlKVggAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1VAE50cnB2AAAoalJxAABYNQAAAENvbXByZXNzaW9uVHlwZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0pauVtAABVAE50cnF2AAAoalJxAABYOwAAAEFVVE8gKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUpak5uAABVAE50cnJ2AAAoalJxAABYPAAAAEJaSVAyIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMgYXR0cmlidXRlKWpBbgAAVQBOdHJzdgAAKGpScQAAWDsAAABHWklQIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMgYXR0cmlidXRlKWqKbAAAVQBOdHJ0dgAAKGpScQAAWEMAAABVTkNPTVBSRVNTRUQgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUpaihsAABVAE50cnV2AAAoalJxAABYVQAAAGlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGNsYXNzIG1ldGhvZClq1G0AAFUATnRydnYAAChqUnEAAFhFAAAAbWltZV90eXBlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBjbGFzcyBtZXRob2QpavprAABVAE50cnd2AAAoalJxAABYUwAAAGRldGVjdF9jb21wcmVzc2lvbl90eXBlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBjbGFzcyBtZXRob2QpagxsAABVAE50cnh2AAAoalJxAABYMwAAAENvbXByZXNzZWRGaWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtKWq9bQAAVQBOdHJ5dgAAKGpScQAAWDwAAAByZWFkYWJsZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqjW4AAFUATnRyenYAAChqUnEAAFg9AAAAd3JpdGVhYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKWrcawAAVQBOdHJ7dgAAKGpScQAAWDkAAAB3cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqPWwAAFUATnRyfHYAAChqUnEAAFg4AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqZ2wAAFUATnRyfXYAAChqUnEAAFg8AAAAcmVhZGxpbmUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QpaklsAABVAE50cn52AAAoalJxAABYOgAAAGNsb3NlZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqGWsAAFUATnRyf3YAAChqUnEAAFg5AAAAY2xvc2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QparVrAABVAE50coB2AAAoalJxAABYOQAAAGZsdXNoKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKWoPbwAAVQBOdHKBdgAAKGpScQAAWD0AAABzZWVrYWJsZSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBhdHRyaWJ1dGUpaoRuAABVAE50coJ2AAAoalJxAABYOAAAAHNlZWsoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QpagtsAABVAE50coN2AAAoalJxAABYOAAAAHRlbGwoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QpamVuAABVAE50coR2AAAoalJxAABYMQAAAEZpbGVNZXRhZGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSlq/W0AAFUATnRyhXYAAChqUnEAAFgwAAAATWF0Y2hSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0pamhsAABVAE50coZ2AAAoalJxAABYLwAAAEZpbGVTeXN0ZW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0pas9vAABVAE50cod2AAAoalJxAABYOwAAAENIVU5LX1NJWkUgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBhdHRyaWJ1dGUpaiVrAABVAE50coh2AAAoalJxAABYPAAAAHNjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gY2xhc3MgbWV0aG9kKWrYbAAAVQBOdHKJdgAAKGpScQAAWDQAAABqb2luKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QpaiduAABVAE50cop2AAAoalJxAABYNQAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QparpvAABVAE50cot2AAAoalJxAABYNgAAAG1rZGlycygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWodcAAAVQBOdHKMdgAAKGpScQAAWDUAAABtYXRjaCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWrVbAAAVQBOdHKNdgAAKGpScQAAWDYAAABjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqrWwAAFUATnRyjnYAAChqUnEAAFg0AAAAb3BlbigpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWoCbAAAVQBOdHKPdgAAKGpScQAAWDQAAABjb3B5KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QpamBtAABVAE50cpB2AAAoalJxAABYNgAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWqdbQAAVQBOdHKRdgAAKGpScQAAWDYAAABleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqkmsAAFUATnRyknYAAChqUnEAAFg2AAAAZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QpaixtAABVAE50cpN2AABlaH5dcpR2AAAoKGqmcAAAWB0AAABhcGFjaGVfYmVhbS5waXBlbGluZSAobW9kdWxlKVgbAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBpcGVsaW5lVQBOdHKVdgAAKGqmcAAAWCgAAABQaXBlbGluZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucGlwZWxpbmUpau5sAABVAE50cpZ2AAAoaqZwAABYMQAAAG9wdGlvbnMgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIGF0dHJpYnV0ZSlq7G0AAFUATnRyl3YAAChqpnAAAFg0AAAAcmVwbGFjZV9hbGwoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKWr3awAAVQBOdHKYdgAAKGqmcAAAWCwAAABydW4oKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKWp9bAAAVQBOdHKZdgAAKGqmcAAAWC4AAAB2aXNpdCgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBtZXRob2QparZvAABVAE50cpp2AAAoaqZwAABYLgAAAGFwcGx5KCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIG1ldGhvZClqim0AAFUATnRym3YAAChqpnAAAFg2AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBtZXRob2QpalhsAABVAE50cpx2AAAoaqZwAABYPwAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBzdGF0aWMgbWV0aG9kKWpJbQAAVQBOdHKddgAAKGqmcAAAWDIAAABQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBpcGVsaW5lKWpkbAAAVQBOdHKedgAAKGqmcAAAWD4AAABnZXRfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKWp4bAAAVQBOdHKfdgAAKGqmcAAAWEwAAABnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2Qpaj5uAABVAE50cqB2AABlaH9dcqF2AAAoKGpncQAAWC0AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWwgKG1vZHVsZSlYKwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxVAE50cqJ2AAAoamdxAABYOQAAAE1vdmluZ1N1bSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsKWrjbAAAVQBOdHKjdgAAKGpncQAAWD0AAABzdW0oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bSBtZXRob2Qpam5uAABVAE50cqR2AAAoamdxAABYPQAAAGFkZCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWwuTW92aW5nU3VtIG1ldGhvZClqd2wAAFUATnRypXYAAChqZ3EAAFg/AAAAY291bnQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bSBtZXRob2QpaidtAABVAE50cqZ2AAAoamdxAABYQgAAAGhhc19kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0gbWV0aG9kKWr6bwAAVQBOdHKndgAAZWiAXXKodgAAKGoVcwAAWB4AAABhcGFjaGVfYmVhbS50eXBlaGludHMgKG1vZHVsZSlYHAAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHNVAE50cql2AABhaIFdcqp2AAAoKGrtcQAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MgKG1vZHVsZSlYNAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NVAE50cqt2AAAoau1xAABYSAAAAERhdGFmbG93TWV0cmljcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzKWo3bAAAVQBOdHKsdgAAKGrtcQAAWE4AAABxdWVyeSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MuRGF0YWZsb3dNZXRyaWNzIG1ldGhvZClqnGwAAFUATnRyrXYAAGVogl1yrnYAAChq7XEAAFgjAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QgKG1vZHVsZSlYIQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdFUATnRyr3YAAGFog11ysHYAACgoaqlwAABYJgAAAGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGVVAE50crF2AAAoaqlwAABYOAAAAE9ic2VydmFibGVNaXhpbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUpaupuAABVAE50crJ2AAAoaqlwAABYSgAAAHJlZ2lzdGVyX29ic2VydmVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlLk9ic2VydmFibGVNaXhpbiBtZXRob2Qpam5rAABVAE50crN2AAAoaqlwAABYSQAAAG5vdGlmeV9vYnNlcnZlcnMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluIG1ldGhvZClqUGsAAFUATnRytHYAAGV1VQl0ZW1wX2RhdGFytXYAAH1VEnZlcnNpb25pbmdfY29tcGFyZXK2dgAAiVURbnVtYmVyZWRfdG9jdHJlZXNyt3YAAGpmAwAAXYVScrh2AABVDGRlcGVuZGVuY2llc3K5dgAAamoDAABqZgMAAIVScrp2AAAoaAZqZgMAAF1yu3YAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy93aW5kb3cucHlyvHYAAGGFUnK9dgAAaAdqZgMAAF1yvnYAAFhAAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYy5weXK/dgAAYYVScsB2AABoCGpmAwAAXXLBdgAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvY29kZXJzLnB5csJ2AABhhVJyw3YAAGgJamYDAABdcsR2AABYJgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL21ldHJpY3MvbWV0cmljLnB5csV2AABhhVJyxnYAAGgKamYDAABdcsd2AABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weXLIdgAAYYVScsl2AABoC2pmAwAAXXLKdgAAWCoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvc2xvd19zdHJlYW0ucHlyy3YAAGGFUnLMdgAAaAxqZgMAAF1yzXYAAFhCAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLnB5cs52AABhhVJyz3YAAGgNamYDAABdctB2AABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L19faW5pdF9fLnB5ctF2AABhhVJy0nYAAGgOamYDAABdctN2AAAoWCAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9fX2luaXRfXy5weXLUdgAAWA8AAABhcGFjaGVfYmVhbS5yc3Ry1XYAAGWFUnLWdgAAaA9qZgMAAF1y13YAAFgoAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vY29uY2F0X3NvdXJjZS5weXLYdgAAYYVSctl2AABoEGpmAwAAXXLadgAAWDcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZGF0YXN0b3JlL3YxL2RhdGFzdG9yZWlvLnB5ctt2AABhhVJy3HYAAGgRamYDAABdct12AABYNAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2RpcmVjdF9ydW5uZXIucHly3nYAAGGFUnLfdgAAaBJqZgMAAF1y4HYAAFgxAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS9fX2luaXRfXy5weXLhdgAAYYVScuJ2AABoE2pmAwAAXXLjdgAAWDkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9ldmFsdWF0aW9uX2NvbnRleHQucHly5HYAAGGFUnLldgAAaBRqZgMAAF1y5nYAAFgiAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvdXJucy5weXLndgAAYYVScuh2AABoFWpmAwAAXXLpdgAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvcHVic3ViLnB5cup2AABhhVJy63YAAGgWamYDAABdcux2AABYMgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvaGVscGVyLnB5cu12AABhhVJy7nYAAGgXamYDAABdcu92AABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL21ldHJpY3MvX19pbml0X18ucHly8HYAAGGFUnLxdgAAaBhqZgMAAF1y8nYAAFgvAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvZXhlY3V0b3IucHly83YAAGGFUnL0dgAAaBlqZgMAAF1y9XYAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaGFkb29wZmlsZXN5c3RlbS5weXL2dgAAYYVScvd2AABoGmpmAwAAXXL4dgAAWC0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3B0cmFuc2Zvcm0ucHly+XYAAGGFUnL6dgAAaBtqZgMAAF1y+3YAAFg5AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9uYXRpdmVfaW8vaW9iYXNlLnB5cvx2AABhhVJy/XYAAGgcamYDAABdcv52AABYNQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2RpcmVjdF9tZXRyaWNzLnB5cv92AABhhVJyAHcAAGgdamYDAABdcgF3AABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2Nsb2NrLnB5cgJ3AABhhVJyA3cAAGgeamYDAABdcgR3AABYJwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdXRpbC5weXIFdwAAYYVScgZ3AABoH2pmAwAAXXIHdwAAWCgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL19faW5pdF9fLnB5cgh3AABhhVJyCXcAAGggamYDAABdcgp3AABYLQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9waXBlbGluZS5weXILdwAAYYVScgx3AABoIWpmAwAAXXINdwAAWCcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy90aW1lc3RhbXAucHlyDncAAGGFUnIPdwAAaCJqZgMAAF1yEHcAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb21iaW5lcnMucHlyEXcAAGGFUnISdwAAaCNqZgMAAF1yE3cAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90cmlnZ2VyLnB5chR3AABhhVJyFXcAAGgkamYDAABdchZ3AABYJQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3RmcmVjb3JkaW8ucHlyF3cAAGGFUnIYdwAAaCVqZgMAAF1yGXcAAFgkAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy91dGlsLnB5chp3AABhhVJyG3cAAGgmamYDAABdchx3AABYOwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvbmF0aXZlX2lvL19faW5pdF9fLnB5ch13AABhhVJyHncAAGgnamYDAABdch93AABYVwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZXhwZXJpbWVudGFsL3B5dGhvbl9ycGNfZGlyZWN0L3B5dGhvbl9ycGNfZGlyZWN0X3J1bm5lci5weXIgdwAAYYVSciF3AABoKGpmAwAAXXIidwAAWCcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NvcmUucHlyI3cAAGGFUnIkdwAAaClqZgMAAF1yJXcAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vY29kZXJzL3R5cGVjb2RlcnMucHlyJncAAGGFUnIndwAAaCpqZgMAAF1yKHcAAFgmAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvX19pbml0X18ucHlyKXcAAGGFUnIqdwAAaCtqZgMAAF1yK3cAAFgtAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9zaWRlaW5wdXRzLnB5cix3AABhhVJyLXcAAGgsamYDAABdci53AABYLwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3Jlc3RyaWN0aW9uX3RyYWNrZXJzLnB5ci93AABhhVJyMHcAAGgtamYDAABdcjF3AABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9fX2luaXRfXy5weXIydwAAYYVScjN3AABoLmpmAwAAXXI0dwAAWCoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2Rpc3BsYXkucHlyNXcAAGGFUnI2dwAAaC9qZgMAAF1yN3cAAFg+AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MS9hZGFwdGl2ZV90aHJvdHRsZXIucHlyOHcAAGGFUnI5dwAAaDBqZgMAAF1yOncAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvYW5ub3RhdGlvbnMucHlyO3cAAGGFUnI8dwAAaDFqZgMAAF1yPXcAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9qb2IvX19pbml0X18ucHlyPncAAGGFUnI/dwAAaDJqZgMAAF1yQHcAAFglAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvdXRpbC5weXJBdwAAYYVSckJ3AABoM2pmAwAAXXJDdwAAWCgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9waWNrbGVyLnB5ckR3AABhhVJyRXcAAGg0amYDAABdckZ3AABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvX19pbml0X18ucHlyR3cAAGGFUnJIdwAAaDVqZgMAAF1ySXcAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL29wY29kZXMucHlySncAAGGFUnJLdwAAaDZqZgMAAF1yTHcAAFgoAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZWJhc2Vkc2luay5weXJNdwAAYYVSck53AABoN2pmAwAAXXJPdwAAWEkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLnB5clB3AABhhVJyUXcAAGg4amYDAABdclJ3AABYKwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvam9iL21hbmFnZXIucHlyU3cAAGGFUnJUdwAAaDlqZgMAAF1yVXcAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZWJhc2Vkc291cmNlLnB5clZ3AABhhVJyV3cAAGg6amYDAABdclh3AABYJwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9iaWdxdWVyeS5weXJZdwAAYYVSclp3AABoO2pmAwAAXXJbdwAAWCsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC91dGlsLnB5clx3AABhhVJyXXcAAGg8amYDAABdcl53AABYKwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9zdHJlYW0ucHlyX3cAAGGFUnJgdwAAaD1qZgMAAF1yYXcAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVjaGVjay5weXJidwAAYYVScmN3AABoPmpmAwAAXXJkdwAAWCwAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9zb3VyY2VfdGVzdF91dGlscy5weXJldwAAYYVScmZ3AABoP2pmAwAAXXJndwAAWCEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hdnJvaW8ucHlyaHcAAGGFUnJpdwAAaEBqZgMAAF1yancAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vY29kZXJzL19faW5pdF9fLnB5cmt3AABhhVJybHcAAGhBamYDAABdcm13AABYNQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2J1bmRsZV9mYWN0b3J5LnB5cm53AABhhVJyb3cAAGhCamYDAABdcnB3AABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3JhbmdlX3RyYWNrZXJzLnB5cnF3AABhhVJycncAAGhDamYDAABdcnN3AABYQwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMucHlydHcAAGGFUnJ1dwAAaERqZgMAAF1ydncAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL19faW5pdF9fLnB5cnd3AABhhVJyeHcAAGhFamYDAABdcnl3AABYJgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvcnVubmVyLnB5cnp3AABhhVJye3cAAGhGamYDAABdcnx3AABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2xvY2FsZmlsZXN5c3RlbS5weXJ9dwAAYYVScn53AABoR2pmAwAAXXJ/dwAAWCYAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9maWxlci5weXKAdwAAYYVScoF3AABoSGpmAwAAXXKCdwAAWCcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9jZXNzZXMucHlyg3cAAGGFUnKEdwAAaElqZgMAAF1yhXcAAFgmAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZXN5c3RlbXMucHlyhncAAGGFUnKHdwAAaEpqZgMAAF1yiHcAAFhDAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9uYXRpdmVfaW8vc3RyZWFtaW5nX2NyZWF0ZS5weXKJdwAAYYVScop3AABoS2pmAwAAXXKLdwAAWCoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpY2Jhc2UucHlyjHcAAGGFUnKNdwAAaExqZgMAAF1yjncAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL2RlY29yYXRvcnMucHlyj3cAAGGFUnKQdwAAaE1qZgMAAF1ykXcAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy90ZXN0X3V0aWxzLnB5cpJ3AABhhVJyk3cAAGhOamYDAABdcpR3AABYOgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvZmFrZV9kYXRhc3RvcmUucHlylXcAAGGFUnKWdwAAaE9qZgMAAF1yl3cAAFgfAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdmVyc2lvbi5weXKYdwAAYYVScpl3AABoUGpmAwAAXXKadwAAWD0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L3B0cmFuc2Zvcm1fb3ZlcnJpZGVzLnB5cpt3AABhhVJynHcAAGhRamYDAABdcp13AABYOgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvcXVlcnlfc3BsaXR0ZXIucHlynncAAGGFUnKfdwAAaFJqZgMAAF1yoHcAAFgdAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vZXJyb3IucHlyoXcAAGGFUnKidwAAaFNqZgMAAF1yo3cAAFg6AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5weXKkdwAAYYVScqV3AABoVGpmAwAAXXKmdwAAWDgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9zZGZfZGlyZWN0X3J1bm5lci5weXKndwAAYYVScqh3AABoVWpmAwAAXXKpdwAAWCkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm90b191dGlscy5weXKqdwAAYYVScqt3AABoVmpmAwAAXXKsdwAAWEUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2V4cGVyaW1lbnRhbC9weXRob25fcnBjX2RpcmVjdC9zZXJ2ZXIucHlyrXcAAGGFUnKudwAAaFdqZgMAAF1yr3cAAFg0AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3RyaXZpYWxfaW5mZXJlbmNlLnB5Y3KwdwAAYYVScrF3AABoWGpmAwAAXXKydwAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5crN3AABhhVJytHcAAGhZamYDAABdcrV3AABYNAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvX19pbml0X18ucHlytncAAGGFUnK3dwAAaFpqZgMAAF1yuHcAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2djc2ZpbGVzeXN0ZW0ucHlyuXcAAGGFUnK6dwAAaFtqZgMAAF1yu3cAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvX19pbml0X18ucHlyvHcAAGGFUnK9dwAAaFxqZgMAAF1yvncAAFg6AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2VuZHBvaW50c19wYjJfZ3JwYy5weXK/dwAAYYVScsB3AABoXWpmAwAAXXLBdwAAWDgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L2RhdGFmbG93X3J1bm5lci5weXLCdwAAYYVScsN3AABoXmpmAwAAXXLEdwAAWCsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3RpbWV1dGlsLnB5csV3AABhhVJyxncAAGhfamYDAABdcsd3AABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvc2RmX2NvbW1vbi5weXLIdwAAYYVScsl3AABoYGpmAwAAXXLKdwAAWCEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby90ZXh0aW8ucHlyy3cAAGGFUnLMdwAAaGFqZgMAAF1yzXcAAFhEAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL3N0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGMucHlyzncAAGGFUnLPdwAAaGJqZgMAAF1y0HcAAFghAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaW9iYXNlLnB5ctF3AABhhVJy0ncAAGhjamYDAABdctN3AABYHgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3B2YWx1ZS5weXLUdwAAYYVSctV3AABoZGpmAwAAXXLWdwAAWDAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL3BpcGVsaW5lX2NvbnRleHQucHly13cAAGGFUnLYdwAAaGVqZgMAAF1y2XcAAFg7AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL25hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkucHly2ncAAGGFUnLbdwAAaGZqZgMAAF1y3HcAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9fX2luaXRfXy5weXLddwAAYYVSct53AABoZ2pmAwAAXXLfdwAAWCMAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9yZXRyeS5weXLgdwAAYYVScuF3AABoaGpmAwAAXXLidwAAWC8AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9nY3AvanNvbl92YWx1ZS5weXLjdwAAYYVScuR3AABoaWpmAwAAXXLldwAAWCkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2pvYi91dGlscy5weXLmdwAAYYVScud3AABoampmAwAAXXLodwAAWDoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC90cmFuc2Zvcm1fZXZhbHVhdG9yLnB5cul3AABhhVJy6ncAAGhramYDAABdcut3AABYJAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL3BsdWdpbi5weXLsdwAAYYVScu13AABobGpmAwAAXXLudwAAWC0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9nY3AvX19pbml0X18ucHly73cAAGGFUnLwdwAAaG1qZgMAAF1y8XcAAFgyAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9waXBlbGluZV92ZXJpZmllcnMucHly8ncAAGGFUnLzdwAAaG5qZgMAAF1y9HcAAFg8AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fZm5fYXBpX3BiMl9ncnBjLnB5cvV3AABhhVJy9ncAAGhvamYDAABdcvd3AABYIAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3ZjZmlvLnB5cvh3AABhhVJy+XcAAGhwamYDAABdcvp3AABYPQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvdGVzdF9kYXRhZmxvd19ydW5uZXIucHly+3cAAGGFUnL8dwAAaHFqZgMAAF1y/XcAAFg9AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fam9iX2FwaV9wYjJfZ3JwYy5weXL+dwAAYYVScv93AABocmpmAwAAXXIAeAAAWCMAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9fX2luaXRfXy5weXIBeAAAYYVScgJ4AABoc2pmAwAAXXIDeAAAWCQAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZ2NzaW8ucHlyBHgAAGGFUnIFeAAAaHRqZgMAAF1yBngAAFg4AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3Qvd2F0ZXJtYXJrX21hbmFnZXIucHlyB3gAAGGFUnIIeAAAaHVqZgMAAF1yCXgAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVoaW50cy5weXIKeAAAYYVScgt4AABodmpmAwAAXXIMeAAAWEcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2V4cGVyaW1lbnRhbC9weXRob25fcnBjX2RpcmVjdC9fX2luaXRfXy5weXINeAAAYYVScg54AABod2pmAwAAXXIPeAAAWC4AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3ZhbHVlX3Byb3ZpZGVyLnB5chB4AABhhVJyEXgAAGh4amYDAABdchJ4AABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvX19pbml0X18ucHlyE3gAAGGFUnIUeAAAaHlqZgMAAF1yFXgAAFg4AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvaGVscGVyX3RyYW5zZm9ybXMucHlyFngAAGGFUnIXeAAAaHpqZgMAAF1yGHgAAFgxAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9fX2luaXRfXy5weXIZeAAAYYVSchp4AABoe2pmAwAAXXIbeAAAWCkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9nY3AvYXV0aC5weXIceAAAYYVSch14AABofGpmAwAAXXIeeAAAWDUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2V4cGVyaW1lbnRhbC9fX2luaXRfXy5weXIfeAAAYYVSciB4AABofWpmAwAAXXIheAAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9maWxlc3lzdGVtLnB5ciJ4AABhhVJyI3gAAGh+amYDAABdciR4AABYIAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5ciV4AABhhVJyJngAAGh/amYDAABdcid4AABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvdXRpbC5weXIoeAAAYYVScil4AABogGpmAwAAXXIqeAAAWCoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvX19pbml0X18ucHlyK3gAAGGFUnIseAAAaIFqZgMAAF1yLXgAAFg5AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9kYXRhZmxvd19tZXRyaWNzLnB5ci54AABhhVJyL3gAAGiCamYDAABdcjB4AABYLwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L19faW5pdF9fLnB5cjF4AABhhVJyMngAAGiDamYDAABdcjN4AABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9vYnNlcnZhYmxlLnB5cjR4AABhhVJyNXgAAHV1Yi4=