LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCgovKgogIGVkaXRvci5jc3MKICBXaWtpIGVkaXRvciBmb3JtYXR0aW5nCiovCgphIHsKICAtbW96LW91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKfQoKLmphd3MgewogIC8qIEpBV1Mgc2hvdWxkIHNlZSBpdCwgYnV0IHlvdSBjYW4ndCAqLwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMXB4OwogIGxlZnQ6IC01MDAwcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtNTAwMHB4OwogIHdpZHRoOiAxcHg7Cn0KCiNnb2xsdW0tZWRpdG9yIHsKICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU0OwogIGJhY2tncm91bmQ6ICNmOWY5Zjk7CiAgbWFyZ2luOiAxZW0gMCA1ZW07CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAxZW0gMWVtIDAuNGVtOwoKICBib3JkZXItcmFkaXVzOiAxZW07CiAgLW1vei1ib3JkZXItcmFkaXVzOiAxZW07CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxZW07Cn0KCi5pZSAjZ29sbHVtLWVkaXRvciB7CiAgcGFkZGluZy1ib3R0b206IDFlbTsgIAp9CgojZ29sbHVtLWVkaXRvciBmb3JtIGZpZWxkc2V0IHsKICBib3JkZXI6IDA7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KCiNnb2xsdW0tZWRpdG9yIC5zaW5nbGVsaW5lIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgMCAwLjdlbSAwOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCiNnb2xsdW0tZWRpdG9yIC5zaW5nbGVsaW5lIGlucHV0IHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAxLjNlbTsKICBmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICBsaW5lLWhlaWdodDogMS44ZW07CiAgbWFyZ2luOiAxZW0gMCAwLjRlbTsKICBwYWRkaW5nOiAwLjVlbTsKICB3aWR0aDogOTglOwp9CgojZ29sbHVtLWVkaXRvciAuc2luZ2xlbGluZSBpbnB1dC5waCB7CiAgY29sb3I6ICM5OTk7Cn0KCiNnb2xsdW0tZWRpdG9yLXRpdGxlLWZpZWxkIGlucHV0I2dvbGx1bS1lZGl0b3ItcGFnZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luLXRvcDogMDsKfQoKI2dvbGx1bS1lZGl0b3ItdGl0bGUtZmllbGQuYWN0aXZlIHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgMCAwLjNlbSAwOwogIHBhZGRpbmc6IDAgMCAwLjVlbSAwOwp9CgojZ29sbHVtLWVkaXRvci10aXRsZS1maWVsZCBpbnB1dCNnb2xsdW0tZWRpdG9yLXBhZ2UtdGl0bGUucGggewogIGNvbG9yOiAjMDAwOwp9CgovKiBAY29udHJvbCBlZGl0b3Itdmlldy10YWIgKi8KI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItdHlwZS1zd2l0Y2hlciB7CiAgZGlzcGxheTogbm9uZTsKfQoKLyogQGNvbnRyb2wgZnVuY3Rpb24tYmFyICovCiNnb2xsdW0tZWRpdG9yICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJhciAgewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKfQoKCiNnb2xsdW0tZWRpdG9yLXRpdGxlLWZpZWxkICsgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYmFyIHsKICBtYXJnaW4tdG9wOiAwLjZlbTsKfQoKI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYmFyICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJ1dHRvbnMgewogIC8qIGRpc3BsYXk6IG5vbmU7ICovCn0KCiNnb2xsdW0tZWRpdG9yICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJhci5hY3RpdmUgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYnV0dG9ucyB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwIDAgMS4xZW0gMDsKfQoKI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYmFyIGEuZnVuY3Rpb24tYnV0dG9uIHsKICBiYWNrZ3JvdW5kOiAjZjdmN2Y3OwogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgY29sb3I6ICMzMzM7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgbWFyZ2luOiAwLjJlbSAwLjVlbSAwIDA7CiAgLyogdGV4dC1pbmRlbnQ6IC01MDAwcHg7ICovCiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjsKICB3aWR0aDogMjVweDsKICAKICBib3JkZXItcmFkaXVzOiAwLjNlbTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMC4zZW07CiAgCiAgZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCwgc3RhcnRDb2xvcnN0cj0nI2Y0ZjRmNCcsIGVuZENvbG9yc3RyPScjZWNlY2VjJyk7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZjRmNGY0KSwgdG8oI2VjZWNlYykpOwogIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y0ZjRmNCwgI2VjZWNlYyk7Cn0KCiNnb2xsdW0tZWRpdG9yICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJhciBhLmZ1bmN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4zKTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgCiAgZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCwgc3RhcnRDb2xvcnN0cj0nIzU5OWJkYycsIGVuZENvbG9yc3RyPScjMzA3MmIzJyk7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjNTk5YmRjKSwgdG8oIzMwNzJiMykpOwogIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzU5OWJkYywgIzMwNzJiMyk7Cn0KCiNnb2xsdW0tZWRpdG9yICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJhciBhIHNwYW4gewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvaWNvbi1zcHJpdGUucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMjVweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtaW5kZW50OiAtNTAwMHB4OwogIHdpZHRoOiAyNXB4Owp9CgphI2Z1bmN0aW9uLWJvbGQgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfQphI2Z1bmN0aW9uLWl0YWxpYyBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI3cHggMDsgfQphI2Z1bmN0aW9uLXVuZGVybGluZSBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU0cHggMDsgfQphI2Z1bmN0aW9uLWNvZGUgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MnB4IDA7IH0KYSNmdW5jdGlvbi11bCBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEwOXB4IDA7IH0KYSNmdW5jdGlvbi1vbCBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEzNnB4IDA7IH0KYSNmdW5jdGlvbi1ibG9ja3F1b3RlIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYzcHggMDsgfQphI2Z1bmN0aW9uLWhyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkwcHggMDsgfQphI2Z1bmN0aW9uLWgxIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE3cHggMDsgfQphI2Z1bmN0aW9uLWgyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQ0cHggMDsgfQphI2Z1bmN0aW9uLWgzIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjcxcHggMDsgfQphI2Z1bmN0aW9uLWxpbmsgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yOThweCAwOyB9CmEjZnVuY3Rpb24taW1hZ2Ugc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMjRweCAwOyB9CmEjZnVuY3Rpb24taGVscCBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwNXB4IDA7IH0gCgphI2Z1bmN0aW9uLWJvbGQ6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI4cHg7IH0KYSNmdW5jdGlvbi1pdGFsaWM6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yN3B4IC0yOHB4OyB9CmEjZnVuY3Rpb24tdW5kZXJsaW5lOmhvdmVyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNTRweCAtMjhweDsgfQphI2Z1bmN0aW9uLWNvZGU6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MnB4IC0yOHB4OyB9CmEjZnVuY3Rpb24tdWw6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMDlweCAtMjhweDsgfQphI2Z1bmN0aW9uLW9sOmhvdmVyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTM2cHggLTI4cHg7IH0KYSNmdW5jdGlvbi1ibG9ja3F1b3RlOmhvdmVyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYzcHggLTI4cHg7IH0KYSNmdW5jdGlvbi1ocjpob3ZlciBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MHB4IC0yOHB4OyB9CmEjZnVuY3Rpb24taDE6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMTdweCAtMjhweDsgfQphI2Z1bmN0aW9uLWgyOmhvdmVyIHNwYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQ0cHggLTI4cHg7IH0KYSNmdW5jdGlvbi1oMzpob3ZlciBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI3MXB4IC0yOHB4OyB9CmEjZnVuY3Rpb24tbGluazpob3ZlciBzcGFuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI5OHB4IC0yOHB4OyB9CmEjZnVuY3Rpb24taW1hZ2U6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMjRweCAtMjhweDsgfQphI2Z1bmN0aW9uLWhlbHA6aG92ZXIgc3BhbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00MDVweCAtMjhweDsgfSAKCgojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1mdW5jdGlvbi1iYXIgYS5kaXNhYmxlZCB7CiAgZGlzcGxheTogbm9uZTsKfQoKI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYmFyIHNwYW4uZnVuY3Rpb24tZGl2aWRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDAuNWVtOwp9CgojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1mdW5jdGlvbi1iYXIgI2dvbGx1bS1lZGl0b3ItZm9ybWF0LXNlbGVjdG9yIHsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDAgMCAxLjFlbSAwOwp9CgojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1mdW5jdGlvbi1iYXIgCiAgI2dvbGx1bS1lZGl0b3ItZm9ybWF0LXNlbGVjdG9yIHNlbGVjdCB7ICAKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIAogIGZsb2F0OiByaWdodDsKICBmb250LXNpemU6IDEuMWVtOwogIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKICBwYWRkaW5nOiAwLjVlbSAwLjdlbTsKICBtYXJnaW4tYm90dG9tOiAwOwogCiAKICBib3JkZXItcmFkaXVzOiAwLjVlbTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMC41ZW07IAogIC1tb3otb3V0bGluZTogbm9uZTsKfQoKI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItZnVuY3Rpb24tYmFyIAogICNnb2xsdW0tZWRpdG9yLWZvcm1hdC1zZWxlY3RvciBzZWxlY3Q6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAtbW96LW91dGxpbmU6IG5vbmU7Cn0KCiNnb2xsdW0tZWRpdG9yICNnb2xsdW0tZWRpdG9yLWZ1bmN0aW9uLWJhcgogICNnb2xsdW0tZWRpdG9yLWZvcm1hdC1zZWxlY3RvciBsYWJlbCB7CiAgY29sb3I6ICM5OTk7CiAgZmxvYXQ6IHJpZ2h0OwogIGZvbnQtc2l6ZTogMS4xZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IDEuNmVtOwogIHBhZGRpbmc6IDAuNmVtIDAuNWVtIDAgMDsKfQogIAojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1mdW5jdGlvbi1iYXIKICAjZ29sbHVtLWVkaXRvci1mb3JtYXQtc2VsZWN0b3IgbGFiZWw6YWZ0ZXIgewogIGNvbnRlbnQ6ICc6JzsKfQogIAogIAovKiBAc2VjdGlvbiBmb3JtLWZpZWxkcyAqLwoKYm9keSB7CmZvbnQ6IDEzcHggSGVsdmV0aWNhLGFyaWFsLGZyZWVzYW5zLGNsZWFuLHNhbnMtc2VyaWY7CmxpbmUtaGVpZ2h0OiAxLjQ7CmNvbG9yOiAjMzMzOwpwb3NpdGlvbjogcmVsYXRpdmU7CnBhZGRpbmc6IDA7CndpZHRoOiAxMDAlOwp6LWluZGV4OiA5OwpkaXNwbGF5OiBibG9jazsKbWFyZ2luOiAwIGF1dG87Cn0KCiNnb2xsdW0tZWRpdG9yIHRleHRhcmVhI2dvbGx1bS1lZGl0b3ItYm9keSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIGZvbnQtc2l6ZTogMS4zZW07CiAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgbGluZS1oZWlnaHQ6IDEuOGVtOwogIG1hcmdpbjogMWVtIDAgMC40ZW07CiAgcGFkZGluZzogMC41ZW07IC8qIEkgZG9uJ3QgcmVhbGx5IGxpa2UgbWl4aW5nIHBjdCAmIGVtIGhlcmXJICovCiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAyMGVtOwp9CgojZ29sbHVtLWVkaXRvciBpbnB1dC5nb2xsdW0tZWRpdG9yLWlucHV0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgY29sb3I6ICMzMzM7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgaGVpZ2h0OiAzNXB4OwogIG1hcmdpbjogMHB4IDVweDsKICBwYWRkaW5nOiAwLjRlbSAxZW07CgogIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7CgogIGZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoR3JhZGllbnRUeXBlPTAsIHN0YXJ0Q29sb3JzdHI9JyNmNGY0ZjQnLCBlbmRDb2xvcnN0cj0nI2VjZWNlYycpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2Y0ZjRmNCksIHRvKCNlY2VjZWMpKTsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmNGY0ZjQsICNlY2VjZWMpOwoKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi53ZWJraXQgI2dvbGx1bS1lZGl0b3IgaW5wdXQjZ29sbHVtLWVkaXRvci1zdWJtaXQgewogIHBhZGRpbmc6IDAuNWVtIDFlbSAwLjQ1ZW07Cn0KCi5pZSAjZ29sbHVtLWVkaXRvciBpbnB1dCNnb2xsdW0tZWRpdG9yLXN1Ym1pdCB7CiAgcGFkZGluZzogMC40ZW0gMWVtIDAuNWVtOwp9CgojZ29sbHVtLWVkaXRvciBpbnB1dCNnb2xsdW0tZWRpdG9yLXN1Ym1pdDpob3ZlciB7CiAgYmFja2dyb3VuZDogIzMwNzJiMzsKICBib3JkZXItY29sb3I6ICM1MThjYzYgIzUxOGNjNiAjMmE2NWEwOwogIGNvbG9yOiAjZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwoKICBmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KEdyYWRpZW50VHlwZT0wLCBzdGFydENvbG9yc3RyPScjNTk5YmRjJywgZW5kQ29sb3JzdHI9JyMzMDcyYjMnKTsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCM1OTliZGMpLCB0bygjMzA3MmIzKSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNTk5YmRjLCAjMzA3MmIzKTsKfQoKI2dvbGx1bS1lZGl0b3IgLmNvbGxhcHNlZCwKI2dvbGx1bS1lZGl0b3IgLmV4cGFuZGVkIHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKICBkaXNwbGF5OiBibG9jazsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDFlbSAwIDAuNWVtOwp9CgojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1ib2R5ICsgLmNvbGxhcHNlZCwKI2dvbGx1bS1lZGl0b3IgI2dvbGx1bS1lZGl0b3ItYm9keSArIC5leHBhbmRlZCB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CiAgbWFyZ2luLXRvcDogMC43ZW07Cn0KCiNnb2xsdW0tZWRpdG9yIC5jb2xsYXBzZWQgYS5idXR0b24sCiNnb2xsdW0tZWRpdG9yIC5leHBhbmRlZCBhLmJ1dHRvbiB7CiAgYmFja2dyb3VuZDogI2Y3ZjdmNzsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIGNvbG9yOiAjMzMzOwogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0OwogIGhlaWdodDogMjVweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIG1hcmdpbjogMC4yZW0gMC41ZW0gMC43NWVtIDA7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjsKICB3aWR0aDogMjVweDsKICAKICBib3JkZXItcmFkaXVzOiAwLjNlbTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMC4zZW07CiAgCiAgZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCwgc3RhcnRDb2xvcnN0cj0nI2Y0ZjRmNCcsIGVuZENvbG9yc3RyPScjZWNlY2VjJyk7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZjRmNGY0KSwgdG8oI2VjZWNlYykpOwogIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y0ZjRmNCwgI2VjZWNlYyk7Cn0KCiNnb2xsdW0tZWRpdG9yIC5jb2xsYXBzZWQgaDQsCiNnb2xsdW0tZWRpdG9yIC5leHBhbmRlZCBoNCB7CiAgZm9udC1zaXplOiAxLjZlbTsKICBmbG9hdDogbGVmdDsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMC40ZW0gMCAwIDAuM2VtOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCAjZmZmOwp9CgojZ29sbHVtLWVkaXRvciAuY29sbGFwc2VkIGEuYnV0dG9uOmhvdmVyLAojZ29sbHVtLWVkaXRvciAuZXhwYW5kZWQgaDQgYS5idXR0b246aG92ZXIgewogIGNvbG9yOiAjZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIAogIGZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoR3JhZGllbnRUeXBlPTAsIHN0YXJ0Q29sb3JzdHI9JyM1OTliZGMnLCBlbmRDb2xvcnN0cj0nIzMwNzJiMycpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIzU5OWJkYyksIHRvKCMzMDcyYjMpKTsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICM1OTliZGMsICMzMDcyYjMpOwp9CgojZ29sbHVtLWVkaXRvciAuY29sbGFwc2VkIGEgc3BhbiwKI2dvbGx1bS1lZGl0b3IgLmV4cGFuZGVkIGEgc3BhbiB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29uLXNwcml0ZS5wbmcpOwogIGJhY2tncm91bmQtcG9zaXRpb246IC0zNTFweCAtMXB4OwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgdGV4dC1pbmRlbnQ6IC01MDAwcHg7CiAgd2lkdGg6IDI1cHg7Cn0KCiNnb2xsdW0tZWRpdG9yIC5jb2xsYXBzZWQgYTpob3ZlciBzcGFuIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzUxcHggLTI4cHg7Cn0KCiNnb2xsdW0tZWRpdG9yIC5leHBhbmRlZCBhIHNwYW4gewogIGJhY2tncm91bmQtcG9zaXRpb246IC0zNzhweCAwOwp9CgojZ29sbHVtLWVkaXRvciAuZXhwYW5kZWQgYTpob3ZlciBzcGFuIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzc4cHggLTI4cHg7Cn0KCiNnb2xsdW0tZWRpdG9yIC5jb2xsYXBzZWQgdGV4dGFyZWEgewogIGRpc3BsYXk6IG5vbmU7Cn0KCiNnb2xsdW0tZWRpdG9yIC5leHBhbmRlZCB0ZXh0YXJlYSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIGNsZWFyOiBib3RoOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMS4zZW07CiAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgaGVpZ2h0OiA3ZW07CiAgbGluZS1oZWlnaHQ6IDEuOGVtOwogIG1hcmdpbjogMC43ZW0gMDsKICBwYWRkaW5nOiAwLjVlbTsKICB3aWR0aDogOTglOwp9CgovKiBAY29udHJvbCBtaW5pYnV0dG9uICovCgojZ29sbHVtLWVkaXRvciBhLm1pbmlidXR0b24sCiNnb2xsdW0tZWRpdG9yIGEubWluaWJ1dHRvbjp2aXNpdGVkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgY29sb3I6ICMzMzM7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbjogMCAwIDAgMC44ZW07CiAgcGFkZGluZzogMC41ZW0gMWVtOwoKICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmOwoKICBmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KEdyYWRpZW50VHlwZT0wLCBzdGFydENvbG9yc3RyPScjZjRmNGY0JywgZW5kQ29sb3JzdHI9JyNlY2VjZWMnKTsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNmNGY0ZjQpLCB0bygjZWNlY2VjKSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZjRmNGY0LCAjZWNlY2VjKTsKCiAgYm9yZGVyLXJhZGl1czogM3B4OwogIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4Owp9CgojZ29sbHVtLWVkaXRvciBhLm1pbmlidXR0b246aG92ZXIgewogIGJhY2tncm91bmQ6ICMzMDcyYjM7CiAgYm9yZGVyLWNvbG9yOiAjNTE4Y2M2ICM1MThjYzYgIzJhNjVhMDsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjMpOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKCiAgZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCwgc3RhcnRDb2xvcnN0cj0nIzU5OWJkYycsIGVuZENvbG9yc3RyPScjMzA3MmIzJyk7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjNTk5YmRjKSwgdG8oIzMwNzJiMykpOwogIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzU5OWJkYywgIzMwNzJiMyk7Cn0KCgojZ29sbHVtLWVkaXRvciAjZ29sbHVtLWVkaXRvci1wcmV2aWV3IHsKICBmbG9hdDogbGVmdDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIHBhZGRpbmc6IGxlZnQ7Cn0KCgovKiBAc2VjdGlvbiBoZWxwICovCiNnb2xsdW0tZWRpdG9yLWhlbHAgewogIG1hcmdpbjogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDA7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICBib3JkZXItd2lkdGg6IDAgMXB4IDFweCAxcHg7Cn0KCiAgI2dvbGx1bS1lZGl0b3ItaGVscC1wYXJlbnQsCiAgI2dvbGx1bS1lZGl0b3ItaGVscC1saXN0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE3ZW07CiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDFlbSAwOwogICAgd2lkdGg6IDE4JTsKICB9CiAgCiAgI2dvbGx1bS1lZGl0b3ItaGVscC1wYXJlbnQgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2VlZTsKICB9CiAgCiAgI2dvbGx1bS1lZGl0b3ItaGVscC1saXN0IHsKICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZWVlOwogIH0KICAKICAjZ29sbHVtLWVkaXRvci1oZWxwLXBhcmVudCBsaSwKICAjZ29sbHVtLWVkaXRvci1oZWxwLWxpc3QgbGkgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgfQogICAgCiAgICAjZ29sbHVtLWVkaXRvci1oZWxwLXBhcmVudCBsaSBhLAogICAgI2dvbGx1bS1lZGl0b3ItaGVscC1saXN0IGxpIGEgewogICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBoZWlnaHQ6IDEwJTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIHBhZGRpbmc6IDAuMmVtIDFlbTsKICAgICAgdGV4dC1zaGFkb3c6IDAgLTFweCAwICNmZmY7CiAgICB9CiAgICAKICAgICNnb2xsdW0tZWRpdG9yLWhlbHAtcGFyZW50IGxpIGE6aG92ZXIsCiAgICAjZ29sbHVtLWVkaXRvci1oZWxwLWxpc3QgbGkgYTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIGJvcmRlci1jb2xvcjogI2YwZjBmMDsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAKICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgIH0KICAgIAogICAgI2dvbGx1bS1lZGl0b3ItaGVscC1wYXJlbnQgbGkgYS5zZWxlY3RlZCwKICAgICNnb2xsdW0tZWRpdG9yLWhlbHAtbGlzdCBsaSBhLnNlbGVjdGVkIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2U3ZTdlNzsKICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgY29sb3I6ICMwMDA7CiAgICAgIAogICAgICBib3gtc2hhZG93OiAwIDFweCAycHggI2YwZjBmMDsKICAgIH0KICAgIAogICNnb2xsdW0tZWRpdG9yLWhlbHAtd3JhcHBlciB7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBoZWlnaHQ6IDE3ZW07CiAgICBwYWRkaW5nOiAxZW07CiAgfQogIAogICAgI2dvbGx1bS1lZGl0b3ItaGVscC1jb250ZW50IHsKICAgICAgZm9udC1zaXplOiAxLjJlbTsKICAgICAgbWFyZ2luOiAwIDFlbSAwIDAuNWVtOwogICAgICBwYWRkaW5nOiAwOwogICAgICBsaW5lLWhlaWdodDogMS44ZW07CiAgICB9CiAgICAKICAgICNnb2xsdW0tZWRpdG9yLWhlbHAtY29udGVudCBwIHsKICAgICAgbWFyZ2luOiAwIDAgMWVtIDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAKLyogSUUgKi8KLmllICNnb2xsdW0tZWRpdG9yIC5zaW5nbGVsaW5lIGlucHV0IHsKICBwYWRkaW5nLXRvcDogMC4yNWVtOwogIHBhZGRpbmctYm90dG9tOiAwLjc1ZW07Cn0K