LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkRhdG90ZWthIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZPIC4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdGVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlV2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZJenZvemkgcmVnaXN0cnNrbyBkYXRvdGVrbyAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUCZvdmWeaSBzZSB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiUCZyZWtpbmkgcG92ZXphdm8geiBvbXJlnm5pbSByZWdpc3Ryb20gLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk5hJnRpc25pXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJeiZob2QiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJlVyZWphbmplIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlNwcmVtZW5pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm92YSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJktsanXoIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImTml6IiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFybmEgdnJlZG5vc3QiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQgdnJlZG5vc3QiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6YnJpJpppXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQcmVpJm1lbnVqXHRGMiIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvcGlyYWogaW1lIGtsanXoYSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZOYWpkaVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJQb2dsJmVkIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlZyc3RpY2Egc3RhbmphIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZEZWxpbG5hIOhydGEiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPc3ZlnmlcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImUHJpbGp1YmxqZW5lIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkRvZGFqIG1lZCBQcmlsanVibGplbmUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImT2RzdHJhbmkgaXogUHJpbGp1YmxqZW5paCIsICAgICAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgICAgICAsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJlBvbW/oIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlRlbWUgcG9tb+hpIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPIFVyZWpldmFsbmlrdSByZWdpc3RyYSIsICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKCi8qCiAqIERpYWxvZwogKi8KCklERF9BQk9VVEJPWCBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjMwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVhY3RPU292IFVyZWpldmFsbmlrIHJlZ2lzdHJhLCB2ZXJ6aWphIDEuMCIsSURDX1NUQVRJQyw0OSwxMCwxMTksOCwKICAgICAgICAgICAgICAgICAgICBTU19OT1BSRUZJWAogICAgTFRFWFQgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDIgZWtpcGEgUmVhY3RPUyIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJWIHJlZHUiLElET0ssMTk1LDYsMzAsMTEsV1NfR1JPVVAKRU5ECgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIkltZSIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICJWcnN0YSIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICJQb2RhdGtpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAiVXJlamV2YWxuaWsgcmVnaXN0cmEiCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAiVWthemkgemEgZGVsbyBzIGNlbG90bmltIHJlZ2lzdHJvbSIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICJVa2F6aSB6YSB1cmVqYW5qZSB2cmVkbm9zdGkgaW4ga2xqdehldiIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICJVa2F6aSB6YSBwcmlsYWdhamFuamUgcmVnaXN0cnNrZWdhIG9rbmEiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAiVWthemkgemEgZG9zdG9wIGRvIG5lZGF2bm8gb2RwcnRpaCBrbGp16GV2IgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIlVrYXppIHphIHByaWthem92YW5qZSBwb21v6GkgaW4gaW5mb3JtYWNpaiBvIHByb2dyYW11IgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIlVrYXppIHphIHVzdHZhcmphbmplIG5vdmloIGtsanXoZXYgaW4gdnJlZG5vc3RpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiU3ByZW1lbmkgcG9kYXRrZSB2cmVkbm9zdGkiCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiRG9kYSBub3Yga2xqdegiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiRG9kYSBub3Ygbml6IgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIkRvZGEgbm92byBiaW5hcm5vIHZyZWRub3N0IgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIkRvZGEgbm92byBEV09SRCB2cmVkbm9zdCIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiViByZWdpc3RlciB1dm96aSBkYXRvdGVrbyB6IGJlc2VkaWxvbSIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZ2lzdHJza28gZGF0b3Rla28gYWxpIG5qZW4gZGVsIGl6dm96aSB2IGJlc2VkaWxubyBkYXRvdGVrbyIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWenBvc3RhdmkgcG92ZXphdm8geiByZWdpc3Ryb20gb2RkYWxqZW5lZ2EgcmHodW5hbG5pa2EiCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJla2luZSBwb3ZlemF2byB6IHJlZ2lzdHJvbSBvZGRhbGplbmVnYSByYeh1bmFsbmlrYSIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICJOYXRpc25lIHJlZ2lzdHJza28gZGF0b3Rla28gYWxpIG5qZW4gZGVsIgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT2RwcmUgcG9tb0MiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiSW5mb3JtYWNpamUgbyBwcm9ncmFtdSwgmnRldmlsa2kgcmF6bGnoaWNlIGluIGF2dG9yc2tpaCBwcmF2aWNhaCIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfRVhJVCAgICAgICAgIktvbuhhIHByb2dyYW0iCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIkRvZGEga2xqdeggbWVkIFByaWxqdWJsamVuZSIKICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURSAiT2RzdHJhbmkga2xqdeggaXogUHJpbGp1YmxqZW5paCIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICJQcmlrYZ5lIGFsaSBza3JpamUgdnJzdGljbyBzdGFuamEiCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiU3ByZW1lbmkgcG9sb55haiBtZWQgZGVsaWxuZSDocnRlIG1lZCBwb2Rva25pIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIk9zdmWeaSBva25vIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgIkl6YnJpmmUgaXpib3IiCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAiUHJlaW1lbnVqZSBpemJvciIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICJQcmVrb3BpcmEgaW1lIGl6YnJhbmVnYSBrbGp16GEgdiBvZGxvnmma6GUiCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAiSZroZSBuaXogdiBrbGp16HUsIHZyZWRub3N0aSBhbGkgcG9kYXRraWgiCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiSZroZSBuYXNsZWRuam8gcG9ub3ZpdGV2IGlza2FuZWdhIGJlc2VkaWxhIgpFTkQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKgogKiBEaWFsb2cKICovCgpJRERfRElBTE9HMSBESUFMT0cgRElTQ0FSREFCTEUgIDUwLCA1MCwgMjY4LCA5OApTVFlMRSBEU18zRExPT0sgfCBEU19DT05UUk9MIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwKICAgIFdTX0JPUkRFUgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCkVORAoKSUREX0RJQUxPRzIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxODcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRpYWxvZyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgREVGUFVTSEJVVFRPTiAgICJWIHJlZHUiLElET0ssMTMwLDcsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiUHJla2xp6GkiLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9kcHJlIHBvbW/oLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkluZm9ybWFjaWplIG8gcHJvZ3JhbXUsIJp0ZXZpbGtpIHJhemxp6GljZSBpbiBhdnRvcnNraWggcHJhdmljYWguIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K