Ci8qIQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBcZmlsZSBtYl9hY2Nlc3MuaAogKgogKiBcYnJpZWYKICogICAgRnVuY3Rpb25zIGZvciBtYWNyb2Jsb2NrIG5laWdoYm9yaG9vZHMKICoKICogXGF1dGhvcgogKiAgICAgTWFpbiBjb250cmlidXRvcnMgKHNlZSBjb250cmlidXRvcnMuaCBmb3IgY29weXJpZ2h0LCBhZGRyZXNzIGFuZCBhZmZpbGlhdGlvbiBkZXRhaWxzKQogKiAgICAgLSBLYXJzdGVuIFP8aHJpbmcgICAgICAgICAgPHN1ZWhyaW5nQGhoaS5kZT4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgojaWZuZGVmIF9NQl9BQ0NFU1NfSF8KI2RlZmluZSBfTUJfQUNDRVNTX0hfCgp2b2lkIENoZWNrQXZhaWxhYmlsaXR5T2ZOZWlnaGJvcnModm9pZCk7CgovL3ZvaWQgZ2V0TmVpZ2hib3VyKGludCBjdXJyX21iX25yLCBpbnQgeE4sIGludCB5TiwgaW50IGx1bWEsIFBpeGVsUG9zICpwaXgpOwp2b2lkICgqZ2V0TmVpZ2hib3VyKSh1bnNpZ25lZCBpbnQgY3Vycl9tYl9uciwgaW50IHhOLCBpbnQgeU4sIGludCBpc19jaHJvbWEsIFBpeGVsUG9zICpwaXgpOwp2b2lkIGdldEFmZk5laWdoYm91cih1bnNpZ25lZCBpbnQgY3Vycl9tYl9uciwgaW50IHhOLCBpbnQgeU4sIGludCBpc19jaHJvbWEsIFBpeGVsUG9zICpwaXgpOwp2b2lkIGdldE5vbkFmZk5laWdoYm91cih1bnNpZ25lZCBpbnQgY3Vycl9tYl9uciwgaW50IHhOLCBpbnQgeU4sIGludCBpc19jaHJvbWEsIFBpeGVsUG9zICpwaXgpOwoKdm9pZCBnZXRMdW1hNHg0TmVpZ2hib3VyIChpbnQgY3Vycl9tYl9uciwgaW50IGJsb2NrX3gsIGludCBibG9ja195LCBQaXhlbFBvcyAqcGl4KTsKdm9pZCBnZXRDaHJvbWE0eDROZWlnaGJvdXIgKGludCBjdXJyX21iX25yLCBpbnQgYmxvY2tfeCwgaW50IGJsb2NrX3ksIFBpeGVsUG9zICpwaXgpOwoKaW50ICBtYl9pc19hdmFpbGFibGUoaW50IG1iQWRkciwgaW50IGN1cnJNYkFkZHIpOwp2b2lkIGdldF9tYl9wb3MgKGludCBtYl9hZGRyLCBpbnQgKngsIGludCp5LCBpbnQgaXNfY2hyb21hKTsKdm9pZCAoKmdldF9tYl9ibG9ja19wb3MpIChpbnQgbWJfYWRkciwgaW50ICp4LCBpbnQqeSk7CnZvaWQgZ2V0X21iX2Jsb2NrX3Bvc19ub3JtYWwgKGludCBtYl9hZGRyLCBpbnQgKngsIGludCp5KTsKdm9pZCBnZXRfbWJfYmxvY2tfcG9zX21iYWZmIChpbnQgbWJfYWRkciwgaW50ICp4LCBpbnQqeSk7CgoKCiNlbmRpZgo=