-- 检查 BOM 头，以及是否有非常用字

local common_char_ = { 0xa4, 0xa7, 0x5e, 0x3b1, 0x3c3, 29,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,168,176,180,182,183,184,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,215,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,249,250,251,252,253,255,305,338,339,352,353,376,381,382,710,711,728,729,730,732,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8209,8211,8212,8216,8217,8220,8221,8226,8230,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8364,8482,8943,12032,12033,12034,12035,12036,12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053,12055,12056,12057,12058,12059,12060,12061,12062,12063,12064,12065,12067,12068,12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084,12085,12086,12087,12088,12089,12090,12091,12092,12093,12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116,12117,12118,12119,12120,12121,12122,12123,12124,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12135,12137,12138,12139,12140,12141,12142,12143,12144,12146,12147,12148,12149,12150,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12161,12162,12163,12164,12165,12166,12167,12168,12169,12170,12172,12173,12174,12175,12176,12179,12180,12181,12182,12183,12184,12186,12187,12188,12189,12190,12191,12192,12194,12195,12197,12198,12201,12202,12203,12204,12206,12207,12208,12210,12211,12213,12214,12215,12216,12217,12219,12220,12221,12222,12223,12224,12225,12229,12230,12231,12233,12234,12235,12237,12238,12239,12240,12243,12245,12288,12289,12290,12293,12295,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,12310,12311,12398,12539,19968,19969,19971,19975,19976,19977,19978,19979,19980,19981,19982,19984,19985,19987,19988,19989,19990,19992,19993,19994,19995,19996,19997,19998,20002,20004,20005,20007,20008,20010,20011,20012,20013,20016,20018,20020,20022,20024,20025,20026,20027,20029,20030,20031,20035,20037,20039,20040,20041,20043,20044,20045,20046,20047,20048,20050,20051,20052,20054,20056,20057,20060,20061,20062,20063,20064,20065,20070,20073,20080,20081,20083,20094,20102,20104,20105,20107,20108,20109,20110,20111,20113,20114,20115,20116,20117,20120,20122,20123,20127,20128,20129,20130,20132,20133,20134,20135,20136,20137,20139,20140,20141,20142,20146,20147,20149,20154,20155,20159,20160,20161,20162,20163,20164,20165,20166,20167,20169,20170,20171,20173,20174,20177,20179,20180,20181,20182,20183,20184,20185,20189,20190,20191,20193,20195,20196,20197,20200,20202,20203,20204,20206,20208,20210,20211,20213,20214,20215,20219,20221,20223,20225,20233,20234,20237,20238,20239,20240,20241,20247,20248,20249,20250,20251,20254,20255,20256,20258,20260,20261,20262,20263,20266,20267,20271,20272,20274,20276,20278,20280,20282,20284,20285,20291,20294,20301,20302,20303,20304,20305,20307,20309,20311,20312,20313,20314,20315,20316,20317,20318,20319,20320,20323,20324,20325,20327,20329,20332,20335,20336,20339,20340,20342,20347,20348,20350,20351,20355,20356,20360,20361,20363,20365,20367,20369,20372,20375,20379,20381,20384,20387,20389,20390,20391,20392,20393,20394,20396,20398,20399,20405,20415,20419,20420,20421,20426,20430,20431,20432,20433,20439,20440,20442,20444,20445,20446,20447,20449,20451,20454,20456,20457,20458,20461,20462,20463,20465,20467,20472,20474,20478,20492,20493,20495,20498,20500,20504,20505,20506,20508,20511,20513,20517,20518,20520,20521,20522,20524,20525,20526,20538,20540,20542,20547,20551,20552,20556,20558,20559,20565,20570,20572,20581,20588,20598,20599,20603,20606,20607,20608,20613,20616,20621,20625,20643,20645,20647,20648,20649,20652,20658,20666,20667,20687,20694,20698,20710,20711,20716,20717,20718,20723,20725,20731,20740,20742,20743,20747,20754,20769,20799,20800,20801,20803,20804,20805,20806,20808,20809,20811,20813,20816,20817,20818,20820,20821,20822,20826,20828,20834,20837,20840,20843,20844,20845,20846,20848,20849,20850,20851,20852,20853,20854,20855,20856,20857,20859,20860,20861,20864,20865,20866,20869,20872,20873,20876,20877,20882,20885,20886,20887,20889,20891,20892,20896,20898,20900,20901,20907,20908,20911,20912,20913,20914,20915,20917,20918,20919,20923,20924,20925,20928,20932,20934,20935,20937,20939,20940,20943,20945,20955,20957,20960,20961,20964,20971,20973,20975,20976,20979,20981,20982,20984,20985,20986,20987,20988,20989,20991,20992,20993,20994,20995,20998,20999,21000,21002,21005,21006,21009,21010,21014,21015,21016,21017,21018,21019,21021,21024,21028,21032,21033,21035,21037,21038,21040,21043,21046,21047,21048,21049,21050,21051,21053,21055,21056,21057,21058,21059,21066,21067,21068,21069,21072,21073,21076,21078,21084,21086,21089,21093,21095,21097,21098,21103,21106,21117,21119,21121,21122,21128,21136,21139,21147,21149,21150,21151,21152,21153,21154,21155,21160,21161,21162,21163,21164,21165,21169,21170,21171,21182,21183,21187,21191,21193,21195,21200,21202,21206,21208,21215,21220,21232,21241,21242,21246,21247,21248,21253,21254,21256,21261,21263,21264,21269,21270,21271,21273,21274,21277,21280,21281,21283,21286,21290,21294,21305,21306,21307,21310,21311,21313,21315,21317,21319,21320,21321,21322,21325,21326,21327,21329,21330,21331,21333,21334,21335,21338,21340,21342,21343,21344,21345,21346,21347,21348,21350,21351,21353,21355,21358,21359,21360,21361,21363,21364,21365,21367,21368,21370,21375,21378,21380,21381,21382,21385,21387,21388,21389,21397,21400,21402,21405,21407,21410,21411,21413,21414,21416,21417,21422,21430,21435,21439,21441,21442,21448,21449,21450,21451,21452,21453,21457,21460,21462,21463,21464,21465,21467,21471,21472,21475,21476,21477,21478,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21493,21494,21495,21496,21497,21499,21500,21501,21505,21507,21508,21510,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21522,21523,21525,21526,21527,21531,21533,21534,21535,21536,21537,21539,21542,21543,21544,21545,21547,21548,21549,21550,21551,21553,21554,21556,21557,21560,21561,21563,21564,21566,21568,21571,21574,21576,21578,21579,21582,21584,21586,21587,21588,21589,21590,21591,21592,21593,21595,21596,21602,21604,21606,21608,21615,21617,21618,21619,21621,21622,21623,21624,21627,21628,21629,21632,21634,21636,21638,21643,21644,21646,21647,21648,21650,21652,21653,21654,21657,21658,21659,21661,21667,21668,21670,21671,21672,21673,21674,21675,21676,21677,21679,21681,21683,21684,21688,21691,21693,21695,21696,21697,21698,21700,21702,21703,21704,21705,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21719,21721,21722,21724,21725,21726,21727,21733,21734,21735,21736,21737,21738,21741,21742,21746,21747,21754,21756,21757,21759,21761,21766,21767,21769,21775,21776,21777,21780,21787,21792,21794,21795,21796,21799,21802,21804,21806,21807,21808,21809,21811,21815,21820,21822,21823,21825,21827,21828,21830,21833,21834,21840,21845,21846,21852,21857,21860,21861,21862,21863,21866,21867,21868,21869,21870,21872,21877,21878,21879,21880,21883,21884,21886,21888,21889,21890,21891,21892,21894,21895,21896,21897,21898,21899,21903,21905,21908,21912,21913,21916,21917,21919,21927,21937,21939,21941,21943,21945,21947,21949,21950,21956,21957,21961,21964,21965,21969,21970,21971,21972,21974,21980,21981,21983,21985,21987,21988,21989,21990,21992,21994,21995,21996,21999,22002,22003,22005,22007,22013,22014,22016,22017,22024,22025,22028,22030,22031,22040,22043,22046,22047,22051,22052,22055,22060,22061,22065,22066,22068,22070,22073,22075,22079,22092,22093,22094,22100,22103,22104,22105,22108,22114,22116,22120,22121,22122,22123,22124,22129,22134,22139,22140,22149,22150,22158,22159,22163,22179,22191,22199,22204,22218,22228,22231,22234,22235,22237,22238,22239,22240,22241,22242,22244,22247,22251,22253,22256,22257,22260,22261,22265,22266,22269,22270,22271,22275,22276,22278,22280,22281,22282,22283,22294,22300,22303,22307,22312,22313,22314,22316,22317,22318,22319,22320,22323,22329,22330,22331,22334,22336,22338,22343,22346,22348,22349,22350,22351,22352,22353,22359,22362,22363,22364,22365,22366,22367,22368,22369,22372,22374,22376,22377,22378,22379,22381,22383,22387,22390,22391,22395,22396,22402,22403,22404,22405,22406,22411,22412,22418,22419,22427,22432,22433,22434,22435,22436,22438,22439,22441,22443,22445,22446,22450,22452,22456,22466,22467,22475,22478,22479,22482,22484,22485,22487,22488,22489,22490,22493,22495,22496,22500,22509,22511,22516,22520,22521,22522,22525,22528,22530,22534,22535,22539,22541,22545,22549,22553,22558,22560,22561,22564,22570,22576,22581,22596,22604,22605,22609,22612,22616,22622,22629,22635,22636,22654,22656,22657,22659,22661,22665,22674,22675,22681,22682,22686,22687,22696,22697,22716,22721,22725,22737,22741,22756,22763,22764,22766,22768,22770,22771,22774,22777,22786,22788,22791,22797,22799,22804,22805,22806,22809,22810,22812,22815,22816,22820,22821,22823,22825,22826,22827,22829,22830,22831,22833,22836,22839,22840,22841,22842,22844,22849,22850,22852,22855,22856,22857,22859,22862,22863,22865,22868,22869,22870,22871,22872,22874,22880,22882,22885,22899,22900,22902,22904,22905,22909,22913,22914,22915,22916,22918,22919,22920,22922,22925,22930,22931,22934,22935,22937,22942,22947,22948,22949,22952,22953,22954,22955,22958,22959,22962,22963,22969,22971,22974,22982,22986,22987,22992,22993,22994,22995,22996,22999,23000,23002,23004,23005,23011,23013,23016,23020,23033,23035,23039,23041,23043,23044,23045,23046,23047,23048,23049,23052,23057,23059,23064,23068,23071,23072,23075,23077,23081,23089,23090,23092,23094,23100,23104,23110,23113,23114,23125,23130,23138,23143,23146,23156,23157,23158,23159,23162,23167,23186,23194,23195,23210,23218,23219,23221,23224,23230,23233,23234,23241,23244,23249,23250,23252,23254,23256,23260,23264,23265,23267,23270,23273,23275,23281,23301,23305,23318,23319,23346,23348,23351,23360,23376,23377,23379,23380,23381,23383,23384,23385,23386,23387,23388,23389,23391,23394,23395,23396,23397,23398,23401,23402,23404,23408,23409,23411,23413,23418,23421,23424,23425,23427,23428,23429,23431,23432,23433,23435,23436,23439,23443,23445,23447,23448,23449,23450,23451,23452,23453,23454,23456,23457,23458,23459,23460,23461,23462,23466,23467,23472,23475,23476,23477,23478,23480,23481,23485,23486,23487,23490,23492,23493,23494,23495,23500,23504,23506,23507,23517,23518,23519,23521,23524,23525,23528,23534,23536,23544,23545,23546,23547,23548,23551,23553,23556,23558,23561,23562,23567,23569,23572,23573,23574,23576,23578,23580,23581,23586,23588,23589,23591,23596,23601,23604,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23618,23620,23621,23624,23625,23626,23627,23628,23630,23631,23632,23633,23637,23641,23646,23648,23649,23651,23653,23654,23662,23663,23665,23673,23674,23679,23681,23682,23688,23692,23693,23696,23697,23700,23702,23703,23704,23705,23706,23707,23708,23714,23715,23721,23723,23724,23725,23729,23731,23733,23735,23736,23741,23743,23745,23748,23755,23762,23769,23777,23780,23781,23782,23784,23786,23789,23792,23803,23810,23811,23814,23815,23822,23828,23830,23835,23838,23844,23846,23847,23849,23853,23854,23860,23869,23870,23879,23882,23883,23884,23896,23899,23901,23913,23915,23916,23919,23924,23938,23961,23965,23991,24005,24013,24027,24029,24030,24033,24034,24037,24038,24039,24040,24041,24043,24046,24047,24049,24050,24051,24052,24055,24061,24062,24065,24066,24067,24069,24070,24072,24076,24079,24080,24081,24084,24085,24086,24088,24089,24090,24091,24092,24093,24101,24102,24103,24109,24110,24113,24119,24120,24123,24124,24125,24130,24132,24133,24140,24148,24149,24155,24158,24161,24162,24178,24179,24180,24182,24184,24185,24186,24187,24188,24189,24190,24191,24192,24196,24198,24199,24202,24203,24207,24208,24209,24211,24212,24213,24214,24215,24217,24218,24220,24222,24223,24224,24229,24230,24231,24237,24243,24245,24246,24247,24248,24249,24254,24265,24266,24273,24274,24275,24278,24283,24296,24298,24308,24310,24311,24314,24318,24319,24320,24321,24322,24323,24324,24328,24330,24331,24335,24337,24339,24341,24343,24344,24347,24351,24352,24357,24358,24359,24361,24362,24365,24367,24369,24377,24378,24380,24384,24400,24402,24403,24405,24406,24407,24408,24413,24417,24418,24420,24422,24423,24425,24426,24428,24429,24432,24433,24435,24439,24441,24443,24444,24448,24449,24450,24452,24453,24455,24456,24457,24458,24459,24460,24464,24466,24469,24471,24472,24473,24476,24481,24488,24489,24490,24492,24493,24494,24501,24503,24508,24509,24515,24516,24517,24518,24521,24524,24525,24527,24528,24529,24530,24534,24535,24536,24537,24541,24544,24545,24548,24551,24554,24555,24557,24558,24561,24565,24568,24571,24573,24574,24575,24576,24577,24578,24579,24580,24581,24582,24586,24589,24590,24591,24594,24596,24597,24598,24601,24603,24604,24605,24608,24609,24613,24614,24615,24616,24617,24618,24619,24623,24629,24635,24636,24639,24641,24642,24643,24651,24653,24656,24658,24661,24665,24666,24669,24674,24675,24676,24679,24680,24681,24682,24683,24684,24685,24687,24688,24691,24694,24696,24697,24698,24699,24700,24701,24703,24707,24708,24713,24716,24717,24722,24724,24726,24730,24731,24733,24735,24736,24739,24742,24744,24747,24748,24749,24751,24753,24754,24756,24760,24763,24764,24773,24774,24775,24778,24779,24785,24789,24792,24794,24796,24797,24799,24800,24806,24807,24808,24809,24811,24812,24813,24814,24815,24816,24819,24820,24822,24825,24826,24832,24833,24838,24840,24841,24845,24846,24847,24853,24858,24859,24863,24864,24867,24868,24870,24871,24875,24895,24904,24906,24908,24910,24913,24917,24925,24930,24935,24936,24944,24949,24951,24971,24974,24980,24989,24999,25000,25001,25004,25015,25022,25026,25032,25034,25035,25041,25042,25044,25062,25077,25087,25088,25094,25096,25098,25099,25100,25101,25102,25103,25104,25105,25106,25109,25110,25111,25112,25114,25115,25119,25121,25122,25124,25125,25130,25132,25134,25139,25140,25143,25149,25150,25151,25152,25153,25155,25159,25160,25161,25163,25164,25165,25166,25169,25170,25171,25172,25176,25179,25187,25190,25191,25193,25194,25195,25196,25197,25198,25199,25200,25203,25206,25209,25212,25214,25215,25216,25220,25225,25226,25233,25234,25235,25237,25238,25239,25240,25242,25243,25247,25248,25249,25250,25252,25253,25256,25259,25260,25265,25269,25273,25275,25276,25277,25279,25282,25284,25285,25286,25287,25288,25289,25290,25292,25293,25294,25296,25298,25299,25300,25302,25303,25304,25305,25306,25307,25308,25311,25314,25315,25317,25318,25319,25320,25321,25324,25325,25326,25327,25329,25331,25332,25334,25335,25340,25341,25342,25343,25345,25346,25351,25352,25353,25358,25361,25366,25370,25371,25373,25374,25375,25376,25377,25378,25379,25380,25381,25384,25386,25387,25391,25394,25401,25402,25405,25410,25411,25413,25414,25417,25419,25420,25421,25422,25423,25424,25429,25438,25439,25441,25442,25443,25447,25449,25453,25454,25457,25462,25463,25466,25467,25472,25474,25479,25480,25481,25482,25484,25486,25487,25488,25490,25494,25496,25504,25506,25507,25509,25511,25512,25513,25514,25516,25517,25518,25520,25523,25524,25527,25528,25530,25532,25534,25540,25542,25545,25549,25550,25551,25552,25554,25558,25566,25568,25569,25571,25577,25578,25581,25586,25588,25590,25592,25597,25599,25600,25601,25602,25605,25611,25612,25615,25616,25619,25620,25627,25628,25630,25632,25633,25638,25642,25644,25645,25652,25658,25661,25663,25665,25668,25669,25670,25671,25672,25674,25682,25684,25688,25694,25703,25705,25709,25720,25721,25722,25730,25732,25733,25735,25745,25746,25749,25750,25753,25758,25764,25769,25772,25773,25774,25776,25781,25783,25784,25786,25788,25792,25794,25797,25805,25806,25808,25810,25815,25816,25822,25826,25828,25830,25856,25865,25874,25880,25893,25899,25902,25903,25908,25909,25910,25912,25913,25915,25918,25919,25925,25928,25929,25932,25935,25937,25941,25942,25945,25947,25949,25950,25954,25955,25958,25963,25964,25968,25970,25972,25975,25991,25995,25996,26000,26001,26003,26007,26009,26011,26012,26015,26017,26020,26021,26023,26025,26027,26029,26031,26032,26041,26044,26045,26049,26051,26052,26053,26054,26059,26060,26062,26063,26066,26070,26071,26080,26082,26085,26086,26087,26088,26089,26092,26093,26094,26095,26096,26097,26102,26103,26106,26112,26114,26115,26118,26122,26124,26126,26127,26131,26132,26133,26137,26141,26143,26144,26149,26151,26152,26157,26159,26161,26164,26165,26166,26172,26174,26177,26178,26179,26187,26188,26191,26194,26195,26196,26197,26198,26199,26202,26207,26209,26212,26214,26216,26222,26223,26224,26228,26230,26231,26234,26238,26242,26244,26247,26252,26257,26262,26263,26269,26279,26280,26286,26292,26297,26302,26329,26331,26332,26333,26342,26345,26352,26354,26355,26356,26359,26360,26361,26364,26366,26367,26368,26376,26377,26378,26379,26381,26384,26388,26389,26391,26395,26397,26399,26406,26408,26410,26411,26412,26413,26414,26415,26417,26420,26421,26426,26429,26432,26434,26435,26438,26440,26441,26444,26446,26447,26448,26449,26451,26454,26460,26462,26463,26464,26465,26469,26472,26473,26474,26477,26479,26480,26481,26482,26483,26485,26487,26492,26494,26495,26497,26500,26503,26505,26507,26512,26517,26519,26520,26522,26524,26525,26526,26530,26531,26533,26535,26536,26538,26539,26541,26543,26544,26547,26549,26550,26551,26552,26561,26563,26564,26575,26576,26577,26578,26579,26580,26584,26585,26586,26588,26589,26590,26592,26594,26597,26601,26604,26607,26608,26609,26611,26612,26621,26623,26624,26629,26631,26632,26633,26634,26635,26636,26638,26639,26641,26643,26646,26647,26653,26657,26665,26666,26674,26675,26679,26680,26681,26684,26685,26686,26688,26689,26690,26691,26692,26693,26694,26696,26697,26698,26700,26702,26704,26705,26707,26708,26709,26716,26720,26721,26722,26723,26724,26725,26726,26727,26728,26729,26731,26740,26742,26743,26753,26755,26757,26758,26767,26771,26775,26786,26790,26791,26792,26797,26799,26800,26803,26805,26816,26818,26825,26827,26829,26834,26837,26840,26842,26848,26851,26862,26864,26865,26869,26873,26874,26876,26881,26885,26891,26893,26894,26896,26898,26911,26912,26916,26925,26928,26932,26937,26941,26943,26946,26964,26967,26970,26973,26974,26976,26979,26982,26987,26990,26993,26997,26999,27000,27001,27004,27008,27010,27012,27014,27015,27016,27017,27021,27028,27029,27032,27035,27036,27047,27048,27051,27053,27057,27060,27063,27067,27073,27075,27082,27084,27086,27088,27089,27092,27099,27103,27104,27117,27122,27133,27135,27146,27159,27160,27167,27169,27176,27178,27183,27185,27189,27197,27198,27204,27207,27216,27224,27225,27227,27233,27237,27249,27257,27260,27264,27268,27278,27280,27281,27287,27296,27305,27307,27308,27424,27425,27426,27427,27428,27431,27442,27447,27449,27450,27454,27459,27462,27463,27465,27468,27481,27490,27491,27492,27493,27494,27495,27498,27513,27515,27516,27521,27522,27523,27524,27526,27527,27529,27530,27531,27533,27538,27539,27542,27546,27547,27553,27562,27571,27572,27573,27575,27583,27585,27586,27589,27595,27597,27599,27602,27603,27604,27605,27606,27607,27609,27611,27617,27626,27627,27631,27635,27637,27641,27645,27653,27654,27655,27661,27663,27664,27665,27667,27668,27669,27670,27672,27673,27674,27675,27679,27681,27682,27683,27684,27686,27687,27688,27689,27690,27694,27695,27696,27698,27700,27701,27703,27704,27709,27712,27713,27714,27718,27719,27721,27722,27728,27732,27733,27735,27739,27740,27741,27742,27743,27744,27745,27748,27752,27753,27754,27760,27762,27764,27766,27769,27773,27774,27777,27778,27779,27781,27782,27784,27785,27788,27791,27792,27795,27796,27801,27803,27807,27809,27811,27812,27813,27814,27815,27817,27818,27819,27821,27822,27825,27826,27827,27832,27833,27835,27836,27837,27838,27839,27844,27845,27849,27850,27852,27856,27859,27860,27861,27862,27863,27867,27870,27872,27873,27874,27875,27877,27880,27882,27883,27886,27887,27888,27889,27891,27893,27894,27895,27896,27898,27899,27900,27901,27902,27905,27908,27911,27915,27916,27918,27922,27927,27929,27930,27931,27934,27941,27943,27946,27947,27950,27953,27954,27955,27957,27961,27963,27964,27965,27966,27969,27971,27973,27974,27975,27976,27978,27979,27981,27982,27983,27985,27986,27987,27988,27993,27994,27996,27998,28000,28003,28006,28009,28010,28014,28015,28020,28023,28024,28028,28034,28037,28040,28041,28044,28046,28049,28051,28052,28053,28059,28061,28062,28063,28064,28065,28067,28068,28070,28071,28072,28073,28074,28075,28078,28079,28082,28085,28088,28095,28096,28100,28101,28102,28103,28107,28108,28113,28118,28120,28121,28125,28126,28128,28129,28132,28134,28139,28140,28142,28145,28147,28151,28153,28155,28156,28165,28170,28172,28173,28174,28176,28177,28180,28182,28183,28186,28189,28192,28193,28195,28196,28197,28201,28203,28205,28207,28210,28212,28216,28218,28227,28228,28237,28238,28243,28244,28246,28248,28251,28255,28267,28270,28286,28287,28291,28293,28294,28297,28303,28304,28310,28312,28316,28319,28322,28325,28327,28330,28335,28337,28338,28340,28342,28343,28346,28347,28349,28353,28354,28359,28363,28367,28369,28371,28372,28373,28375,28378,28382,28383,28384,28385,28386,28388,28389,28390,28392,28393,28404,28409,28418,28422,28425,28431,28435,28436,28437,28448,28450,28452,28457,28458,28459,28461,28463,28465,28467,28470,28478,28486,28487,28491,28493,28504,28508,28510,28514,28518,28525,28526,28530,28532,28536,28538,28540,28548,28552,28553,28556,28557,28558,28572,28577,28583,28595,28598,28601,28608,28610,28617,28625,28626,28638,28640,28641,28654,28655,28689,28698,28699,28707,28725,28729,28748,28751,28766,28779,28780,28781,28783,28784,28789,28790,28792,28796,28798,28799,28800,28805,28809,28810,28814,28818,28820,28821,28822,28825,28828,28829,28843,28844,28845,28846,28847,28849,28851,28855,28856,28857,28859,28860,28861,28864,28865,28866,28867,28872,28874,28888,28889,28891,28895,28900,28902,28903,28904,28905,28907,28908,28909,28911,28919,28921,28925,28937,28938,28944,28947,28949,28950,28951,28952,28953,28954,28966,28975,28976,28977,28982,28997,29002,29003,29004,29006,29020,29022,29028,29030,29031,29032,29038,29042,29043,29048,29050,29053,29060,29066,29071,29076,29080,29081,29087,29088,29096,29100,29107,29109,29113,29123,29134,29140,29141,29152,29157,29159,29166,29177,29190,29213,29224,29226,29228,29232,29233,29234,29237,29238,29239,29240,29241,29243,29245,29247,29255,29256,29260,29261,29266,29270,29273,29275,29277,29279,29280,29281,29282,29286,29287,29289,29294,29295,29298,29301,29305,29306,29310,29311,29312,29313,29316,29322,29323,29325,29327,29330,29343,29356,29357,29359,29360,29364,29366,29367,29368,29369,29377,29378,29379,29380,29384,29389,29390,29392,29394,29399,29401,29406,29408,29409,29416,29417,29420,29421,29422,29423,29424,29425,29426,29427,29428,29431,29432,29434,29435,29436,29441,29443,29450,29454,29459,29461,29462,29463,29467,29468,29469,29470,29473,29474,29477,29481,29482,29483,29484,29486,29489,29492,29495,29496,29497,29502,29503,29517,29520,29522,29527,29536,29548,29549,29551,29566,29572,29575,29577,29579,29582,29585,29590,29595,29599,29602,29609,29611,29614,29615,29616,29618,29619,29623,29626,29627,29632,29634,29637,29640,29641,29642,29645,29647,29648,29649,29657,29662,29664,29669,29671,29673,29677,29682,29699,29701,29702,29705,29706,29711,29712,29722,29723,29730,29733,29734,29736,29738,29740,29742,29744,29747,29748,29749,29750,29756,29761,29764,29781,29783,29785,29786,29787,29788,29790,29791,29805,29808,29814,29815,29822,29824,29825,29827,29831,29835,29838,29840,29852,29854,29863,29864,29865,29882,29906,29916,29918,29920,29922,29923,29924,29926,29934,29935,29940,29942,29943,29951,29956,29965,29967,29969,29971,29976,29977,29978,29980,29983,29989,29992,29993,29994,29995,29996,29997,29999,30000,30001,30002,30003,30005,30007,30008,30010,30011,30014,30016,30021,30024,30027,30028,30030,30031,30036,30041,30042,30043,30044,30053,30054,30058,30059,30066,30068,30070,30072,30073,30079,30083,30086,30091,30095,30097,30098,30100,30102,30103,30105,30106,30109,30111,30112,30113,30115,30116,30117,30123,30124,30126,30127,30128,30129,30130,30131,30132,30133,30136,30137,30140,30141,30142,30146,30147,30148,30149,30151,30152,30153,30154,30157,30162,30164,30165,30166,30168,30171,30174,30178,30179,30180,30182,30183,30184,30186,30187,30192,30193,30196,30201,30204,30207,30208,30209,30211,30213,30218,30220,30224,30229,30231,30232,30233,30235,30239,30240,30242,30244,30245,30246,30249,30250,30251,30253,30256,30259,30260,30261,30264,30268,30270,30271,30272,30275,30284,30285,30292,30294,30300,30302,30307,30315,30319,30328,30330,30331,30333,30334,30338,30340,30342,30343,30344,30347,30350,30353,30355,30358,30361,30372,30382,30385,30386,30388,30399,30402,30405,30406,30408,30410,30413,30414,30415,30416,30417,30418,30420,30422,30423,30424,30427,30431,30437,30446,30447,30449,30450,30452,30456,30457,30460,30462,30465,30468,30471,30472,30473,30475,30477,30489,30490,30495,30496,30498,30502,30504,30505,30509,30511,30517,30518,30519,30520,30522,30524,30528,30529,30531,30535,30544,30545,30554,30555,30561,30562,30563,30565,30566,30568,30571,30572,30585,30589,30590,30591,30592,30596,30597,30604,30605,30606,30609,30610,30623,30624,30626,30629,30631,30633,30634,30636,30637,30640,30643,30645,30651,30653,30655,30669,30679,30683,30684,30690,30691,30693,30695,30697,30699,30700,30701,30702,30707,30710,30712,30717,30718,30719,30720,30721,30722,30729,30732,30733,30737,30738,30740,30742,30743,30744,30746,30748,30749,30751,30754,30755,30757,30758,30759,30761,30764,30765,30768,30772,30775,30776,30777,30778,30779,30780,30782,30784,30789,30791,30796,30798,30800,30802,30805,30806,30807,30813,30826,30827,30828,30829,30830,30839,30844,30849,30855,30857,30860,30861,30862,30865,30867,30871,30872,30874,30875,30876,30879,30881,30883,30885,30887,30896,30897,30898,30899,30900,30905,30910,30913,30917,30921,30922,30923,30928,30932,30933,30937,30952,30956,30962,30964,30967,30970,30977,30981,30995,31006,31012,31028,31034,31035,31036,31038,31040,31041,31046,31048,31049,31056,31059,31062,31063,31066,31067,31068,31069,31070,31071,31072,31074,31077,31079,31080,31085,31087,31095,31096,31098,31104,31105,31108,31109,31114,31119,31130,31143,31155,31161,31162,31163,31165,31166,31168,31169,31171,31174,31177,31179,31181,31185,31186,31189,31192,31199,31203,31204,31206,31207,31209,31211,31213,31215,31216,31224,31227,31229,31232,31234,31235,31238,31243,31245,31246,31252,31255,31258,31262,31264,31267,31283,31287,31289,31291,31292,31293,31295,31302,31313,31319,31344,31348,31350,31351,31352,31353,31354,31359,31360,31361,31363,31364,31366,31368,31373,31377,31378,31381,31382,31383,31384,31388,31389,31391,31392,31395,31397,31398,31400,31404,31405,31411,31416,31423,31435,31446,31449,31454,31455,31456,31459,31461,31462,31469,31471,31481,31482,31485,31487,31491,31492,31494,31496,31498,31499,31503,31505,31508,31509,31513,31515,31518,31520,31524,31525,31526,31528,31530,31531,31532,31534,31537,31539,31544,31546,31548,31550,31557,31558,31559,31561,31563,31564,31567,31568,31569,31570,31572,31574,31576,31578,31579,31581,31584,31586,31598,31601,31602,31605,31607,31609,31611,31614,31616,31621,31629,31632,31636,31637,31639,31644,31645,31649,31650,31654,31655,31656,31657,31658,31659,31660,31661,31665,31668,31672,31681,31686,31687,31692,31697,31699,31705,31706,31709,31713,31717,31718,31722,31726,31729,31735,31740,31742,31751,31755,31756,31759,31766,31775,31782,31783,31786,31800,31807,31808,31809,31821,31859,31860,31867,31868,31869,31881,31889,31890,31893,31895,31896,31900,31901,31902,31903,31906,31908,31909,31914,31918,31921,31922,31923,31929,31932,31933,31934,31937,31941,31943,31944,31946,31948,31949,31957,31958,31959,31961,31964,31967,31968,31976,31983,31992,31995,32010,32032,32034,32039,32043,32047,32110,32114,32119,32166,32174,32315,32321,32327,32386,32411,32415,32416,32417,32418,32419,32420,32421,32422,32423,32424,32425,32426,32427,32428,32429,32431,32432,32433,32434,32435,32437,32438,32439,32440,32441,32442,32445,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,32483,32485,32486,32487,32488,32489,32490,32491,32493,32494,32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,32519,32520,32521,32523,32524,32525,32526,32527,32529,32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,32568,32570,32578,32580,32581,32592,32593,32596,32597,32599,32600,32602,32607,32609,32610,32616,32617,32618,32622,32625,32626,32628,32633,32638,32641,32645,32650,32652,32654,32660,32666,32669,32670,32671,32673,32676,32679,32687,32688,32690,32696,32697,32700,32701,32703,32705,32709,32714,32716,32718,32724,32725,32728,32735,32736,32737,32741,32742,32745,32750,32752,32753,32755,32763,32764,32768,32769,32771,32772,32773,32774,32779,32780,32781,32784,32786,32788,32789,32790,32791,32792,32793,32796,32800,32802,32805,32806,32807,32808,32809,32810,32817,32819,32821,32822,32823,32824,32827,32829,32831,32834,32835,32838,32842,32843,32844,32845,32850,32852,32854,32856,32858,32873,32874,32881,32895,32896,32899,32900,32902,32903,32905,32907,32908,32911,32915,32918,32920,32922,32923,32924,32925,32927,32928,32929,32930,32932,32933,32937,32938,32939,32941,32942,32943,32945,32946,32948,32951,32954,32956,32957,32958,32959,32960,32961,32962,32963,32964,32966,32972,32973,32974,32982,32983,32985,32986,32987,32988,32989,32990,32993,32996,32997,32999,33000,33001,33002,33003,33004,33005,33007,33008,33009,33010,33011,33012,33014,33016,33018,33020,33021,33026,33030,33033,33034,33037,33038,33039,33040,33041,33042,33043,33044,33046,33048,33050,33054,33068,33071,33073,33074,33078,33080,33086,33094,33096,33098,33099,33100,33104,33105,33107,33108,33109,33113,33114,33120,33125,33127,33129,33133,33134,33136,33137,33140,33145,33146,33147,33148,33149,33150,33151,33152,33154,33160,33162,33167,33169,33176,33179,33180,33181,33187,33190,33192,33194,33203,33210,33211,33216,33217,33218,33219,33222,33226,33228,33251,33255,33258,33260,33261,33267,33268,33274,33275,33276,33278,33280,33281,33282,33284,33285,33286,33287,33288,33290,33292,33293,33296,33298,33300,33307,33308,33310,33311,33313,33314,33315,33320,33322,33323,33324,33325,33327,33328,33329,33331,33332,33333,33334,33335,33336,33337,33339,33342,33348,33351,33353,33355,33359,33368,33370,33375,33384,33390,33391,33392,33394,33395,33396,33401,33402,33405,33406,33407,33410,33412,33416,33418,33419,33421,33422,33423,33425,33426,33431,33432,33433,33436,33437,33439,33441,33444,33445,33446,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33459,33460,33463,33464,33465,33469,33470,33473,33476,33479,33480,33482,33483,33484,33485,33486,33487,33489,33490,33491,33492,33493,33495,33496,33499,33500,33502,33503,33504,33505,33507,33508,33509,33510,33515,33519,33521,33524,33527,33529,33531,33537,33538,33539,33540,33541,33542,33543,33544,33545,33548,33550,33551,33553,33556,33557,33559,33562,33563,33564,33575,33576,33579,33580,33581,33583,33585,33587,33588,33589,33590,33592,33593,33594,33596,33600,33603,33606,33607,33609,33615,33616,33617,33618,33620,33626,33627,33628,33630,33631,33632,33633,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33655,33656,33659,33660,33661,33669,33670,33673,33678,33682,33683,33688,33691,33692,33694,33696,33704,33705,33706,33707,33712,33713,33714,33715,33716,33718,33719,33720,33721,33722,33724,33725,33728,33729,33733,33735,33738,33740,33743,33748,33750,33752,33756,33757,33759,33760,33761,33765,33769,33770,33775,33776,33777,33778,33784,33785,33789,33793,33795,33796,33798,33803,33804,33805,33806,33807,33809,33816,33820,33821,33828,33829,33830,33831,33832,33836,33841,33848,33852,33853,33862,33865,33873,33879,33881,33882,33883,33884,33889,33891,33897,33899,33900,33901,33905,33907,33909,33910,33912,33914,33922,33927,33928,33929,33931,33932,33934,33943,33945,33948,33953,33967,33970,33972,33976,33977,33978,33981,33983,33985,33988,33993,33994,33997,34000,34001,34003,34006,34013,34015,34016,34019,34021,34022,34028,34032,34044,34047,34060,34065,34067,34071,34074,34079,34081,34091,34092,34103,34104,34105,34106,34107,34108,34109,34115,34120,34121,34122,34134,34137,34142,34148,34152,34162,34164,34169,34170,34171,34174,34180,34181,34183,34191,34203,34204,34212,34216,34218,34222,34223,34224,34231,34233,34241,34249,34255,34256,34259,34261,34268,34276,34281,34299,34303,34309,34321,34326,34343,34345,34349,34360,34364,34381,34382,34383,34384,34385,34388,34394,34398,34399,34402,34411,34412,34414,34417,34425,34426,34427,34428,34429,34430,34431,34432,34433,34434,34442,34443,34444,34445,34451,34453,34460,34461,34467,34468,34471,34472,34473,34474,34476,34479,34480,34481,34484,34485,34486,34490,34496,34500,34502,34503,34505,34506,34507,34510,34511,34512,34513,34516,34520,34521,34523,34526,34527,34532,34537,34541,34542,34544,34545,34546,34547,34548,34552,34553,34558,34560,34562,34563,34567,34568,34569,34570,34573,34578,34579,34581,34583,34584,34586,34588,34590,34593,34594,34595,34597,34601,34606,34609,34612,34615,34619,34622,34623,34631,34632,34633,34636,34638,34643,34647,34649,34656,34659,34660,34661,34670,34672,34676,34678,34683,34684,34685,34686,34690,34691,34693,34696,34699,34701,34707,34711,34719,34728,34731,34732,34733,34735,34739,34741,34746,34749,34752,34758,34762,34763,34769,34770,34771,34779,34784,34789,34794,34798,34809,34814,34819,34826,34835,34837,34838,34843,34849,34850,34866,34873,34876,34880,34884,34885,34886,34892,34893,34900,34903,34905,34913,34914,34915,34916,34917,34920,34921,34923,34924,34926,34928,34930,34935,34937,34941,34942,34943,34945,34946,34948,34949,34952,34955,34957,34962,34966,34972,34978,34980,34987,34989,34993,34999,35004,35009,35010,35013,35014,35017,35022,35026,35028,35029,35032,35033,35039,35041,35042,35043,35044,35045,35048,35056,35057,35059,35060,35064,35065,35068,35070,35074,35079,35082,35088,35090,35091,35097,35098,35099,35105,35109,35114,35115,35120,35124,35126,35137,35140,35166,35167,35174,35195,35199,35201,35203,35206,35265,35266,35268,35269,35270,35271,35272,35273,35274,35275,35276,35278,35279,35280,35281,35282,35286,35290,35292,35294,35299,35301,35302,35307,35311,35315,35328,35335,35390,35400,35449,35465,35466,35475,35591,35622,35686,35692,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35757,35758,35759,35760,35762,35763,35764,35765,35766,35767,35768,35769,35770,35772,35773,35774,35775,35776,35777,35778,35779,35780,35781,35782,35784,35785,35786,35787,35788,35789,35790,35791,35793,35794,35795,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35819,35820,35821,35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845,35846,35847,35848,35850,35851,35852,35853,35854,35855,35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869,35871,35872,35873,35874,35875,35876,35877,35878,35879,35880,35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893,35894,35895,35905,35910,35911,35913,35916,35920,35925,35930,35937,35938,35946,35947,35955,35960,35961,35962,35970,35973,35977,35978,35980,35988,35992,36125,36126,36127,36129,36130,36131,36132,36133,36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169,36170,36171,36172,36173,36174,36175,36176,36179,36180,36181,36182,36184,36185,36186,36187,36188,36189,36190,36192,36193,36194,36195,36196,36198,36199,36203,36205,36208,36211,36212,36213,36214,36215,36225,36228,36229,36234,36235,36241,36244,36255,36259,36273,36275,36276,36277,36280,36282,36284,36286,36287,36291,36292,36294,36299,36300,36302,36303,36305,36310,36311,36314,36315,36317,36318,36319,36321,36323,36324,36328,36330,36331,36332,36335,36339,36341,36343,36344,36345,36346,36347,36349,36357,36361,36362,36364,36367,36372,36381,36382,36383,36386,36387,36393,36394,36396,36398,36399,36401,36405,36409,36410,36413,36416,36417,36418,36420,36423,36424,36425,36426,36427,36433,36434,36441,36454,36457,36460,36461,36463,36464,36466,36468,36470,36476,36479,36481,36485,36487,36495,36496,36500,36508,36510,36523,36524,36527,36530,36538,36554,36558,36710,36711,36712,36713,36715,36716,36717,36718,36719,36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733,36734,36735,36737,36738,36739,36740,36741,36742,36743,36744,36745,36746,36747,36749,36750,36751,36752,36753,36755,36756,36757,36758,36759,36760,36761,36762,36763,36764,36766,36767,36771,36774,36776,36777,36779,36784,36785,36790,36793,36797,36798,36801,36802,36804,36805,36807,36808,36814,36816,36817,36819,36820,36821,36824,36825,36827,36828,36829,36830,36831,36834,36836,36837,36838,36840,36841,36842,36843,36845,36846,36848,36851,36855,36856,36857,36861,36864,36865,36866,36867,36868,36869,36870,36873,36874,36875,36877,36879,36880,36881,36882,36884,36886,36887,36890,36891,36893,36894,36895,36896,36897,36898,36902,36909,36910,36911,36917,36918,36920,36923,36924,36926,36929,36930,36932,36935,36941,36943,36944,36945,36946,36947,36951,36952,36955,36962,36963,36965,36968,36973,36974,36980,36981,36989,36991,36992,36994,36995,37000,37003,37009,37011,37013,37015,37017,37019,37021,37025,37026,37027,37030,37034,37036,37038,37039,37040,37041,37043,37044,37045,37046,37048,37049,37050,37051,37054,37057,37060,37061,37063,37066,37070,37071,37072,37073,37075,37079,37083,37084,37085,37089,37090,37094,37095,37096,37099,37101,37103,37108,37112,37117,37118,37122,37124,37145,37150,37154,37155,37167,37169,37177,37187,37190,37193,37194,37195,37196,37197,37198,37199,37200,37202,37207,37210,37213,37214,37217,37218,37219,37220,37221,37225,37226,37228,37230,37231,37232,37233,37234,37236,37237,37238,37239,37240,37241,37245,37246,37247,37253,37255,37257,37259,37260,37261,37264,37265,37266,37274,37275,37276,37282,37283,37290,37293,37294,37295,37300,37301,37306,37319,37321,37322,37324,37325,37326,37327,37329,37340,37492,37518,37550,37576,37694,37738,37775,37834,37846,37950,37995,38021,38022,38023,38024,38025,38026,38027,38028,38029,38030,38031,38032,38034,38035,38036,38037,38039,38041,38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053,38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065,38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077,38078,38079,38080,38081,38082,38083,38084,38085,38086,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38104,38105,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38119,38120,38121,38122,38123,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137,38138,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161,38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38173,38174,38175,38177,38178,38179,38180,38181,38182,38184,38185,38186,38187,38188,38189,38190,38191,38192,38193,38194,38196,38197,38198,38199,38200,38201,38202,38203,38204,38206,38207,38208,38209,38210,38212,38213,38214,38215,38217,38218,38220,38221,38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233,38235,38236,38237,38238,38239,38241,38242,38243,38244,38245,38246,38247,38248,38249,38250,38251,38252,38253,38255,38256,38257,38258,38259,38262,38271,38376,38377,38378,38379,38381,38382,38383,38384,38385,38386,38387,38388,38389,38390,38391,38392,38393,38394,38395,38396,38397,38398,38400,38401,38402,38403,38404,38405,38406,38408,38409,38410,38411,38412,38413,38414,38415,38416,38417,38418,38420,38421,38422,38423,38425,38426,38428,38429,38431,38433,38434,38442,38446,38449,38450,38451,38452,38453,38454,38459,38460,38461,38463,38464,38466,38468,38469,38470,38471,38472,38473,38475,38476,38477,38480,38484,38485,38491,38495,38497,38498,38500,38503,38504,38505,38506,38508,38514,38516,38517,38518,38519,38533,38534,38536,38539,38541,38543,38544,38548,38551,38552,38553,38556,38567,38576,38579,38582,38584,38585,38587,38588,38589,38590,38592,38593,38596,38597,38598,38599,38601,38604,38605,38606,38607,38610,38613,38617,38624,38632,38633,38634,38639,38642,38643,38646,38647,38649,38654,38656,38657,38660,38662,38663,38664,38665,38669,38670,38671,38675,38678,38684,38686,38698,38701,38704,38706,38712,38713,38718,38738,38739,38742,38745,38747,38750,38752,38753,38754,38757,38761,38771,38772,38774,38780,38789,38795,38797,38801,38802,38804,38808,38816,38819,38827,38829,38831,38834,38836,38886,38887,38889,38890,38891,38892,38893,38899,38901,38902,38957,39029,39030,39031,39032,39033,39034,39035,39036,39037,39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049,39050,39052,39053,39055,39056,39057,39059,39060,39062,39063,39064,39066,39067,39068,39069,39070,39071,39072,39073,39074,39076,39077,39078,39079,39080,39089,39118,39121,39122,39123,39125,39128,39129,39130,39131,39134,39135,39143,39144,39181,39184,39214,39252,39253,39267,39269,39271,39272,39273,39274,39275,39276,39277,39278,39279,39280,39281,39282,39284,39285,39286,39287,39288,39290,39292,39293,39295,39296,39297,39300,39301,39302,39303,39304,39306,39307,39309,39311,39312,39313,39314,39315,39316,39317,39318,39319,39320,39321,39333,39336,39532,39533,39534,39535,39536,39537,39539,39540,39541,39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553,39554,39556,39557,39558,39559,39560,39562,39563,39564,39567,39568,39569,39570,39571,39574,39575,39576,39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589,39591,39592,39600,39601,39606,39607,39608,39610,39612,39616,39617,39618,39621,39627,39628,39633,39635,39636,39640,39647,39649,39654,39659,39661,39663,39673,39675,39683,39688,39695,39699,39711,39715,39717,39727,39730,39739,39740,39745,39746,39747,39748,39749,39751,39752,39753,39757,39759,39761,39764,40060,40063,40065,40066,40069,40070,40071,40072,40075,40077,40078,40080,40081,40082,40084,40085,40090,40091,40092,40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40120,40122,40123,40124,40125,40131,40132,40133,40134,40135,40138,40139,40140,40141,40142,40143,40144,40147,40148,40149,40150,40151,40152,40153,40156,40157,40158,40159,40162,40479,40480,40481,40482,40483,40485,40486,40488,40489,40490,40491,40492,40493,40495,40497,40498,40499,40501,40502,40503,40504,40505,40506,40509,40510,40511,40513,40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40526,40527,40529,40533,40535,40536,40538,40539,40540,40542,40547,40548,40550,40551,40552,40553,40554,40555,40556,40557,40560,40561,40563,40574,40575,40578,40583,40584,40587,40594,40595,40605,40607,40613,40614,40628,40632,40635,40636,40637,40638,40644,40649,40653,40654,40655,40657,40660,40664,40667,40668,40669,40670,40671,40672,40674,40677,40679,40681,40682,40687,40697,40699,40700,40702,40715,40717,40718,40720,40723,40727,40729,40736,40738,40748,40751,40759,40761,40763,40765,40766,40772,40784,40785,40831,40832,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40857,40858,40859,40863,40864,65281,65284,65288,65289,65292,65306,65307,65311,65509, }
local common_char = {}
for _, c in ipairs(common_char_) do
	common_char[c] = true
