A/MNCmL5IVRjAAAAAAAAAAADAAAAQAAAAHO8AAAAZAAAWgAAZAEAZAIAbAEAVGQBAGQDAGwBAG0CAFoCAAFkBABkBQBkBgCEAgBaAwBkBwCEAABaBABlBQBlBgBkCACEAgBaBwBkCQCEAABaCABkCgCEAABaCQBkCwBkDACEAQBaCgBkDQCEAABaCwBkDgCEAABaDABlBQBkDwCEAQBaDQBkEACEAABaDgBkEQBlDwBmAQBkEgCEAACDAABZWhAAZBMAZRAAZgEAZBQAhAAAgwAAWVoRAGQVAFMoFgAAAHNIBAAACiAgICBhc3QKICAgIH5+fgoKICAgIFRoZSBgYXN0YCBtb2R1bGUgaGVscHMgUHl0aG9uIGFwcGxpY2F0aW9ucyB0byBwcm9jZXNzIHRyZWVzIG9mIHRoZSBQeXRob24KICAgIGFic3RyYWN0IHN5bnRheCBncmFtbWFyLiAgVGhlIGFic3RyYWN0IHN5bnRheCBpdHNlbGYgbWlnaHQgY2hhbmdlIHdpdGgKICAgIGVhY2ggUHl0aG9uIHJlbGVhc2U7IHRoaXMgbW9kdWxlIGhlbHBzIHRvIGZpbmQgb3V0IHByb2dyYW1tYXRpY2FsbHkgd2hhdAogICAgdGhlIGN1cnJlbnQgZ3JhbW1hciBsb29rcyBsaWtlIGFuZCBhbGxvd3MgbW9kaWZpY2F0aW9ucyBvZiBpdC4KCiAgICBBbiBhYnN0cmFjdCBzeW50YXggdHJlZSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHBhc3NpbmcgYGFzdC5QeUNGX09OTFlfQVNUYCBhcwogICAgYSBmbGFnIHRvIHRoZSBgY29tcGlsZSgpYCBidWlsdGluIGZ1bmN0aW9uIG9yIGJ5IHVzaW5nIHRoZSBgcGFyc2UoKWAKICAgIGZ1bmN0aW9uIGZyb20gdGhpcyBtb2R1bGUuICBUaGUgcmVzdWx0IHdpbGwgYmUgYSB0cmVlIG9mIG9iamVjdHMgd2hvc2UKICAgIGNsYXNzZXMgYWxsIGluaGVyaXQgZnJvbSBgYXN0LkFTVGAuCgogICAgQSBtb2RpZmllZCBhYnN0cmFjdCBzeW50YXggdHJlZSBjYW4gYmUgY29tcGlsZWQgaW50byBhIFB5dGhvbiBjb2RlIG9iamVjdAogICAgdXNpbmcgdGhlIGJ1aWx0LWluIGBjb21waWxlKClgIGZ1bmN0aW9uLgoKICAgIEFkZGl0aW9uYWxseSB2YXJpb3VzIGhlbHBlciBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRoYXQgbWFrZSB3b3JraW5nIHdpdGgKICAgIHRoZSB0cmVlcyBzaW1wbGVyLiAgVGhlIG1haW4gaW50ZW50aW9uIG9mIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGFuZCB0aGlzCiAgICBtb2R1bGUgaW4gZ2VuZXJhbCBpcyB0byBwcm92aWRlIGFuIGVhc3kgdG8gdXNlIGludGVyZmFjZSBmb3IgbGlicmFyaWVzCiAgICB0aGF0IHdvcmsgdGlnaHRseSB3aXRoIHRoZSBweXRob24gc3ludGF4ICh0ZW1wbGF0ZSBlbmdpbmVzIGZvciBleGFtcGxlKS4KCgogICAgOmNvcHlyaWdodDogQ29weXJpZ2h0IDIwMDggYnkgQXJtaW4gUm9uYWNoZXIuCiAgICA6bGljZW5zZTogUHl0aG9uIExpY2Vuc2UuCmn/////KAEAAAB0AQAAACooAQAAAHQLAAAAX192ZXJzaW9uX19zCQAAADx1bmtub3duPnQEAAAAZXhlY2MDAAAAAwAAAAUAAABDAAAAcxMAAAB0AAB8AAB8AQB8AgB0AQCDBABTKAEAAABzbgAAAAogICAgUGFyc2UgdGhlIHNvdXJjZSBpbnRvIGFuIEFTVCBub2RlLgogICAgRXF1aXZhbGVudCB0byBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIFB5Q0ZfT05MWV9BU1QpLgogICAgKAIAAAB0BwAAAGNvbXBpbGV0DQAAAFB5Q0ZfT05MWV9BU1QoAwAAAHQGAAAAc291cmNldAgAAABmaWxlbmFtZXQEAAAAbW9kZSgAAAAAKAAAAABzbgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvYXN0LnB5dAUAAABwYXJzZSAAAABzAgAAAAAFYwEAAAABAAAABAAAAAMAAABzdgAAAGkDAGQHAGQBADZ0AQBkAgA2dAIAZAMANokBAHQDAHwAAHQEAIMCAHI/AHQFAHwAAGQEAGQFAIMBAX0AAG4AAHQDAHwAAHQGAIMCAHJaAHwAAGoHAH0AAG4AAIcAAIcBAGYCAGQGAIYAAIkAAIgAAHwAAIMBAFMoCAAAAHP6AAAACiAgICBTYWZlbHkgZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBub2RlIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBQeXRob24KICAgIGV4cHJlc3Npb24uICBUaGUgc3RyaW5nIG9yIG5vZGUgcHJvdmlkZWQgbWF5IG9ubHkgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nCiAgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywgYm9vbGVhbnMsCiAgICBhbmQgTm9uZS4KICAgIHQEAAAATm9uZXQEAAAAVHJ1ZXQFAAAARmFsc2VSBwAAAHQEAAAAZXZhbGMBAAAAAwAAAAoAAAATAAAAc6UBAAB0AAB8AAB0AQCDAgByFgB8AABqAgBTdAAAfAAAdAMAgwIAciwAfAAAagQAU3QAAHwAAHQFAIMCAHJRAHQGAHQHAIgAAHwAAGoIAIMCAIMBAFN0AAB8AAB0CQCDAgBydgB0CgB0BwCIAAB8AABqCACDAgCDAQBTdAAAfAAAdAsAgwIAcq4AdAwAhwAAZgEAZAEAhgAAdA0AfAAAag4AfAAAag8AgwIARIMBAIMBAFN0AAB8AAB0EACDAgBy2gB8AABqEQCIAQBrBgBylQGIAQB8AABqEQAZU267AHQAAHwAAHQSAIMCAHKVAXQAAHwAAGoTAHQUAHQVAGYCAIMCAHKVAXQAAHwAAGoWAHQDAIMCAHKVAXQAAHwAAGoWAGoEAHQXAIMCAHKVAXQAAHwAAGoYAHQDAIMCAHKVAXQAAHwAAGoYAGoEAHQZAHQaAHQbAGYDAIMCAHKVAXwAAGoYAGoEAH0BAHwAAGoWAGoEAH0CAHQAAHwAAGoTAHQUAIMCAHKKAXwBAHwCABdTfAEAfAIAGFNuAAB0HABkAgCDAQCCAQBkAABTKAMAAABOYwEAAAADAAAABAAAADMAAABzLQAAAHwAAF0jAFwCAH0BAH0CAIgAAHwBAIMBAIgAAHwCAIMBAGYCAFYBcQMAZAAAUygBAAAATigAAAAAKAMAAAB0AgAAAC4wdAEAAABrdAEAAAB2KAEAAAB0CAAAAF9jb252ZXJ0KAAAAABzbgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvYXN0LnB5cwkAAAA8Z2VuZXhwcj4+AAAAcwIAAAAGAHMQAAAAbWFsZm9ybWVkIHN0cmluZygdAAAAdAoAAABpc2luc3RhbmNldAMAAABTdHJ0AQAAAHN0AwAAAE51bXQBAAAAbnQFAAAAVHVwbGV0BQAAAHR1cGxldAMAAABtYXB0BAAAAGVsdHN0BAAAAExpc3R0BAAAAGxpc3R0BAAAAERpY3R0BAAAAGRpY3R0AwAAAHppcHQEAAAAa2V5c3QGAAAAdmFsdWVzdAQAAABOYW1ldAIAAABpZHQFAAAAQmluT3B0AgAAAG9wdAMAAABBZGR0AwAAAFN1YnQFAAAAcmlnaHR0BwAAAGNvbXBsZXh0BAAAAGxlZnR0AwAAAGludHQEAAAAbG9uZ3QFAAAAZmxvYXR0CgAAAFZhbHVlRXJyb3IoAwAAAHQEAAAAbm9kZVIpAAAAUicAAAAoAgAAAFIQAAAAdAsAAABfc2FmZV9uYW1lcygAAAAAc24AAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2FzdC5weVIQAAAANAAAAHM0AAAAAAEPAQcBDwEHAQ8BFgEPARYBDwEPARoBDwEPAQ4BDwEYARIBFQESAR4BDAEMARIBCAILAU4oCAAAAFIJAAAAUgoAAABSCwAAAFIRAAAAdAoAAABiYXNlc3RyaW5nUggAAAB0CgAAAEV4cHJlc3Npb250BAAAAGJvZHkoAQAAAHQOAAAAbm9kZV9vcl9zdHJpbmcoAAAAACgCAAAAUhAAAABSLwAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWls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AGQAAFMoAQAAAE4oAAAAACgCAAAAUg0AAAB0AQAAAHgoAQAAAFI6AAAAKAAAAABzbgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvYXN0LnB5cwkAAAA8Z2VuZXhwcj5qAAAAcwIAAAAGACgJAAAAUhEAAAB0AwAAAEFTVHQLAAAAaXRlcl9maWVsZHN0CQAAAF9fY2xhc3NfX3QIAAAAX19uYW1lX190BAAAAGpvaW50CwAAAF9hdHRyaWJ1dGVzUhsAAAB0BAAAAHJlcHIoBQAAAFIuAAAAUjYAAABSNwAAAHQGAAAAZmllbGRzdAIAAABydigDAAAAUjoAAAB0DwAAAGFubm90YXRlX2ZpZWxkc3QSAAAAaW5jbHVkZV9hdHRyaWJ1dGVzKAEAAABSLgAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9hc3QucHlSOgAAAFwAAABzGgAAAAABDwExARICFgEXAg8BFgEYARQBCAEPASEBcxQAAABleHBlY3RlZCBBU1QsIGdvdCAlcigFAAAAUhEAAABSPQAAAHQJAAAAVHlwZUVycm9yUj8AAABSQAAAACgDAAAAUi4AAABSRgAAAFJHAAAAKAAAAAAoAwAAAFI6AAAAUkYAAABSRwAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9hc3QucHl0BAAAAGR1bXBTAAAAcwgAAAAACRUQDwEZAWMCAAAAAwAAAAkAAABDAAAAc14AAAB4VwBkAwBEXU8AfQIAfAIAfAEAagAAawYAcgcAfAIAfAAAagAAawYAcgcAdAEAfAEAfAIAgwIAcgcAdAIAfAAAfAIAdAMAfAEAfAIAgwIAgwMAAXEHAHEHAFd8AABTKAQAAABziwAAAAogICAgQ29weSBzb3VyY2UgbG9jYXRpb24gKGBsaW5lbm9gIGFuZCBgY29sX29mZnNldGAgYXR0cmlidXRlcykgZnJvbQogICAgKm9sZF9ub2RlKiB0byAqbmV3X25vZGUqIGlmIHBvc3NpYmxlLCBhbmQgcmV0dXJuICpuZXdfbm9kZSouCiAgICB0BgAAAGxpbmVub3QKAAAAY29sX29mZnNldCgCAAAAcwYAAABsaW5lbm9zCgAAAGNvbF9vZmZzZXQoBAAAAFJCAAAAdAcAAABoYXNhdHRydAcAAABzZXRhdHRyUjkAAAAoAwAAAHQIAAAAbmV3X25vZGV0CAAAAG9sZF9ub2RldAQAAABhdHRyKAAAAAAoAAAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9hc3QucHl0DQAAAGNvcHlfbG9jYXRpb25xAAAAcwoAAAAABQ0BHgEPASABYwEAAAABAAAABAAAAAMAAABzIwAAAIcAAGYBAGQBAIYAAIkAAIgAAHwAAGQCAGQDAIMDAAF8AABTKAQAAABzewEAAAogICAgV2hlbiB5b3UgY29tcGlsZSBhIG5vZGUgdHJlZSB3aXRoIGNvbXBpbGUoKSwgdGhlIGNvbXBpbGVyIGV4cGVjdHMgbGluZW5vIGFuZAogICAgY29sX29mZnNldCBhdHRyaWJ1dGVzIGZvciBldmVyeSBub2RlIHRoYXQgc3VwcG9ydHMgdGhlbS4gIFRoaXMgaXMgcmF0aGVyCiAgICB0ZWRpb3VzIHRvIGZpbGwgaW4gZm9yIGdlbmVyYXRlZCBub2Rlcywgc28gdGhpcyBoZWxwZXIgYWRkcyB0aGVzZSBhdHRyaWJ1dGVzCiAgICByZWN1cnNpdmVseSB3aGVyZSBub3QgYWxyZWFkeSBzZXQsIGJ5IHNldHRpbmcgdGhlbSB0byB0aGUgdmFsdWVzIG9mIHRoZQogICAgcGFyZW50IG5vZGUuICBJdCB3b3JrcyByZWN1cnNpdmVseSBzdGFydGluZyBhdCAqbm9kZSouCiAg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aCBpcyBmb3J3YXJkZWQgYnkgdGhlIGB2aXNpdGAgbWV0aG9kLgoKICAgIFRoaXMgY2xhc3MgaXMgbWVhbnQgdG8gYmUgc3ViY2xhc3NlZCwgd2l0aCB0aGUgc3ViY2xhc3MgYWRkaW5nIHZpc2l0b3IKICAgIG1ldGhvZHMuCgogICAgUGVyIGRlZmF1bHQgdGhlIHZpc2l0b3IgZnVuY3Rpb25zIGZvciB0aGUgbm9kZXMgYXJlIGBgJ3Zpc2l0XydgYCArCiAgICBjbGFzcyBuYW1lIG9mIHRoZSBub2RlLiAgU28gYSBgVHJ5RmluYWxseWAgbm9kZSB2aXNpdCBmdW5jdGlvbiB3b3VsZAogICAgYmUgYHZpc2l0X1RyeUZpbmFsbHlgLiAgVGhpcyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSBvdmVycmlkaW5nCiAgICB0aGUgYHZpc2l0YCBtZXRob2QuICBJZiBubyB2aXNpdG9yIGZ1bmN0aW9uIGV4aXN0cyBmb3IgYSBub2RlCiAgICAocmV0dXJuIHZhbHVlIGBOb25lYCkgdGhlIGBnZW5lcmljX3Zpc2l0YCB2aXNpdG9yIGlzIHVzZWQgaW5zdGVhZC4KCiAgICBEb24ndCB1c2UgdGhlIGBOb2RlVmlzaXRvcmAgaWYgeW91IHdhbnQgdG8gYXBwbHkgY2hhbmdlcyB0byBub2RlcyBkdXJpbmcKICAgIHRyYXZlcnNpbmcuICBGb3IgdGhpcyBhIHNwZWNpYWwgdmlzaXRvciBleGlzdHMgKGBOb2RlVHJhbnNmb3JtZXJgKSB0aGF0CiAgICBhbGxvd3MgbW9kaWZpY2F0aW9ucy4KICAgIGMCAAAABAAAAAQAAABDAAAAcy8AAABkAQB8AQBqAABqAQAXfQIAdAIAfAAAfAIAfAAAagMAgwMAfQMAfAMAfAEAgwEAUygCAAAAcw0AAABWaXNpdCBhIG5vZGUudAYAAAB2aXNpdF8oBAAAAFI/AAAAUkAAAABSOQAAAHQNAAAAZ2VuZXJpY192aXNpdCgEAAAAdAQAAABzZWxmUi4AAAB0BgAAAG1ldGhvZHQHAAAAdmlzaXRvcigAAAAAKAAAAABzbgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvYXN0LnB5dAUAAAB2aXNpdO0AAABzBgAAAAACEAEVAWMCAAAABQAAAAUAAABDAAAAc4IAAAB4ewB0AAB8AQCDAQBEXW0AXAIAfQIAfQMAdAEAfAMAdAIAgwIAclsAeE8AfAMARF0lAH0EAHQBAHwEAHQDAIMCAHIvAHwAAGoEAHwEAIMBAAFxLwBxLwBXcQ0AdAEAfAMAdAMAgwIAcg0AfAAAagQAfAMAgwEAAXENAHENAFdkAQBTKAIAAABzOQAAAENhbGxlZCBpZiBubyBleHBsaWNpdCB2aXNpdG9yIGZ1bmN0aW9uIGV4aXN0cyBmb3IgYSBub2RlLk4oBQAAAFI+AAAAUhEAAABSGwAAAFI9AAAAUnAAAAAoBQAAAFJtAAAAUi4AAABSNQAAAFJgAAAAUlsAAAAoAAAAACgAAAAAc24AAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2FzdC5weVJsAAAA8wAAAHMOAAAAAAIZAQ8BDQEPARcBDwEoBQAAAFJAAAAAdAoAAABfX21vZHVsZV9fdAcAAABfX2RvY19fUnAAAABSbAAAACgAAAAAKAAAAAAoAAAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9hc3QucHlSagAAANkAAABzBgAAAAYSBgIJBnQPAAAATm9kZVRyYW5zZm9ybWVyYwAAAAAAAAAAAQAAAEIAAABzFwAAAGUAAFoBAGQAAFoCAGQBAIQAAFoDAFJTKAIAAABzXAUAAAogICAgQSA6Y2xhc3M6YE5vZGVWaXNpdG9yYCBzdWJjbGFzcyB0aGF0IHdhbGtzIHRoZSBhYnN0cmFjdCBzeW50YXggdHJlZSBhbmQKICAgIGFsbG93cyBtb2RpZmljYXRpb24gb2Ygbm9kZXMuCgogICAgVGhlIGBOb2RlVHJhbnNmb3JtZXJgIHdpbGwgd2FsayB0aGUgQVNUIGFuZCB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKICAgIHZpc2l0b3IgbWV0aG9kcyB0byByZXBsYWNlIG9yIHJlbW92ZSB0aGUgb2xkIG5vZGUuICBJZiB0aGUgcmV0dXJuIHZhbHVlIG9mCiAgICB0aGUgdmlzaXRvciBtZXRob2QgaXMgYGBOb25lYGAsIHRoZSBub2RlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0cyBsb2NhdGlvbiwKICAgIG90aGVyd2lzZSBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUuICBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSB0aGUKICAgIG9yaWdpbmFsIG5vZGUgaW4gd2hpY2ggY2FzZSBubyByZXBsYWNlbWVudCB0YWtlcyBwbGFjZS4KCiAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdHJhbnNmb3JtZXIgdGhhdCByZXdyaXRlcyBhbGwgb2NjdXJyZW5jZXMgb2YgbmFtZSBsb29rdXBzCiAgICAoYGBmb29gYCkgdG8gYGBkYXRhWydmb28nXWBgOjoKCiAgICAgICBjbGFzcyBSZXdyaXRlTmFtZShOb2RlVHJhbnNmb3JtZXIpOgoKICAgICAgICAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBub2RlKToKICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlfbG9jYXRpb24oU3Vic2NyaXB0KAogICAgICAgICAgICAgICAgICAgdmFsdWU9TmFtZShpZD0nZGF0YScsIGN0eD1Mb2FkKCkpLAogICAgICAgICAgICAgICAgICAgc2xpY2U9SW5kZXgodmFsdWU9U3RyKHM9bm9kZS5pZCkpLAogICAgICAgICAgICAgICAgICAgY3R4PW5vZGUuY3R4CiAgICAgICAgICAgICAgICksIG5vZGUpCgogICAgS2VlcCBpbiBtaW5kIHRoYXQgaWYgdGhlIG5vZGUgeW91J3JlIG9wZXJhdGluZyBvbiBoYXMgY2hpbGQgbm9kZXMgeW91IG11c3QKICAgIGVpdGhlciB0cmFuc2Zvcm0gdGhlIGNoaWxkIG5vZGVzIHlvdXJzZWxmIG9yIGNhbGwgdGhlIDptZXRoOmBnZW5lcmljX3Zpc2l0YAogICAgbWV0aG9kIGZvciB0aGUgbm9kZSBmaXJzdC4KCiAgICBGb3Igbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb2xsZWN0aW9uIG9mIHN0YXRlbWVudHMgKHRoYXQgYXBwbGllcyB0byBhbGwKICAgIHN0YXRlbWVudCBub2RlcyksIHRoZSB2aXNpdG9yIG1heSBhbHNvIHJldHVybiBhIGxpc3Qgb2Ygbm9kZXMgcmF0aGVyIHRoYW4KICAgIGp1c3QgYSBzaW5nbGUgbm9kZS4KCiAgICBVc3VhbGx5IHlvdSB1c2UgdGhlIHRyYW5zZm9ybWVyIGxpa2UgdGhpczo6CgogICAgICAgbm9kZSA9IFlvdXJUcmFuc2Zvcm1lcigpLnZpc2l0KG5vZGUpCiAgICBjAgAAAAcAAAAFAAAAQwAAAHMSAQAAeAsBdAAAfAEAgwEARF39AFwCAH0CAH0DAHQBAHwBAHwCAGQAAIMDAH0DAHQDAHwDAHQEAIMCAHK9AGcAAH0EAHhwAHwDAERdaAB9BQB0AwB8BQB0BQCDAgByogB8AABqBgB8BQCDAQB9BQB8BQBkAABrCAByfQBxRwBxogB0AwB8BQB0BQCDAgBzogB8BABqBwB8BQCDAQABcUcAcaIAbgAAfAQAaggAfAUAgwEAAXFHAFd8BAB8AwAocQ0AdAMAfAMAdAUAgwIAcg0AfAAAagYAfAMAgwEAfQYAfAYAZAAAawgAcvcAdAkAfAEAfAIAgwIAAXEKAXQKAHwBAHwCAHwGAIMDAAFxDQBxDQBXfAEAUygBAAAATigLAAAAUj4AAABSOQAAAFIJAAAAUhEAAABSGwAAAFI9AAAAUnAAAABSaAAAAHQGAAAAYXBwZW5kdAcAAABkZWxhdHRyUk0AAAAoBwAAAFJtAAAAUi4AAABSNQAAAHQJAAAAb2xkX3ZhbHVldAoAAABuZXdfdmFsdWVzUmAAAABSTgAAACgAAAAAKAAAAABzbgAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvYXN0LnB5UmwAAAAiAQAAcygAAAAAARkBEgEPAQYBDQEPAQ8BDAEGAQ8BDQEJAREBCgEPAQ8BDAEQAhcBKAQAAABSQAAAAFJxAAAAUnIAAABSbAAAACgAAAAAKAAAAAAoAAAAAHNuAAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9hc3QucHlScwAAAP4AAABzBAAAAAYiBgJOKBIAAABScgAAAHQEAAAAX2FzdFIBAAAAUggAAABSNAAAAFIKAAAAUgsAAABSSQAAAFJRAAAAUlUAAABSVwAAAFI+AAAAUlIAAABSZAAAAFJWAAAAdAYAAABvYmplY3RSagAAAFJzAAAAKAAAAAAoAAAAACgAAAAAc24AAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L2FzdC5weXQIAAAAPG1vZHVsZT4bAAAAcxwAAAAGAQoBEAMPCAkrDx4JDAkZDAsJDAkODBAJDhYl