A/MNCktcrFFjAAAAAAAAAAAEAAAAQAAAAHNsAAAAZAAAWgAAZAEAZAIAbAEAWgEAZAMAZwEAWgIAZAEAZAIAbAMAWgMAZQMAagQAZAQAZQUAZAUAgwMAAWQDAGQIAGQGAIQAAIMAAFlaBgBlBwBkBwBrAgByaABkAQBkAgBsCABaCQBuAABkAgBTKAkAAABzlgEAAEdlbmVyaWMgTUlNRSB3cml0ZXIuCgpUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjbGFzcyBNaW1lV3JpdGVyLiAgVGhlIE1pbWVXcml0ZXIgY2xhc3MgaW1wbGVtZW50cwphIGJhc2ljIGZvcm1hdHRlciBmb3IgY3JlYXRpbmcgTUlNRSBtdWx0aS1wYXJ0IGZpbGVzLiAgSXQgZG9lc24ndCBzZWVrIGFyb3VuZAp0aGUgb3V0cHV0IGZpbGUgbm9yIGRvZXMgaXQgdXNlIGxhcmdlIGFtb3VudHMgb2YgYnVmZmVyIHNwYWNlLiBZb3UgbXVzdCB3cml0ZQp0aGUgcGFydHMgb3V0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIG9jY3VyIGluIHRoZSBmaW5hbCBmaWxlLgpNaW1lV3JpdGVyIGRvZXMgYnVmZmVyIHRoZSBoZWFkZXJzIHlvdSBhZGQsIGFsbG93aW5nIHlvdSB0byByZWFycmFuZ2UgdGhlaXIKb3JkZXIuCgpp/////050CgAAAE1pbWVXcml0ZXJzQgAAAHRoZSBNaW1lV3JpdGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGVtYWlsIHBhY2thZ2UgaW5zdGVhZGkCAAAAYwAAAAAAAAAABAAAAEIAAABzXwAAAGUAAFoBAGQAAFoCAGQBAIQAAFoDAGQCAGQDAIQBAFoEAGQEAIQAAFoFAGcAAGQFAGQGAIQCAFoGAGQKAGcAAGQFAGQHAIQDAFoIAGQIAIQAAFoJAGQJAIQAAFoKAFJTKAsAAABzTwgAAEdlbmVyaWMgTUlNRSB3cml0ZXIuCgogICAgTWV0aG9kczoKCiAgICBfX2luaXRfXygpCiAgICBhZGRoZWFkZXIoKQogICAgZmx1c2hoZWFkZXJzKCkKICAgIHN0YXJ0Ym9keSgpCiAgICBzdGFydG11bHRpcGFydGJvZHkoKQogICAgbmV4dHBhcnQoKQogICAgbGFzdHBhcnQoKQoKICAgIEEgTUlNRSB3cml0ZXIgaXMgbXVjaCBtb3JlIHByaW1pdGl2ZSB0aGFuIGEgTUlNRSBwYXJzZXIuICBJdAogICAgZG9lc24ndCBzZWVrIGFyb3VuZCBvbiB0aGUgb3V0cHV0IGZpbGUsIGFuZCBpdCBkb2Vzbid0IHVzZSBsYXJnZQogICAgYW1vdW50cyBvZiBidWZmZXIgc3BhY2UsIHNvIHlvdSBoYXZlIHRvIHdyaXRlIHRoZSBwYXJ0cyBpbiB0aGUKICAgIG9yZGVyIHRoZXkgc2hvdWxkIG9jY3VyIG9uIHRoZSBvdXRwdXQgZmlsZS4gIEl0IGRvZXMgYnVmZmVyIHRoZQogICAgaGVhZGVycyB5b3UgYWRkLCBhbGxvd2luZyB5b3UgdG8gcmVhcnJhbmdlIHRoZWlyIG9yZGVyLgoKICAgIEdlbmVyYWwgdXNhZ2UgaXM6CgogICAgZiA9IDxvcGVuIHRoZSBvdXRwdXQgZmlsZT4KICAgIHcgPSBNaW1lV3JpdGVyKGYpCiAgICAuLi5jYWxsIHcuYWRkaGVhZGVyKGtleSwgdmFsdWUpIDAgb3IgbW9yZSB0aW1lcy4uLgoKICAgIGZvbGxvd2VkIGJ5IGVpdGhlcjoKCiAgICBmID0gdy5zdGFydGJvZHkoY29udGVudF90eXBlKQogICAgLi4uY2FsbCBmLndyaXRlKGRhdGEpIGZvciBib2R5IGRhdGEuLi4KCiAgICBvcjoKCiAgICB3LnN0YXJ0bXVsdGlwYXJ0Ym9keShzdWJ0eXBlKQogICAgZm9yIGVhY2ggcGFydDoKICAgICAgICBzdWJ3cml0ZXIgPSB3Lm5leHRwYXJ0KCkKICAgICAgICAuLi51c2UgdGhlIHN1YndyaXRlcidzIG1ldGhvZHMgdG8gY3JlYXRlIHRoZSBzdWJwYXJ0Li4uCiAgICB3Lmxhc3RwYXJ0KCkKCiAgICBUaGUgc3Vid3JpdGVyIGlzIGFub3RoZXIgTWltZVdyaXRlciBpbnN0YW5jZSwgYW5kIHNob3VsZCBiZQogICAgdHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIHRvcGxldmVsIE1pbWVXcml0ZXIuICBUaGlzIHdheSwKICAgIHdyaXRpbmcgcmVjdXJzaXZlIGJvZHkgcGFydHMgaXMgZWFzeS4KCiAgICBXYXJuaW5nOiBkb24ndCBmb3JnZXQgdG8gY2FsbCBsYXN0cGFydCgpIQoKICAgIFhYWCBUaGVyZSBzaG91bGQgYmUgbW9yZSBzdGF0ZSBzbyBjYWxscyBtYWRlIGluIHRoZSB3cm9uZyBvcmRlcgogICAgYXJlIGRldGVjdGVkLgoKICAgIFNvbWUgc3BlY2lhbCBjYXNlczoKCiAgICAtIHN0YXJ0Ym9keSgpIGp1c3QgcmV0dXJucyB0aGUgZmlsZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yOwogICAgICBidXQgZG9uJ3QgdXNlIHRoaXMga25vd2xlZGdlLCBhcyBpdCBtYXkgYmUgY2hhbmdlZC4KCiAgICAtIHN0YXJ0bXVsdGlwYXJ0Ym9keSgpIGFjdHVhbGx5IHJldHVybnMgYSBmaWxlIGFzIHdlbGw7CiAgICAgIHRoaXMgY2FuIGJlIHVzZWQgdG8gd3JpdGUgdGhlIGluaXRpYWwgJ2lmIHlvdSBjYW4gcmVhZCB0aGlzIHlvdXIKICAgICAgbWFpbGVyIGlzIG5vdCBNSU1FLWF3YXJlJyBtZXNzYWdlLgoKICAgIC0gSWYgeW91IGNhbGwgZmx1c2hoZWFkZXJzKCksIHRoZSBoZWFkZXJzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUKICAgICAgd3JpdHRlbiBvdXQgKGFuZCBmb3Jnb3R0ZW4pOyB0aGlzIGlzIHVzZWZ1bCBpZiB5b3UgZG9uJ3QgbmVlZCBhCiAgICAgIGJvZHkgcGFydCBhdCBhbGwsIGUuZy4gZm9yIGEgc3VicGFydCBvZiB0eXBlIG1lc3NhZ2UvcmZjODIyCiAgICAgIHRoYXQncyAobWlzKXVzZWQgdG8gc3RvcmUgc29tZSBoZWFkZXItbGlrZSBpbmZvcm1hdGlvbi4KCiAgICAtIFBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50ICdwcmVmaXg9PGZsYWc+JyB0byBhZGRoZWFkZXIoKSwKICAgICAgc3RhcnQqYm9keSgpIGFmZmVjdHMgd2hlcmUgdGhlIGhlYWRlciBpcyBpbnNlcnRlZDsg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ZAMAfAQAgwIBUygEAAAAc3ICAABSZXR1cm5zIGEgZmlsZS1saWtlIG9iamVjdCBmb3Igd3JpdGluZyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KCiAgICAgICAgQWRkaXRpb25hbGx5LCB0aGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgbXVsdGktcGFydCBjb2RlLCB3aGVyZSB0aGUKICAgICAgICBzdWJ0eXBlIHBhcmFtZXRlciBwcm92aWRlcyB0aGUgbXVsdGlwYXJ0IHN1YnR5cGUsIHRoZSBib3VuZGFyeQogICAgICAgIHBhcmFtZXRlciBtYXkgcHJvdmlkZSBhIHVzZXItZGVmaW5lZCBib3VuZGFyeSBzcGVjaWZpY2F0aW9uLCBhbmQgdGhlCiAgICAgICAgcGxpc3QgcGFyYW1ldGVyIHByb3ZpZGVzIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBzdWJ0eXBlLiAgVGhlCiAgICAgICAgb3B0aW9uYWwgYXJndW1lbnQsIHByZWZpeCwgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgaGVhZGVyIGlzIGluc2VydGVkOwogICAgICAgIDAgbWVhbnMgYXBwZW5kIGF0IHRoZSBlbmQsIDEgbWVhbnMgaW5zZXJ0IGF0IHRoZSBzdGFydC4gVGhlIGRlZmF1bHQKICAgICAgICBpcyB0byBpbnNlcnQgYXQgdGhlIHN0YXJ0LiAgU3VicGFydHMgc2hvdWxkIGJlIGNyZWF0ZWQgdXNpbmcgdGhlCiAgICAgICAgbmV4dHBhcnQoKSBtZXRob2QuCgogICAgICAgIHMKAAAAbXVsdGlwYXJ0L3QIAAAAYm91bmRhcnlSDwAAACgEAAAAdAkAAABtaW1ldG9vbHN0DwAAAGNob29zZV9ib3VuZGFyeXQJAAAAX2JvdW5kYXJ5UhoAAAAoBQAAAFIDAAAAdAcAAABzdWJ0eXBlUhsAAABSGAAAAFIPAAAAKAAAAAAoAAAAAHNSAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvTWltZVdyaXRlci5weXQSAAAAc3RhcnRtdWx0aXBhcnRib2R5kQAAAHMIAAAAAA0VAQ0BFgFjAQAAAAEAAAADAAAAQwAAAHMrAAAAfAAAagAAagEAZAEAfAAAagIAF2QCABeDAQABfAAAagMAfAAAagAAgwEAUygDAAAAc2oBAABSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIE1pbWVXcml0ZXIgd2hpY2ggcmVwcmVzZW50cyBhbgogICAgICAgIGluZGl2aWR1YWwgcGFydCBpbiBhIG11bHRpcGFydCBtZXNzYWdlLgoKICAgICAgICBUaGlzIG1heSBiZSB1c2VkIHRvIHdyaXRlIHRoZSBwYXJ0IGFzIHdlbGwgYXMgdXNlZCBmb3IgY3JlYXRpbmcKICAgICAgICByZWN1cnNpdmVseSBjb21wbGV4IG11bHRpcGFydCBtZXNzYWdlcy4gVGhlIG1lc3NhZ2UgbXVzdCBmaXJzdCBiZQogICAgICAgIGluaXRpYWxpemVkIHdpdGggdGhlIHN0YXJ0bXVsdGlwYXJ0Ym9keSgpIG1ldGhvZCBiZWZvcmUgdXNpbmcgdGhlCiAgICAgICAgbmV4dHBhcnQoKSBtZXRob2QuCgogICAgICAgIHMDAAAACi0tcwEAAAAKKAQAAABSAQAAAFIWAAAAUh4AAAB0CQAAAF9fY2xhc3NfXygBAAAAUgMAAAAoAAAAACgAAAAAc1IAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9NaW1lV3JpdGVyLnB5dAgAAABuZXh0cGFydKMAAABzBAAAAAAKGwFjAQAAAAEAAAADAAAAQwAAAHMfAAAAfAAAagAAagEAZAEAfAAAagIAF2QCABeDAQABZAMAUygEAAAAc4wAAABUaGlzIGlzIHVzZWQgdG8gZGVzaWduYXRlIHRoZSBsYXN0IHBhcnQgb2YgYSBtdWx0aXBhcnQgbWVzc2FnZS4KCiAgICAgICAgSXQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHdoZW4gd3JpdGluZyBtdWx0aXBhcnQgbWVzc2FnZXMuCgogICAgICAgIHMDAAAACi0tcwMAAAAtLQpOKAMAAABSAQAAAFIWAAAAUh4AAAAoAQAAAFIDAAAAKAAAAAAoAAAAAHNSAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvTWltZVdyaXRlci5weXQIAAAAbGFzdHBhcnSwAAAAcwIAAAAABk4oCwAAAHQIAAAAX19uYW1lX190CgAAAF9fbW9kdWxlX190BwAAAF9fZG9jX19SBQAAAFITAAAAUhUAAABSGgAAAHQEAAAATm9uZVIgAAAAUiIAAABSIwAAACgAAAAAKAAAAAAoAAAAAHNSAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvTWltZVdyaXRlci5weVIAAAAAFgAAAHMQAAAABkQGAgkEDBUJCw8REhIJDXQIAAAAX19tYWluX18oAAAAACgKAAAAUiYAAABSHAAAAHQHAAAAX19hbGxfX3QIAAAAd2FybmluZ3N0BAAAAHdhcm50EgAAAERlcHJlY2F0aW9uV2FybmluZ1IAAAAAUiQAAAB0FAAAAHRlc3QudGVzdF9NaW1lV3JpdGVydAQAAAB0ZXN0KAAAAAAoAAAAACgAAAAAc1IAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9NaW1lV3JpdGVyLnB5dAgAAAA8bW9kdWxlPgoAAABzEAAAAAYDDAIJAgwCCQEKAhOjDAE=