PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8IS0tCiAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+CjwhLS0gR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAkZGF0ZUZvcm1hdC5mb3JtYXQoICRjdXJyZW50RGF0ZSApIC0tPgojbWFjcm8gKCBsaW5rICRocmVmICRuYW1lICR0YXJnZXQgJGltZyAkcG9zaXRpb24gJGFsdCAkYm9yZGVyICR3aWR0aCAkaGVpZ2h0ICkKCSNzZXQgKCAkbGlua1RpdGxlID0gJyB0aXRsZT0iJyArICRuYW1lICsgJyInICkKCSNpZiggJHRhcmdldCApCgkJI3NldCAoICRsaW5rVGFyZ2V0ID0gJyB0YXJnZXQ9IicgKyAkdGFyZ2V0ICsgJyInICkKCSNlbHNlCgkJI3NldCAoICRsaW5rVGFyZ2V0ID0gIiIgKQoJI2VuZAoJI2lmICggJGhyZWYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwOi8iKSB8fCAkaHJlZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImh0dHBzOi8iKSB8fAoJCSRocmVmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZnRwOi8iKSB8fCAkaHJlZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm1haWx0bzovIikgfHwKCQkkaHJlZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImZpbGU6LyIpIHx8ICgkaHJlZi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIjovLyIpICE9IC0xKSApCgkJI3NldCAoICRsaW5rQ2xhc3MgPSAnIGNsYXNzPSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiJyApCgoJCSNpZiAoICRsaW5rVGFyZ2V0ICkKCQkjZWxzZQoJCQkjc2V0ICggJGxpbmtUYXJnZXQgPSAiX2JsYW5rIiApCgkJI2VuZAoKCSNlbHNlCgkJI3NldCAoICRsaW5rQ2xhc3MgPSAiIiApCgkjZW5kCgkjaWYgKCAkaW1nICkKCQkjaWYgKCAkcG9zaXRpb24gPT0gImxlZnQiICkKCQkJPGEgaHJlZj0iJGhyZWYiJGxpbmtDbGFzcyRsaW5rVGFyZ2V0JGxpbmtUaXRsZT4jaW1hZ2UoJGltZyAkYWx0ICRib3JkZXIgJHdpZHRoICRoZWlnaHQpJG5hbWU8L2E+CgkJI2Vsc2UKCQkJPGEgaHJlZj0iJGhyZWYiJGxpbmtDbGFzcyRsaW5rVGFyZ2V0JGxpbmtUaXRsZT4kbmFtZSAjaW1hZ2UoJGltZyAkYWx0ICRib3JkZXIgJHdpZHRoICRoZWlnaHQpPC9hPgoJCSNlbmQKCSNlbHNlCgkJPGEgaHJlZj0iJGhyZWYiJGxpbmtDbGFzcyRsaW5rVGFyZ2V0JGxpbmtUaXRsZT4kbmFtZTwvYT4KCSNlbmQKI2VuZAojIwojbWFjcm8gKCBpbWFnZSAkaW1nICRhbHQgJGJvcmRlciAkd2lkdGggJGhlaWdodCApCgkjaWYoICRpbWcgKQoJCSNpZiAoICEgKCAkaW1nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiaHR0cDovIikgfHwgJGltZy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImh0dHBzOi8iKSB8fAoJCQkJCQkkaW1nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZnRwOi8iKSB8fCAkaW1nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgibWFpbHRvOi8iKSB8fAoJCQkJCQkkaW1nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZmlsZTovIikgfHwgKCRpbWcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI6Ly8iKSAhPSAtMSkgKSApCgkJCSNzZXQgKCAkaW1nU3JjID0gJFBhdGhUb29sLmNhbGN1bGF0ZUxpbmsoICRpbWcsICRyZWxhdGl2ZVBhdGggKSApCgkJCSNzZXQgKCAkaW1nU3JjID0gJGltZ1NyYy5yZXBsYWNlQWxsKCAnXFwnLCAnLycgKSApCgkJCSNzZXQgKCAkaW1nU3JjID0gJyBzcmM9IicgKyAkaW1nU3JjICsgJyInICkKCQkjZWxzZQoJCQkjc2V0ICggJGltZ1NyYyA9ICcgc3JjPSInICsgJGltZyArICciJyApCgkJI2VuZAoJCSNpZiggJGFsdCApCgkJCSNzZXQgKCAkaW1nQWx0ID0gJyBhbHQ9IicgKyAkYWx0ICsgJyInICkKCQkjZWxzZQoJCQkjc2V0ICggJGltZ0FsdCA9ICcgYWx0PSIiJyApCgkJI2VuZAoJCSNpZiggJGJvcmRlciApCgkJCSNzZXQgKCAkaW1nQm9yZGVyID0gJyBib3JkZXI9IicgKyAkYm9yZGVyICsgJyInICkKCQkjZWxzZQoJCQkjc2V0ICggJGltZ0JvcmRlciA9ICIiICkKCQkjZW5kCgkJI2lmKCAkd2lkdGggKQoJCQkjc2V0ICggJGltZ1dpZHRoID0gJyB3aWR0aD0iJyArICR3aWR0aCArICciJyApCgkJI2Vsc2UKCQkJI3NldCAoICRpbWdXaWR0aCA9ICIiICkKCQkjZW5kCgkJI2lmKCAkaGVpZ2h0ICkKCQkJI3NldCAoICRpbWdIZWlnaHQgPSAnIGhlaWdodD0iJyArICRoZWlnaHQgKyAnIicgKQoJCSNlbHNlCgkJCSNzZXQgKCAkaW1nSGVpZ2h0ID0gIiIgKQoJCSNlbmQKCQk8aW1nIGNsYXNzPSJpbWFnZUxpbmsiJGltZ1NyYyRpbWdBbHQkaW1nQm9yZGVyJGltZ1dpZHRoJGltZ0hlaWdodC8+CgkjZW5kCiNlbmQKI21hY3JvICggYmFubmVyICRiYW5uZXIgJGlkICkKCSNpZiAoICRiYW5uZXIgKQoJCSNpZiggJGJhbm5lci5ocmVmICkKCQkJI3NldCAoICRocmYgPSAkYmFubmVyLmhyZWYgKQoJCQkjaWYgKCAhICggJGhyZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImh0dHA6LyIpIHx8ICRocmYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwczovIikgfHwKCQkJCSRocmYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJmdHA6LyIpIHx8ICRocmYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJtYWlsdG86LyIpIHx8CgkJCQkkaHJmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZmlsZTovIikgfHwgKCRocmYudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI6Ly8iKSAhPSAtMSkgKSApCgkJCQkjc2V0ICggJGhyZiA9ICRQYXRoVG9vbC5jYWxjdWxhdGVMaW5rKCAkaHJmLCAkcmVsYXRpdmVQYXRoICkgKQoJCQkJI3NldCAoICRocmYgPSAkaHJmLnJlcGxhY2VBbGwoICdcXCcsICcvJyApICkKCQkJCSNpZiAoICggJGhyZiA9PSAnJyApICkKCQkJCQkjc2V0ICggJGhyZiA9ICcuLycgKQoJCQkJI2VuZAoJCQkjZW5kCgkJCTxhIGhyZWY9IiRocmYiIGlkPSIkaWQiI2lmKCAkYmFubmVyLmFsdCApIHRpdGxlPSIkYmFubmVyLmFsdCIjZW5kPgoJCSNlbHNlCgkJCQk8ZGl2IGlkPSIkaWQiPgoJCSNlbmQKIyMKCQkjaWYoICRiYW5uZXIuc3JjICkKCQkJCSNzZXQgKCAkc3JjID0gJGJhbm5lci5zcmMgKQoJCQkJI2lmICggISAoICRzcmMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwOi8iKSB8fCAkc3JjLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiaHR0cHM6LyIpIHx8CgkJCQkJCQkJJHNyYy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImZ0cDovIikgfHwgJHNyYy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm1haWx0bzovIikgfHwKCQkJCQkJCQkkc3JjLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZmlsZTovIikgfHwgKCRzcmMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI6Ly8iKSAhPSAtMSkgKSApCgkJCQkJCSNzZXQgKCAkc3JjID0gJFBhdGhUb29sLmNhbGN1bGF0ZUxpbmsoICRzcmMsICRyZWxhdGl2ZVBhdGggKSApCgkJCQkJCSNzZXQgKCAkc3JjID0gJHNyYy5yZXBsYWNlQWxsKCAnXFwnLCAnLycgKSApCgkJCQkjZW5kCgkJCQkjaWYgKCAkYmFubmVyLmFsdCApCgkJCQkJCSNzZXQgKCAkYWx0ID0gJGJhbm5lci5hbHQgKQoJCQkJI2Vsc2UKCQkJCQkJI3NldCAoICRhbHQgPSAkYmFubmVyLm5hbWUgKQoJCQkJI2VuZAoJCQkJPGltZyBzcmM9IiRzcmMiIGFsdD0iJGFsdCIgLz4KCQkjZWxzZQoJCQkJJGJhbm5lci5uYW1lCgkJI2VuZAojIwoJCSNpZiggJGJhbm5lci5ocmVmICkKCQkJCTwvYT4KCQkjZWxzZQoJCQkJPC9kaXY+CgkJI2VuZAoJI2VuZAojZW5kCiMjCiNtYWNybyAoIGxpbmtzICRsaW5rcyApCgk8dWwgY2xhc3M9Im5hdiI+Cgkjc2V0ICggJGNvdW50ZXIgPSAwICkKCSNmb3JlYWNoKCAkaXRlbSBpbiAkbGlua3MgKQoJCSNzZXQgKCAkY291bnRlciA9ICRjb3VudGVyICsgMSApCgkJI3NldCAoICRjdXJyZW50SXRlbUhyZWYgPSAkUGF0aFRvb2wuY2FsY3VsYXRlTGluayggJGl0ZW0uaHJlZiwgJHJlbGF0aXZlUGF0aCApICkKCQkjc2V0ICggJGN1cnJlbnRJdGVtSHJlZiA9ICRjdXJyZW50SXRlbUhyZWYucmVwbGFjZUFsbCggJ1xcJywgJy8nICkgKQoJCSNzZXQgKCAkYWN0aXZlQ2xhc3MgPSAiIiApCgkJI2lmICggJGFsaWduZWRGaWxlTmFtZSA9PSAkY3VycmVudEl0ZW1IcmVmKQoJCQkjc2V0ICggJGFjdGl2ZUNsYXNzID0gJyBjbGFzcz0iYWN0aXZlIicgKQoJCSNlbmQKCQk8bGkkYWN0aXZlQ2xhc3M+CgkJI2xpbmsoICRjdXJyZW50SXRlbUhyZWYgJGl0ZW0ubmFtZSAkaXRlbS50YXJnZXQgJGl0ZW0uaW1nICRpdGVtLnBvc2l0aW9uICRpdGVtLmFsdCAkaXRlbS5ib3JkZXIgJGl0ZW0ud2lkdGggJGl0ZW0uaGVpZ2h0ICkKCQk8L2xpPgoJI2VuZAoJPC91bD4KI2VuZAojIwojbWFjcm8gKCBicmVhZGNydW1icyAkYnJlYWRjcnVtYnMgKQoJI2ZvcmVhY2goICRpdGVtIGluICRicmVhZGNydW1icyApCgkJI3NldCAoICRjdXJyZW50SXRlbUhyZWYgPSAkUGF0aFRvb2wuY2FsY3VsYXRlTGluayggJGl0ZW0uaHJlZiwgJHJlbGF0aXZlUGF0aCApICkKCQkjc2V0ICggJGN1cnJlbnRJdGVtSHJlZiA9ICRjdXJyZW50SXRlbUhyZWYucmVwbGFjZUFsbCggJ1xcJywgJy8nICkgKQoJCSNpZiAoICggJGN1cnJlbnRJdGVtSHJlZiA9PSAnJyApICkKCQkJI3NldCAoICRjdXJyZW50SXRlbUhyZWYgPSAnLi8nICkKCQkjZW5kCiMjCgkJCSNsaW5rKCAkY3VycmVudEl0ZW1IcmVmICRpdGVtLm5hbWUgJGl0ZW0udGFyZ2V0ICRpdGVtLmltZyAkaXRlbS5wb3NpdGlvbiAkaXRlbS5hbHQgJGl0ZW0uYm9yZGVyICRpdGVtLndpZHRoICRpdGVtLmhlaWdodCApCgkJCTxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mZ3Q7PC9zcGFuPgoJI2VuZAoJJHRpdGxlCiNlbmQKIyMKI21hY3JvICggZGlzcGxheVRyZWUgJGRpc3BsYXkgJGl0ZW0gKQoJI2lmICggJGl0ZW0gJiYgJGl0ZW0uaXRlbXMgJiYgJGl0ZW0uaXRlbXMuc2l6ZSgpID4gMCApCgkJI2ZvcmVhY2goICRzdWJpdGVtIGluICRpdGVtLml0ZW1zICkKCQkJI3NldCAoICRzdWJpdGVtSHJlZiA9ICRQYXRoVG9vbC5jYWxjdWxhdGVMaW5rKCAkc3ViaXRlbS5ocmVmLCAkcmVsYXRpdmVQYXRoICkgKQoJCQkjc2V0ICggJHN1Yml0ZW1IcmVmID0gJHN1Yml0ZW1IcmVmLnJlcGxhY2VBbGwoICdcXCcsICcvJyApICkKIyMKCQkJI2lmICggJGFsaWduZWRGaWxlTmFtZSA9PSAkc3ViaXRlbUhyZWYgKQoJCQkJI3NldCAoICRkaXNwbGF5ID0gdHJ1ZSApCgkJCSNlbmQKIyMKCQkJI2Rpc3BsYXlUcmVlKCAkZGlzcGxheSAkc3ViaXRlbSApCgkJI2VuZAoJI2VuZAojZW5kCiMjCiNtYWNybyAoIG1lbnVJdGVtICRpdGVtICRpc0NvbXBvbmVudERvY3VtZW50YXRpb24gKQoJI3NldCAoICRjb2xsYXBzZSA9ICJub25lIiApCgkjc2V0ICggJGN1cnJlbnRJdGVtSHJlZiA9ICRQYXRoVG9vbC5jYWxjdWxhdGVMaW5rKCAkaXRlbS5ocmVmLCAkcmVsYXRpdmVQYXRoICkgKQoJI3NldCAoICRjdXJyZW50SXRlbUhyZWYgPSAkY3VycmVudEl0ZW1IcmVmLnJlcGxhY2VBbGwoICdcXCcsICcvJyApICkKIyMKCSNpZiAoICRpdGVtICYmICRpdGVtLml0ZW1zICYmICRpdGVtLml0ZW1zLnNpemUoKSA+IDAgKQoJCSNpZiAoICRpdGVtLmNvbGxhcHNlID09IGZhbHNlICkKCQkJI3NldCAoICRjb2xsYXBzZSA9ICJleHBhbmRlZCIgKQoJCSNlbHNlCgkJCSMjIEJ5IGRlZmF1bHQgY29sbGFwc2VkCgkJCSNzZXQgKCAkY29sbGFwc2UgPSAiY29sbGFwc2VkIiApCgkJI2VuZAojIwoJCSNzZXQgKCAkZGlzcGxheSA9IGZhbHNlICkKCQkjZGlzcGxheVRyZWUoICRkaXNwbGF5ICRpdGVtICkKIyMKCQkjaWYgKCAkYWxpZ25lZEZpbGVOYW1lID09ICRjdXJyZW50SXRlbUhyZWYgfHwgJGRpc3BsYXkgKQoJCQkjc2V0ICggJGNvbGxhcHNlID0gImV4cGFuZGVkIiApCgkJI2VuZAoJI2VuZAoJI3NldCAoICRhY3RpdmUgPSAiIiApCgkjaWYgKCAkYWxpZ25lZEZpbGVOYW1lID09ICRjdXJyZW50SXRlbUhyZWYgKQoJI3NldCAoJGFjdGl2ZSA9ICIgYWN0aXZlIikKCSNlbmQKCSNzZXQgKCAkdGhpc1Byb2plY3REaXIgPSAiLi4vJHtwcm9qZWN0LmFydGlmYWN0SWR9IiApCgkjaWYgKCR0aGlzUHJvamVjdERpciA9PSAkUGF0aFRvb2wuZ2V0RGlyZWN0b3J5Q29tcG9uZW50KCAkaXRlbS5ocmVmICkpCgkjc2V0ICgkYWN0aXZlID0gIiBhY3RpdmUiKQoJI2VuZAoJI2lmICgke3Byb2plY3QuYXJ0aWZhY3RJZH0gIT0gImFwYWNoZS1sb2c0Y3h4IiAmJiAkaXNDb21wb25lbnREb2N1bWVudGF0aW9uICYmCgkJCQkoJGl0ZW0uaHJlZiA9PSAidGVhbS1saXN0Lmh0bWwiIHx8ICRpdGVtLmhyZWYgPT0gIm1haWwtbGlzdHMuaHRtbCIKCQkJCXx8ICRpdGVtLmhyZWYgPT0gImlzc3VlLXRyYWNraW5nLmh0bWwiIHx8ICRpdGVtLmhyZWYgPT0gImxpY2Vuc2UuaHRtbCIKCQkJCXx8ICRpdGVtLmhyZWYgPT0gInNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiKSkKCTwhLS0gUmVtb3Zpbmcgb3ZlcmFsbCBwcm9qZWN0IGl0ZW0gJGl0ZW0ubmFtZSBmcm9tIGNvbXBvbmVudC1zcGVjaWZpYyBtZW51IC0tPgoJI2Vsc2UKCQkjc2V0ICgkdGhpc0l0ZW1OYW1lID0gJGl0ZW0ubmFtZSkKCQkjaWYgKCR7cHJvamVjdC5hcnRpZmFjdElkfSAhPSAiYXBhY2hlLWxvZzRjeHgiICYmICRpc0NvbXBvbmVudERvY3VtZW50YXRpb24gKQoJCSNzZXQgKCR0aGlzSXRlbU5hbWUgPSAkaXRlbS5uYW1lLnJlcGxhY2UoIlByb2plY3QgSW5mb3JtYXRpb24iLCAiQ29tcG9uZW50IFByb2plY3QiKSkKCQkjc2V0ICgkdGhpc0l0ZW1OYW1lID0gJGl0ZW0ubmFtZS5yZXBsYWNlKCJQcm9qZWN0IiwgIkNvbXBvbmVudCIpKQoJCSNlbmQKCQk8bGkgY2xhc3M9IiRjb2xsYXBzZSRhY3RpdmUiPgoJCSNsaW5rKCRjdXJyZW50SXRlbUhyZWYgJHRoaXNJdGVtTmFtZSAkaXRlbS50YXJnZXQgJGl0ZW0uaW1nICRpdGVtLnBvc2l0aW9uICRpdGVtLmFsdCAkaXRlbS5ib3JkZXIgJGl0ZW0ud2lkdGggJGl0ZW0uaGVpZ2h0ICkKCQkjaWYgKCAkaXRlbSAmJiAkaXRlbS5pdGVtcyAmJiAkaXRlbS5pdGVtcy5zaXplKCkgPiAwICkKCQkJI2lmICggJGNvbGxhcHNlID09ICJleHBhbmRlZCIgKQoJCQkJPHVsPgoJCQkJCSNmb3JlYWNoKCAkc3ViaXRlbSBpbiAkaXRlbS5pdGVtcyApCgkJCQkJCSNtZW51SXRlbSggJHN1Yml0ZW0gJGlzQ29tcG9uZW50RG9jdW1lbnRhdGlvbiApCgkJCQkJI2VuZAoJCQkJPC91bD4KCQkJI2VuZAoJCSNlbmQKCQk8L2xpPgogCSNlbmQKI2VuZAojIwojbWFjcm8gKCBtYWluTWVudSAkbWVudXMgKQoJI2ZvcmVhY2goICRtZW51IGluICRtZW51cyApCgkJPHVsIGNsYXNzPSJuYXYgbmF2LWxpc3QiPgoJCSNzZXQgKCRpc0NvbXBvbmVudERvY3VtZW50YXRpb24gPSBmYWxzZSkKIAkJI2lmICggJG1lbnUubmFtZSApCgkJCSNzZXQgKCAkbWVudU5hbWUgPSAkbWVudS5uYW1lICkKCQkJI2lmICggJG1lbnVOYW1lID09ICJQcm9qZWN0IERvY3VtZW50YXRpb24iICkKCQkJI3NldCAoICRtZW51TmFtZSA9ICJDb21wb25lbnQgRG9jdW1lbnRhdGlvbiIgKQoJCQkjc2V0ICgkaXNDb21wb25lbnREb2N1bWVudGF0aW9uID0gdHJ1ZSkKCQkJI2VuZAoJCQkjaWYgKCAkbWVudS5pbWcgKQoJCQkgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj48aSBjbGFzcz0iJG1lbnUuaW1nIj48L2k+JG1lbnVOYW1lPC9saT4KCQkJI2Vsc2UKCQkJIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+JG1lbnVOYW1lPC9saT4KCQkJI2VuZAoJCSNlbmQKCQkjaWYgKCAkbWVudS5pdGVtcyAmJiAkbWVudS5pdGVtcy5zaXplKCkgPiAwICkKCQkJI2ZvcmVhY2goICRpdGVtIGluICRtZW51Lml0ZW1zICkKCQkJCSNtZW51SXRlbSggJGl0ZW0gJGlzQ29tcG9uZW50RG9jdW1lbnRhdGlvbiApCgkJCSNlbmQKCQkjZW5kCgkJPC91bD4KCSNlbmQKI2VuZAojIwojbWFjcm8gKCBjb3B5cmlnaHQgKQoJI2lmICggJHByb2plY3QgKQoJCSNpZiAoICR7cHJvamVjdC5vcmdhbml6YXRpb259ICYmICR7cHJvamVjdC5vcmdhbml6YXRpb24ubmFtZX0gKQoJCQkjc2V0ICggJHBlcmlvZCA9ICIiICkKCQkjZWxzZQoJCQkjc2V0ICggJHBlcmlvZCA9ICIuIiApCgkgI2VuZAojIwoJICNzZXQgKCAkY3VycmVudFllYXIgPSAke2N1cnJlbnREYXRlLnllYXJ9ICsgMTkwMCApCiMjCgkJI2lmICggJHtwcm9qZWN0LmluY2VwdGlvblllYXJ9ICYmICggJHtwcm9qZWN0LmluY2VwdGlvblllYXJ9ICE9ICR7Y3VycmVudFllYXIudG9TdHJpbmcoKX0gKSApCgkJCSR7cHJvamVjdC5pbmNlcHRpb25ZZWFyfS0ke2N1cnJlbnRZZWFyfSR7cGVyaW9kfQoJCSNlbHNlCgkJCSR7Y3VycmVudFllYXJ9JHtwZXJpb2R9CgkJI2VuZAojIwoJCSNpZiAoICR7cHJvamVjdC5vcmdhbml6YXRpb259ICkKCQkJI2lmICggJHtwcm9qZWN0Lm9yZ2FuaXphdGlvbi5uYW1lfSAmJiAke3Byb2plY3Qub3JnYW5pemF0aW9uLnVybH0gKQoJCQkJCTxhIGhyZWY9IiRwcm9qZWN0Lm9yZ2FuaXphdGlvbi51cmwiPiR7cHJvamVjdC5vcmdhbml6YXRpb24ubmFtZX08L2E+LgoJCQkjZWxzZWlmICggJHtwcm9qZWN0Lm9yZ2FuaXphdGlvbi5uYW1lfSApCgkJCQkke3Byb2plY3Qub3JnYW5pemF0aW9uLm5hbWV9LgoJCQkjZW5kCgkJI2VuZAoJI2VuZAojZW5kCiMjCiNtYWNybyAoIHB1Ymxpc2hEYXRlICRwb3NpdGlvbiAkcHVibGlzaERhdGUgJHZlcnNpb24gKQoJI2lmICggJHB1Ymxpc2hEYXRlICYmICRwdWJsaXNoRGF0ZS5mb3JtYXQgKQoJCSNzZXQgKCAkZm9ybWF0ID0gJHB1Ymxpc2hEYXRlLmZvcm1hdCApCgkjZWxzZQoJCSNzZXQgKCAkZm9ybWF0ID0gInl5eXktTU0tZGQiICkKCSNlbmQKIyMKCSRkYXRlRm9ybWF0LmFwcGx5UGF0dGVybiggJGZvcm1hdCApCiMjCgkjc2V0ICggJGRhdGVUb2RheSA9ICRkYXRlRm9ybWF0LmZvcm1hdCggJGN1cnJlbnREYXRlICkgKQojIwoJI2lmICggJHB1Ymxpc2hEYXRlICYmICRwdWJsaXNoRGF0ZS5wb3NpdGlvbiApCgkJI3NldCAoICRkYXRlUG9zaXRpb24gPSAkcHVibGlzaERhdGUucG9zaXRpb24gKQoJI2Vsc2UKCQkjc2V0ICggJGRhdGVQb3NpdGlvbiA9ICJsZWZ0IiApCgkjZW5kCiMjCgkjaWYgKCAkdmVyc2lvbiApCgkJI2lmICggJHZlcnNpb24ucG9zaXRpb24gKQoJCQkjc2V0ICggJHZlcnNpb25Qb3NpdGlvbiA9ICR2ZXJzaW9uLnBvc2l0aW9uICkKCQkjZWxzZQoJCQkjc2V0ICggJHZlcnNpb25Qb3NpdGlvbiA9ICJsZWZ0IiApCgkJI2VuZAoJI2Vsc2UKCQkjc2V0ICggJHZlcnNpb24gPSAiIiApCgkJI3NldCAoICR2ZXJzaW9uUG9zaXRpb24gPSAibGVmdCIgKQoJI2VuZAojIwoJI3NldCAoICRicmVhZGNydW1icyA9ICRkZWNvcmF0aW9uLmJvZHkuYnJlYWRjcnVtYnMgKQoJI3NldCAoICRsaW5rcyA9ICRkZWNvcmF0aW9uLmJvZHkubGlua3MgKQoKCSNpZiAoICRkYXRlUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSggJHBvc2l0aW9uICkgKQoJCSNpZiAoICggJGRhdGVQb3NpdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCAicmlnaHQiICkgKSB8fCAoICRkYXRlUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSggImJvdHRvbSIgKSApICkKCQkJPHNwYW4gaWQ9InB1Ymxpc2hEYXRlIj4kaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLmxhc3RwdWJsaXNoZWQiICk6ICRkYXRlVG9kYXk8L3NwYW4+CgkJCSNpZiAoICR2ZXJzaW9uUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSggJHBvc2l0aW9uICkgKQoJCQkJPHNwYW4gY2xhc3M9ImRpdmlkZXIiPnw8L3NwYW4+IDxzcGFuIGlkPSJwcm9qZWN0VmVyc2lvbiI+JGkxOG4uZ2V0U3RyaW5nKCAic2l0ZS1yZW5kZXJlciIsICRsb2NhbGUsICJ0ZW1wbGF0ZS52ZXJzaW9uIiApOiAke3Byb2plY3QudmVyc2lvbn08L3NwYW4+CgkJCSNlbmQKCQkjZWxzZWlmICggKCAkZGF0ZVBvc2l0aW9uLmVxdWFsc0lnbm9yZUNhc2UoICJuYXZpZ2F0aW9uLWJvdHRvbSIgKSApIHx8ICggJGRhdGVQb3NpdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCAibmF2aWdhdGlvbi10b3AiICkgKSApCgkJCTxkaXYgaWQ9Imxhc3RQdWJsaXNoZWQiPgoJCQkJPHNwYW4gaWQ9InB1Ymxpc2hEYXRlIj4kaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLmxhc3RwdWJsaXNoZWQiICk6ICRkYXRlVG9kYXk8L3NwYW4+CgkJCQkjaWYgKCAkdmVyc2lvblBvc2l0aW9uLmVxdWFsc0lnbm9yZUNhc2UoICRwb3NpdGlvbiApICkKCQkJCQk8c3BhbiBjbGFzcz0iZGl2aWRlciI+fDwvc3Bhbj4gPHNwYW4gaWQ9InByb2plY3RWZXJzaW9uIj4kaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLnZlcnNpb24iICk6ICR7cHJvamVjdC52ZXJzaW9ufTwvc3Bhbj4KCQkJCSNlbmQKCQkJPC9kaXY+CgkJI2Vsc2VpZiAoICRkYXRlUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSgibGVmdCIpICkKCQkJPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KCQkJCTxzcGFuIGlkPSJwdWJsaXNoRGF0ZSI+JGkxOG4uZ2V0U3RyaW5nKCAic2l0ZS1yZW5kZXJlciIsICRsb2NhbGUsICJ0ZW1wbGF0ZS5sYXN0cHVibGlzaGVkIiApOiAkZGF0ZVRvZGF5PC9zcGFuPgoJCQkJI2lmICggJHZlcnNpb25Qb3NpdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCAkcG9zaXRpb24gKSApCgkJCQkJPHNwYW4gY2xhc3M9ImRpdmlkZXIiPnw8L3NwYW4+IDxzcGFuIGlkPSJwcm9qZWN0VmVyc2lvbiI+JGkxOG4uZ2V0U3RyaW5nKCAic2l0ZS1yZW5kZXJlciIsICRsb2NhbGUsICJ0ZW1wbGF0ZS52ZXJzaW9uIiApOiAke3Byb2plY3QudmVyc2lvbn08L3NwYW4+CgkJCQkjZW5kCgkJCQkjaWYgKCAkYnJlYWRjcnVtYnMgJiYgJGJyZWFkY3J1bWJzLnNpemUoKSA+IDAgKQoJCQkJCTxzcGFuIGNsYXNzPSJkaXZpZGVyIj58PC9zcGFuPiAjYnJlYWRjcnVtYnMoICRicmVhZGNydW1icyApCgkJCQkjZW5kCgkJCTwvZGl2PgoJCSNlbmQKCSNlbHNlaWYgKCAkdmVyc2lvblBvc2l0aW9uLmVxdWFsc0lnbm9yZUNhc2UoICRwb3NpdGlvbiApICkKCQkjaWYgKCAoICR2ZXJzaW9uUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSggInJpZ2h0IiApICkgfHwgKCAkdmVyc2lvblBvc2l0aW9uLmVxdWFsc0lnbm9yZUNhc2UoICJib3R0b20iICkgKSApCgkJCSRwcmVmaXggPHNwYW4gaWQ9InByb2plY3RWZXJzaW9uIj4kaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLnZlcnNpb24iICk6ICR7cHJvamVjdC52ZXJzaW9ufTwvc3Bhbj4KCQkjZWxzZWlmICggKCAkdmVyc2lvblBvc2l0aW9uLmVxdWFsc0lnbm9yZUNhc2UoICJuYXZpZ2F0aW9uLWJvdHRvbSIgKSApIHx8ICggJHZlcnNpb25Qb3NpdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCAibmF2aWdhdGlvbi10b3AiICkgKSApCgkJCTxkaXYgaWQ9Imxhc3RQdWJsaXNoZWQiPgoJCQkJPHNwYW4gaWQ9InByb2plY3RWZXJzaW9uIj4kaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLnZlcnNpb24iICk6ICR7cHJvamVjdC52ZXJzaW9ufTwvc3Bhbj4KCQkJPC9kaXY+CgkJI2Vsc2VpZiAoICR2ZXJzaW9uUG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSgibGVmdCIpICkKCQkJPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KCQkJCTxzcGFuIGlkPSJwcm9qZWN0VmVyc2lvbiI+JGkxOG4uZ2V0U3RyaW5nKCAic2l0ZS1yZW5kZXJlciIsICRsb2NhbGUsICJ0ZW1wbGF0ZS52ZXJzaW9uIiApOiAke3Byb2plY3QudmVyc2lvbn08L3NwYW4+CgkJCQkjaWYgKCAkYnJlYWRjcnVtYnMgJiYgJGJyZWFkY3J1bWJzLnNpemUoKSA+IDAgKQoJCQkJCTxzcGFuIGNsYXNzPSJkaXZpZGVyIj58PC9zcGFuPiAjYnJlYWRjcnVtYnMoICRicmVhZGNydW1icyApCgkJCQkjZW5kCgkJCTwvZGl2PgoJCSNlbmQKCSNlbHNlaWYgKCAkcG9zaXRpb24uZXF1YWxzSWdub3JlQ2FzZSggImxlZnQiICkgKQoJCSNpZiAoICRicmVhZGNydW1icyAmJiAkYnJlYWRjcnVtYnMuc2l6ZSgpID4gMCApCgkJCTxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CgkJCQkjYnJlYWRjcnVtYnMoICRicmVhZGNydW1icyApCgkJCTwvZGl2PgoJCSNlbmQKCSNlbmQKI2VuZAojIwojbWFjcm8gKCBwb3dlcmVkQnlMb2dvICRwb3dlcmVkQnkgKQoJI2lmKCAkcG93ZXJlZEJ5ICkKCQkjZm9yZWFjaCAoJGl0ZW0gaW4gJHBvd2VyZWRCeSkKCQkJI2lmKCAkaXRlbS5ocmVmICkKCQkJCSNzZXQgKCAkaHJlZiA9ICRQYXRoVG9vbC5jYWxjdWxhdGVMaW5rKCAkaXRlbS5ocmVmLCAkcmVsYXRpdmVQYXRoICkgKQoJCQkJI3NldCAoICRocmVmID0gJGhyZWYucmVwbGFjZUFsbCggJ1xcJywgJy8nICkgKQoJCQkjZWxzZQoJCQkJI3NldCAoICRocmVmPSJodHRwczovL21hdmVuLmFwYWNoZS5vcmcvIiApCgkJCSNlbmQKIyMKCQkJI2lmKCAkaXRlbS5uYW1lICkKCQkJCSNzZXQgKCAkbmFtZSA9ICRpdGVtLm5hbWUgKQoJCQkjZWxzZQoJCQkJI3NldCAoICRuYW1lID0gJGkxOG4uZ2V0U3RyaW5nKCAic2l0ZS1yZW5kZXJlciIsICRsb2NhbGUsICJ0ZW1wbGF0ZS5idWlsdGJ5IiApCSkKCQkJCSNzZXQgKCAkbmFtZSA9ICIke25hbWV9IE1hdmVuIgkpCgkJCSNlbmQKIyMKCQkJI2lmKCAkaXRlbS5pbWcgKQoJCQkJI3NldCAoICRpbWcgPSAkaXRlbS5pbWcgKQoJCQkjZWxzZQoJCQkJI3NldCAoICRpbWcgPSAiaW1hZ2VzL21hdmVuLWZlYXRoZXIucG5nIiApCgkJCSNlbmQKIyMKCQkJI2lmICggISAoICRpbWcudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwOi8iKSB8fCAkaW1nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiaHR0cHM6LyIpIHx8CgkJCQkJCSRpbWcudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJmdHA6LyIpIHx8ICRpbWcudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJtYWlsdG86LyIpIHx8CgkJCQkJCSRpbWcudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJmaWxlOi8iKSB8fCAoJGltZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIjovLyIpICE9IC0xKSApICkKCQkJCSNzZXQgKCAkaW1nID0gJFBhdGhUb29sLmNhbGN1bGF0ZUxpbmsoICRpbWcsICRyZWxhdGl2ZVBhdGggKSApCgkJCQkjc2V0ICggJGltZyA9ICRpbWcucmVwbGFjZUFsbCggJ1xcJywgJy8nICkgKQoJCQkjZW5kCiMjCgkJCSNpZiggJGl0ZW0uYWx0ICkKCQkJCSNzZXQgKCAkYWx0ID0gJyBhbHQ9IicgKyAkaXRlbS5hbHQgKyAnIicgKQoJCQkjZWxzZQoJCQkJI3NldCAoICRhbHQgPSAnIGFsdD0iJyArICRuYW1lICsgJyInICkKCQkJI2VuZAojIwoJCQkjaWYoICRpdGVtLmJvcmRlciApCgkJCQkjc2V0ICggJGJvcmRlciA9ICcgYm9yZGVyPSInICsgJGl0ZW0uYm9yZGVyICsgJyInICkKCQkJI2Vsc2UKCQkJCSNzZXQgKCAkYm9yZGVyID0gIiIgKQoJCQkjZW5kCiMjCgkJCSNpZiggJGl0ZW0ud2lkdGggKQoJCQkJI3NldCAoICR3aWR0aCA9ICcgd2lkdGg9IicgKyAkaXRlbS53aWR0aCArICciJyApCgkJCSNlbHNlCgkJCQkjc2V0ICggJHdpZHRoID0gIiIgKQoJCQkjZW5kCgkJCSNpZiggJGl0ZW0uaGVpZ2h0ICkKCQkJCSNzZXQgKCAkaGVpZ2h0ID0gJyBoZWlnaHQ9IicgKyAkaXRlbS5oZWlnaHQgKyAnIicgKQoJCQkjZWxzZQoJCQkJI3NldCAoICRoZWlnaHQgPSAiIiApCgkJCSNlbmQKIyMKCQkJPGEgaHJlZj0iJGhyZWYiIHRpdGxlPSIkbmFtZSIgY2xhc3M9InBvd2VyZWRCeSI+CgkJCQk8aW1nIGNsYXNzPSJwb3dlcmVkQnkiICRhbHQgc3JjPSIkaW1nIiAkYm9yZGVyICR3aWR0aCAkaGVpZ2h0IC8+CgkJCTwvYT4KCQkjZW5kCgkJI2lmKCAkcG93ZXJlZEJ5LmlzRW1wdHkoKSApCgkJCTxhIGhyZWY9Imh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSIkaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLmJ1aWx0YnkiICkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgoJCQkJPGltZyBjbGFzcz0icG93ZXJlZEJ5IiBhbHQ9IiRpMThuLmdldFN0cmluZyggInNpdGUtcmVuZGVyZXIiLCAkbG9jYWxlLCAidGVtcGxhdGUuYnVpbHRieSIgKSBNYXZlbiIgc3JjPSIkcmVsYXRpdmVQYXRoL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KCQkJPC9hPgoJCSNlbmQKCSNlbHNlCgkJPGEgaHJlZj0iaHR0cHM6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IiRpMThuLmdldFN0cmluZyggInNpdGUtcmVuZGVyZXIiLCAkbG9jYWxlLCAidGVtcGxhdGUuYnVpbHRieSIgKSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CgkJCTxpbWcgY2xhc3M9InBvd2VyZWRCeSIgYWx0PSIkaTE4bi5nZXRTdHJpbmcoICJzaXRlLXJlbmRlcmVyIiwgJGxvY2FsZSwgInRlbXBsYXRlLmJ1aWx0YnkiICkgTWF2ZW4iIHNyYz0iJHJlbGF0aXZlUGF0aC9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CgkJPC9hPgoJI2VuZAojZW5kCiMjCiNtYWNybyAoIGdvb2dsZUFuYWx5dGljcyAkYWNjb3VudElkICkKCSNpZiggJGFjY291bnRJZCAmJiAkYWNjb3VudElkICE9ICIiICkKCQk8IS0tIEdvb2dsZSBBbmFseXRpY3MgLS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKCQkJdmFyIF9nYXEgPSBfZ2FxIHx8IFtdOwoJCQlfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICckYWNjb3VudElkJ10pOwoJCQlfZ2FxLnB1c2ggKFsnX2dhdC5fYW5vbnltaXplSXAnXSk7CgkJCV9nYXEucHVzaChbJ190cmFja1BhZ2V2aWV3J10pOwoKCQkJKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGdhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7IGdhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsgZ2EuYXN5bmMgPSB0cnVlOwoJCQkJZ2Euc3JjID0gKCdodHRwczonID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID8gJ2h0dHBzOi8vc3NsJyA6ICdodHRwOi8vd3d3JykgKyAnLmdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzJzsKCQkJCXZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsKCQkJfSkoKTsKCgkJPC9zY3JpcHQ+CgkjZW5kCiNlbmQKIyMKPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiI2lmICggJGxvY2FsZSApIHhtbDpsYW5nPSIkbG9jYWxlLmxhbmd1YWdlIiBsYW5nPSIkbG9jYWxlLmxhbmd1YWdlIiNlbmQ+Cgk8aGVhZD4KCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0ke291dHB1dEVuY29kaW5nfSIgLz4KCQk8dGl0bGU+JHRpdGxlIC0gJHByb2plY3QubmFtZTwvdGl0bGU+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIkcmVsYXRpdmVQYXRoL2Nzcy9ib290c3RyYXAubWluLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIkcmVsYXRpdmVQYXRoL2Nzcy9zaXRlLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJHJlbGF0aXZlUGF0aC9qcy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkcmVsYXRpdmVQYXRoL2pzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRyZWxhdGl2ZVBhdGgvanMvcHJldHRpZnkubWluLmpzIj48L3NjcmlwdD4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkcmVsYXRpdmVQYXRoL2pzL3NpdGUuanMiPjwvc2NyaXB0PgojZm9yZWFjaCggJGF1dGhvciBpbiAkYXV0aG9ycyApCgkJCTxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iJGF1dGhvciIgLz4KI2VuZAojaWYgKCAkZGF0ZUNyZWF0aW9uICkKCQk8bWV0YSBuYW1lPSJEYXRlLUNyZWF0aW9uLXl5eXltbWRkIiBjb250ZW50PSIkZGF0ZUNyZWF0aW9uIiAvPgojZW5kCiNpZiAoICRkYXRlUmV2aXNpb24gKQoJCTxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IiRkYXRlUmV2aXNpb24iIC8+CiNlbmQKI2lmICggJGxvY2FsZSApCgkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iJGxvY2FsZS5sYW5ndWFnZSIgLz4KI2VuZAoJCSRoZWFkQ29udGVudAoJCSNnb29nbGVBbmFseXRpY3MoICRkZWNvcmF0aW9uLmdvb2dsZUFuYWx5dGljc0FjY291bnRJZCApCgk8L2hlYWQ+Cgk8Ym9keSBjbGFzcz0iY29tcG9zaXRlIj4KCQk8YSBocmVmPSJodHRwczovL2xvZ2dpbmcuYXBhY2hlLm9yZy8iPgoJCQk8aW1nIGNsYXNzPSJsb2dvLWxlZnQiIHNyYz0iJHJlbGF0aXZlUGF0aC9pbWFnZXMvbG9nb3MvbHMtbG9nby5qcGciIGFsdD0iQXBhY2hlIGxvZ2dpbmcgc2VydmljZXMgbG9nbyIgLz4KCQk8L2E+CgkJPGltZyBjbGFzcz0ibG9nby1yaWdodCIgc3JjPSIkcmVsYXRpdmVQYXRoL2ltYWdlcy9sb2dvcy9sb2dvLnBuZyIgYWx0PSJBcGFjaGUgbG9nNGogbG9nbyIgLz4KCQk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+CgoJCTxkaXYgY2xhc3M9Im5hdmJhciI+CgkJCTxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CgkJCQk8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgoJCQkJCTxhIGNsYXNzPSJicmFuZCIgaHJlZj0iJHByb2plY3QudXJsIj4kcHJvamVjdC5uYW1lICYjODQ4Mjs8L2E+CgkJCQkJI2xpbmtzKCAkZGVjb3JhdGlvbi5ib2R5LmxpbmtzICkKCgkJCQkJPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CgkJCQkJCSNwdWJsaXNoRGF0ZSggInJpZ2h0IiAkZGVjb3JhdGlvbi5wdWJsaXNoRGF0ZSAkZGVjb3JhdGlvbi52ZXJzaW9uICkKCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgkJPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KCQkJPHRhYmxlIGNsYXNzPSJsYXlvdXQtdGFibGUiPgoJCQkJPHRyPgoJCQkJCTx0ZCBjbGFzcz0ic2lkZWJhciI+CgkJCQkJCTxkaXYgY2xhc3M9IndlbGwgc2lkZWJhci1uYXYiPgoJCQkJCQkJI21haW5NZW51KCAkZGVjb3JhdGlvbi5ib2R5Lm1lbnVzICkKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgaWQ9InBvd2VyZWRCeSI+CgkJCQkJCQkjcG93ZXJlZEJ5TG9nbyggJGRlY29yYXRpb24ucG93ZXJlZEJ5ICkKCQkJCQkJPC9kaXY+CgkJCQkJPC90ZD4KCQkJCQk8dGQgY2xhc3M9ImNvbnRlbnQiPgoJCQkJCQkkYm9keUNvbnRlbnQKCQkJCQk8L3RkPgoJCQkJPC90cj4KCQkJPC90YWJsZT4KCQk8L2Rpdj4KCgkJPGRpdiBjbGFzcz0iZm9vdGVyIj4KCQkJI3NldCAoICRjdXJyZW50WWVhciA9ICR7Y3VycmVudERhdGUueWVhcn0gKyAxOTAwICkKCQkJCTxwPkNvcHlyaWdodCCpICR7cHJvamVjdC5pbmNlcHRpb25ZZWFyfS0ke2N1cnJlbnRZZWFyfSA8YSBjbGFzcz0iZXh0ZXJuYWwiIGhyZWY9IiRwcm9qZWN0Lm9yZ2FuaXphdGlvbi51cmwiPiR7cHJvamVjdC5vcmdhbml6YXRpb24ubmFtZX08L2E+LiBBbGwgUmlnaHRzIFJlc2VydmVkLjwvcD4KCQkJCTxwPkFwYWNoZSBMb2dnaW5nLCBBcGFjaGUgTG9nNGosIExvZzRqLCBBcGFjaGUsIHRoZSBBcGFjaGUgZmVhdGhlciBsb2dvLCBhbmQgdGhlIEFwYWNoZSBMb2dnaW5nIHByb2plY3QgbG9nbyBhcmUgdHJhZGVtYXJrcyBvZiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9wPgoJCQkJPHA+U2l0ZSBwb3dlcmVkIGJ5IDxhIGNsYXNzPSJleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLyI+VHdpdHRlciBCb290c3RyYXA8L2E+LiBJY29ucyBmcm9tIDxhIGNsYXNzPSJleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9nbHlwaGljb25zLmNvbS8iPkdseXBoaWNvbnMgRnJlZTwvYT4uPC9wPgoJCTwvZGl2PgoJPC9ib2R5Pgo8L2h0bWw+