ITxhcmNoPgpfXy5QS0dERUYgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgNjQ0ICAgICA0NDE0ICAgICAgYApnbyBvYmplY3Qgd2luZG93cyBhbWQ2NCBnbzEuNS4xIFg6bm9uZQpidWlsZCBpZCAiYjlhOTI4YjcxNzM0MmE2NzRhNDIyNDVmNjUzZmM4MjA3NmRhZmQ2ZCIKCiQkCnBhY2thZ2Ugc3ZnCglpbXBvcnQgcnVudGltZSAicnVudGltZSIKCWltcG9ydCBieXRlcyAiYnl0ZXMiCglpbXBvcnQgcmVnZXhwICJyZWdleHAiCglpbXBvcnQgc3RyaW5ncyAic3RyaW5ncyIKCXR5cGUgQCJieXRlcyIucmVhZE9wIGludAoJaW1wb3J0IGlvICJpbyIgLy8gaW5kaXJlY3QKCXR5cGUgQCJpbyIuUmVhZGVyIGludGVyZmFjZSB7IFJlYWQoQCJpbyIucCBbXWJ5dGUpIChAImlvIi5uIGludCwgQCJpbyIuZXJyIGVycm9yKSB9Cgl0eXBlIEAiaW8iLldyaXRlciBpbnRlcmZhY2UgeyBXcml0ZShAImlvIi5wIFtdYnl0ZSkgKEAiaW8iLm4gaW50LCBAImlvIi5lcnIgZXJyb3IpIH0KCXR5cGUgQCJieXRlcyIuQnVmZmVyIHN0cnVjdCB7IEAiYnl0ZXMiLmJ1ZiBbXWJ5dGU7IEAiYnl0ZXMiLm9mZiBpbnQ7IEAiYnl0ZXMiLnJ1bmVCeXRlcyBbNF1ieXRlOyBAImJ5dGVzIi5ib290c3RyYXAgWzY0XWJ5dGU7IEAiYnl0ZXMiLmxhc3RSZWFkIEAiYnl0ZXMiLnJlYWRPcCB9CglmdW5jIChAImJ5dGVzIi5iwrcyICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDIyIikgQnl0ZXMgKCkgKD8gW11ieXRlKSB7IHJldHVybiBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmJ1ZltAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLm9mZjpdIH0KCWZ1bmMgKEAiYnl0ZXMiLmLCtzIgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MSIpIENhcCAoKSAoPyBpbnQpIHsgcmV0dXJuIGNhcChAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmJ1ZikgfQoJZnVuYyAoQCJieXRlcyIuYsK3MSAqQCJieXRlcyIuQnVmZmVyKSBHcm93IChAImJ5dGVzIi5uwrcyIGludCkKCWZ1bmMgKEAiYnl0ZXMiLmLCtzIgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MSIpIExlbiAoKSAoPyBpbnQpIHsgcmV0dXJuIGxlbihAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmJ1ZikgLSBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLm9mZiB9CglmdW5jIChAImJ5dGVzIi5iwrcyICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDIyIikgTmV4dCAoQCJieXRlcyIubsK3MyBpbnQpICg/IFtdYnl0ZSkgeyBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmxhc3RSZWFkID0gQCJieXRlcyIucmVhZE9wKDB4MCk7IHZhciBAImJ5dGVzIi5twrc0IGludDsgOyBAImJ5dGVzIi5twrc0ID0gQCJieXRlcyIuYsK3Mi5MZW4oKTsgaWYgQCJieXRlcyIubsK3MyA+IEAiYnl0ZXMiLm3CtzQgeyBAImJ5dGVzIi5uwrczID0gQCJieXRlcyIubcK3NCB9OyB2YXIgQCJieXRlcyIuZGF0YcK3NSBbXWJ5dGU7IDsgQCJieXRlcyIuZGF0YcK3NSA9IEAiYnl0ZXMiLmLCtzIuQCJieXRlcyIuYnVmW0AiYnl0ZXMiLmLCtzIuQCJieXRlcyIub2ZmOkAiYnl0ZXMiLmLCtzIuQCJieXRlcyIub2ZmICsgQCJieXRlcyIubsK3M107IEAiYnl0ZXMiLmLCtzIuQCJieXRlcyIub2ZmICs9IEAiYnl0ZXMiLm7CtzM7IGlmIEAiYnl0ZXMiLm7CtzMgPiAweDAgeyBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmxhc3RSZWFkID0gQCJieXRlcyIucmVhZE9wKDB4MikgfTsgcmV0dXJuIEAiYnl0ZXMiLmRhdGHCtzUgfQoJZnVuYyAoQCJieXRlcyIuYsK3MyAqQCJieXRlcyIuQnVmZmVyICJlc2M6MHg5IikgUmVhZCAoQCJieXRlcyIucMK3NCBbXWJ5dGUgImVzYzoweDEiKSAoQCJieXRlcyIubsK3MSBpbnQsIEAiYnl0ZXMiLmVycsK3MiBlcnJvcikKCWZ1bmMgKEAiYnl0ZXMiLmLCtzMgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MSIpIFJlYWRCeXRlICgpIChAImJ5dGVzIi5jwrcxIGJ5dGUsIEAiYnl0ZXMiLmVycsK3MiBlcnJvcikKCWZ1bmMgKEAiYnl0ZXMiLmLCtzMgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4OSIpIFJlYWRCeXRlcyAoQCJieXRlcyIuZGVsaW3CtzQgYnl0ZSkgKEAiYnl0ZXMiLmxpbmXCtzEgW11ieXRlLCBAImJ5dGVzIi5lcnLCtzIgZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrczICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDkiKSBSZWFkRnJvbSAoQCJieXRlcyIucsK3NCBAImlvIi5SZWFkZXIpIChAImJ5dGVzIi5uwrcxIGludDY0LCBAImJ5dGVzIi5lcnLCtzIgZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrc0ICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDEiKSBSZWFkUnVuZSAoKSAoQCJieXRlcyIucsK3MSBydW5lLCBAImJ5dGVzIi5zaXplwrcyIGludCwgQCJieXRlcyIuZXJywrczIGVycm9yKQoJZnVuYyAoQCJieXRlcyIuYsK3MyAqQCJieXRlcyIuQnVmZmVyICJlc2M6MHgxIikgUmVhZFN0cmluZyAoQCJieXRlcyIuZGVsaW3CtzQgYnl0ZSkgKEAiYnl0ZXMiLmxpbmXCtzEgc3RyaW5nLCBAImJ5dGVzIi5lcnLCtzIgZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrcxICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDEiKSBSZXNldCAoKQoJZnVuYyAoQCJieXRlcyIuYsK3MiAqQCJieXRlcyIuQnVmZmVyICJlc2M6MHgxIikgU3RyaW5nICgpICg/IHN0cmluZykgeyBpZiBAImJ5dGVzIi5iwrcyID09IG5pbCB7IHJldHVybiAiPG5pbD4iIH07IHJldHVybiBzdHJpbmcoQCJieXRlcyIuYsK3Mi5AImJ5dGVzIi5idWZbQCJieXRlcyIuYsK3Mi5AImJ5dGVzIi5vZmY6XSkgfQoJZnVuYyAoQCJieXRlcyIuYsK3MSAqQCJieXRlcyIuQnVmZmVyICJlc2M6MHgxIikgVHJ1bmNhdGUgKEAiYnl0ZXMiLm7CtzIgaW50KQoJZnVuYyAoQCJieXRlcyIuYsK3MiAqQCJieXRlcyIuQnVmZmVyICJlc2M6MHgxIikgVW5yZWFkQnl0ZSAoKSAoPyBlcnJvcikgeyBpZiBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmxhc3RSZWFkICE9IEAiYnl0ZXMiLnJlYWRPcCgweDEpICYmIEAiYnl0ZXMiLmLCtzIuQCJieXRlcyIubGFzdFJlYWQgIT0gQCJieXRlcyIucmVhZE9wKDB4MikgeyByZXR1cm4gQCJlcnJvcnMiLk5ldygiYnl0ZXMuQnVmZmVyOiBVbnJlYWRCeXRlOiBwcmV2aW91cyBvcGVyYXRpb24gd2FzIG5vdCBhIHJlYWQiKSB9OyBAImJ5dGVzIi5iwrcyLkAiYnl0ZXMiLmxhc3RSZWFkID0gQCJieXRlcyIucmVhZE9wKDB4MCk7IGlmIEAiYnl0ZXMiLmLCtzIuQCJieXRlcyIub2ZmID4gMHgwIHsgQCJieXRlcyIuYsK3Mi5AImJ5dGVzIi5vZmYtLSB9OyByZXR1cm4gbmlsIH0KCWZ1bmMgKEAiYnl0ZXMiLmLCtzIgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MSIpIFVucmVhZFJ1bmUgKCkgKD8gZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrczICpAImJ5dGVzIi5CdWZmZXIpIFdyaXRlIChAImJ5dGVzIi5wwrc0IFtdYnl0ZSAiZXNjOjB4OSIpIChAImJ5dGVzIi5uwrcxIGludCwgQCJieXRlcyIuZXJywrcyIGVycm9yKQoJZnVuYyAoQCJieXRlcyIuYsK3MiAqQCJieXRlcyIuQnVmZmVyKSBXcml0ZUJ5dGUgKEAiYnl0ZXMiLmPCtzMgYnl0ZSkgKD8gZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrczICpAImJ5dGVzIi5CdWZmZXIpIFdyaXRlUnVuZSAoQCJieXRlcyIucsK3NCBydW5lKSAoQCJieXRlcyIubsK3MSBpbnQsIEAiYnl0ZXMiLmVycsK3MiBlcnJvcikKCWZ1bmMgKEAiYnl0ZXMiLmLCtzMgKkAiYnl0ZXMiLkJ1ZmZlcikgV3JpdGVTdHJpbmcgKEAiYnl0ZXMiLnPCtzQgc3RyaW5nICJlc2M6MHg5IikgKEAiYnl0ZXMiLm7CtzEgaW50LCBAImJ5dGVzIi5lcnLCtzIgZXJyb3IpCglmdW5jIChAImJ5dGVzIi5iwrczICpAImJ5dGVzIi5CdWZmZXIgImVzYzoweDkiKSBXcml0ZVRvIChAImJ5dGVzIi53wrc0IEAiaW8iLldyaXRlcikgKEAiYnl0ZXMiLm7CtzEgaW50NjQsIEAiYnl0ZXMiLmVycsK3MiBlcnJvcikKCWZ1bmMgKEAiYnl0ZXMiLmLCtzIgKkAiYnl0ZXMiLkJ1ZmZlcikgQCJieXRlcyIuZ3JvdyAoQCJieXRlcyIubsK3MyBpbnQpICg/IGludCkKCWZ1bmMgKEAiYnl0ZXMiLmLCtzMgKkAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MjIiKSBAImJ5dGVzIi5yZWFkU2xpY2UgKEAiYnl0ZXMiLmRlbGltwrc0IGJ5dGUpIChAImJ5dGVzIi5saW5lwrcxIFtdYnl0ZSwgQCJieXRlcyIuZXJywrcyIGVycm9yKQoJZnVuYyBAIiIuTWFzc2FnZSAoQCIiLmluwrcyIEAiYnl0ZXMiLkJ1ZmZlciAiZXNjOjB4MSIpICg/IHN0cmluZykKCWZ1bmMgQCIiLmluaXQgKCkKCWltcG9ydCBlcnJvcnMgImVycm9ycyIgLy8gaW5kaXJlY3QKCWZ1bmMgQCJlcnJvcnMiLk5ldyAoQCJlcnJvcnMiLnRleHTCtzIgc3RyaW5nKSAoPyBlcnJvcikgeyByZXR1cm4gKCZAImVycm9ycyIuZXJyb3JTdHJpbmd7IEAiZXJyb3JzIi5zOkAiZXJyb3JzIi50ZXh0wrcyIH0pIH0KCXR5cGUgQCJlcnJvcnMiLmVycm9yU3RyaW5nIHN0cnVjdCB7IEAiZXJyb3JzIi5zIHN0cmluZyB9CglmdW5jIChAImVycm9ycyIuZcK3MiAqQCJlcnJvcnMiLmVycm9yU3RyaW5nICJlc2M6MHgyMiIpIEVycm9yICgpICg/IHN0cmluZykgeyByZXR1cm4gQCJlcnJvcnMiLmXCtzIuQCJlcnJvcnMiLnMgfQoKJCQKX2dvXy5vICAgICAgICAgIDAg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AIoQCAoAACRydW50aW1lLnBhbmljaW5kZXgAAACYEAgKAAAkcnVudGltZS5wYW5pY3NsaWNlAAAAphAICgAAJHJ1bnRpbWUucGFuaWNpbmRleAAAALQQCAoAACRydW50aW1lLnBhbmljc2xpY2UAAADCEAgKAAAkcnVudGltZS5wYW5pY2luZGV4AAAA0BAICgAAJHJ1bnRpbWUucGFuaWNzbGljZQAAAN4QCAoAACRydW50aW1lLnBhbmljaW5kZXgAAADsEAgKAAAkcnVudGltZS5wYW5pY3NsaWNlAAAA+hAICgAAJHJ1bnRpbWUucGFuaWNpbmRleAAAAIgRCAoAACRydW50aW1lLnBhbmljc2xpY2UAAACWEQgKAAAkcnVudGltZS5wYW5pY2luZGV4AAAApBEICgAAJHJ1bnRpbWUucGFuaWNzbGljZQAAALIRCAoAADBydW50aW1lLm1vcmVzdGFja19ub2N0eHQAAACAArADAAAkHiIiLmF1dG90bXBfMDAxMwAAAhZ0eXBlLnN0cmluZwAeIiIuYXV0b3RtcF8wMDEyAAACEHR5cGUuaW50AB4iIi5hdXRvdG1wXzAwMTEAAAIWdHlwZS5zdHJpbmcAHiIiLmF1dG90bXBfMDAxMAAAAhB0eXBlLmludAAeIiIuYXV0b3RtcF8wMDA5AAACFnR5cGUuc3RyaW5nAB4iIi5hdXRvdG1wXzAwMDgAAAIQdHlwZS5pbnQAHiIiLmF1dG90bXBfMDAwNwAAAhZ0eXBlLnN0cmluZwAeIiIuYXV0b3RtcF8wMDA2AAACEHR5cGUuaW50AB4iIi5hdXRvdG1wXzAwMDUA/wECFnR5cGUuc3RyaW5nAB4iIi5hdXRvdG1wXzAwMDMA3wECFnR5cGUuc3RyaW5nAB4iIi5hdXRvdG1wXzAwMDIAAAIQdHlwZS5pbnQADCIiLn5yMAC/AQIYdHlwZS5bXXVpbnQ4AAwiIi5sb2MALwIUdHlwZS5bXWludAAMIiIubG9jAI8BAhR0eXBlLltdaW50AAwiIi5sb2MAXwIUdHlwZS5bXWludAAMIiIuc3ZnAJ8CAhZ0eXBlLnN0cmluZwAMIiIufnIxAOABBBZ0eXBlLnN0cmluZwAKIiIuaW4AAAQidHlwZS5ieXRlcy5CdWZmZXIAGgImsAPWB68DAbADcwAIAvAIAFowOAJtCFUuXwIcBIQBBl8CHAZ9Bk8CHASJAQYYBQ4DDgcOBQ4HDgMONwcBGAACLgCWAQKDAQLRAQEuAsoBAS4CxgEBmgEABFRnY2xvY2Fsc8K3N2EzMjNjYTFjMTU4ODBmMWQ2NTRlYjY5MWU2NzQ2YTAAVGdjbG9jYWxzwrc1YmExMmMzZWY3YTUyNDk0ZjMzMDNhNmJmN2ZkMjRjNwAAAAJwcHJlYnVpbHRzL2dvL2xpbnV4LXg4Ni9zcmMvY21kL3Bwcm9mL2ludGVybmFsL3N2Zy9zdmcuZ28C/gIOIiIuaW5pdAAAoAUAAIgFZUiLDCUoAAAASIuJAAAAAEg7YRAPhiABAABIg+wYD7YdAAAAAID7AHQYD7YdAAAAAID7AnUFSIPEGMPoAAAAAA8LxgUAAAAAAegAAAAA6AAAAADoAAAAAEiNHQAAAABIiRwkSMdEJAg3AAAA6AAAAABIi1wkEIA9AAAAAAAPhZ0AAABIiR0AAAAASI0dAAAAAEiJHCRIx0QkCA8AAADoAAAAAEiLXCQQgD0AAAAAAHVYSIkdAAAAAEiNHQAAAABIiRwkSMdEJAgGAAAA6AAAAABIi1wkEIA9AAAAAAB1E0iJHQAAAADGBQAAAAACSIPEGMNIjS0AAAAASIksJEiJXCQI6AAAAADr3UiNLQAAAABIiSwkSIlcJAjoAAAAAOuYSI0tAAAAAEiJLCRIiVwkCOgAAAAA6VD////oAAAAAOm8/v//OBgIGgAAAAAAAEIIFgAAGiIiLmluaXRkb25lwrcAAABaCBYAABoiIi5pbml0ZG9uZcK3AAAAeAgKAAAicnVudGltZS50aHJvd2luaXQAAACIAQgWAQAaIiIuaW5pdGRvbmXCtwAAAJQBCAoAABRieXRlcy5pbml0AAAAngEICgAAFnJlZ2V4cC5pbml0AAAAqAEICgAAGHN0cmluZ3MuaW5pdAAAALYBCBYAAJ4BZ28uc3RyaW5nLiI8c3ZnXFxzKndpZHRoPVwiW15cIl0rXCJcXHMqaGVpZ2h0PVwiW15cIl0rXCJcXHMqdmlld0JveD1cIlteXCJdK1wiIgAAANoBCAoAACRyZWdleHAuTXVzdENvbXBpbGUAAADwAQgWAQA2cnVudGltZS53cml0ZUJhcnJpZXJFbmFibGVkAAAAjAIIFgAAFCIiLnZpZXdCb3gAAACaAggWAAA8Z28uc3RyaW5nLiI8ZyBpZD1cImdyYXBoXFxkXCIiAAAAvgIICgAAJHJlZ2V4cC5NdXN0Q29tcGlsZQAAANQCCBYBADZydW50aW1lLndyaXRlQmFycmllckVuYWJsZWQAAADoAggWAAAUIiIuZ3JhcGhJZAAAAPYCCBYAACRnby5zdHJpbmcuIjwvc3ZnPiIAAACaAwgKAAAkcmVnZXhwLk11c3RDb21waWxlAAAAsAMIFgEANnJ1bnRpbWUud3JpdGVCYXJyaWVyRW5hYmxlZAAAAMQDCBYAABYiIi5zdmdDbG9zZQAAANADCBYBABoiIi5pbml0ZG9uZcK3AAAA6gMIFgAAFiIiLnN2Z0Nsb3NlAAAAhgQICgAALnJ1bnRpbWUud3JpdGViYXJyaWVycHRyAAAAmAQIFgAAFCIiLmdyYXBoSWQAAAC0BAgKAAAucnVudGltZS53cml0ZWJhcnJpZXJwdHIAAADGBAgWAAAUIiIudmlld0JveAAAAOIECAoAAC5ydW50aW1lLndyaXRlYmFycmllcnB0cgAAAPYECAoAADBydW50aW1lLm1vcmVzdGFja19ub2N0eHQAAAAAMAAAABwCHjAcLwEwtgEvATBeACACWAKOAQEMAhUBAgIxARYAMnZYVTICLgIuUgxRFVICUxUCAgMVAgVUFgACDAA7ApUCAARUZ2Nsb2NhbHPCtzMzY2RlY2NjY2ViZTgwMzI5ZjFmZGJlZTdmNTg3NGNiAFRnY2xvY2Fsc8K3MzNjZGVjY2NjZWJlODAzMjlmMWZkYmVlN2Y1ODc0Y2IAAAAEdnByZWJ1aWx0cy9nby9saW51eC14ODYvc3JjL2NtZC9wcHJvZi9pbnRlcm5hbC9zdmcvc3ZncGFuLmdvAnBwcmVidWlsdHMvZ28vbGludXgteDg2L3NyYy9jbWQvcHByb2YvaW50ZXJuYWwvc3ZnL3N2Zy5nbwL+ECRnby5zdHJpbmcuaGRyLiImOyIABiAAACAAAAAAAAAAAAIAAAAAAAAAAgAQAgAAHGdvLnN0cmluZy4iJjsiAAAA/hAcZ28uc3RyaW5nLiImOyIABhAAAAYmOwAA/hAsZ28uc3RyaW5nLmhkci4iJmFtcDs7IgAGIAAAIAAAAAAAAAAABgAAAAAAAAACABACAAAkZ28uc3RyaW5nLiImYW1wOzsiAAAA/hAkZ28uc3RyaW5nLiImYW1wOzsiAAYQAAAOJmFtcDs7AAD+EGZnby5zdHJpbmcuaGRyLiI8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiIABiAAACAAAAAAAAAAAB8AAAAAAAAAAgAQAgAAXmdvLnN0cmluZy4iPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIiAAAA/hBeZ28uc3RyaW5nLiI8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiIABkAAAEA8c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiAAD+ECQiIi5oZHIuLmdvc3RyaW5nLjEABiAAACAAAAAAAAAAAOYdAAAAAAAAAgAQAgAAHCIiLi5nb3N0cmluZy4xAAAA/hAcIiIuLmdvc3RyaW5nLjEABtB3AADOdzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij48IVtDREFUQVsKLyoqIAogKiAgU1ZHUGFuIGxpYnJhcnkgMS4yLjEKICogPT09PT09PT09PT09PT09PT09PT09PQogKgogKiBHaXZlbiBhbiB1bmlxdWUgZXhpc3RpbmcgZWxlbWVudCB3aXRoIGlkICJ2aWV3cG9ydCIgKG9yIHdoZW4gbWlzc2luZywgdGhlIGZpcnN0IGcgCiAqIGVsZW1lbnQpLCBpbmNsdWRpbmcgdGhlIHRoZSBsaWJyYXJ5IGludG8gYW55IFNWRyBhZGRzIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOgogKgogKiAgLSBNb3VzZSBwYW5uaW5nCiAqICAtIE1vdXNlIHpvb21pbmcgKHVzaW5nIHRoZSB3aGVlbCkKICogIC0gT2JqZWN0IGRyYWdnaW5nCiAqCiAqIFlvdSBjYW4gY29uZmlndXJlIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHBhbi96b29tL2RyYWcgd2l0aCB0aGUgdmFyaWFibGVzCiAqIGxpc3RlZCBpbiB0aGUgQ09ORklHVVJBVElPTiBzZWN0aW9uIG9mIHRoaXMgZmlsZS4KICoKICogS25vd24gaXNzdWVzOgogKgogKiAgLSBab29taW5nICh3aGlsZSBwYW5uaW5nKSBvbiBTYWZhcmkgaGFzIHN0aWxsIHNvbWUgaXNzdWVzCiAqCiAqIFJlbGVhc2VzOgogKgogKiAxLjIuMSwgTW9uIEp1bCAgNCAwMDozMzoxOCBDRVNUIDIwMTEsIEFuZHJlYSBMZW9mcmVkZGkKICoJLSBGaXhlZCBhIHJlZ3Jlc3Npb24gd2l0aCBtb3VzZSB3aGVlbCAobm93IHdvcmtpbmcgb24gRmlyZWZveCA1KQogKgktIFdvcmtpbmcgd2l0aCB2aWV3Qm94IGF0dHJpYnV0ZSAoIzQpCiAqCS0gQWRkZWQgInVzZSBzdHJpY3Q7IiBhbmQgZml4ZWQgcmVzdWx0aW5nIHdhcm5pbmdzICgjNSkKICoJLSBBZGRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgZHJhZ2dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoIzMpCiAqCiAqIDEuMiwgU2F0IE1hciAyMCAwODo0Mjo1MCBHTVQgMjAxMCwgWmVuZyBYaWFvaHVpCiAqCUZpeGVkIGEgYnVnIHdpdGggYnJvd3NlciBtb3VzZSBoYW5kbGVyIGludGVyYWN0aW9uCiAqCiAqIDEuMSwgV2VkIEZlYiAgMyAxNzozOTozMyBHTVQgMjAxMCwgWmVuZyBYaWFvaHVpCiAqCVVwZGF0ZWQgdGhlIHpvb20gY29kZSB0byBzdXBwb3J0IHRoZSBtb3VzZSB3aGVlbCBvbiBTYWZhcmkvQ2hyb21lCiAqCiAqIDEuMCwgQW5kcmVhIExlb2ZyZWRkaQogKglGaXJzdCByZWxlYXNlCiAqCiAqIFRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nIEJTRCBsaWNlbnNlOgogKgogKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEFuZHJlYSBMZW9mcmVkZGkgPGEubGVvZnJlZGRpQGl0Y2hhcm0uY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQogKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICogCiAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogCiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqICAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQW5kcmVhIExlb2ZyZWRkaSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQW5kcmVhIExlb2ZyZWRkaSBPUgogKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwogKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqIAogKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZQogKiBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZAogKiBvciBpbXBsaWVkLCBvZiBBbmRyZWEgTGVvZnJlZGRpLgogKi8KCiJ1c2Ugc3RyaWN0IjsKCi8vLyBDT05GSUdVUkFUSU9OIAovLy8gPT09PT4KCnZhciBlbmFibGVQYW4gPSAxOyAvLyAxIG9yIDA6IGVuYWJsZSBvciBkaXNhYmxlIHBhbm5pbmcgKGRlZmF1bHQgZW5hYmxlZCkKdmFyIGVuYWJsZVpvb20gPSAxOyAvLyAxIG9yIDA6IGVuYWJsZSBvciBkaXNhYmxlIHpvb21pbmcgKGRlZmF1bHQgZW5hYmxlZCkKdmFyIGVuYWJsZURyYWcgPSAwOyAvLyAxIG9yIDA6IGVuYWJsZSBvciBkaXNhYmxlIGRyYWdnaW5nIChkZWZhdWx0IGRpc2FibGVkKQoKLy8vIDw9PT09Ci8vLyBFTkQgT0YgQ09ORklHVVJBVElPTiAKCnZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoKdmFyIHN0YXRlID0gJ25vbmUnLCBzdmdSb290LCBzdGF0ZVRhcmdldCwgc3RhdGVPcmlnaW4sIHN0YXRlVGY7CgpzZXR1cEhhbmRsZXJzKHJvb3QpOwoKLyoqCiAqIFJlZ2lzdGVyIGhhbmRsZXJzCiAqLwpmdW5jdGlvbiBzZXR1cEhhbmRsZXJzKHJvb3QpewoJc2V0QXR0cmlidXRlcyhyb290LCB7CgkJIm9ubW91c2V1cCIgOiAiaGFuZGxlTW91c2VVcChldnQpIiwKCQkib25tb3VzZWRvd24iIDogImhhbmRsZU1vdXNlRG93bihldnQpIiwKCQkib25tb3VzZW1vdmUiIDogImhhbmRsZU1vdXNlTW92ZShldnQpIiwKCQkvLyJvbm1vdXNlb3V0IiA6ICJoYW5kbGVNb3VzZVVwKGV2dCkiLCAvLyBEZWNvbW1lbnQgdGhpcyB0byBzdG9wIHRoZSBwYW4gZnVuY3Rpb25hbGl0eSB3aGVuIGRyYWdnaW5nIG91dCBvZiB0aGUgU1ZHIGVsZW1lbnQKCX0pOwoKCWlmKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd3ZWJraXQnKSA+PSAwKQoJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgaGFuZGxlTW91c2VXaGVlbCwgZmFsc2UpOyAvLyBDaHJvbWUvU2FmYXJpCgllbHNlCgkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgaGFuZGxlTW91c2VXaGVlbCwgZmFsc2UpOyAvLyBPdGhlcnMKfQoKLyoqCiAqIFJldHJpZXZlcyB0aGUgcm9vdCBlbGVtZW50IGZvciBTVkcgbWFuaXB1bGF0aW9uLiBUaGUgZWxlbWVudCBpcyB0aGVuIGNhY2hlZCBpbnRvIHRoZSBzdmdSb290IGdsb2JhbCB2YXJpYWJsZS4KICovCmZ1bmN0aW9uIGdldFJvb3Qocm9vdCkgewoJaWYodHlwZW9mKHN2Z1Jvb3QpID09ICJ1bmRlZmluZWQiKSB7CgkJdmFyIGcgPSBudWxsOwoKCQlnID0gcm9vdC5nZXRFbGVtZW50QnlJZCgidmlld3BvcnQiKTsKCgkJaWYoZyA9PSBudWxsKQoJCQlnID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZycpWzBdOwoKCQlpZihnID09IG51bGwpCgkJCWFsZXJ0KCdVbmFibGUgdG8gb2J0YWluIFNWRyByb290IGVsZW1lbnQnKTsKCgkJc2V0Q1RNKGcsIGcuZ2V0Q1RNKCkpOwoKCQlnLnJlbW92ZUF0dHJpYnV0ZSgidmlld0JveCIpOwoKCQlzdmdSb290ID0gZzsKCX0KCglyZXR1cm4gc3ZnUm9vdDsKfQoKLyoqCiAqIEluc3RhbmNlIGFuIFNWR1BvaW50IG9iamVjdCB3aXRoIGdpdmVuIGV2ZW50IGNvb3JkaW5hdGVzLgogKi8KZnVuY3Rpb24gZ2V0RXZlbnRQb2ludChldnQpIHsKCXZhciBwID0gcm9vdC5jcmVhdGVTVkdQb2ludCgpOwoKCXAueCA9IGV2dC5jbGllbnRYOwoJcC55ID0gZXZ0LmNsaWVudFk7CgoJcmV0dXJuIHA7Cn0KCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBtYXRyaXggb2YgYW4gZWxlbWVudC4KICovCmZ1bmN0aW9uIHNldENUTShlbGVtZW50LCBtYXRyaXgpIHsKCXZhciBzID0gIm1hdHJpeCgiICsgbWF0cml4LmEgKyAiLCIgKyBtYXRyaXguYiArICIsIiArIG1hdHJpeC5jICsgIiwiICsgbWF0cml4LmQgKyAiLCIgKyBtYXRyaXguZSArICIsIiArIG1hdHJpeC5mICsgIikiOwoKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCBzKTsKfQoKLyoqCiAqIER1bXBzIGEgbWF0cml4IHRvIGEgc3RyaW5nICh1c2VmdWwgZm9yIGRlYnVnKS4KICovCmZ1bmN0aW9uIGR1bXBNYXRyaXgobWF0cml4KSB7Cgl2YXIgcyA9ICJbICIgKyBtYXRyaXguYSArICIsICIgKyBtYXRyaXguYyArICIsICIgKyBtYXRyaXguZSArICJcbiAgIiArIG1hdHJpeC5iICsgIiwgIiArIG1hdHJpeC5kICsgIiwgIiArIG1hdHJpeC5mICsgIlxuICAwLCAwLCAxIF0iOwoKCXJldHVybiBzOwp9CgovKioKICogU2V0cyBhdHRyaWJ1dGVzIG9mIGFuIGVsZW1lbnQuCiAqLwpmdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpewoJZm9yICh2YXIgaSBpbiBhdHRyaWJ1dGVzKQoJCWVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgaSwgYXR0cmlidXRlc1tpXSk7Cn0KCi8qKgogKiBIYW5kbGUgbW91c2Ugd2hlZWwgZXZlbnQuCiAqLwpmdW5jdGlvbiBoYW5kbGVNb3VzZVdoZWVsKGV2dCkgewoJaWYoIWVuYWJsZVpvb20pCgkJcmV0dXJuOwoKCWlmKGV2dC5wcmV2ZW50RGVmYXVsdCkKCQlldnQucHJldmVudERlZmF1bHQoKTsKCglldnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKCgl2YXIgc3ZnRG9jID0gZXZ0LnRhcmdldC5vd25lckRvY3VtZW50OwoKCXZhciBkZWx0YTsKCglpZihldnQud2hlZWxEZWx0YSkKCQlkZWx0YSA9IGV2dC53aGVlbERlbHRhIC8gMzYwMDsgLy8gQ2hyb21lL1NhZmFyaQoJZWxzZQoJCWRlbHRhID0gZXZ0LmRldGFpbCAvIC05MDsgLy8gTW96aWxsYQoKCXZhciB6ID0gMSArIGRlbHRhOyAvLyBab29tIGZhY3RvcjogMC45LzEuMQoKCXZhciBnID0gZ2V0Um9vdChzdmdEb2MpOwoJCgl2YXIgcCA9IGdldEV2ZW50UG9pbnQoZXZ0KTsKCglwID0gcC5tYXRyaXhUcmFuc2Zvcm0oZy5nZXRDVE0oKS5pbnZlcnNlKCkpOwoKCS8vIENvbXB1dGUgbmV3IHNjYWxlIG1hdHJpeCBpbiBjdXJyZW50IG1vdXNlIHBvc2l0aW9uCgl2YXIgayA9IHJvb3QuY3JlYXRlU1ZHTWF0cml4KCkudHJhbnNsYXRlKHAueCwgcC55KS5zY2FsZSh6KS50cmFuc2xhdGUoLXAueCwgLXAueSk7CgogICAgICAgIHNldENUTShnLCBnLmdldENUTSgpLm11bHRpcGx5KGspKTsKCglpZih0eXBlb2Yoc3RhdGVUZikgPT0gInVuZGVmaW5lZCIpCgkJc3RhdGVUZiA9IGcuZ2V0Q1RNKCkuaW52ZXJzZSgpOwoKCXN0YXRlVGYgPSBzdGF0ZVRmLm11bHRpcGx5KGsuaW52ZXJzZSgpKTsKfQoKLyoqCiAqIEhhbmRsZSBtb3VzZSBtb3ZlIGV2ZW50LgogKi8KZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2dCkgewoJaWYoZXZ0LnByZXZlbnREZWZhdWx0KQoJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoKCWV2dC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoKCXZhciBzdmdEb2MgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7CgoJdmFyIGcgPSBnZXRSb290KHN2Z0RvYyk7CgoJaWYoc3RhdGUgPT0gJ3BhbicgJiYgZW5hYmxlUGFuKSB7CgkJLy8gUGFuIG1vZGUKCQl2YXIgcCA9IGdldEV2ZW50UG9pbnQoZXZ0KS5tYXRyaXhUcmFuc2Zvcm0oc3RhdGVUZik7CgoJCXNldENUTShnLCBzdGF0ZVRmLmludmVyc2UoKS50cmFuc2xhdGUocC54IC0gc3RhdGVPcmlnaW4ueCwgcC55IC0gc3RhdGVPcmlnaW4ueSkpOwoJfSBlbHNlIGlmKHN0YXRlID09ICdkcmFnJyAmJiBlbmFibGVEcmFnKSB7CgkJLy8gRHJhZyBtb2RlCgkJdmFyIHAgPSBnZXRFdmVudFBvaW50KGV2dCkubWF0cml4VHJhbnNmb3JtKGcuZ2V0Q1RNKCkuaW52ZXJzZSgpKTsKCgkJc2V0Q1RNKHN0YXRlVGFyZ2V0LCByb290LmNyZWF0ZVNWR01hdHJpeCgpLnRyYW5zbGF0ZShwLnggLSBzdGF0ZU9yaWdpbi54LCBwLnkgLSBzdGF0ZU9yaWdpbi55KS5tdWx0aXBseShnLmdldENUTSgpLmludmVyc2UoKSkubXVsdGlwbHkoc3RhdGVUYXJnZXQuZ2V0Q1RNKCkpKTsKCgkJc3RhdGVPcmlnaW4gPSBwOwoJfQp9CgovKioKICogSGFuZGxlIGNsaWNrIGV2ZW50LgogKi8KZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2dCkgewoJaWYoZXZ0LnByZXZlbnREZWZhdWx0KQoJCWV2dC5wcmV2ZW50RGVmYXVsdCgpOwoKCWV2dC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoKCXZhciBzdmdEb2MgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7CgoJdmFyIGcgPSBnZXRSb290KHN2Z0RvYyk7CgoJaWYoCgkJZXZ0LnRhcmdldC50YWdOYW1lID09ICJzdmciIAoJCXx8ICFlbmFibGVEcmFnIC8vIFBhbiBhbnl3YXkgd2hlbiBkcmFnIGlzIGRpc2FibGVkIGFuZCB0aGUgdXNlciBjbGlja2VkIG9uIGFuIGVsZW1lbnQgCgkpIHsKCQkvLyBQYW4gbW9kZQoJCXN0YXRlID0gJ3Bhbic7CgoJCXN0YXRlVGYgPSBnLmdldENUTSgpLmludmVyc2UoKTsKCgkJc3RhdGVPcmlnaW4gPSBnZXRFdmVudFBvaW50KGV2dCkubWF0cml4VHJhbnNmb3JtKHN0YXRlVGYpOwoJfSBlbHNlIHsKCQkvLyBEcmFnIG1vZGUKCQlzdGF0ZSA9ICdkcmFnJzsKCgkJc3RhdGVUYXJnZXQgPSBldnQudGFyZ2V0OwoKCQlzdGF0ZVRmID0gZy5nZXRDVE0oKS5pbnZlcnNlKCk7CgoJCXN0YXRlT3JpZ2luID0gZ2V0RXZlbnRQb2ludChldnQpLm1hdHJpeFRyYW5zZm9ybShzdGF0ZVRmKTsKCX0KfQoKLyoqCiAqIEhhbmRsZSBtb3VzZSBidXR0b24gcmVsZWFzZSBldmVudC4KICovCmZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoZXZ0KSB7CglpZihldnQucHJldmVudERlZmF1bHQpCgkJZXZ0LnByZXZlbnREZWZhdWx0KCk7CgoJZXZ0LnJldHVyblZhbHVlID0gZmFsc2U7CgoJdmFyIHN2Z0RvYyA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudDsKCglpZihzdGF0ZSA9PSAncGFuJyB8fCBzdGF0ZSA9PSAnZHJhZycpIHsKCQkvLyBRdWl0IHBhbiBtb2RlCgkJc3RhdGUgPSAnJzsKCX0KfQoKXV0+PC9zY3JpcHQ+PGcgaWQ9InZpZXdwb3J0IiB0cmFuc2Zvcm09InNjYWxlKDAuNSwwLjUpIHRyYW5zbGF0ZSgwLDApIj4AAP4QKGdvLnN0cmluZy5oZHIuIjwvZz4iAAYgAAAgAAAAAAAAAAAEAAAAAAAAAAIAEAIAACBnby5zdHJpbmcuIjwvZz4iAAAA/hAgZ28uc3Ry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AAwwEAKgBAAgcnVudGltZS5hbGdhcnJheQAAAEAQAgAAInJ1bnRpbWUuZ2NiaXRzLjAxAAAAUBACAAAuZ28uc3RyaW5nLmhkci4iW111aW50OCIAAABwEAIAACpnby53ZWFrLnR5cGUuKltddWludDgAAACAARACAAAicnVudGltZS56ZXJvdmFsdWUAAACQARACAAAUdHlwZS51aW50OAAAAP4QNmdvLnR5cGVsaW5rLltddWludDgJW111aW50OAACEAAAEAAAAAAAAAAAAgAQAgAAGHR5cGUuW111aW50OAAAAP4QLmdvLnN0cmluZy5oZHIuInJ1bnRpbWUiAAYgAAAgAAAAAAAAAAAHAAAAAAAAAAIAEAIAACZnby5zdHJpbmcuInJ1bnRpbWUiAAAA/hAmZ28uc3RyaW5nLiJydW50aW1lIgAGEAAAEHJ1bnRpbWUAAP4QLGdvLmltcG9ydHBhdGgucnVudGltZS4AAiAAACAAAAAAAAAAAAcAAAAAAAAAAgAQAgAAJmdvLnN0cmluZy4icnVudGltZSIAAAD+ECpnby5zdHJpbmcuaGRyLiJieXRlcyIABiAAACAAAAAAAAAAAAUAAAAAAAAAAgAQAgAAImdvLnN0cmluZy4iYnl0ZXMiAAAA/hAiZ28uc3RyaW5nLiJieXRlcyIABhAAAAxieXRlcwAA/hAoZ28uaW1wb3J0cGF0aC5ieXRlcy4AAiAAACAAAAAAAAAAAAUAAAAAAAAAAgAQAgAAImdvLnN0cmluZy4iYnl0ZXMiAAAA/hAsZ28uc3RyaW5nLmhkci4icmVnZXhwIgAGIAAAIAAAAAAAAAAABgAAAAAAAAACABACAAAkZ28uc3RyaW5nLiJyZWdleHAiAAAA/hAkZ28uc3RyaW5nLiJyZWdleHAiAAYQAAAOcmVnZXhwAAD+ECpnby5pbXBvcnRwYXRoLnJlZ2V4cC4AAiAAACAAAAAAAAAAAAYAAAAAAAAAAgAQAgAAJGdvLnN0cmluZy4icmVnZXhwIgAAAP4QLmdvLnN0cmluZy5oZHIuInN0cmluZ3MiAAYgAAAgAAAAAAAAAAAHAAAAAAAAAAIAEAIAACZnby5zdHJpbmcuInN0cmluZ3MiAAAA/hAmZ28uc3RyaW5nLiJzdHJpbmdzIgAGEAAAEHN0cmluZ3MAAP4QLGdvLmltcG9ydHBhdGguc3RyaW5ncy4AAiAAACAAAAAAAAAAAAcAAAAAAAAAAgAQAgAAJmdvLnN0cmluZy4ic3RyaW5ncyIAAAD+ECJydW50aW1lLnplcm92YWx1ZQACAAAAAAD//2dvMTNsZA==