REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 55.72 KB
Close
//opt/cloudlinux/venv/lib64/python3.11/site-packages/numpy/fft/__pycache__/_pocketfft.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9poc4AAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPMmAwAAlwBkAFoAZwBkAaIBWgFkAmQDbAJaAmQCZARsA20EWgRtBVoFbQZaBm0HWgdtCFoIbQlaCQEAZAVkBmwKbQtaDAEAZAJkB2wNbQ5aDgEAZAJkCGwDbQ9aDwEAAgBlAmoQAAAAAAAAAABlD2oRAAAAAAAAAABkCawKpgIAAKsCAAAAAAAAAABaEWQLhABaEmQMhABaE2QNhABaFGQOZA5kD2QQZBGcBFoVZBKEAFoWZCdkE4QBWhcCAGURZRemAQAAqwEAAAAAAAAAAGQoZBWEAaYAAACrAAAAAAAAAAAAWhgCAGURZRemAQAAqwEAAAAAAAAAAGQoZBaEAaYAAACrAAAAAAAAAAAAWhkCAGURZRemAQAAqwEAAAAAAAAAAGQoZBeEAaYAAACrAAAAAAAAAAAAWhoCAGURZRemAQAAqwEAAAAAAAAAAGQoZBiEAaYAAACrAAAAAAAAAAAAWhsCAGURZRemAQAAqwEAAAAAAAAAAGQoZBmEAaYAAACrAAAAAAAAAAAAWhwCAGURZRemAQAAqwEAAAAAAAAAAGQoZBqEAaYAAACrAAAAAAAAAAAAWh1kKWQbhAFaHmQDZANlGGQDZgRkHIQBWh9kJ2QdhAFaIAIAZRFlIKYBAACrAQAAAAAAAAAAZCdkHoQBpgAAAKsAAAAAAAAAAABaIQIAZRFlIKYBAACrAQAAAAAAAAAAZCdkH4QBpgAAAKsAAAAAAAAAAABaIgIAZRFlIKYBAACrAQAAAAAAAAAAZCpkIYQBpgAAAKsAAAAAAAAAAABaIwIAZRFlIKYBAACrAQAAAAAAAAAAZCpkIoQBpgAAAKsAAAAAAAAAAABaJAIAZRFlIKYBAACrAQAAAAAAAAAAZCdkI4QBpgAAAKsAAAAAAAAAAABaJQIAZRFlIKYBAACrAQAAAAAAAAAAZCpkJIQBpgAAAKsAAAAAAAAAAABaJgIAZRFlIKYBAACrAQAAAAAAAAAAZCdkJYQBpgAAAKsAAAAAAAAAAABaJwIAZRFlIKYBAACrAQAAAAAAAAAAZCpkJoQBpgAAAKsAAAAAAAAAAABaKGQDUwApK2F9AwAACkRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtcwoKUm91dGluZXMgaW4gdGhpcyBtb2R1bGU6CgpmZnQoYSwgbj1Ob25lLCBheGlzPS0xLCBub3JtPSJiYWNrd2FyZCIpCmlmZnQoYSwgbj1Ob25lLCBheGlzPS0xLCBub3JtPSJiYWNrd2FyZCIpCnJmZnQoYSwgbj1Ob25lLCBheGlzPS0xLCBub3JtPSJiYWNrd2FyZCIpCmlyZmZ0KGEsIG49Tm9uZSwgYXhpcz0tMSwgbm9ybT0iYmFja3dhcmQiKQpoZmZ0KGEsIG49Tm9uZSwgYXhpcz0tMSwgbm9ybT0iYmFja3dhcmQiKQppaGZmdChhLCBuPU5vbmUsIGF4aXM9LTEsIG5vcm09ImJhY2t3YXJkIikKZmZ0bihhLCBzPU5vbmUsIGF4ZXM9Tm9uZSwgbm9ybT0iYmFja3dhcmQiKQppZmZ0bihhLCBzPU5vbmUsIGF4ZXM9Tm9uZSwgbm9ybT0iYmFja3dhcmQiKQpyZmZ0bihhLCBzPU5vbmUsIGF4ZXM9Tm9uZSwgbm9ybT0iYmFja3dhcmQiKQppcmZmdG4oYSwgcz1Ob25lLCBheGVzPU5vbmUsIG5vcm09ImJhY2t3YXJkIikKZmZ0MihhLCBzPU5vbmUsIGF4ZXM9KC0yLC0xKSwgbm9ybT0iYmFja3dhcmQiKQppZmZ0MihhLCBzPU5vbmUsIGF4ZXM9KC0yLCAtMSksIG5vcm09ImJhY2t3YXJkIikKcmZmdDIoYSwgcz1Ob25lLCBheGVzPSgtMiwtMSksIG5vcm09ImJhY2t3YXJkIikKaXJmZnQyKGEsIHM9Tm9uZSwgYXhlcz0oLTIsIC0xKSwgbm9ybT0iYmFja3dhcmQiKQoKaSA9IGludmVyc2UgdHJhbnNmb3JtCnIgPSB0cmFuc2Zvcm0gb2YgcHVyZWx5IHJlYWwgZGF0YQpoID0gSGVybWl0ZSB0cmFuc2Zvcm0KbiA9IG4tZGltZW5zaW9uYWwgdHJhbnNmb3JtCjIgPSAyLWRpbWVuc2lvbmFsIHRyYW5zZm9ybQooTm90ZTogMkQgcm91dGluZXMgYXJlIGp1c3QgbkQgcm91dGluZXMgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdApiZWhhdmlvci4pCgopDtoDZmZ02gRpZmZ02gRyZmZ02gVpcmZmdNoEaGZmdNoFaWhmZnTaBXJmZnRu2gZpcmZm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bGVuZ3RoIG9mIHRoZSBpbnB1dCwgdGhlIGlucHV0IGlzIGNyb3BwZWQuCiAgICAgICAgSWYgaXQgaXMgbGFyZ2VyLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggemVyb3MuICBJZiBgbmAgaXMgbm90IGdpdmVuLAogICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGFsb25nIHRoZSBheGlzIHNwZWNpZmllZCBieSBgYXhpc2AgaXMgdXNlZC4KICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIEZGVC4gIElmIG5vdCBnaXZlbiwgdGhlIGxhc3QgYXhpcyBpcwogICAgICAgIHVzZWQuCiAgICBub3JtIDogeyJiYWNrd2FyZCIsICJvcnRobyIsICJmb3J3YXJkIn0sIG9wdGlvbmFsCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xMC4wCgogICAgICAgIE5vcm1hbGl6YXRpb24gbW9kZSAoc2VlIGBudW1weS5mZnRgKS4gRGVmYXVsdCBpcyAiYmFja3dhcmQiLgogICAgICAgIEluZGljYXRlcyB3aGljaCBkaXJlY3Rpb24gb2YgdGhlIGZvcndhcmQvYmFja3dhcmQgcGFpciBvZiB0cmFuc2Zvcm1zCiAgICAgICAgaXMgc2NhbGVkIGFuZCB3aXRoIHdoYXQgbm9ybWFsaXphdGlvbiBmYWN0b3IuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMjAuMAoKICAgICAgICAgICAgVGhlICJiYWNrd2FyZCIsICJmb3J3YXJkIiB2YWx1ZXMgd2VyZSBhZGRlZC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBjb21wbGV4IG5kYXJyYXkKICAgICAgICBUaGUgdHJ1bmNhdGVkIG9yIHplcm8tcGFkZGVkIGlucHV0LCB0cmFuc2Zvcm1lZCBhbG9uZyB0aGUgYXhpcwogICAgICAgIGluZGljYXRlZCBieSBgYXhpc2AsIG9yIHRoZSBsYXN0IG9uZSBpZiBgYXhpc2AgaXMgbm90IHNwZWNpZmllZC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgSW5kZXhFcnJvcgogICAgICAgIElmIGBheGlzYCBpcyBub3QgYSB2YWxpZCBheGlzIG9mIGBhYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LmZmdCA6IGZvciBkZWZpbml0aW9uIG9mIHRoZSBERlQgYW5kIGNvbnZlbnRpb25zIHVzZWQuCiAgICBpZmZ0IDogVGhlIGludmVyc2Ugb2YgYGZmdGAuCiAgICBmZnQyIDogVGhlIHR3by1kaW1lbnNpb25hbCBGRlQuCiAgICBmZnRuIDogVGhlICpuKi1kaW1lbnNpb25hbCBGRlQuCiAgICByZmZ0biA6IFRoZSAqbiotZGltZW5zaW9uYWwgRkZUIG9mIHJlYWwgaW5wdXQuCiAgICBmZnRmcmVxIDogRnJlcXVlbmN5IGJpbnMgZm9yIGdpdmVuIEZGVCBwYXJhbWV0ZXJzLgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgRkZUIChGYXN0IEZvdXJpZXIgVHJhbnNmb3JtKSByZWZlcnMgdG8gYSB3YXkgdGhlIGRpc2NyZXRlIEZvdXJpZXIKICAgIFRyYW5zZm9ybSAoREZUKSBjYW4gYmUgY2FsY3VsYXRlZCBlZmZpY2llbnRseSwgYnkgdXNpbmcgc3ltbWV0cmllcyBpbiB0aGUKICAgIGNhbGN1bGF0ZWQgdGVybXMuICBUaGUgc3ltbWV0cnkgaXMgaGlnaGVzdCB3aGVuIGBuYCBpcyBhIHBvd2VyIG9mIDIsIGFuZAogICAgdGhlIHRyYW5zZm9ybSBpcyB0aGVyZWZvcmUgbW9zdCBlZmZpY2llbnQgZm9yIHRoZXNlIHNpemVzLgoKICAgIFRoZSBERlQgaXMgZGVmaW5lZCwgd2l0aCB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgbnVtcHkuZmZ0YCBtb2R1bGUuCgogICAgUmVmZXJlbmNlcwogICAgLS0tLS0tLS0tLQogICAgLi4gW0NUXSBDb29sZXksIEphbWVzIFcuLCBhbmQgSm9obiBXLiBUdWtleSwgMTk2NSwgIkFuIGFsZ29yaXRobSBmb3IgdGhlCiAgICAgICAgICAgIG1hY2hpbmUgY2FsY3VsYXRpb24gb2YgY29tcGxleCBGb3VyaWVyIHNlcmllcywiICpNYXRoLiBDb21wdXQuKgogICAgICAgICAgICAxOTogMjk3LTMwMS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBucC5mZnQuZmZ0KG5wLmV4cCgyaiAqIG5wLnBpICogbnAuYXJhbmdlKDgpIC8gOCkpCiAgICBhcnJheShbLTIuMzM0ODY5ODJlLTE2KzEuMTQ0MjM3NzVlLTE3aiwgIDguMDAwMDAwMDBlKzAwLTEuMjU1NTcyNDZlLTE1aiwKICAgICAgICAgICAgMi4zMzQ4Njk4MmUtMTYrMi4zMzQ4Njk4MmUtMTZqLCAgMC4wMDAwMDAwMGUrMDArMS4yMjQ2NDY4MGUtMTZqLAogICAgICAgICAgIC0xLjE0NDIzNzc1ZS0xNysyLjMzNDg2OTgyZS0xNmosICAwLjAwMDAwMDAwZSswMCs1LjIwNzg0MzgwZS0xNmosCiAgICAgICAgICAgIDEuMTQ0MjM3NzVlLTE3KzEuMTQ0MjM3NzVlLTE3aiwgIDAuMDAwMDAwMDBlKzAwKzEuMjI0NjQ2ODBlLTE2al0pCgogICAgSW4gdGhpcyBleGFtcGxlLCByZWFsIGlucHV0IGhhcyBhbiBGRlQgd2hpY2ggaXMgSGVybWl0aWFuLCBpLmUuLCBzeW1tZXRyaWMKICAgIGluIHRoZSByZWFsIHBhcnQgYW5kIGFudGktc3ltbWV0cmljIGluIHRoZSBpbWFnaW5hcnkgcGFydCwgYXMgZGVzY3JpYmVkIGluCiAgICB0aGUgYG51bXB5LmZmdGAgZG9jdW1lbnRhdGlvbjoKCiAgICA+Pj4gaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAogICAgPj4+IHQgPSBucC5hcmFuZ2UoMjU2KQogICAgPj4+IHNwID0gbnAuZmZ0LmZmdChucC5zaW4odCkpCiAgICA+Pj4gZnJlcSA9IG5wLmZmdC5mZnRmcmVxKHQuc2hhcGVbLTFdKQogICAgPj4+IHBsdC5wbG90KGZyZXEsIHNwLnJlYWwsIGZyZXEsIHNwLmltYWcpCiAgICBbPG1hdHBsb3RsaWIubGluZXMuTGluZTJEIG9iamVjdCBhdCAweC4uLj4sIDxtYXRwbG90bGliLmxpbmVzLkxpbmUyRCBvYmplY3QgYXQgMHguLi4+XQogICAgPj4+IHBsdC5zaG93KCkKCiAgICBORlSpBHIRAAAAch8AAAByQQAAAHI0AAAAqQZyKAAAAHIpAAAAcioAAAByQAAAAHItAAAA2gZvdXRwdXRzBgAAACAgICAgIHIzAAAAcgIAAAByAgAAAHoAAABzSwAAAIAA9XICAAkQkAGJCowKgEHYBwiAedgMDYxHkESMTYgB3Q8goBGgRNEPKdQPKYBI3Q0VkGGYEZhEoCWoFKh40Q041A04gEbYCxGATXI1AAAAYwQAAAAAAAAAAAAAAAgAAAADAAAA84oAAACXAHQBAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9AHwBgA18AGoBAAAAAAAAAAB8AhkAAAAAAAAAAAB9AXQFAAAAAAAAAAAAAHwBfAOmAgAAqwIAAAAAAAAAAH0EdAcAAAAAAAAAAAAAfAB8AXwCZAJkAnwEpgYAAKsGAAAAAAAAAAB9BXwFUwApA2EhDQAACiAgICBDb21wdXRlIHRoZSBvbmUtZGltZW5zaW9uYWwgaW52ZXJzZSBkaXNjcmV0ZSBGb3VyaWVyIFRyYW5zZm9ybS4KCiAgICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBpbnZlcnNlIG9mIHRoZSBvbmUtZGltZW5zaW9uYWwgKm4qLXBvaW50CiAgICBkaXNjcmV0ZSBGb3VyaWVyIHRyYW5zZm9ybSBjb21wdXRlZCBieSBgZmZ0YC4gIEluIG90aGVyIHdvcmRzLAogICAgYGBpZmZ0KGZmdChhKSkgPT0gYWBgIHRvIHdpdGhpbiBudW1lcmljYWwgYWNjdXJhY3kuCiAgICBGb3IgYSBnZW5lcmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0gYW5kIGRlZmluaXRpb25zLAogICAgc2VlIGBudW1weS5mZnRgLgoKICAgIFRoZSBpbnB1dCBzaG91bGQgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSB3YXkgYXMgaXMgcmV0dXJuZWQgYnkgYGZmdGAsCiAgICBpLmUuLAoKICAgICogYGBhWzBdYGAgc2hvdWxkIGNvbnRhaW4gdGhlIHplcm8gZnJlcXVlbmN5IHRlcm0sCiAgICAqIGBgYVsxOm4vLzJdYGAgc2hvdWxkIGNvbnRhaW4gdGhlIHBvc2l0aXZlLWZyZXF1ZW5jeSB0ZXJtcywKICAgICogYGBhW24vLzIgKyAxOl1gYCBzaG91bGQgY29udGFpbiB0aGUgbmVnYXRpdmUtZnJlcXVlbmN5IHRlcm1zLCBpbgogICAgICBpbmNyZWFzaW5nIG9yZGVyIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbmVnYXRpdmUgZnJlcXVlbmN5LgoKICAgIEZvciBhbiBldmVuIG51bWJlciBvZiBpbnB1dCBwb2ludHMsIGBgQVtuLy8yXWBgIHJlcHJlc2VudHMgdGhlIHN1bSBvZgogICAgdGhlIHZhbHVlcyBhdCB0aGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIE55cXVpc3QgZnJlcXVlbmNpZXMsIGFzIHRoZSB0d28KICAgIGFyZSBhbGlhc2VkIHRvZ2V0aGVyLiBTZWUgYG51bXB5LmZmdGAgZm9yIGRldGFpbHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYSA6IGFycmF5X2xpa2UKICAgICAgICBJbnB1dCBhcnJheSwgY2FuIGJlIGNvbXBsZXguCiAgICBuIDogaW50LCBvcHRpb25hbAogICAgICAgIExlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQgYXhpcyBvZiB0aGUgb3V0cHV0LgogICAgICAgIElmIGBuYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQsIHRoZSBpbnB1dCBpcyBjcm9wcGVkLgogICAgICAgIElmIGl0IGlzIGxhcmdlciwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoIHplcm9zLiAgSWYgYG5gIGlzIG5vdCBnaXZlbiwKICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhbG9uZyB0aGUgYXhpcyBzcGVjaWZpZWQgYnkgYGF4aXNgIGlzIHVzZWQuCiAgICAgICAgU2VlIG5vdGVzIGFib3V0IHBhZGRpbmcgaXNzdWVzLgogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdG8gY29tcHV0ZSB0aGUgaW52ZXJzZSBERlQuICBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0CiAgICAgICAgYXhpcyBpcyB1c2VkLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogY29tcGxleCBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4aXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4aXNgLCBvciB0aGUgbGFzdCBvbmUgaWYgYGF4aXNgIGlzIG5vdCBzcGVjaWZpZWQuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIEluZGV4RXJyb3IKICAgICAgICBJZiBgYXhpc2AgaXMgbm90IGEgdmFsaWQgYXhpcyBvZiBgYWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5mZnQgOiBBbiBpbnRyb2R1Y3Rpb24sIHdpdGggZGVmaW5pdGlvbnMgYW5kIGdlbmVyYWwgZXhwbGFuYXRpb25zLgogICAgZmZ0IDogVGhlIG9uZS1kaW1lbnNpb25hbCAoZm9yd2FyZCkgRkZULCBvZiB3aGljaCBgaWZmdGAgaXMgdGhlIGludmVyc2UKICAgIGlmZnQyIDogVGhlIHR3by1kaW1lbnNpb25hbCBpbnZlcnNlIEZGVC4KICAgIGlmZnRuIDogVGhlIG4tZGltZW5zaW9uYWwgaW52ZXJzZSBGRlQuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBJZiB0aGUgaW5wdXQgcGFyYW1ldGVyIGBuYCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQsIHRoZSBpbnB1dAogICAgaXMgcGFkZGVkIGJ5IGFwcGVuZGluZyB6ZXJvcyBhdCB0aGUgZW5kLiAgRXZlbiB0aG91Z2ggdGhpcyBpcyB0aGUgY29tbW9uCiAgICBhcHByb2FjaCwgaXQgbWlnaHQgbGVhZCB0byBzdXJwcmlzaW5nIHJlc3VsdHMuICBJZiBhIGRpZmZlcmVudCBwYWRkaW5nIGlzCiAgICBkZXNpcmVkLCBpdCBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgY2FsbGluZyBgaWZmdGAuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gbnAuZmZ0LmlmZnQoWzAsIDQsIDAsIDBdKQogICAgYXJyYXkoWyAxLiswLmosICAwLisxLmosIC0xLiswLmosICAwLi0xLmpdKSAjIG1heSB2YXJ5CgogICAgQ3JlYXRlIGFuZCBwbG90IGEgYmFuZC1saW1pdGVkIHNpZ25hbCB3aXRoIHJhbmRvbSBwaGFzZXM6CgogICAgPj4+IGltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKICAgID4+PiB0ID0gbnAuYXJhbmdlKDQwMCkKICAgID4+PiBuID0gbnAuemVyb3MoKDQwMCwpLCBkdHlwZT1jb21wbGV4KQogICAgPj4+IG5bNDA6NjBdID0gbnAuZXhwKDFqKm5wLnJhbmRvbS51bmlmb3JtKDAsIDIqbnAucGksICgyMCwpKSkKICAgID4+PiBzID0gbnAuZmZ0LmlmZnQobikKICAgID4+PiBwbHQucGxvdCh0LCBzLnJlYWwsIGxhYmVsPSdyZWFsJykKICAgIFs8bWF0cGxvdGxpYi5saW5lcy5MaW5lMkQgb2JqZWN0IGF0IC4uLj5dCiAgICA+Pj4gcGx0LnBsb3QodCwgcy5pbWFnLCAnLS0nLCBsYWJlbD0naW1hZ2luYXJ5JykKICAgIFs8bWF0cGxvdGxpYi5saW5lcy5MaW5lMkQgb2JqZWN0IGF0IC4uLj5dCiAgICA+Pj4gcGx0LmxlZ2VuZCgpCiAgICA8bWF0cGxvdGxpYi5sZWdlbmQuTGVnZW5kIG9iamVjdCBhdCAuLi4+CiAgICA+Pj4gcGx0LnNob3coKQoKICAgIE5GqQRyEQAAAHIfAAAAckQAAAByNAAAAHJRAAAAcwYAAAAgICAgICByMwAAAHIDAAAAcgMAAADbAAAAc0sAAACAAPV6AgAJEJABiQqMCoBB2AcIgHnYDA2MR5BEjE2IAd0PIaAhoFTRDyrUDyqASN0NFZBhmBGYRKAlqBWwCNENOdQNOYBG2AsRgE1yNQAAAGMEAAAAAAAAAAAAAAAIAAAAAwAAAPOKAAAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfQB8AYANfABqAQAAAAAAAAAAfAIZAAAAAAAAAAAAfQF0BQAAAAAAAAAAAAB8AXwDpgIAAKsCAAAAAAAAAAB9BHQHAAAAAAAAAAAAAHwAfAF8AmQCZAJ8BKYGAACrBgAAAAAAAAAAfQV8BVMAKQNhswwAAAogICAgQ29tcHV0ZSB0aGUgb25lLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtIGZvciByZWFsIGlucHV0LgoKICAgIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIG9uZS1kaW1lbnNpb25hbCAqbiotcG9pbnQgZGlzY3JldGUgRm91cmllcgogICAgVHJhbnNmb3JtIChERlQpIG9mIGEgcmVhbC12YWx1ZWQgYXJyYXkgYnkgbWVhbnMgb2YgYW4gZWZmaWNpZW50IGFsZ29yaXRobQogICAgY2FsbGVkIHRoZSBGYXN0IEZvdXJpZXIgVHJhbnNmb3JtIChGRlQpLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiBhcnJheV9saWtlCiAgICAgICAgSW5wdXQgYXJyYXkKICAgIG4gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgTnVtYmVyIG9mIHBvaW50cyBhbG9uZyB0cmFuc2Zvcm1hdGlvbiBheGlzIGluIHRoZSBpbnB1dCB0byB1c2UuCiAgICAgICAgSWYgYG5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCwgdGhlIGlucHV0IGlzIGNyb3BwZWQuCiAgICAgICAgSWYgaXQgaXMgbGFyZ2VyLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggemVyb3MuIElmIGBuYCBpcyBub3QgZ2l2ZW4sCiAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYWxvbmcgdGhlIGF4aXMgc3BlY2lmaWVkIGJ5IGBheGlzYCBpcyB1c2VkLgogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdG8gY29tcHV0ZSB0aGUgRkZULiBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0IGF4aXMgaXMKICAgICAgICB1c2VkLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogY29tcGxleCBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4aXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4aXNgLCBvciB0aGUgbGFzdCBvbmUgaWYgYGF4aXNgIGlzIG5vdCBzcGVjaWZpZWQuCiAgICAgICAgSWYgYG5gIGlzIGV2ZW4sIHRoZSBsZW5ndGggb2YgdGhlIHRyYW5zZm9ybWVkIGF4aXMgaXMgYGAobi8yKSsxYGAuCiAgICAgICAgSWYgYG5gIGlzIG9kZCwgdGhlIGxlbmd0aCBpcyBgYChuKzEpLzJgYC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgSW5kZXhFcnJvcgogICAgICAgIElmIGBheGlzYCBpcyBub3QgYSB2YWxpZCBheGlzIG9mIGBhYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIG51bXB5LmZmdCA6IEZvciBkZWZpbml0aW9uIG9mIHRoZSBERlQgYW5kIGNvbnZlbnRpb25zIHVzZWQuCiAgICBpcmZmdCA6IFRoZSBpbnZlcnNlIG9mIGByZmZ0YC4KICAgIGZmdCA6IFRoZSBvbmUtZGltZW5zaW9uYWwgRkZUIG9mIGdlbmVyYWwgKGNvbXBsZXgpIGlucHV0LgogICAgZmZ0biA6IFRoZSAqbiotZGltZW5zaW9uYWwgRkZULgogICAgcmZmdG4gOiBUaGUgKm4qLWRpbWVuc2lvbmFsIEZGVCBvZiByZWFsIGlucHV0LgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgV2hlbiB0aGUgREZUIGlzIGNvbXB1dGVkIGZvciBwdXJlbHkgcmVhbCBpbnB1dCwgdGhlIG91dHB1dCBpcwogICAgSGVybWl0aWFuLXN5bW1ldHJpYywgaS5lLiB0aGUgbmVnYXRpdmUgZnJlcXVlbmN5IHRlcm1zIGFyZSBqdXN0IHRoZSBjb21wbGV4CiAgICBjb25qdWdhdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aXZlLWZyZXF1ZW5jeSB0ZXJtcywgYW5kIHRoZQogICAgbmVnYXRpdmUtZnJlcXVlbmN5IHRlcm1zIGFyZSB0aGVyZWZvcmUgcmVkdW5kYW50LiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAogICAgY29tcHV0ZSB0aGUgbmVnYXRpdmUgZnJlcXVlbmN5IHRlcm1zLCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQKICAgIGF4aXMgb2YgdGhlIG91dHB1dCBpcyB0aGVyZWZvcmUgYGBuLy8yICsgMWBgLgoKICAgIFdoZW4gYGBBID0gcmZmdChhKWBgIGFuZCBmcyBpcyB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5LCBgYEFbMF1gYCBjb250YWlucwogICAgdGhlIHplcm8tZnJlcXVlbmN5IHRlcm0gMCpmcywgd2hpY2ggaXMgcmVhbCBkdWUgdG8gSGVybWl0aWFuIHN5bW1ldHJ5LgoKICAgIElmIGBuYCBpcyBldmVuLCBgYEFbLTFdYGAgY29udGFpbnMgdGhlIHRlcm0gcmVwcmVzZW50aW5nIGJvdGggcG9zaXRpdmUKICAgIGFuZCBuZWdhdGl2ZSBOeXF1aXN0IGZyZXF1ZW5jeSAoK2ZzLzIgYW5kIC1mcy8yKSwgYW5kIG11c3QgYWxzbyBiZSBwdXJlbHkKICAgIHJlYWwuIElmIGBuYCBpcyBvZGQsIHRoZXJlIGlzIG5vIHRlcm0gYXQgZnMvMjsgYGBBWy0xXWBgIGNvbnRhaW5zCiAgICB0aGUgbGFyZ2VzdCBwb3NpdGl2ZSBmcmVxdWVuY3kgKGZzLzIqKG4tMSkvbiksIGFuZCBpcyBjb21wbGV4IGluIHRoZQogICAgZ2VuZXJhbCBjYXNlLgoKICAgIElmIHRoZSBpbnB1dCBgYWAgY29udGFpbnMgYW4gaW1hZ2luYXJ5IHBhcnQsIGl0IGlzIHNpbGVudGx5IGRpc2NhcmRlZC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBucC5mZnQuZmZ0KFswLCAxLCAwLCAwXSkKICAgIGFycmF5KFsgMS4rMC5qLCAgMC4tMS5qLCAtMS4rMC5qLCAgMC4rMS5qXSkgIyBtYXkgdmFyeQogICAgPj4+IG5wLmZmdC5yZmZ0KFswLCAxLCAwLCAwXSkKICAgIGFycmF5KFsgMS4rMC5qLCAgMC4tMS5qLCAtMS4rMC5qXSkgIyBtYXkgdmFyeQoKICAgIE5vdGljZSBob3cgdGhlIGZpbmFsIGVsZW1lbnQgb2YgdGhlIGBmZnRgIG91dHB1dCBpcyB0aGUgY29tcGxleCBjb25qdWdhdGUKICAgIG9mIHRoZSBzZWNvbmQgZWxlbWVudCwgZm9yIHJlYWwgaW5wdXQuIEZvciBgcmZmdGAsIHRoaXMgc3ltbWV0cnkgaXMKICAgIGV4cGxvaXRlZCB0byBjb21wdXRlIG9ubHkgdGhlIG5vbi1uZWdhdGl2ZSBmcmVxdWVuY3kgdGVybXMuCgogICAgTlRyUAAAAHJRAAAAcwYAAAAgICAgICByMwAAAHIEAAAAcgQAAABAAQAAc0sAAACAAPVqAgAJEJABiQqMCoBB2AcIgHnYDA2MR5BEjE2IAd0PIKARoETRDynUDymASN0NFZBhmBGYRKAkqASoaNENN9QNN4BG2AsRgE1yNQAAAGMEAAAAAAAAAAAAAAAIAAAAAwAAAPOWAAAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfQB8AYATfABqAQAAAAAAAAAAfAIZAAAAAAAAAAAAZAJ6CgAAZAN6BQAAfQF0BQAAAAAAAAAAAAB8AXwDpgIAAKsCAAAAAAAAAAB9BHQHAAAAAAAAAAAAAHwAfAF8AmQEZAV8BKYGAACrBgAAAAAAAAAAfQV8BVMAKQZhyA8AAAogICAgQ29tcHV0ZXMgdGhlIGludmVyc2Ugb2YgYHJmZnRgLgoKICAgIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGludmVyc2Ugb2YgdGhlIG9uZS1kaW1lbnNpb25hbCAqbiotcG9pbnQKICAgIGRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtIG9mIHJlYWwgaW5wdXQgY29tcHV0ZWQgYnkgYHJmZnRgLgogICAgSW4gb3RoZXIgd29yZHMsIGBgaXJmZnQocmZmdChhKSwgbGVuKGEpKSA9PSBhYGAgdG8gd2l0aGluIG51bWVyaWNhbAogICAgYWNjdXJhY3kuIChTZWUgTm90ZXMgYmVsb3cgZm9yIHdoeSBgYGxlbihhKWBgIGlzIG5lY2Vzc2FyeSBoZXJlLikKCiAgICBUaGUgaW5wdXQgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm0gcmV0dXJuZWQgYnkgYHJmZnRgLCBpLmUuIHRoZQogICAgcmVhbCB6ZXJvLWZyZXF1ZW5jeSB0ZXJtIGZvbGxvd2VkIGJ5IHRoZSBjb21wbGV4IHBvc2l0aXZlIGZyZXF1ZW5jeSB0ZXJtcwogICAgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBmcmVxdWVuY3kuICBTaW5jZSB0aGUgZGlzY3JldGUgRm91cmllciBUcmFuc2Zvcm0gb2YKICAgIHJlYWwgaW5wdXQgaXMgSGVybWl0aWFuLXN5bW1ldHJpYywgdGhlIG5lZ2F0aXZlIGZyZXF1ZW5jeSB0ZXJtcyBhcmUgdGFrZW4KICAgIHRvIGJlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpdmUgZnJlcXVlbmN5IHRlcm1zLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiBhcnJheV9saWtlCiAgICAgICAgVGhlIGlucHV0IGFycmF5LgogICAgbiA6IGludCwgb3B0aW9uYWwKICAgICAgICBMZW5ndGggb2YgdGhlIHRyYW5zZm9ybWVkIGF4aXMgb2YgdGhlIG91dHB1dC4KICAgICAgICBGb3IgYG5gIG91dHB1dCBwb2ludHMsIGBgbi8vMisxYGAgaW5wdXQgcG9pbnRzIGFyZSBuZWNlc3NhcnkuICBJZiB0aGUKICAgICAgICBpbnB1dCBpcyBsb25nZXIgdGhhbiB0aGlzLCBpdCBpcyBjcm9wcGVkLiAgSWYgaXQgaXMgc2hvcnRlciB0aGFuIHRoaXMsCiAgICAgICAgaXQgaXMgcGFkZGVkIHdpdGggemVyb3MuICBJZiBgbmAgaXMgbm90IGdpdmVuLCBpdCBpcyB0YWtlbiB0byBiZQogICAgICAgIGBgMioobS0xKWBgIHdoZXJlIGBgbWBgIGlzIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGFsb25nIHRoZSBheGlzCiAgICAgICAgc3BlY2lmaWVkIGJ5IGBheGlzYC4KICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIGludmVyc2UgRkZULiBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0CiAgICAgICAgYXhpcyBpcyB1c2VkLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIFRoZSB0cnVuY2F0ZWQgb3IgemVyby1wYWRkZWQgaW5wdXQsIHRyYW5zZm9ybWVkIGFsb25nIHRoZSBheGlzCiAgICAgICAgaW5kaWNhdGVkIGJ5IGBheGlzYCwgb3IgdGhlIGxhc3Qgb25lIGlmIGBheGlzYCBpcyBub3Qgc3BlY2lmaWVkLgogICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHRyYW5zZm9ybWVkIGF4aXMgaXMgYG5gLCBvciwgaWYgYG5gIGlzIG5vdCBnaXZlbiwKICAgICAgICBgYDIqKG0tMSlgYCB3aGVyZSBgYG1gYCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2Zvcm1lZCBheGlzIG9mIHRoZQogICAgICAgIGlucHV0LiBUbyBnZXQgYW4gb2RkIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzLCBgbmAgbXVzdCBiZSBzcGVjaWZpZWQuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIEluZGV4RXJyb3IKICAgICAgICBJZiBgYXhpc2AgaXMgbm90IGEgdmFsaWQgYXhpcyBvZiBgYWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5mZnQgOiBGb3IgZGVmaW5pdGlvbiBvZiB0aGUgREZUIGFuZCBjb252ZW50aW9ucyB1c2VkLgogICAgcmZmdCA6IFRoZSBvbmUtZGltZW5zaW9uYWwgRkZUIG9mIHJlYWwgaW5wdXQsIG9mIHdoaWNoIGBpcmZmdGAgaXMgaW52ZXJzZS4KICAgIGZmdCA6IFRoZSBvbmUtZGltZW5zaW9uYWwgRkZULgogICAgaXJmZnQyIDogVGhlIGludmVyc2Ugb2YgdGhlIHR3by1kaW1lbnNpb25hbCBGRlQgb2YgcmVhbCBpbnB1dC4KICAgIGlyZmZ0biA6IFRoZSBpbnZlcnNlIG9mIHRoZSAqbiotZGltZW5zaW9uYWwgRkZUIG9mIHJlYWwgaW5wdXQuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBSZXR1cm5zIHRoZSByZWFsIHZhbHVlZCBgbmAtcG9pbnQgaW52ZXJzZSBkaXNjcmV0ZSBGb3VyaWVyIHRyYW5zZm9ybQogICAgb2YgYGFgLCB3aGVyZSBgYWAgY29udGFpbnMgdGhlIG5vbi1uZWdhdGl2ZSBmcmVxdWVuY3kgdGVybXMgb2YgYQogICAgSGVybWl0aWFuLXN5bW1ldHJpYyBzZXF1ZW5jZS4gYG5gIGlzIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCwgbm90IHRoZQogICAgaW5wdXQuCgogICAgSWYgeW91IHNwZWNpZnkgYW4gYG5gIHN1Y2ggdGhhdCBgYWAgbXVzdCBiZSB6ZXJvLXBhZGRlZCBvciB0cnVuY2F0ZWQsIHRoZQogICAgZXh0cmEvcmVtb3ZlZCB2YWx1ZXMgd2lsbCBiZSBhZGRlZC9yZW1vdmVkIGF0IGhpZ2ggZnJlcXVlbmNpZXMuIE9uZSBjYW4KICAgIHRodXMgcmVzYW1wbGUgYSBzZXJpZXMgdG8gYG1gIHBvaW50cyB2aWEgRm91cmllciBpbnRlcnBvbGF0aW9uIGJ5OgogICAgYGBhX3Jlc2FtcCA9IGlyZmZ0KHJmZnQoYSksIG0pYGAuCgogICAgVGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGhlcm1pdGlhbiBpbnB1dCBkZXBlbmRzIG9uIHRoZSBsZW5ndGggb2YKICAgIHRoZSBvcmlnaW5hbCBkYXRhLCBhcyBnaXZlbiBieSBgbmAuIFRoaXMgaXMgYmVjYXVzZSBlYWNoIGlucHV0IHNoYXBlIGNvdWxkCiAgICBjb3JyZXNwb25kIHRvIGVpdGhlciBhbiBvZGQgb3IgZXZlbiBsZW5ndGggc2lnbmFsLiBCeSBkZWZhdWx0LCBgaXJmZnRgCiAgICBhc3N1bWVzIGFuIGV2ZW4gb3V0cHV0IGxlbmd0aCB3aGljaCBwdXRzIHRoZSBsYXN0IGVudHJ5IGF0IHRoZSBOeXF1aXN0CiAgICBmcmVxdWVuY3k7IGFsaWFzaW5nIHdpdGggaXRzIHN5bW1ldHJpYyBjb3VudGVycGFydC4gQnkgSGVybWl0aWFuIHN5bW1ldHJ5LAogICAgdGhlIHZhbHVlIGlzIHRodXMgdHJlYXRlZCBhcyBwdXJlbHkgcmVhbC4gVG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLCB0aGUKICAgIGNvcnJlY3QgbGVuZ3RoIG9mIHRoZSByZWFsIGlucHV0ICoqbXVzdCoqIGJlIGdpdmVuLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IG5wLmZmdC5pZmZ0KFsxLCAtMWosIC0xLCAxal0pCiAgICBhcnJheShbMC4rMC5qLCAgMS4rMC5qLCAgMC4rMC5qLCAgMC4rMC5qXSkgIyBtYXkgdmFyeQogICAgPj4+IG5wLmZmdC5pcmZmdChbMSwgLTFqLCAtMV0pCiAgICBhcnJheShbMC4sICAxLiwgIDAuLCAgMC5dKQoKICAgIE5vdGljZSBob3cgdGhlIGxhc3QgdGVybSBpbiB0aGUgaW5wdXQgdG8gdGhlIG9yZGluYXJ5IGBpZmZ0YCBpcyB0aGUKICAgIGNvbXBsZXggY29uanVnYXRlIG9mIHRoZSBzZWNvbmQgdGVybSwgYW5kIHRoZSBvdXRwdXQgaGFzIHplcm8gaW1hZ2luYXJ5CiAgICBwYXJ0IGV2ZXJ5d2hlcmUuICBXaGVuIGNhbGxpbmcgYGlyZmZ0YCwgdGhlIG5lZ2F0aXZlIGZyZXF1ZW5jaWVzIGFyZSBub3QKICAgIHNwZWNpZmllZCwgYW5kIHRoZSBvdXRwdXQgYXJyYXkgaXMgcHVyZWx5IHJlYWwuCgogICAgTnIXAAAA6QIAAABURnJUAAAAclEAAABzBgAAACAgICAgIHIzAAAAcgUAAAByBQAAAJ0BAABzVQAAAIAA9UADAAkQkAGJCowKgEHYBwiAedgNDoxXkFSMXZhR0Q0eoCHRDCOIAd0PIaAhoFTRDyrUDyqASN0NFZBhmBGYRKAkqAWoeNENONQNOIBG2AsRgE1yNQAAAGMEAAAAAAAAAAAAAAAGAAAAAwAAAPOsAAAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfQB8AYATfABqAQAAAAAAAAAAfAIZAAAAAAAAAAAAZAJ6CgAAZAN6BQAAfQF0BQAAAAAAAAAAAAB8A6YBAACrAQAAAAAAAAAAfQR0BwAAAAAAAAAAAAB0CQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfAF8AnwErASmBAAAqwQAAAAAAAAAAH0FfAVTACkFYWMNAAAKICAgIENvbXB1dGUgdGhlIEZGVCBvZiBhIHNpZ25hbCB0aGF0IGhhcyBIZXJtaXRpYW4gc3ltbWV0cnksIGkuZS4sIGEgcmVhbAogICAgc3BlY3RydW0uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYSA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgaW5wdXQgYXJyYXkuCiAgICBuIDogaW50LCBvcHRpb25hbAogICAgICAgIExlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQgYXhpcyBvZiB0aGUgb3V0cHV0LiBGb3IgYG5gIG91dHB1dAogICAgICAgIHBvaW50cywgYGBuLy8yICsgMWBgIGlucHV0IHBvaW50cyBhcmUgbmVjZXNzYXJ5LiAgSWYgdGhlIGlucHV0IGlzCiAgICAgICAgbG9uZ2VyIHRoYW4gdGhpcywgaXQgaXMgY3JvcHBlZC4gIElmIGl0IGlzIHNob3J0ZXIgdGhhbiB0aGlzLCBpdCBpcwogICAgICAgIHBhZGRlZCB3aXRoIHplcm9zLiAgSWYgYG5gIGlzIG5vdCBnaXZlbiwgaXQgaXMgdGFrZW4gdG8gYmUgYGAyKihtLTEpYGAKICAgICAgICB3aGVyZSBgYG1gYCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhbG9uZyB0aGUgYXhpcyBzcGVjaWZpZWQgYnkKICAgICAgICBgYXhpc2AuCiAgICBheGlzIDogaW50LCBvcHRpb25hbAogICAgICAgIEF4aXMgb3ZlciB3aGljaCB0byBjb21wdXRlIHRoZSBGRlQuIElmIG5vdCBnaXZlbiwgdGhlIGxhc3QKICAgICAgICBheGlzIGlzIHVzZWQuCiAgICBub3JtIDogeyJiYWNrd2FyZCIsICJvcnRobyIsICJmb3J3YXJkIn0sIG9wdGlvbmFsCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xMC4wCgogICAgICAgIE5vcm1hbGl6YXRpb24gbW9kZSAoc2VlIGBudW1weS5mZnRgKS4gRGVmYXVsdCBpcyAiYmFja3dhcmQiLgogICAgICAgIEluZGljYXRlcyB3aGljaCBkaXJlY3Rpb24gb2YgdGhlIGZvcndhcmQvYmFja3dhcmQgcGFpciBvZiB0cmFuc2Zvcm1zCiAgICAgICAgaXMgc2NhbGVkIGFuZCB3aXRoIHdoYXQgbm9ybWFsaXphdGlvbiBmYWN0b3IuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMjAuMAoKICAgICAgICAgICAgVGhlICJiYWNrd2FyZCIsICJmb3J3YXJkIiB2YWx1ZXMgd2VyZSBhZGRlZC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4aXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4aXNgLCBvciB0aGUgbGFzdCBvbmUgaWYgYGF4aXNgIGlzIG5vdCBzcGVjaWZpZWQuCiAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQgYXhpcyBpcyBgbmAsIG9yLCBpZiBgbmAgaXMgbm90IGdpdmVuLAogICAgICAgIGBgMiptIC0gMmBgIHdoZXJlIGBgbWBgIGlzIHRoZSBsZW5ndGggb2YgdGhlIHRyYW5zZm9ybWVkIGF4aXMgb2YKICAgICAgICB0aGUgaW5wdXQuIFRvIGdldCBhbiBvZGQgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMsIGBuYCBtdXN0IGJlCiAgICAgICAgc3BlY2lmaWVkLCBmb3IgaW5zdGFuY2UgYXMgYGAyKm0gLSAxYGAgaW4gdGhlIHR5cGljYWwgY2FzZSwKCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgSW5kZXhFcnJvcgogICAgICAgIElmIGBheGlzYCBpcyBub3QgYSB2YWxpZCBheGlzIG9mIGBhYC4KCiAgICBTZWUgYWxzbwogICAgLS0tLS0tLS0KICAgIHJmZnQgOiBDb21wdXRlIHRoZSBvbmUtZGltZW5zaW9uYWwgRkZUIGZvciByZWFsIGlucHV0LgogICAgaWhmZnQgOiBUaGUgaW52ZXJzZSBvZiBgaGZmdGAuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBgaGZmdGAvYGloZmZ0YCBhcmUgYSBwYWlyIGFuYWxvZ291cyB0byBgcmZmdGAvYGlyZmZ0YCwgYnV0IGZvciB0aGUKICAgIG9wcG9zaXRlIGNhc2U6IGhlcmUgdGhlIHNpZ25hbCBoYXMgSGVybWl0aWFuIHN5bW1ldHJ5IGluIHRoZSB0aW1lCiAgICBkb21haW4gYW5kIGlzIHJlYWwgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4uIFNvIGhlcmUgaXQncyBgaGZmdGAgZm9yCiAgICB3aGljaCB5b3UgbXVzdCBzdXBwbHkgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGlmIGl0IGlzIHRvIGJlIG9kZC4KCiAgICAqIGV2ZW46IGBgaWhmZnQoaGZmdChhLCAyKmxlbihhKSAtIDIpKSA9PSBhYGAsIHdpdGhpbiByb3VuZG9mZiBlcnJvciwKICAgICogb2RkOiBgYGloZmZ0KGhmZnQoYSwgMipsZW4oYSkgLSAxKSkgPT0gYWBgLCB3aXRoaW4gcm91bmRvZmYgZXJyb3IuCgogICAgVGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGhlcm1pdGlhbiBpbnB1dCBkZXBlbmRzIG9uIHRoZSBsZW5ndGggb2YKICAgIHRoZSBvcmlnaW5hbCBkYXRhLCBhcyBnaXZlbiBieSBgbmAuIFRoaXMgaXMgYmVjYXVzZSBlYWNoIGlucHV0IHNoYXBlIGNvdWxkCiAgICBjb3JyZXNwb25kIHRvIGVpdGhlciBhbiBvZGQgb3IgZXZlbiBsZW5ndGggc2lnbmFsLiBCeSBkZWZhdWx0LCBgaGZmdGAKICAgIGFzc3VtZXMgYW4gZXZlbiBvdXRwdXQgbGVuZ3RoIHdoaWNoIHB1dHMgdGhlIGxhc3QgZW50cnkgYXQgdGhlIE55cXVpc3QKICAgIGZyZXF1ZW5jeTsgYWxpYXNpbmcgd2l0aCBpdHMgc3ltbWV0cmljIGNvdW50ZXJwYXJ0LiBCeSBIZXJtaXRpYW4gc3ltbWV0cnksCiAgICB0aGUgdmFsdWUgaXMgdGh1cyB0cmVhdGVkIGFzIHB1cmVseSByZWFsLiBUbyBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24sIHRoZQogICAgc2hhcGUgb2YgdGhlIGZ1bGwgc2lnbmFsICoqbXVzdCoqIGJlIGdpdmVuLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IHNpZ25hbCA9IG5wLmFycmF5KFsxLCAyLCAzLCA0LCAzLCAyXSkKICAgID4+PiBucC5mZnQuZmZ0KHNpZ25hbCkKICAgIGFycmF5KFsxNS4rMC5qLCAgLTQuKzAuaiwgICAwLiswLmosICAtMS4tMC5qLCAgIDAuKzAuaiwgIC00LiswLmpdKSAjIG1heSB2YXJ5CiAgICA+Pj4gbnAuZmZ0LmhmZnQoc2lnbmFsWzo0XSkgIyBJbnB1dCBmaXJzdCBoYWxmIG9mIHNpZ25hbAogICAgYXJyYXkoWzE1LiwgIC00LiwgICAwLiwgIC0xLiwgICAwLiwgIC00Ll0pCiAgICA+Pj4gbnAuZmZ0LmhmZnQoc2lnbmFsLCA2KSAgIyBJbnB1dCBlbnRpcmUgc2lnbmFsIGFuZCB0cnVuY2F0ZQogICAgYXJyYXkoWzE1LiwgIC00LiwgICAwLiwgIC0xLiwgICAwLiwgIC00Ll0pCgoKICAgID4+PiBzaWduYWwgPSBucC5hcnJheShbWzEsIDEual0sIFstMS5qLCAyXV0pCiAgICA+Pj4gbnAuY29uaihzaWduYWwuVCkgLSBzaWduYWwgICAjIGNoZWNrIEhlcm1pdGlhbiBzeW1tZXRyeQogICAgYXJyYXkoW1sgMC4tMC5qLCAgLTAuKzAual0sICMgbWF5IHZhcnkKICAgICAgICAgICBbIDAuKzAuaiwgIDAuLTAual1dKQogICAgPj4+IGZyZXFfc3BlY3RydW0gPSBucC5mZnQuaGZmdChzaWduYWwpCiAgICA+Pj4gZnJlcV9zcGVjdHJ1bQogICAgYXJyYXkoW1sgMS4sICAxLl0sCiAgICAgICAgICAgWyAyLiwgLTIuXV0pCgogICAgTnIXAAAAclcAAABySAAAACkFchEAAAByHwAAAHJJAAAAcgUAAAByFAAAAKkGcigAAAByKQAAAHIqAAAAckAAAADaCG5ld19ub3JtclIAAABzBgAAACAgICAgIHIzAAAAcgYAAAByBgAAAAUCAABzWAAAAIAA9XQCAAkQkAGJCowKgEHYBwiAedgNDoxXkFSMXZhR0Q0eoCHRDCOIAd0PHph00Q8k1A8kgEjdDRKVOZhRkTyUPKARoESoeNANONENONQNOIBG2AsRgE1yNQAAAGMEAAAAAAAAAAAAAAAIAAAAAwAAAPOgAAAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfQB8AYANfABqAQAAAAAAAAAAfAIZAAAAAAAAAAAAfQF0BQAAAAAAAAAAAAB8A6YBAACrAQAAAAAAAAAAfQR0BwAAAAAAAAAAAAB0CQAAAAAAAAAAAAB8AHwBfAJ8BKwCpgQAAKsEAAAAAAAAAACmAQAAqwEAAAAAAAAAAH0FfAVTACkDYfoHAAAKICAgIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIG9mIGEgc2lnbmFsIHRoYXQgaGFzIEhlcm1pdGlhbiBzeW1tZXRyeS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LgogICAgbiA6IGludCwgb3B0aW9uYWwKICAgICAgICBMZW5ndGggb2YgdGhlIGludmVyc2UgRkZULCB0aGUgbnVtYmVyIG9mIHBvaW50cyBhbG9uZwogICAgICAgIHRyYW5zZm9ybWF0aW9uIGF4aXMgaW4gdGhlIGlucHV0IHRvIHVzZS4gIElmIGBuYCBpcyBzbWFsbGVyIHRoYW4KICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCwgdGhlIGlucHV0IGlzIGNyb3BwZWQuICBJZiBpdCBpcyBsYXJnZXIsCiAgICAgICAgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoIHplcm9zLiBJZiBgbmAgaXMgbm90IGdpdmVuLCB0aGUgbGVuZ3RoIG9mCiAgICAgICAgdGhlIGlucHV0IGFsb25nIHRoZSBheGlzIHNwZWNpZmllZCBieSBgYXhpc2AgaXMgdXNlZC4KICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIGludmVyc2UgRkZULiBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0CiAgICAgICAgYXhpcyBpcyB1c2VkLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogY29tcGxleCBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4aXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4aXNgLCBvciB0aGUgbGFzdCBvbmUgaWYgYGF4aXNgIGlzIG5vdCBzcGVjaWZpZWQuCiAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQgYXhpcyBpcyBgYG4vLzIgKyAxYGAuCgogICAgU2VlIGFsc28KICAgIC0tLS0tLS0tCiAgICBoZmZ0LCBpcmZmdAoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgYGhmZnRgL2BpaGZmdGAgYXJlIGEgcGFpciBhbmFsb2dvdXMgdG8gYHJmZnRgL2BpcmZmdGAsIGJ1dCBmb3IgdGhlCiAgICBvcHBvc2l0ZSBjYXNlOiBoZXJlIHRoZSBzaWduYWwgaGFzIEhlcm1pdGlhbiBzeW1tZXRyeSBpbiB0aGUgdGltZQogICAgZG9tYWluIGFuZCBpcyByZWFsIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLiBTbyBoZXJlIGl0J3MgYGhmZnRgIGZvcgogICAgd2hpY2ggeW91IG11c3Qgc3VwcGx5IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpZiBpdCBpcyB0byBiZSBvZGQ6CgogICAgKiBldmVuOiBgYGloZmZ0KGhmZnQoYSwgMipsZW4oYSkgLSAyKSkgPT0gYWBgLCB3aXRoaW4gcm91bmRvZmYgZXJyb3IsCiAgICAqIG9kZDogYGBpaGZmdChoZmZ0KGEsIDIqbGVuKGEpIC0gMSkpID09IGFgYCwgd2l0aGluIHJvdW5kb2ZmIGVycm9yLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IHNwZWN0cnVtID0gbnAuYXJyYXkoWyAxNSwgLTQsIDAsIC0xLCAwLCAtNF0pCiAgICA+Pj4gbnAuZmZ0LmlmZnQoc3BlY3RydW0pCiAgICBhcnJheShbMS4rMC5qLCAgMi4rMC5qLCAgMy4rMC5qLCAgNC4rMC5qLCAgMy4rMC5qLCAgMi4rMC5qXSkgIyBtYXkgdmFyeQogICAgPj4+IG5wLmZmdC5paGZmdChzcGVjdHJ1bSkKICAgIGFycmF5KFsgMS4tMC5qLCAgMi4tMC5qLCAgMy4tMC5qLCAgNC4tMC5qXSkgIyBtYXkgdmFyeQoKICAgIE5ySAAAACkFchEAAAByHwAAAHJJAAAAchQAAAByBAAAAHJZAAAAcwYAAAAgICAgICByMwAAAHIHAAAAcgcAAABnAgAAc1AAAACAAPV2AQAJEJABiQqMCoBB2AcIgHnYDA2MR5BEjE2IAd0PHph00Q8k1A8kgEjdDRaVdJhBmHGgJKhY0Bc20Rc21Bc20Q031A03gEbYCxGATXI1AAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA84YBAACXAHwBgC9kAX0EfAKAFXQBAAAAAAAAAAAAAHwAagEAAAAAAAAAAKYBAACrAQAAAAAAAAAAfQFuGHQFAAAAAAAAAAAAAHwAagEAAAAAAAAAAHwCpgIAAKsCAAAAAAAAAAB9AW4CZAJ9BHQBAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB9AXwCgCt0AQAAAAAAAAAAAAB0BwAAAAAAAAAAAAB0CQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAACwBkAqYCAACrAgAAAAAAAAAApgEAAKsBAAAAAAAAAAB9AnQJAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB0CQAAAAAAAAAAAAB8AqYBAACrAQAAAAAAAAAAawMAAAAAcg90CwAAAAAAAAAAAABkA6YBAACrAQAAAAAAAAAAggF8A3IefARyHHwAagEAAAAAAAAAAHwCZAQZAAAAAAAAAAAAGQAAAAAAAAAAAGQBegoAAGQFegUAAHwBZAQ8AAAAfAF8AmYCUwApBk5yFwAAAHIQAAAAeiZTaGFwZSBhbmQgYXhlcyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLnIdAAAAclcAAAApBnIgAAAAch8AAAByFQAAANoFcmFuZ2VyIgAAAHI+AAAAKQVyKAAAAHIvAAAA2gRheGVz2gdpbnZyZWFs2glzaGFwZWxlc3NzBQAAACAgICAgcjMAAADaDV9jb29rX25kX2FyZ3NyYQAAAKoCAABzwwAAAIAA2AcIgHnYFBWICdgLD4g83RAUkFGUV5ENlA2IQYhB5RAUkFGUV5hk0RAj1BAjiEGIQeAUFYgJ3QgMiFGJB4wHgEHYBwuAfN0PE5VFnTOYcZk2nDaYJ6Ax0RQl1BQl0Q8m1A8miATdBwqIMYF2hHaVE5BUkRmUGdIHGtAHGt0OGNAZQdEOQtQOQtAIQtgHDvAAAQUskDnwAAEFLNgREpQXmBSYYpwY1BEioFHRESaoIdEQK4gBiCKJBdgLDIhkiDeATnI1AAAAYwUAAAAAAAAAAAAAAAcAAAADAAAA8wYBAACXAHQBAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9AHQDAAAAAAAAAAAAAHwAfAF8AqYDAACrAwAAAAAAAAAAXAIAAH0BfQJ0BQAAAAAAAAAAAAB0BwAAAAAAAAAAAAB0CQAAAAAAAAAAAAB8AqYBAACrAQAAAAAAAAAApgEAAKsBAAAAAAAAAACmAQAAqwEAAAAAAAAAAH0FfAWgBQAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAKsAAAAAAAAAAAABAHwFRABdHX0GAgB8A3wAfAF8BhkAAAAAAAAAAAB8AnwGGQAAAAAAAAAAAHwErAGmBAAAqwQAAAAAAAAAAH0AjB58AFMAKQJOKQNyKQAAAHIqAAAAckAAAAApBnIRAAAAcmEAAAByIAAAAHJdAAAAciIAAADaB3JldmVyc2UpB3IoAAAAci8AAAByXgAAANoIZnVuY3Rpb25yQAAAANoDaXRs2gJpaXMHAAAAICAgICAgIHIzAAAA2gpfcmF3X2ZmdG5kcmcAAAC9AgAAc4AAAACAAN0ID5ABiQqMCoBB3Q4bmEGYcaAk0Q4n1A4ngUeAQYB03QoOjXWVU5gUkVmUWdEPH9QPH9EKINQKIIBD2AQHh0uCS4FNhE2ATdgOEfAAAQU78AABBTuIAtgMFIhIkFGYIZhCnCWgZKgypGiwVNAMOtEMOtQMOogBiAHYCwyASHI1AAAAYwQAAAAAAAAAAAAAAAEAAAADAAAA8wgAAACXAHwAZgFTAHJLAAAAckwAAACpBHIoAAAAci8AAAByXgAAAHJAAAAAcwQAAAAgICAgcjMAAADaEF9mZnRuX2Rpc3BhdGNoZXJyagAAAMcCAAByTgAAAHI1AAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8zIAAACXAHQBAAAAAAAAAAAAAHwAfAF8AnQCAAAAAAAAAAAAAHwDpgUAAKsFAAAAAAAAAABTACkBYTEPAAAKICAgIENvbXB1dGUgdGhlIE4tZGltZW5zaW9uYWwgZGlzY3JldGUgRm91cmllciBUcmFuc2Zvcm0uCgogICAgVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgKk4qLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtIG92ZXIKICAgIGFueSBudW1iZXIgb2YgYXhlcyBpbiBhbiAqTSotZGltZW5zaW9uYWwgYXJyYXkgYnkgbWVhbnMgb2YgdGhlIEZhc3QgRm91cmllcgogICAgVHJhbnNmb3JtIChGRlQpLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGEgOiBhcnJheV9saWtlCiAgICAgICAgSW5wdXQgYXJyYXksIGNhbiBiZSBjb21wbGV4LgogICAgcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgU2hhcGUgKGxlbmd0aCBvZiBlYWNoIHRyYW5zZm9ybWVkIGF4aXMpIG9mIHRoZSBvdXRwdXQKICAgICAgICAoYGBzWzBdYGAgcmVmZXJzIHRvIGF4aXMgMCwgYGBzWzFdYGAgdG8gYXhpcyAxLCBldGMuKS4KICAgICAgICBUaGlzIGNvcnJlc3BvbmRzIHRvIGBgbmBgIGZvciBgYGZmdCh4LCBuKWBgLgogICAgICAgIEFsb25nIGFueSBheGlzLCBpZiB0aGUgZ2l2ZW4gc2hhcGUgaXMgc21hbGxlciB0aGFuIHRoYXQgb2YgdGhlIGlucHV0LAogICAgICAgIHRoZSBpbnB1dCBpcyBjcm9wcGVkLiAgSWYgaXQgaXMgbGFyZ2VyLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggemVyb3MuCiAgICAgICAgaWYgYHNgIGlzIG5vdCBnaXZlbiwgdGhlIHNoYXBlIG9mIHRoZSBpbnB1dCBhbG9uZyB0aGUgYXhlcyBzcGVjaWZpZWQKICAgICAgICBieSBgYXhlc2AgaXMgdXNlZC4KICAgIGF4ZXMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIEF4ZXMgb3ZlciB3aGljaCB0byBjb21wdXRlIHRoZSBGRlQuICBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0IGBgbGVuKHMpYGAKICAgICAgICBheGVzIGFyZSB1c2VkLCBvciBhbGwgYXhlcyBpZiBgc2AgaXMgYWxzbyBub3Qgc3BlY2lmaWVkLgogICAgICAgIFJlcGVhdGVkIGluZGljZXMgaW4gYGF4ZXNgIG1lYW5zIHRoYXQgdGhlIHRyYW5zZm9ybSBvdmVyIHRoYXQgYXhpcyBpcwogICAgICAgIHBlcmZvcm1lZCBtdWx0aXBsZSB0aW1lcy4KICAgIG5vcm0gOiB7ImJhY2t3YXJkIiwgIm9ydGhvIiwgImZvcndhcmQifSwgb3B0aW9uYWwKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEwLjAKCiAgICAgICAgTm9ybWFsaXphdGlvbiBtb2RlIChzZWUgYG51bXB5LmZmdGApLiBEZWZhdWx0IGlzICJiYWNrd2FyZCIuCiAgICAgICAgSW5kaWNhdGVzIHdoaWNoIGRpcmVjdGlvbiBvZiB0aGUgZm9yd2FyZC9iYWNrd2FyZCBwYWlyIG9mIHRyYW5zZm9ybXMKICAgICAgICBpcyBzY2FsZWQgYW5kIHdpdGggd2hhdCBub3JtYWxpemF0aW9uIGZhY3Rvci4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4yMC4wCgogICAgICAgICAgICBUaGUgImJhY2t3YXJkIiwgImZvcndhcmQiIHZhbHVlcyB3ZXJlIGFkZGVkLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG91dCA6IGNvbXBsZXggbmRhcnJheQogICAgICAgIFRoZSB0cnVuY2F0ZWQgb3IgemVyby1wYWRkZWQgaW5wdXQsIHRyYW5zZm9ybWVkIGFsb25nIHRoZSBheGVzCiAgICAgICAgaW5kaWNhdGVkIGJ5IGBheGVzYCwgb3IgYnkgYSBjb21iaW5hdGlvbiBvZiBgc2AgYW5kIGBhYCwKICAgICAgICBhcyBleHBsYWluZWQgaW4gdGhlIHBhcmFtZXRlcnMgc2VjdGlvbiBhYm92ZS4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBzYCBhbmQgYGF4ZXNgIGhhdmUgZGlmZmVyZW50IGxlbmd0aC4KICAgIEluZGV4RXJyb3IKICAgICAgICBJZiBhbiBlbGVtZW50IG9mIGBheGVzYCBpcyBsYXJnZXIgdGhhbiB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcyBvZiBgYWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5mZnQgOiBPdmVyYWxsIHZpZXcgb2YgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm1zLCB3aXRoIGRlZmluaXRpb25zCiAgICAgICAgYW5kIGNvbnZlbnRpb25zIHVzZWQuCiAgICBpZmZ0biA6IFRoZSBpbnZlcnNlIG9mIGBmZnRuYCwgdGhlIGludmVyc2UgKm4qLWRpbWVuc2lvbmFsIEZGVC4KICAgIGZmdCA6IFRoZSBvbmUtZGltZW5zaW9uYWwgRkZULCB3aXRoIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkLgogICAgcmZmdG4gOiBUaGUgKm4qLWRpbWVuc2lvbmFsIEZGVCBvZiByZWFsIGlucHV0LgogICAgZmZ0MiA6IFRoZSB0d28tZGltZW5zaW9uYWwgRkZULgogICAgZmZ0c2hpZnQgOiBTaGlmdHMgemVyby1mcmVxdWVuY3kgdGVybXMgdG8gY2VudHJlIG9mIGFycmF5CgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgb3V0cHV0LCBhbmFsb2dvdXNseSB0byBgZmZ0YCwgY29udGFpbnMgdGhlIHRlcm0gZm9yIHplcm8gZnJlcXVlbmN5IGluCiAgICB0aGUgbG93LW9yZGVyIGNvcm5lciBvZiBhbGwgYXhlcywgdGhlIHBvc2l0aXZlIGZyZXF1ZW5jeSB0ZXJtcyBpbiB0aGUKICAgIGZpcnN0IGhhbGYgb2YgYWxsIGF4ZXMsIHRoZSB0ZXJtIGZvciB0aGUgTnlxdWlzdCBmcmVxdWVuY3kgaW4gdGhlIG1pZGRsZQogICAgb2YgYWxsIGF4ZXMgYW5kIHRoZSBuZWdhdGl2ZSBmcmVxdWVuY3kgdGVybXMgaW4gdGhlIHNlY29uZCBoYWxmIG9mIGFsbAogICAgYXhlcywgaW4gb3JkZXIgb2YgZGVjcmVhc2luZ2x5IG5lZ2F0aXZlIGZyZXF1ZW5jeS4KCiAgICBTZWUgYG51bXB5LmZmdGAgZm9yIGRldGFpbHMsIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGEgPSBucC5tZ3JpZFs6MywgOjMsIDozXVswXQogICAgPj4+IG5wLmZmdC5mZnRuKGEsIGF4ZXM9KDEsIDIpKQogICAgYXJyYXkoW1tbIDAuKzAuaiwgICAwLiswLmosICAgMC4rMC5qXSwgIyBtYXkgdmFyeQogICAgICAgICAgICBbIDAuKzAuaiwgICAwLiswLmosICAgMC4rMC5qXSwKICAgICAgICAgICAgWyAwLiswLmosICAgMC4rMC5qLCAgIDAuKzAual1dLAogICAgICAgICAgIFtbIDkuKzAuaiwgICAwLiswLmosICAgMC4rMC5qXSwKICAgICAgICAgICAgWyAwLiswLmosICAgMC4rMC5qLCAgIDAuKzAual0sCiAgICAgICAgICAgIFsgMC4rMC5qLCAgIDAuKzAuaiwgICAwLiswLmpdXSwKICAgICAgICAgICBbWzE4LiswLmosICAgMC4rMC5qLCAgIDAuKzAual0sCiAgICAgICAgICAgIFsgMC4rMC5qLCAgIDAuKzAuaiwgICAwLiswLmpdLAogICAgICAgICAgICBbIDAuKzAuaiwgICAwLiswLmosICAgMC4rMC5qXV1dKQogICAgPj4+IG5wLmZmdC5mZnRuKGEsICgyLCAyKSwgYXhlcz0oMCwgMSkpCiAgICBhcnJheShbW1sgMi4rMC5qLCAgMi4rMC5qLCAgMi4rMC5qXSwgIyBtYXkgdmFyeQogICAgICAgICAgICBbIDAuKzAuaiwgIDAuKzAuaiwgIDAuKzAual1dLAogICAgICAgICAgIFtbLTIuKzAuaiwgLTIuKzAuaiwgLTIuKzAual0sCiAgICAgICAgICAgIFsgMC4rMC5qLCAgMC4rMC5qLCAgMC4rMC5qXV1dKQoKICAgID4+PiBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CiAgICA+Pj4gW1gsIFldID0gbnAubWVzaGdyaWQoMiAqIG5wLnBpICogbnAuYXJhbmdlKDIwMCkgLyAxMiwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAyICogbnAucGkgKiBucC5hcmFuZ2UoMjAwKSAvIDM0KQogICAgPj4+IFMgPSBucC5zaW4oWCkgKyBucC5jb3MoWSkgKyBucC5yYW5kb20udW5pZm9ybSgwLCAxLCBYLnNoYXBlKQogICAgPj4+IEZTID0gbnAuZmZ0LmZmdG4oUykKICAgID4+PiBwbHQuaW1zaG93KG5wLmxvZyhucC5hYnMobnAuZmZ0LmZmdHNoaWZ0KEZTKSkqKjIpKQogICAgPG1hdHBsb3RsaWIuaW1hZ2UuQXhlc0ltYWdlIG9iamVjdCBhdCAweC4uLj4KICAgID4+PiBwbHQuc2hvdygpCgogICAgqQJyZwAAAHICAAAAcmkAAABzBAAAACAgICByMwAAAHIOAAAAcg4AAADLAgAAcxsAAACAAPVIAwAMFpBhmBGYRKUjoHTRCyzUCyzQBCxyNQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPMyAAAAlwB0AQAAAAAAAAAAAAB8AHwBfAJ0AgAAAAAAAAAAAAB8A6YFAACrBQAAAAAAAAAAUwApAWGrDwAACiAgICBDb21wdXRlIHRoZSBOLWRpbWVuc2lvbmFsIGludmVyc2UgZGlzY3JldGUgRm91cmllciBUcmFuc2Zvcm0uCgogICAgVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgaW52ZXJzZSBvZiB0aGUgTi1kaW1lbnNpb25hbCBkaXNjcmV0ZQogICAgRm91cmllciBUcmFuc2Zvcm0gb3ZlciBhbnkgbnVtYmVyIG9mIGF4ZXMgaW4gYW4gTS1kaW1lbnNpb25hbCBhcnJheSBieQogICAgbWVhbnMgb2YgdGhlIEZhc3QgRm91cmllciBUcmFuc2Zvcm0gKEZGVCkuICBJbiBvdGhlciB3b3JkcywKICAgIGBgaWZmdG4oZmZ0bihhKSkgPT0gYWBgIHRvIHdpdGhpbiBudW1lcmljYWwgYWNjdXJhY3kuCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGVmaW5pdGlvbnMgYW5kIGNvbnZlbnRpb25zIHVzZWQsIHNlZSBgbnVtcHkuZmZ0YC4KCiAgICBUaGUgaW5wdXQsIGFuYWxvZ291c2x5IHRvIGBpZmZ0YCwgc2hvdWxkIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGlzCiAgICByZXR1cm5lZCBieSBgZmZ0bmAsIGkuZS4gaXQgc2hvdWxkIGhhdmUgdGhlIHRlcm0gZm9yIHplcm8gZnJlcXVlbmN5CiAgICBpbiBhbGwgYXhlcyBpbiB0aGUgbG93LW9yZGVyIGNvcm5lciwgdGhlIHBvc2l0aXZlIGZyZXF1ZW5jeSB0ZXJtcyBpbiB0aGUKICAgIGZpcnN0IGhhbGYgb2YgYWxsIGF4ZXMsIHRoZSB0ZXJtIGZvciB0aGUgTnlxdWlzdCBmcmVxdWVuY3kgaW4gdGhlIG1pZGRsZQogICAgb2YgYWxsIGF4ZXMgYW5kIHRoZSBuZWdhdGl2ZSBmcmVxdWVuY3kgdGVybXMgaW4gdGhlIHNlY29uZCBoYWxmIG9mIGFsbAogICAgYXhlcywgaW4gb3JkZXIgb2YgZGVjcmVhc2luZ2x5IG5lZ2F0aXZlIGZyZXF1ZW5jeS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LCBjYW4gYmUgY29tcGxleC4KICAgIHMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIFNoYXBlIChsZW5ndGggb2YgZWFjaCB0cmFuc2Zvcm1lZCBheGlzKSBvZiB0aGUgb3V0cHV0CiAgICAgICAgKGBgc1swXWBgIHJlZmVycyB0byBheGlzIDAsIGBgc1sxXWBgIHRvIGF4aXMgMSwgZXRjLikuCiAgICAgICAgVGhpcyBjb3JyZXNwb25kcyB0byBgYG5gYCBmb3IgYGBpZmZ0KHgsIG4pYGAuCiAgICAgICAgQWxvbmcgYW55IGF4aXMsIGlmIHRoZSBnaXZlbiBzaGFwZSBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgaW5wdXQsCiAgICAgICAgdGhlIGlucHV0IGlzIGNyb3BwZWQuICBJZiBpdCBpcyBsYXJnZXIsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCB6ZXJvcy4KICAgICAgICBpZiBgc2AgaXMgbm90IGdpdmVuLCB0aGUgc2hhcGUgb2YgdGhlIGlucHV0IGFsb25nIHRoZSBheGVzIHNwZWNpZmllZAogICAgICAgIGJ5IGBheGVzYCBpcyB1c2VkLiAgU2VlIG5vdGVzIGZvciBpc3N1ZSBvbiBgaWZmdGAgemVybyBwYWRkaW5nLgogICAgYXhlcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgQXhlcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIElGRlQuICBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0IGBgbGVuKHMpYGAKICAgICAgICBheGVzIGFyZSB1c2VkLCBvciBhbGwgYXhlcyBpZiBgc2AgaXMgYWxzbyBub3Qgc3BlY2lmaWVkLgogICAgICAgIFJlcGVhdGVkIGluZGljZXMgaW4gYGF4ZXNgIG1lYW5zIHRoYXQgdGhlIGludmVyc2UgdHJhbnNmb3JtIG92ZXIgdGhhdAogICAgICAgIGF4aXMgaXMgcGVyZm9ybWVkIG11bHRpcGxlIHRpbWVzLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogY29tcGxleCBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4ZXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4ZXNgLCBvciBieSBhIGNvbWJpbmF0aW9uIG9mIGBzYCBvciBgYWAsCiAgICAgICAgYXMgZXhwbGFpbmVkIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gYWJvdmUuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIFZhbHVlRXJyb3IKICAgICAgICBJZiBgc2AgYW5kIGBheGVzYCBoYXZlIGRpZmZlcmVudCBsZW5ndGguCiAgICBJbmRleEVycm9yCiAgICAgICAgSWYgYW4gZWxlbWVudCBvZiBgYXhlc2AgaXMgbGFyZ2VyIHRoYW4gdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMgb2YgYGFgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkuZmZ0IDogT3ZlcmFsbCB2aWV3IG9mIGRpc2NyZXRlIEZvdXJpZXIgdHJhbnNmb3Jtcywgd2l0aCBkZWZpbml0aW9ucwogICAgICAgICBhbmQgY29udmVudGlvbnMgdXNlZC4KICAgIGZmdG4gOiBUaGUgZm9yd2FyZCAqbiotZGltZW5zaW9uYWwgRkZULCBvZiB3aGljaCBgaWZmdG5gIGlzIHRoZSBpbnZlcnNlLgogICAgaWZmdCA6IFRoZSBvbmUtZGltZW5zaW9uYWwgaW52ZXJzZSBGRlQuCiAgICBpZmZ0MiA6IFRoZSB0d28tZGltZW5zaW9uYWwgaW52ZXJzZSBGRlQuCiAgICBpZmZ0c2hpZnQgOiBVbmRvZXMgYGZmdHNoaWZ0YCwgc2hpZnRzIHplcm8tZnJlcXVlbmN5IHRlcm1zIHRvIGJlZ2lubmluZwogICAgICAgIG9mIGFycmF5LgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgU2VlIGBudW1weS5mZnRgIGZvciBkZWZpbml0aW9ucyBhbmQgY29udmVudGlvbnMgdXNlZC4KCiAgICBaZXJvLXBhZGRpbmcsIGFuYWxvZ291c2x5IHdpdGggYGlmZnRgLCBpcyBwZXJmb3JtZWQgYnkgYXBwZW5kaW5nIHplcm9zIHRvCiAgICB0aGUgaW5wdXQgYWxvbmcgdGhlIHNwZWNpZmllZCBkaW1lbnNpb24uICBBbHRob3VnaCB0aGlzIGlzIHRoZSBjb21tb24KICAgIGFwcHJvYWNoLCBpdCBtaWdodCBsZWFkIHRvIHN1cnByaXNpbmcgcmVzdWx0cy4gIElmIGFub3RoZXIgZm9ybSBvZiB6ZXJvCiAgICBwYWRkaW5nIGlzIGRlc2lyZWQsIGl0IG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBgaWZmdG5gIGlzIGNhbGxlZC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBhID0gbnAuZXllKDQpCiAgICA+Pj4gbnAuZmZ0LmlmZnRuKG5wLmZmdC5mZnRuKGEsIGF4ZXM9KDAsKSksIGF4ZXM9KDEsKSkKICAgIGFycmF5KFtbMS4rMC5qLCAgMC4rMC5qLCAgMC4rMC5qLCAgMC4rMC5qXSwgIyBtYXkgdmFyeQogICAgICAgICAgIFswLiswLmosICAxLiswLmosICAwLiswLmosICAwLiswLmpdLAogICAgICAgICAgIFswLiswLmosICAwLiswLmosICAxLiswLmosICAwLiswLmpdLAogICAgICAgICAgIFswLiswLmosICAwLiswLmosICAwLiswLmosICAxLiswLmpdXSkKCgogICAgQ3JlYXRlIGFuZCBwbG90IGFuIGltYWdlIHdpdGggYmFuZC1saW1pdGVkIGZyZXF1ZW5jeSBjb250ZW50OgoKICAgID4+PiBpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CiAgICA+Pj4gbiA9IG5wLnplcm9zKCgyMDAsMjAwKSwgZHR5cGU9Y29tcGxleCkKICAgID4+PiBuWzYwOjgwLCAyMDo0MF0gPSBucC5leHAoMWoqbnAucmFuZG9tLnVuaWZvcm0oMCwgMipucC5waSwgKDIwLCAyMCkpKQogICAgPj4+IGltID0gbnAuZmZ0LmlmZnRuKG4pLnJlYWwKICAgID4+PiBwbHQuaW1zaG93KGltKQogICAgPG1hdHBsb3RsaWIuaW1hZ2UuQXhlc0ltYWdlIG9iamVjdCBhdCAweC4uLj4KICAgID4+PiBwbHQuc2hvdygpCgogICAgqQJyZwAAAHIDAAAAcmkAAABzBAAAACAgICByMwAAAHIPAAAAcg8AAAAyAwAAcxsAAACAAPVIAwAMFpBhmBGYRKUkqATRCy3UCy3QBC1yNQAAAKkC6f7///9yHQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPMyAAAAlwB0AQAAAAAAAAAAAAB8AHwBfAJ0AgAAAAAAAAAAAAB8A6YFAACrBQAAAAAAAAAAUwApAWGkDgAACiAgICBDb21wdXRlIHRoZSAyLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtLgoKICAgIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlICpuKi1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyIFRyYW5zZm9ybQogICAgb3ZlciBhbnkgYXhlcyBpbiBhbiAqTSotZGltZW5zaW9uYWwgYXJyYXkgYnkgbWVhbnMgb2YgdGhlCiAgICBGYXN0IEZvdXJpZXIgVHJhbnNmb3JtIChGRlQpLiAgQnkgZGVmYXVsdCwgdGhlIHRyYW5zZm9ybSBpcyBjb21wdXRlZCBvdmVyCiAgICB0aGUgbGFzdCB0d28gYXhlcyBvZiB0aGUgaW5wdXQgYXJyYXksIGkuZS4sIGEgMi1kaW1lbnNpb25hbCBGRlQuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYSA6IGFycmF5X2xpa2UKICAgICAgICBJbnB1dCBhcnJheSwgY2FuIGJlIGNvbXBsZXgKICAgIHMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIFNoYXBlIChsZW5ndGggb2YgZWFjaCB0cmFuc2Zvcm1lZCBheGlzKSBvZiB0aGUgb3V0cHV0CiAgICAgICAgKGBgc1swXWBgIHJlZmVycyB0byBheGlzIDAsIGBgc1sxXWBgIHRvIGF4aXMgMSwgZXRjLikuCiAgICAgICAgVGhpcyBjb3JyZXNwb25kcyB0byBgYG5gYCBmb3IgYGBmZnQoeCwgbilgYC4KICAgICAgICBBbG9uZyBlYWNoIGF4aXMsIGlmIHRoZSBnaXZlbiBzaGFwZSBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgaW5wdXQsCiAgICAgICAgdGhlIGlucHV0IGlzIGNyb3BwZWQuICBJZiBpdCBpcyBsYXJnZXIsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCB6ZXJvcy4KICAgICAgICBpZiBgc2AgaXMgbm90IGdpdmVuLCB0aGUgc2hhcGUgb2YgdGhlIGlucHV0IGFsb25nIHRoZSBheGVzIHNwZWNpZmllZAogICAgICAgIGJ5IGBheGVzYCBpcyB1c2VkLgogICAgYXhlcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgQXhlcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIEZGVC4gIElmIG5vdCBnaXZlbiwgdGhlIGxhc3QgdHdvCiAgICAgICAgYXhlcyBhcmUgdXNlZC4gIEEgcmVwZWF0ZWQgaW5kZXggaW4gYGF4ZXNgIG1lYW5zIHRoZSB0cmFuc2Zvcm0gb3ZlcgogICAgICAgIHRoYXQgYXhpcyBpcyBwZXJmb3JtZWQgbXVsdGlwbGUgdGltZXMuICBBIG9uZS1lbGVtZW50IHNlcXVlbmNlIG1lYW5zCiAgICAgICAgdGhhdCBhIG9uZS1kaW1lbnNpb25hbCBGRlQgaXMgcGVyZm9ybWVkLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogY29tcGxleCBuZGFycmF5CiAgICAgICAgVGhlIHRydW5jYXRlZCBvciB6ZXJvLXBhZGRlZCBpbnB1dCwgdHJhbnNmb3JtZWQgYWxvbmcgdGhlIGF4ZXMKICAgICAgICBpbmRpY2F0ZWQgYnkgYGF4ZXNgLCBvciB0aGUgbGFzdCB0d28gYXhlcyBpZiBgYXhlc2AgaXMgbm90IGdpdmVuLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBWYWx1ZUVycm9yCiAgICAgICAgSWYgYHNgIGFuZCBgYXhlc2AgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RoLCBvciBgYXhlc2Agbm90IGdpdmVuIGFuZAogICAgICAgIGBgbGVuKHMpICE9IDJgYC4KICAgIEluZGV4RXJyb3IKICAgICAgICBJZiBhbiBlbGVtZW50IG9mIGBheGVzYCBpcyBsYXJnZXIgdGhhbiB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcyBvZiBgYWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5mZnQgOiBPdmVyYWxsIHZpZXcgb2YgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm1zLCB3aXRoIGRlZmluaXRpb25zCiAgICAgICAgIGFuZCBjb252ZW50aW9ucyB1c2VkLgogICAgaWZmdDIgOiBUaGUgaW52ZXJzZSB0d28tZGltZW5zaW9uYWwgRkZULgogICAgZmZ0IDogVGhlIG9uZS1kaW1lbnNpb25hbCBGRlQuCiAgICBmZnRuIDogVGhlICpuKi1kaW1lbnNpb25hbCBGRlQuCiAgICBmZnRzaGlmdCA6IFNoaWZ0cyB6ZXJvLWZyZXF1ZW5jeSB0ZXJtcyB0byB0aGUgY2VudGVyIG9mIHRoZSBhcnJheS4KICAgICAgICBGb3IgdHdvLWRpbWVuc2lvbmFsIGlucHV0LCBzd2FwcyBmaXJzdCBhbmQgdGhpcmQgcXVhZHJhbnRzLCBhbmQgc2Vjb25kCiAgICAgICAgYW5kIGZvdXJ0aCBxdWFkcmFudHMuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBgZmZ0MmAgaXMganVzdCBgZmZ0bmAgd2l0aCBhIGRpZmZlcmVudCBkZWZhdWx0IGZvciBgYXhlc2AuCgogICAgVGhlIG91dHB1dCwgYW5hbG9nb3VzbHkgdG8gYGZmdGAsIGNvbnRhaW5zIHRoZSB0ZXJtIGZvciB6ZXJvIGZyZXF1ZW5jeSBpbgogICAgdGhlIGxvdy1vcmRlciBjb3JuZXIgb2YgdGhlIHRyYW5zZm9ybWVkIGF4ZXMsIHRoZSBwb3NpdGl2ZSBmcmVxdWVuY3kgdGVybXMKICAgIGluIHRoZSBmaXJzdCBoYWxmIG9mIHRoZXNlIGF4ZXMsIHRoZSB0ZXJtIGZvciB0aGUgTnlxdWlzdCBmcmVxdWVuY3kgaW4gdGhlCiAgICBtaWRkbGUgb2YgdGhlIGF4ZXMgYW5kIHRoZSBuZWdhdGl2ZSBmcmVxdWVuY3kgdGVybXMgaW4gdGhlIHNlY29uZCBoYWxmIG9mCiAgICB0aGUgYXhlcywgaW4gb3JkZXIgb2YgZGVjcmVhc2luZ2x5IG5lZ2F0aXZlIGZyZXF1ZW5jeS4KCiAgICBTZWUgYGZmdG5gIGZvciBkZXRhaWxzIGFuZCBhIHBsb3R0aW5nIGV4YW1wbGUsIGFuZCBgbnVtcHkuZmZ0YCBmb3IKICAgIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkLgoKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBhID0gbnAubWdyaWRbOjUsIDo1XVswXQogICAgPj4+IG5wLmZmdC5mZnQyKGEpCiAgICBhcnJheShbWyA1MC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgLCAgIDAuICArMC5qICAgICAgICAsICMgbWF5IHZhcnkKICAgICAgICAgICAgICAwLiAgKzAuaiAgICAgICAgLCAgIDAuICArMC5qICAgICAgICBdLAogICAgICAgICAgIFstMTIuNSsxNy4yMDQ3NzQwMWosICAgMC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgLAogICAgICAgICAgICAgIDAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgIF0sCiAgICAgICAgICAgWy0xMi41ICs0LjA2MTQ5NjJqICwgICAwLiAgKzAuaiAgICAgICAgLCAgIDAuICArMC5qICAgICAgICAsCiAgICAgICAgICAgICAgMC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgXSwKICAgICAgICAgICBbLTEyLjUgLTQuMDYxNDk2MmogLCAgIDAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgICwKICAgICAgICAgICAgICAwLiAgKzAuaiAgICAgICAgLCAgIDAuICArMC5qICAgICAgICBdLAogICAgICAgICAgIFstMTIuNS0xNy4yMDQ3NzQwMWosICAgMC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgLAogICAgICAgICAgICAgIDAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgIF1dKQoKICAgIHJsAAAAcmkAAABzBAAAACAgICByMwAAAHIMAAAAcgwAAACZAwAAcxsAAACAAPV6AgAMFpBhmBGYRKUjoHTRCyzUCyzQBCxyNQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPMyAAAAlwB0AQAAAAAAAAAAAAB8AHwBfAJ0AgAAAAAAAAAAAAB8A6YFAACrBQAAAAAAAAAAUwApAWF0DgAACiAgICBDb21wdXRlIHRoZSAyLWRpbWVuc2lvbmFsIGludmVyc2UgZGlzY3JldGUgRm91cmllciBUcmFuc2Zvcm0uCgogICAgVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgaW52ZXJzZSBvZiB0aGUgMi1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyCiAgICBUcmFuc2Zvcm0gb3ZlciBhbnkgbnVtYmVyIG9mIGF4ZXMgaW4gYW4gTS1kaW1lbnNpb25hbCBhcnJheSBieSBtZWFucyBvZgogICAgdGhlIEZhc3QgRm91cmllciBUcmFuc2Zvcm0gKEZGVCkuICBJbiBvdGhlciB3b3JkcywgYGBpZmZ0MihmZnQyKGEpKSA9PSBhYGAKICAgIHRvIHdpdGhpbiBudW1lcmljYWwgYWNjdXJhY3kuICBCeSBkZWZhdWx0LCB0aGUgaW52ZXJzZSB0cmFuc2Zvcm0gaXMKICAgIGNvbXB1dGVkIG92ZXIgdGhlIGxhc3QgdHdvIGF4ZXMgb2YgdGhlIGlucHV0IGFycmF5LgoKICAgIFRoZSBpbnB1dCwgYW5hbG9nb3VzbHkgdG8gYGlmZnRgLCBzaG91bGQgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSB3YXkgYXMgaXMKICAgIHJldHVybmVkIGJ5IGBmZnQyYCwgaS5lLiBpdCBzaG91bGQgaGF2ZSB0aGUgdGVybSBmb3IgemVybyBmcmVxdWVuY3kKICAgIGluIHRoZSBsb3ctb3JkZXIgY29ybmVyIG9mIHRoZSB0d28gYXhlcywgdGhlIHBvc2l0aXZlIGZyZXF1ZW5jeSB0ZXJtcyBpbgogICAgdGhlIGZpcnN0IGhhbGYgb2YgdGhlc2UgYXhlcywgdGhlIHRlcm0gZm9yIHRoZSBOeXF1aXN0IGZyZXF1ZW5jeSBpbiB0aGUKICAgIG1pZGRsZSBvZiB0aGUgYXhlcyBhbmQgdGhlIG5lZ2F0aXZlIGZyZXF1ZW5jeSB0ZXJtcyBpbiB0aGUgc2Vjb25kIGhhbGYgb2YKICAgIGJvdGggYXhlcywgaW4gb3JkZXIgb2YgZGVjcmVhc2luZ2x5IG5lZ2F0aXZlIGZyZXF1ZW5jeS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LCBjYW4gYmUgY29tcGxleC4KICAgIHMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIFNoYXBlIChsZW5ndGggb2YgZWFjaCBheGlzKSBvZiB0aGUgb3V0cHV0IChgYHNbMF1gYCByZWZlcnMgdG8gYXhpcyAwLAogICAgICAgIGBgc1sxXWBgIHRvIGF4aXMgMSwgZXRjLikuICBUaGlzIGNvcnJlc3BvbmRzIHRvIGBuYCBmb3IgYGBpZmZ0KHgsIG4pYGAuCiAgICAgICAgQWxvbmcgZWFjaCBheGlzLCBpZiB0aGUgZ2l2ZW4gc2hhcGUgaXMgc21hbGxlciB0aGFuIHRoYXQgb2YgdGhlIGlucHV0LAogICAgICAgIHRoZSBpbnB1dCBpcyBjcm9wcGVkLiAgSWYgaXQgaXMgbGFyZ2VyLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggemVyb3MuCiAgICAgICAgaWYgYHNgIGlzIG5vdCBnaXZlbiwgdGhlIHNoYXBlIG9mIHRoZSBpbnB1dCBhbG9uZyB0aGUgYXhlcyBzcGVjaWZpZWQKICAgICAgICBieSBgYXhlc2AgaXMgdXNlZC4gIFNlZSBub3RlcyBmb3IgaXNzdWUgb24gYGlmZnRgIHplcm8gcGFkZGluZy4KICAgIGF4ZXMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIEF4ZXMgb3ZlciB3aGljaCB0byBjb21wdXRlIHRoZSBGRlQuICBJZiBub3QgZ2l2ZW4sIHRoZSBsYXN0IHR3bwogICAgICAgIGF4ZXMgYXJlIHVzZWQuICBBIHJlcGVhdGVkIGluZGV4IGluIGBheGVzYCBtZWFucyB0aGUgdHJhbnNmb3JtIG92ZXIKICAgICAgICB0aGF0IGF4aXMgaXMgcGVyZm9ybWVkIG11bHRpcGxlIHRpbWVzLiAgQSBvbmUtZWxlbWVudCBzZXF1ZW5jZSBtZWFucwogICAgICAgIHRoYXQgYSBvbmUtZGltZW5zaW9uYWwgRkZUIGlzIHBlcmZvcm1lZC4KICAgIG5vcm0gOiB7ImJhY2t3YXJkIiwgIm9ydGhvIiwgImZvcndhcmQifSwgb3B0aW9uYWwKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEwLjAKCiAgICAgICAgTm9ybWFsaXphdGlvbiBtb2RlIChzZWUgYG51bXB5LmZmdGApLiBEZWZhdWx0IGlzICJiYWNrd2FyZCIuCiAgICAgICAgSW5kaWNhdGVzIHdoaWNoIGRpcmVjdGlvbiBvZiB0aGUgZm9yd2FyZC9iYWNrd2FyZCBwYWlyIG9mIHRyYW5zZm9ybXMKICAgICAgICBpcyBzY2FsZWQgYW5kIHdpdGggd2hhdCBub3JtYWxpemF0aW9uIGZhY3Rvci4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4yMC4wCgogICAgICAgICAgICBUaGUgImJhY2t3YXJkIiwgImZvcndhcmQiIHZhbHVlcyB3ZXJlIGFkZGVkLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIG91dCA6IGNvbXBsZXggbmRhcnJheQogICAgICAgIFRoZSB0cnVuY2F0ZWQgb3IgemVyby1wYWRkZWQgaW5wdXQsIHRyYW5zZm9ybWVkIGFsb25nIHRoZSBheGVzCiAgICAgICAgaW5kaWNhdGVkIGJ5IGBheGVzYCwgb3IgdGhlIGxhc3QgdHdvIGF4ZXMgaWYgYGF4ZXNgIGlzIG5vdCBnaXZlbi4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBzYCBhbmQgYGF4ZXNgIGhhdmUgZGlmZmVyZW50IGxlbmd0aCwgb3IgYGF4ZXNgIG5vdCBnaXZlbiBhbmQKICAgICAgICBgYGxlbihzKSAhPSAyYGAuCiAgICBJbmRleEVycm9yCiAgICAgICAgSWYgYW4gZWxlbWVudCBvZiBgYXhlc2AgaXMgbGFyZ2VyIHRoYW4gdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMgb2YgYGFgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkuZmZ0IDogT3ZlcmFsbCB2aWV3IG9mIGRpc2NyZXRlIEZvdXJpZXIgdHJhbnNmb3Jtcywgd2l0aCBkZWZpbml0aW9ucwogICAgICAgICBhbmQgY29udmVudGlvbnMgdXNlZC4KICAgIGZmdDIgOiBUaGUgZm9yd2FyZCAyLWRpbWVuc2lvbmFsIEZGVCwgb2Ygd2hpY2ggYGlmZnQyYCBpcyB0aGUgaW52ZXJzZS4KICAgIGlmZnRuIDogVGhlIGludmVyc2Ugb2YgdGhlICpuKi1kaW1lbnNpb25hbCBGRlQuCiAgICBmZnQgOiBUaGUgb25lLWRpbWVuc2lvbmFsIEZGVC4KICAgIGlmZnQgOiBUaGUgb25lLWRpbWVuc2lvbmFsIGludmVyc2UgRkZULgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgYGlmZnQyYCBpcyBqdXN0IGBpZmZ0bmAgd2l0aCBhIGRpZmZlcmVudCBkZWZhdWx0IGZvciBgYXhlc2AuCgogICAgU2VlIGBpZmZ0bmAgZm9yIGRldGFpbHMgYW5kIGEgcGxvdHRpbmcgZXhhbXBsZSwgYW5kIGBudW1weS5mZnRgIGZvcgogICAgZGVmaW5pdGlvbiBhbmQgY29udmVudGlvbnMgdXNlZC4KCiAgICBaZXJvLXBhZGRpbmcsIGFuYWxvZ291c2x5IHdpdGggYGlmZnRgLCBpcyBwZXJmb3JtZWQgYnkgYXBwZW5kaW5nIHplcm9zIHRvCiAgICB0aGUgaW5wdXQgYWxvbmcgdGhlIHNwZWNpZmllZCBkaW1lbnNpb24uICBBbHRob3VnaCB0aGlzIGlzIHRoZSBjb21tb24KICAgIGFwcHJvYWNoLCBpdCBtaWdodCBsZWFkIHRvIHN1cnByaXNpbmcgcmVzdWx0cy4gIElmIGFub3RoZXIgZm9ybSBvZiB6ZXJvCiAgICBwYWRkaW5nIGlzIGRlc2lyZWQsIGl0IG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBgaWZmdDJgIGlzIGNhbGxlZC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBhID0gNCAqIG5wLmV5ZSg0KQogICAgPj4+IG5wLmZmdC5pZmZ0MihhKQogICAgYXJyYXkoW1sxLiswLmosICAwLiswLmosICAwLiswLmosICAwLiswLmpdLCAjIG1heSB2YXJ5CiAgICAgICAgICAgWzAuKzAuaiwgIDAuKzAuaiwgIDAuKzAuaiwgIDEuKzAual0sCiAgICAgICAgICAgWzAuKzAuaiwgIDAuKzAuaiwgIDEuKzAuaiwgIDAuKzAual0sCiAgICAgICAgICAgWzAuKzAuaiwgIDEuKzAuaiwgIDAuKzAuaiwgIDAuKzAual1dKQoKICAgIHJuAAAAcmkAAABzBAAAACAgICByMwAAAHINAAAAcg0AAAD5AwAAcxsAAACAAPV0AgAMFpBhmBGYRKUkqATRCy3UCy3QBC1yNQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPMIAQAAlwB0AQAAAAAAAAAAAAB8AKYBAACrAQAAAAAAAAAAfQB0AwAAAAAAAAAAAAB8AHwBfAKmAwAAqwMAAAAAAAAAAFwCAAB9AX0CdAUAAAAAAAAAAAAAfAB8AWQBGQAAAAAAAAAAAHwCZAEZAAAAAAAAAAAAfAOmBAAAqwQAAAAAAAAAAH0AdAcAAAAAAAAAAAAAdAkAAAAAAAAAAAAAfAKmAQAAqwEAAAAAAAAAAGQCegoAAKYBAACrAQAAAAAAAAAARABdIH0EdAsAAAAAAAAAAAAAfAB8AXwEGQAAAAAAAAAAAHwCfAQZAAAAAAAAAAAAfAOmBAAAqwQAAAAAAAAAAH0AjCF8AFMAKQNhOw0AAAogICAgQ29tcHV0ZSB0aGUgTi1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyIFRyYW5zZm9ybSBmb3IgcmVhbCBpbnB1dC4KCiAgICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBOLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtIG92ZXIKICAgIGFueSBudW1iZXIgb2YgYXhlcyBpbiBhbiBNLWRpbWVuc2lvbmFsIHJlYWwgYXJyYXkgYnkgbWVhbnMgb2YgdGhlIEZhc3QKICAgIEZvdXJpZXIgVHJhbnNmb3JtIChGRlQpLiAgQnkgZGVmYXVsdCwgYWxsIGF4ZXMgYXJlIHRyYW5zZm9ybWVkLCB3aXRoIHRoZQogICAgcmVhbCB0cmFuc2Zvcm0gcGVyZm9ybWVkIG92ZXIgdGhlIGxhc3QgYXhpcywgd2hpbGUgdGhlIHJlbWFpbmluZwogICAgdHJhbnNmb3JtcyBhcmUgY29tcGxleC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LCB0YWtlbiB0byBiZSByZWFsLgogICAgcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgU2hhcGUgKGxlbmd0aCBhbG9uZyBlYWNoIHRyYW5zZm9ybWVkIGF4aXMpIHRvIHVzZSBmcm9tIHRoZSBpbnB1dC4KICAgICAgICAoYGBzWzBdYGAgcmVmZXJzIHRvIGF4aXMgMCwgYGBzWzFdYGAgdG8gYXhpcyAxLCBldGMuKS4KICAgICAgICBUaGUgZmluYWwgZWxlbWVudCBvZiBgc2AgY29ycmVzcG9uZHMgdG8gYG5gIGZvciBgYHJmZnQoeCwgbilgYCwgd2hpbGUKICAgICAgICBmb3IgdGhlIHJlbWFpbmluZyBheGVzLCBpdCBjb3JyZXNwb25kcyB0byBgbmAgZm9yIGBgZmZ0KHgsIG4pYGAuCiAgICAgICAgQWxvbmcgYW55IGF4aXMsIGlmIHRoZSBnaXZlbiBzaGFwZSBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgaW5wdXQsCiAgICAgICAgdGhlIGlucHV0IGlzIGNyb3BwZWQuICBJZiBpdCBpcyBsYXJnZXIsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCB6ZXJvcy4KICAgICAgICBpZiBgc2AgaXMgbm90IGdpdmVuLCB0aGUgc2hhcGUgb2YgdGhlIGlucHV0IGFsb25nIHRoZSBheGVzIHNwZWNpZmllZAogICAgICAgIGJ5IGBheGVzYCBpcyB1c2VkLgogICAgYXhlcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgQXhlcyBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdGhlIEZGVC4gIElmIG5vdCBnaXZlbiwgdGhlIGxhc3QgYGBsZW4ocylgYAogICAgICAgIGF4ZXMgYXJlIHVzZWQsIG9yIGFsbCBheGVzIGlmIGBzYCBpcyBhbHNvIG5vdCBzcGVjaWZpZWQuCiAgICBub3JtIDogeyJiYWNrd2FyZCIsICJvcnRobyIsICJmb3J3YXJkIn0sIG9wdGlvbmFsCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xMC4wCgogICAgICAgIE5vcm1hbGl6YXRpb24gbW9kZSAoc2VlIGBudW1weS5mZnRgKS4gRGVmYXVsdCBpcyAiYmFja3dhcmQiLgogICAgICAgIEluZGljYXRlcyB3aGljaCBkaXJlY3Rpb24gb2YgdGhlIGZvcndhcmQvYmFja3dhcmQgcGFpciBvZiB0cmFuc2Zvcm1zCiAgICAgICAgaXMgc2NhbGVkIGFuZCB3aXRoIHdoYXQgbm9ybWFsaXphdGlvbiBmYWN0b3IuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMjAuMAoKICAgICAgICAgICAgVGhlICJiYWNrd2FyZCIsICJmb3J3YXJkIiB2YWx1ZXMgd2VyZSBhZGRlZC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBjb21wbGV4IG5kYXJyYXkKICAgICAgICBUaGUgdHJ1bmNhdGVkIG9yIHplcm8tcGFkZGVkIGlucHV0LCB0cmFuc2Zvcm1lZCBhbG9uZyB0aGUgYXhlcwogICAgICAgIGluZGljYXRlZCBieSBgYXhlc2AsIG9yIGJ5IGEgY29tYmluYXRpb24gb2YgYHNgIGFuZCBgYWAsCiAgICAgICAgYXMgZXhwbGFpbmVkIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gYWJvdmUuCiAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbGFzdCBheGlzIHRyYW5zZm9ybWVkIHdpbGwgYmUgYGBzWy0xXS8vMisxYGAsCiAgICAgICAgd2hpbGUgdGhlIHJlbWFpbmluZyB0cmFuc2Zvcm1lZCBheGVzIHdpbGwgaGF2ZSBsZW5ndGhzIGFjY29yZGluZyB0bwogICAgICAgIGBzYCwgb3IgdW5jaGFuZ2VkIGZyb20gdGhlIGlucHV0LgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBWYWx1ZUVycm9yCiAgICAgICAgSWYgYHNgIGFuZCBgYXhlc2AgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RoLgogICAgSW5kZXhFcnJvcgogICAgICAgIElmIGFuIGVsZW1lbnQgb2YgYGF4ZXNgIGlzIGxhcmdlciB0aGFuIHRoYW4gdGhlIG51bWJlciBvZiBheGVzIG9mIGBhYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGlyZmZ0biA6IFRoZSBpbnZlcnNlIG9mIGByZmZ0bmAsIGkuZS4gdGhlIGludmVyc2Ugb2YgdGhlIG4tZGltZW5zaW9uYWwgRkZUCiAgICAgICAgIG9mIHJlYWwgaW5wdXQuCiAgICBmZnQgOiBUaGUgb25lLWRpbWVuc2lvbmFsIEZGVCwgd2l0aCBkZWZpbml0aW9ucyBhbmQgY29udmVudGlvbnMgdXNlZC4KICAgIHJmZnQgOiBUaGUgb25lLWRpbWVuc2lvbmFsIEZGVCBvZiByZWFsIGlucHV0LgogICAgZmZ0biA6IFRoZSBuLWRpbWVuc2lvbmFsIEZGVC4KICAgIHJmZnQyIDogVGhlIHR3by1kaW1lbnNpb25hbCBGRlQgb2YgcmVhbCBpbnB1dC4KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSB0cmFuc2Zvcm0gZm9yIHJlYWwgaW5wdXQgaXMgcGVyZm9ybWVkIG92ZXIgdGhlIGxhc3QgdHJhbnNmb3JtYXRpb24KICAgIGF4aXMsIGFzIGJ5IGByZmZ0YCwgdGhlbiB0aGUgdHJhbnNmb3JtIG92ZXIgdGhlIHJlbWFpbmluZyBheGVzIGlzCiAgICBwZXJmb3JtZWQgYXMgYnkgYGZmdG5gLiAgVGhlIG9yZGVyIG9mIHRoZSBvdXRwdXQgaXMgYXMgZm9yIGByZmZ0YCBmb3IgdGhlCiAgICBmaW5hbCB0cmFuc2Zvcm1hdGlvbiBheGlzLCBhbmQgYXMgZm9yIGBmZnRuYCBmb3IgdGhlIHJlbWFpbmluZwogICAgdHJhbnNmb3JtYXRpb24gYXhlcy4KCiAgICBTZWUgYGZmdGAgZm9yIGRldGFpbHMsIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGEgPSBucC5vbmVzKCgyLCAyLCAyKSkKICAgID4+PiBucC5mZnQucmZmdG4oYSkKICAgIGFycmF5KFtbWzguKzAuaiwgIDAuKzAual0sICMgbWF5IHZhcnkKICAgICAgICAgICAgWzAuKzAuaiwgIDAuKzAual1dLAogICAgICAgICAgIFtbMC4rMC5qLCAgMC4rMC5qXSwKICAgICAgICAgICAgWzAuKzAuaiwgIDAuKzAual1dXSkKCiAgICA+Pj4gbnAuZmZ0LnJmZnRuKGEsIGF4ZXM9KDIsIDApKQogICAgYXJyYXkoW1tbNC4rMC5qLCAgMC4rMC5qXSwgIyBtYXkgdmFyeQogICAgICAgICAgICBbNC4rMC5qLCAgMC4rMC5qXV0sCiAgICAgICAgICAgW1swLiswLmosICAwLiswLmpdLAogICAgICAgICAgICBbMC4rMC5qLCAgMC4rMC5qXV1dKQoKICAgIHIdAAAAchcAAAApBnIRAAAAcmEAAAByBAAAAHJdAAAAciIAAAByAgAAAKkFcigAAAByLwAAAHJeAAAAckAAAAByZgAAAHMFAAAAICAgICByMwAAAHIIAAAAcggAAABWBAAAc4MAAACAAPV0AgAJEJABiQqMCoBB3Q4bmEGYcaAk0Q4n1A4ngUeAQYB03QgMiFGQAZAilAWQdJhClHigFNEIJtQIJoBB3Q4TlUOYBJFJlEmYYZFL0Q4g1A4g8AABBSrwAAEFKogC3QwPkAGQMZBSlDWYJJhynCigRNEMKdQMKYgBiAHYCwyASHI1AAAAYwQAAAAAAAAAAAAAAAYAAAADAAAA8yYAAACXAHQBAAAAAAAAAAAAAHwAfAF8AnwDpgQAAKsEAAAAAAAAAABTACkBYZsFAAAKICAgIENvbXB1dGUgdGhlIDItZGltZW5zaW9uYWwgRkZUIG9mIGEgcmVhbCBhcnJheS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXkKICAgICAgICBJbnB1dCBhcnJheSwgdGFrZW4gdG8gYmUgcmVhbC4KICAgIHMgOiBzZXF1ZW5jZSBvZiBpbnRzLCBvcHRpb25hbAogICAgICAgIFNoYXBlIG9mIHRoZSBGRlQuCiAgICBheGVzIDogc2VxdWVuY2Ugb2YgaW50cywgb3B0aW9uYWwKICAgICAgICBBeGVzIG92ZXIgd2hpY2ggdG8gY29tcHV0ZSB0aGUgRkZULgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIFRoZSByZXN1bHQgb2YgdGhlIHJlYWwgMi1EIEZGVC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIHJmZnRuIDogQ29tcHV0ZSB0aGUgTi1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyIFRyYW5zZm9ybSBmb3IgcmVhbAogICAgICAgICAgICBpbnB1dC4KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoaXMgaXMgcmVhbGx5IGp1c3QgYHJmZnRuYCB3aXRoIGRpZmZlcmVudCBkZWZhdWx0IGJlaGF2aW9yLgogICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgYHJmZnRuYC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBhID0gbnAubWdyaWRbOjUsIDo1XVswXQogICAgPj4+IG5wLmZmdC5yZmZ0MihhKQogICAgYXJyYXkoW1sgNTAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgXSwKICAgICAgICAgICBbLTEyLjUrMTcuMjA0Nzc0MDFqLCAgIDAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgIF0sCiAgICAgICAgICAgWy0xMi41ICs0LjA2MTQ5NjJqICwgICAwLiAgKzAuaiAgICAgICAgLCAgIDAuICArMC5qICAgICAgICBdLAogICAgICAgICAgIFstMTIuNSAtNC4wNjE0OTYyaiAsICAgMC4gICswLmogICAgICAgICwgICAwLiAgKzAuaiAgICAgICAgXSwKICAgICAgICAgICBbLTEyLjUtMTcuMjA0Nzc0MDFqLCAgIDAuICArMC5qICAgICAgICAsICAgMC4gICswLmogICAgICAgIF1dKQogICAgKQFyCAAAAHJpAAAAcwQAAAAgICAgcjMAAAByCgAAAHIKAAAAuAQAAHMZAAAAgAD1YgEADBGQEZBBkHSYVNELItQLItAEInI1AAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8wwBAACXAHQBAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9AHQDAAAAAAAAAAAAAHwAfAF8AmQBrAKmBAAAqwQAAAAAAAAAAFwCAAB9AX0CdAUAAAAAAAAAAAAAdAcAAAAAAAAAAAAAfAKmAQAAqwEAAAAAAAAAAGQBegoAAKYBAACrAQAAAAAAAAAARABdIH0EdAkAAAAAAAAAAAAAfAB8AXwEGQAAAAAAAAAAAHwCfAQZAAAAAAAAAAAAfAOmBAAAqwQAAAAAAAAAAH0AjCF0CwAAAAAAAAAAAAB8AHwBZAMZAAAAAAAAAAAAfAJkAxkAAAAAAAAAAAB8A6YEAACrBAAAAAAAAAAAfQB8AFMAKQRhnRAAAAogICAgQ29tcHV0ZXMgdGhlIGludmVyc2Ugb2YgYHJmZnRuYC4KCiAgICBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBpbnZlcnNlIG9mIHRoZSBOLWRpbWVuc2lvbmFsIGRpc2NyZXRlCiAgICBGb3VyaWVyIFRyYW5zZm9ybSBmb3IgcmVhbCBpbnB1dCBvdmVyIGFueSBudW1iZXIgb2YgYXhlcyBpbiBhbgogICAgTS1kaW1lbnNpb25hbCBhcnJheSBieSBtZWFucyBvZiB0aGUgRmFzdCBGb3VyaWVyIFRyYW5zZm9ybSAoRkZUKS4gIEluCiAgICBvdGhlciB3b3JkcywgYGBpcmZmdG4ocmZmdG4oYSksIGEuc2hhcGUpID09IGFgYCB0byB3aXRoaW4gbnVtZXJpY2FsCiAgICBhY2N1cmFjeS4gKFRoZSBgYGEuc2hhcGVgYCBpcyBuZWNlc3NhcnkgbGlrZSBgYGxlbihhKWBgIGlzIGZvciBgaXJmZnRgLAogICAgYW5kIGZvciB0aGUgc2FtZSByZWFzb24uKQoKICAgIFRoZSBpbnB1dCBzaG91bGQgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSB3YXkgYXMgaXMgcmV0dXJuZWQgYnkgYHJmZnRuYCwKICAgIGkuZS4gYXMgZm9yIGBpcmZmdGAgZm9yIHRoZSBmaW5hbCB0cmFuc2Zvcm1hdGlvbiBheGlzLCBhbmQgYXMgZm9yIGBpZmZ0bmAKICAgIGFsb25nIGFsbCB0aGUgb3RoZXIgYXhlcy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhIDogYXJyYXlfbGlrZQogICAgICAgIElucHV0IGFycmF5LgogICAgcyA6IHNlcXVlbmNlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgU2hhcGUgKGxlbmd0aCBvZiBlYWNoIHRyYW5zZm9ybWVkIGF4aXMpIG9mIHRoZSBvdXRwdXQKICAgICAgICAoYGBzWzBdYGAgcmVmZXJzIHRvIGF4aXMgMCwgYGBzWzFdYGAgdG8gYXhpcyAxLCBldGMuKS4gYHNgIGlzIGFsc28gdGhlCiAgICAgICAgbnVtYmVyIG9mIGlucHV0IHBvaW50cyB1c2VkIGFsb25nIHRoaXMgYXhpcywgZXhjZXB0IGZvciB0aGUgbGFzdCBheGlzLAogICAgICAgIHdoZXJlIGBgc1stMV0vLzIrMWBgIHBvaW50cyBvZiB0aGUgaW5wdXQgYXJlIHVzZWQuCiAgICAgICAgQWxvbmcgYW55IGF4aXMsIGlmIHRoZSBzaGFwZSBpbmRpY2F0ZWQgYnkgYHNgIGlzIHNtYWxsZXIgdGhhbiB0aGF0IG9mCiAgICAgICAgdGhlIGlucHV0LCB0aGUgaW5wdXQgaXMgY3JvcHBlZC4gIElmIGl0IGlzIGxhcmdlciwgdGhlIGlucHV0IGlzIHBhZGRlZAogICAgICAgIHdpdGggemVyb3MuIElmIGBzYCBpcyBub3QgZ2l2ZW4sIHRoZSBzaGFwZSBvZiB0aGUgaW5wdXQgYWxvbmcgdGhlIGF4ZXMKICAgICAgICBzcGVjaWZpZWQgYnkgYXhlcyBpcyB1c2VkLiBFeGNlcHQgZm9yIHRoZSBsYXN0IGF4aXMgd2hpY2ggaXMgdGFrZW4gdG8KICAgICAgICBiZSBgYDIqKG0tMSlgYCB3aGVyZSBgYG1gYCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhbG9uZyB0aGF0IGF4aXMuCiAgICBheGVzIDogc2VxdWVuY2Ugb2YgaW50cywgb3B0aW9uYWwKICAgICAgICBBeGVzIG92ZXIgd2hpY2ggdG8gY29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQuIElmIG5vdCBnaXZlbiwgdGhlIGxhc3QKICAgICAgICBgbGVuKHMpYCBheGVzIGFyZSB1c2VkLCBvciBhbGwgYXhlcyBpZiBgc2AgaXMgYWxzbyBub3Qgc3BlY2lmaWVkLgogICAgICAgIFJlcGVhdGVkIGluZGljZXMgaW4gYGF4ZXNgIG1lYW5zIHRoYXQgdGhlIGludmVyc2UgdHJhbnNmb3JtIG92ZXIgdGhhdAogICAgICAgIGF4aXMgaXMgcGVyZm9ybWVkIG11bHRpcGxlIHRpbWVzLgogICAgbm9ybSA6IHsiYmFja3dhcmQiLCAib3J0aG8iLCAiZm9yd2FyZCJ9LCBvcHRpb25hbAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTAuMAoKICAgICAgICBOb3JtYWxpemF0aW9uIG1vZGUgKHNlZSBgbnVtcHkuZmZ0YCkuIERlZmF1bHQgaXMgImJhY2t3YXJkIi4KICAgICAgICBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIG9mIHRoZSBmb3J3YXJkL2JhY2t3YXJkIHBhaXIgb2YgdHJhbnNmb3JtcwogICAgICAgIGlzIHNjYWxlZCBhbmQgd2l0aCB3aGF0IG5vcm1hbGl6YXRpb24gZmFjdG9yLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIwLjAKCiAgICAgICAgICAgIFRoZSAiYmFja3dhcmQiLCAiZm9yd2FyZCIgdmFsdWVzIHdlcmUgYWRkZWQuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgb3V0IDogbmRhcnJheQogICAgICAgIFRoZSB0cnVuY2F0ZWQgb3IgemVyby1wYWRkZWQgaW5wdXQsIHRyYW5zZm9ybWVkIGFsb25nIHRoZSBheGVzCiAgICAgICAgaW5kaWNhdGVkIGJ5IGBheGVzYCwgb3IgYnkgYSBjb21iaW5hdGlvbiBvZiBgc2Agb3IgYGFgLAogICAgICAgIGFzIGV4cGxhaW5lZCBpbiB0aGUgcGFyYW1ldGVycyBzZWN0aW9uIGFib3ZlLgogICAgICAgIFRoZSBsZW5ndGggb2YgZWFjaCB0cmFuc2Zvcm1lZCBheGlzIGlzIGFzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgZWxlbWVudCBvZiBgc2AsIG9yIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGluIGV2ZXJ5IGF4aXMgZXhjZXB0IGZvciB0aGUKICAgICAgICBsYXN0IG9uZSBpZiBgc2AgaXMgbm90IGdpdmVuLiAgSW4gdGhlIGZpbmFsIHRyYW5zZm9ybWVkIGF4aXMgdGhlIGxlbmd0aAogICAgICAgIG9mIHRoZSBvdXRwdXQgd2hlbiBgc2AgaXMgbm90IGdpdmVuIGlzIGBgMioobS0xKWBgIHdoZXJlIGBgbWBgIGlzIHRoZQogICAgICAgIGxlbmd0aCBvZiB0aGUgZmluYWwgdHJhbnNmb3JtZWQgYXhpcyBvZiB0aGUgaW5wdXQuICBUbyBnZXQgYW4gb2RkCiAgICAgICAgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgaW4gdGhlIGZpbmFsIGF4aXMsIGBzYCBtdXN0IGJlIHNwZWNpZmllZC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBzYCBhbmQgYGF4ZXNgIGhhdmUgZGlmZmVyZW50IGxlbmd0aC4KICAgIEluZGV4RXJyb3IKICAgICAgICBJZiBhbiBlbGVtZW50IG9mIGBheGVzYCBpcyBsYXJnZXIgdGhhbiB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcyBvZiBgYWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICByZmZ0biA6IFRoZSBmb3J3YXJkIG4tZGltZW5zaW9uYWwgRkZUIG9mIHJlYWwgaW5wdXQsCiAgICAgICAgICAgIG9mIHdoaWNoIGBpZmZ0bmAgaXMgdGhlIGludmVyc2UuCiAgICBmZnQgOiBUaGUgb25lLWRpbWVuc2lvbmFsIEZGVCwgd2l0aCBkZWZpbml0aW9ucyBhbmQgY29udmVudGlvbnMgdXNlZC4KICAgIGlyZmZ0IDogVGhlIGludmVyc2Ugb2YgdGhlIG9uZS1kaW1lbnNpb25hbCBGRlQgb2YgcmVhbCBpbnB1dC4KICAgIGlyZmZ0MiA6IFRoZSBpbnZlcnNlIG9mIHRoZSB0d28tZGltZW5zaW9uYWwgRkZUIG9mIHJlYWwgaW5wdXQuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBTZWUgYGZmdGAgZm9yIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkLgoKICAgIFNlZSBgcmZmdGAgZm9yIGRlZmluaXRpb25zIGFuZCBjb252ZW50aW9ucyB1c2VkIGZvciByZWFsIGlucHV0LgoKICAgIFRoZSBjb3JyZWN0IGludGVycHJldGF0aW9uIG9mIHRoZSBoZXJtaXRpYW4gaW5wdXQgZGVwZW5kcyBvbiB0aGUgc2hhcGUgb2YKICAgIHRoZSBvcmlnaW5hbCBkYXRhLCBhcyBnaXZlbiBieSBgc2AuIFRoaXMgaXMgYmVjYXVzZSBlYWNoIGlucHV0IHNoYXBlIGNvdWxkCiAgICBjb3Jy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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
helper.cpython-311.pyc
8.23 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
1.17 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_pocketfft.cpython-311.pyc
55.72 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
8.27 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).