LyoKICogIFRFU1QgU1VJVEUgRk9SIE1CL1dDIEZVTkNUSU9OUyBJTiBDIExJQlJBUlkKICoKICoJIEZJTEU6CWRhdF93Y3J0b21iLmMKICoKICoJIFdDUlRPTUI6ICBpbnR3Y3J0b21iIChjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKTsKICoKICovCgpUU1RfV0NSVE9NQiB0c3Rfd2NydG9tYl9sb2MgW10gPSB7CiAgewogICAgeyBUd2NydG9tYiwgVFNUX0xPQ19kZSB9LAogICAgewogICAgICAvKiAjMDEgOiBub3JtYWwgY2FzZQkJCSAgICAgICAqLwogICAgICB7IC8qaW5wdXQuKi8geyAxLAkJIDB4MDBGQywgICAwLDAgfSwKCS8qZXhwZWN0Ki8geyAwLAkgICAxLDEsCSAi/CIJICAgICAgIH0sCiAgICAgIH0sCiAgICAgIC8qICMwMiA6IG5vcm1hbCBjYXNlCQkJICAgICAgICovCiAgICAgIHsgLyppbnB1dC4qLyB7IDEsCQkgMHgwMEQ2LCAgIDAsMCB9LAoJLypleHBlY3QqLyB7IDAsCSAgIDEsMSwJICLWIgkgICAgICAgfSwKICAgICAgfSwKICAgICAgLyogIzAzIDogZXJyb3IgY2FzZQkJCSAgICAgICAqLwogICAgICB7IC8qaW5wdXQuKi8geyAxLAkJIDB4RkZBMSwgICAwLDAgfSwKCS8qZXhwZWN0Ki8geyAgRUlMU0VRLDEsLTEsICIiCSAgICAgICB9LAogICAgICB9LAogICAgICAvKiAjMDQgOgkJCQkgICAgICAgKi8KICAgICAgeyAvKmlucHV0LiovIHsgMCwJCSAweDAwNDEsICAgMCwwIH0sCgkvKmV4cGVjdCovIHsgMCwJICAgMSwxLAkgIiIJICAgICAgIH0sCiAgICAgIH0sCiAgICAgIC8qICMwNSA6CQkJCSAgICAgICAqLwogICAgICB7IC8qaW5wdXQuKi8geyAwLAkJIDB4MDA5MiwgICAwLDAgfSwKCS8qZXhwZWN0Ki8geyAwLAkgICAxLDEsCSAiIgkgICAgICAgfSwKICAgICAgfSwKICAgICAgeyAuaXNfbGFzdCA9IDEgfQogICAgfQogIH0sCiAgewogICAgeyBUd2NydG9tYiwgVFNUX0xPQ19lblVTIH0sCiAgICB7CiAgICAgIC8qICMwMSA6IG5vcm1hbCBjYXNlCQkJICAgICAgICovCiAgICAgIHsgLyppbnB1dC4qLyB7IDEsCQkgMHgwMDQxLCAgIDAsMCB9LAoJLypleHBlY3QqLyB7IDAsCSAgIDEsMSwJICJBIgkgICAgICAgfSwKICAgICAgfSwKICAgICAgLyogIzAyIDogbm9ybWFsIGNhc2UJCQkgICAgICAgKi8KICAgICAgeyAvKmlucHV0LiovIHsgMSwJCSAweDAwNDIsICAgMCwwIH0sCgkvKmV4cGVjdCovIHsgMCwJICAgMSwxLAkgIkIiCSAgICAgICB9LAogICAgICB9LAogICAgICAvKiAjMDMgOiBlcnJvciBjYXNlCQkJICAgICAgICovCiAgICAgIC8qIDxXQUlWRVI+IHggMiAqLwogICAgICB7IC8qaW5wdXQuKi8geyAxLAkJIDB4MDA5MiwgICAwLDAgfSwgIC8qIGFzc3VtZSBhc2NpaSAqLwoJLypleHBlY3QqLyB7ICBFSUxTRVEsMSwtMSwgIiIJICAgICAgIH0sCiAgICAgIH0sCiAgICAgIC8qICMwNCA6CQkJCSAgICAgICAqLwogICAgICB7IC8qaW5wdXQuKi8geyAwLAkJIDB4MDA0MSwgICAwLDAgfSwKCS8qZXhwZWN0Ki8geyAwLAkgICAxLDEsCSAiIgkgICAgICAgfSwKICAgICAgfSwKICAgICAgLyogIzA1IDoJCQkJICAgICAgICovCiAgICAgIHsgLyppbnB1dC4qLyB7IDAsCQkgMHgwMDkyLCAgIDAsMCB9LAoJLypleHBlY3QqLyB7IDAsCSAgIDEsMSwJICIiCSAgICAgICB9LAogICAgICB9LAogICAgICB7IC5pc19sYXN0ID0gMSB9CiAgICB9CiAgfSwKICB7CiAgICB7IFR3Y3J0b21iLCBUU1RfTE9DX2V1Y0pQIH0sCiAgICB7CiAgICAgIC8qICMwMSA6IG5vcm1hbCBjYXNlCQkJICAgICAgICovCiAgICAgIHsgLyppbnB1dC4qLyB7IDEsCQkgMHgzMDQyLCAgIDAsMCB9LAoJLypleHBlY3QqLyB7IDAsICAgICAgMSwyLCAgIlwyNDRcMjQyIgkgICB9LAogICAgICB9LAogICAgICAvKiAjMDIgOiBub3JtYWwgY2FzZQkJCSAgICAgICAqLwogICAgICB7IC8qaW5wdXQuKi8geyAxLAkJIDB4MzA0NCwgICAwLDAgfSwKCS8qZXhwZWN0Ki8geyAwLCAgICAgIDEsMiwgICJcMjQ0XDI0NCIJICAgfSwKICAgICAgfSwKICAgICAgLyogIzAzIDogbm9ybWFsIGNhc2UJCQkgICAgICAgKi8KICAgICAgeyAvKmlucHV0LiovIHsgMSwJCSAweDAwOEUsICAgMCwwIH0sCgkvKmV4cGVjdCovIHsgRUlMU0VRLCAxLC0xLCAiIgkgICAgICAgfSwKICAgICAgfSwKICAgICAgLyogIzA0IDoJCQkJICAgICAgICovCiAgICAgIHsgLyppbnB1dC4qLyB7IDAsCQkgMHgzMDQyLCAgIDAsMCB9LAoJLypleHBlY3QqLyB7IDAsCSAgIDAsMCwJICIiCSAgICAgICB9LAogICAgICB9LAogICAgICAvKiAjMDUgOgkJCQkgICAgICAgKi8KICAgICAgeyAvKmlucHV0LiovIHsgMCwJCSAweDAwOEUsICAgMCwwIH0sCgkvKmV4cGVjdCovIHsgMCwJICAgMCwwLAkgIiIJICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLmlzX2xhc3QgPSAxIH0KICAgIH0KICB9LAogIHsKICAgIHsgVHdjcnRvbWIsIFRTVF9MT0NfZW5kIH0KICB9Cn07Cg==