end

local function check(text)
	local bom = utf8.codepoint(text)
	if bom ~= 0xfeff then
		return "Missing BOM"
	end
	text = text:sub(utf8.offset(text, 2))	-- skip bom
	local line = 1
	for _, c in utf8.codes(text) do
		if c < 32 then
			if c == 10 then	-- \n
				line = line + 1
			end
		else
			if not common_char[c] then
				return string.format("Line %d U+%04x [%s]", line, c, utf8.char(c))
			end
		end
	end
end

-- 检查是否是合法的 yml 文件
local function checkyml(text)
	local lno = 1
	local iter = text:gmatch "([^\r\n]*)\r?\n?"
	iter()	-- skip first line
	for line in iter do
		if lno > 1 and not line:match("%s*#") then
			local comment = line:match '([^"]*)$'
			local shape = comment:match "%s*(.)"
			if shape and shape ~= "#" and shape ~= " " then
				return string.format('Line %s missing "', lno)
			end
			line = line:sub(1, #line - #comment)
			if line ~= "" then
				local key, value = line:match [[ ([%w%._%-']+:%d?%d?) *"(.*)"$]]
				if key == nil or value == nil then
					print("line = ", line)
					print("comment =", comment)
					return string.format("Line %s is invalid", lno)
				end
			end
		end
		lno = lno + 1
	end
end

local filename = ...
if filename == nil then
	return function(text)
		return check(text) or checkyml(text)
	end
else
	-- standalone
	local f = assert(io.open((filename)), "Can't open " .. filename)
	local text = f:read "a"
	f:close()
	local err = check(text) or checkyml(text)
	if err then
		print("ERR:", filename, err)
	else
		print("OK:", filename)
	end
end
