ChatWeb/Cilent/main.py
Friendfeng d0e2e573b6 new file: Cilent/build/main/Analysis-00.toc
new file:   Cilent/build/main/COLLECT-00.toc
	new file:   Cilent/build/main/EXE-00.toc
	new file:   Cilent/build/main/PKG-00.toc
	new file:   Cilent/build/main/PYZ-00.pyz
	new file:   Cilent/build/main/PYZ-00.toc
	new file:   Cilent/build/main/base_library.zip
	new file:   Cilent/build/main/localpycs/pyimod01_archive.pyc
	new file:   Cilent/build/main/localpycs/pyimod02_importers.pyc
	new file:   Cilent/build/main/localpycs/pyimod03_ctypes.pyc
	new file:   Cilent/build/main/localpycs/pyimod04_pywin32.pyc
	new file:   Cilent/build/main/localpycs/struct.pyc
	new file:   Cilent/build/main/main.exe
	new file:   Cilent/build/main/main.pkg
	new file:   Cilent/build/main/warn-main.txt
	new file:   Cilent/build/main/xref-main.html
	new file:   Cilent/dist/main.exe
	new file:   Cilent/dist/main.rar
	new file:   Cilent/dist/main/_internal/VCRUNTIME140.dll
	new file:   Cilent/dist/main/_internal/VCRUNTIME140_1.dll
	new file:   Cilent/dist/main/_internal/_asyncio.pyd
	new file:   Cilent/dist/main/_internal/_bz2.pyd
	new file:   Cilent/dist/main/_internal/_ctypes.pyd
	new file:   Cilent/dist/main/_internal/_decimal.pyd
	new file:   Cilent/dist/main/_internal/_hashlib.pyd
	new file:   Cilent/dist/main/_internal/_lzma.pyd
	new file:   Cilent/dist/main/_internal/_multiprocessing.pyd
	new file:   Cilent/dist/main/_internal/_overlapped.pyd
	new file:   Cilent/dist/main/_internal/_queue.pyd
	new file:   Cilent/dist/main/_internal/_socket.pyd
	new file:   Cilent/dist/main/_internal/_ssl.pyd
	new file:   Cilent/dist/main/_internal/_tcl_data/auto.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/clock.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/ascii.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/big5.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cns11643.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1250.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1251.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1252.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1253.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1254.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1255.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1256.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1257.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp1258.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp437.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp737.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp775.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp850.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp852.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp855.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp857.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp860.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp861.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp862.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp863.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp864.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp865.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp866.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp869.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp874.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp932.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp936.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp949.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/cp950.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/dingbats.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/ebcdic.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/euc-cn.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/euc-jp.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/euc-kr.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/gb12345.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/gb1988.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/gb2312-raw.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/gb2312.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso2022-jp.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso2022-kr.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso2022.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-1.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-10.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-11.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-13.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-14.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-15.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-16.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-2.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-3.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-4.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-5.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-6.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-7.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-8.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/iso8859-9.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/jis0201.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/jis0208.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/jis0212.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/koi8-r.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/koi8-ru.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/koi8-t.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/koi8-u.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/ksc5601.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macCentEuro.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macCroatian.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macCyrillic.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macDingbats.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macGreek.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macIceland.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macJapan.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macRoman.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macRomania.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macThai.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macTurkish.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/macUkraine.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/shiftjis.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/symbol.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/encoding/tis-620.enc
	new file:   Cilent/dist/main/_internal/_tcl_data/history.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/http1.0/http.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/http1.0/pkgIndex.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/init.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/af.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/af_za.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ar.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ar_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ar_jo.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ar_lb.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ar_sy.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/be.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/bg.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/bn.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/bn_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ca.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/cs.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/da.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/de.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/de_at.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/de_be.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/el.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_au.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_be.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_bw.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_ca.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_gb.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_hk.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_ie.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_nz.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_ph.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_sg.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_za.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/en_zw.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/eo.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_ar.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_bo.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_cl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_co.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_cr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_do.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_ec.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_gt.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_hn.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_mx.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_ni.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_pa.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_pe.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_pr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_py.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_sv.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_uy.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/es_ve.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/et.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/eu.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/eu_es.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fa.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fa_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fa_ir.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fi.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fo.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fo_fo.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fr_be.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fr_ca.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/fr_ch.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ga.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ga_ie.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/gl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/gl_es.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/gv.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/gv_gb.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/he.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/hi.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/hi_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/hr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/hu.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/id.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/id_id.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/is.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/it.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/it_ch.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ja.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kl_gl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ko.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ko_kr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kok.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kok_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kw.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/kw_gb.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/lt.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/lv.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/mk.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/mr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/mr_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ms.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ms_my.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/mt.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/nb.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/nl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/nl_be.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/nn.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/pl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/pt.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/pt_br.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ro.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ru.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ru_ua.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sh.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sk.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sl.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sq.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sv.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/sw.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ta.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/ta_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/te.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/te_in.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/th.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/tr.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/uk.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/vi.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/zh.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/zh_cn.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/zh_hk.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/zh_sg.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/msgs/zh_tw.msg
	new file:   Cilent/dist/main/_internal/_tcl_data/opt0.4/optparse.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/opt0.4/pkgIndex.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/package.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/parray.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/safe.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/tclIndex
	new file:   Cilent/dist/main/_internal/_tcl_data/tm.tcl
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Abidjan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Accra
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Addis_Ababa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Algiers
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Asmara
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Asmera
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Bamako
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Bangui
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Banjul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Bissau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Blantyre
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Brazzaville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Bujumbura
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Cairo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Casablanca
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Ceuta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Conakry
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Dakar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Dar_es_Salaam
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Djibouti
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Douala
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/El_Aaiun
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Freetown
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Gaborone
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Harare
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Johannesburg
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Juba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Kampala
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Khartoum
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Kigali
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Kinshasa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Lagos
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Libreville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Lome
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Luanda
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Lubumbashi
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Lusaka
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Malabo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Maputo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Maseru
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Mbabane
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Mogadishu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Monrovia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Nairobi
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Ndjamena
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Niamey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Nouakchott
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Ouagadougou
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Porto-Novo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Sao_Tome
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Timbuktu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Tripoli
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Tunis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Africa/Windhoek
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Adak
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Anchorage
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Anguilla
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Antigua
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Araguaina
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Buenos_Aires
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Catamarca
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/ComodRivadavia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Cordoba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Jujuy
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/La_Rioja
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Mendoza
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Rio_Gallegos
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Salta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/San_Juan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/San_Luis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Tucuman
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Argentina/Ushuaia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Aruba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Asuncion
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Atikokan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Atka
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Bahia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Bahia_Banderas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Barbados
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Belem
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Belize
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Blanc-Sablon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Boa_Vista
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Bogota
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Boise
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Buenos_Aires
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cambridge_Bay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Campo_Grande
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cancun
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Caracas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Catamarca
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cayenne
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cayman
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Chicago
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Chihuahua
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Ciudad_Juarez
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Coral_Harbour
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cordoba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Costa_Rica
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Creston
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Cuiaba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Curacao
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Danmarkshavn
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Dawson
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Dawson_Creek
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Denver
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Detroit
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Dominica
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Edmonton
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Eirunepe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/El_Salvador
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Ensenada
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Fort_Nelson
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Fort_Wayne
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Fortaleza
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Glace_Bay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Godthab
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Goose_Bay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Grand_Turk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Grenada
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Guadeloupe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Guatemala
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Guayaquil
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Guyana
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Halifax
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Havana
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Hermosillo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Indianapolis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Knox
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Marengo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Petersburg
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Tell_City
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Vevay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Vincennes
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indiana/Winamac
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Indianapolis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Inuvik
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Iqaluit
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Jamaica
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Jujuy
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Juneau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Kentucky/Louisville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Kentucky/Monticello
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Knox_IN
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Kralendijk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/La_Paz
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Lima
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Los_Angeles
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Louisville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Lower_Princes
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Maceio
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Managua
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Manaus
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Marigot
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Martinique
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Matamoros
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Mazatlan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Mendoza
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Menominee
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Merida
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Metlakatla
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Mexico_City
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Miquelon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Moncton
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Monterrey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Montevideo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Montreal
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Montserrat
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Nassau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/New_York
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Nipigon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Nome
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Noronha
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/North_Dakota/Beulah
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/North_Dakota/Center
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/North_Dakota/New_Salem
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Nuuk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Ojinaga
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Panama
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Pangnirtung
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Paramaribo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Phoenix
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Port-au-Prince
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Port_of_Spain
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Porto_Acre
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Porto_Velho
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Puerto_Rico
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Punta_Arenas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Rainy_River
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Rankin_Inlet
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Recife
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Regina
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Resolute
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Rio_Branco
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Rosario
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Santa_Isabel
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Santarem
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Santiago
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Santo_Domingo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Sao_Paulo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Scoresbysund
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Shiprock
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Sitka
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Barthelemy
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Johns
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Kitts
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Lucia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Thomas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/St_Vincent
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Swift_Current
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Tegucigalpa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Thule
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Thunder_Bay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Tijuana
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Toronto
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Tortola
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Vancouver
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Virgin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Whitehorse
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Winnipeg
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Yakutat
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/America/Yellowknife
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Casey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Davis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/DumontDUrville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Macquarie
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Mawson
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/McMurdo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Palmer
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Rothera
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/South_Pole
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Syowa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Troll
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Antarctica/Vostok
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Arctic/Longyearbyen
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Aden
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Almaty
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Amman
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Anadyr
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Aqtau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Aqtobe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ashgabat
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ashkhabad
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Atyrau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Baghdad
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Bahrain
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Baku
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Bangkok
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Barnaul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Beirut
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Bishkek
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Brunei
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Calcutta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Chita
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Choibalsan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Chongqing
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Chungking
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Colombo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Dacca
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Damascus
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Dhaka
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Dili
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Dubai
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Dushanbe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Famagusta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Gaza
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Harbin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Hebron
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ho_Chi_Minh
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Hong_Kong
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Hovd
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Irkutsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Istanbul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Jakarta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Jayapura
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Jerusalem
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kabul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kamchatka
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Karachi
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kashgar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kathmandu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Katmandu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Khandyga
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kolkata
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Krasnoyarsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kuala_Lumpur
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kuching
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Kuwait
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Macao
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Macau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Magadan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Makassar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Manila
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Muscat
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Nicosia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Novokuznetsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Novosibirsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Omsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Oral
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Phnom_Penh
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Pontianak
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Pyongyang
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Qatar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Qostanay
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Qyzylorda
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Rangoon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Riyadh
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Saigon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Sakhalin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Samarkand
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Seoul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Shanghai
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Singapore
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Srednekolymsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Taipei
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tashkent
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tbilisi
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tehran
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tel_Aviv
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Thimbu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Thimphu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tokyo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Tomsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ujung_Pandang
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ulaanbaatar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ulan_Bator
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Urumqi
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Ust-Nera
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Vientiane
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Vladivostok
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Yakutsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Yangon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Yekaterinburg
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Asia/Yerevan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Azores
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Bermuda
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Canary
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Cape_Verde
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Faeroe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Faroe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Jan_Mayen
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Madeira
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Reykjavik
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/South_Georgia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/St_Helena
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Atlantic/Stanley
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/ACT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Adelaide
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Brisbane
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Broken_Hill
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Canberra
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Currie
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Darwin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Eucla
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Hobart
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/LHI
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Lindeman
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Lord_Howe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Melbourne
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/NSW
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/North
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Perth
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Queensland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/South
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Sydney
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Tasmania
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Victoria
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/West
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Australia/Yancowinna
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Brazil/Acre
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Brazil/DeNoronha
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Brazil/East
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Brazil/West
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/CET
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/CST6CDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Atlantic
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Central
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Eastern
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Mountain
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Newfoundland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Pacific
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Saskatchewan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Canada/Yukon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Chile/Continental
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Chile/EasterIsland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Cuba
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/EET
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/EST
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/EST5EDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Egypt
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Eire
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+1
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+10
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+11
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+12
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+2
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+3
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+4
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+5
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+6
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+7
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+8
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT+9
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-1
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-10
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-11
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-12
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-13
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-14
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-2
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-3
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-4
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-5
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-6
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-7
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-8
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT-9
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/GMT0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/Greenwich
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/UCT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/UTC
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/Universal
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Etc/Zulu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Amsterdam
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Andorra
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Astrakhan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Athens
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Belfast
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Belgrade
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Berlin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Bratislava
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Brussels
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Bucharest
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Budapest
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Busingen
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Chisinau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Copenhagen
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Dublin
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Gibraltar
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Guernsey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Helsinki
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Isle_of_Man
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Istanbul
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Jersey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Kaliningrad
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Kiev
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Kirov
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Kyiv
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Lisbon
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Ljubljana
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/London
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Luxembourg
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Madrid
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Malta
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Mariehamn
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Minsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Monaco
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Moscow
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Nicosia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Oslo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Paris
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Podgorica
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Prague
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Riga
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Rome
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Samara
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/San_Marino
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Sarajevo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Saratov
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Simferopol
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Skopje
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Sofia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Stockholm
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Tallinn
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Tirane
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Tiraspol
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Ulyanovsk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Uzhgorod
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Vaduz
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Vatican
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Vienna
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Vilnius
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Volgograd
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Warsaw
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Zagreb
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Zaporozhye
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Europe/Zurich
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GB
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GB-Eire
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GMT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GMT+0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GMT-0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/GMT0
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Greenwich
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/HST
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Hongkong
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Iceland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Antananarivo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Chagos
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Christmas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Cocos
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Comoro
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Kerguelen
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Mahe
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Maldives
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Mauritius
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Mayotte
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Indian/Reunion
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Iran
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Israel
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Jamaica
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Japan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Kwajalein
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Libya
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/MET
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/MST
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/MST7MDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Mexico/BajaNorte
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Mexico/BajaSur
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Mexico/General
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/NZ
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/NZ-CHAT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Navajo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/PRC
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/PST8PDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Apia
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Auckland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Bougainville
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Chatham
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Chuuk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Easter
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Efate
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Enderbury
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Fakaofo
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Fiji
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Funafuti
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Galapagos
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Gambier
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Guadalcanal
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Guam
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Honolulu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Johnston
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Kanton
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Kiritimati
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Kosrae
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Kwajalein
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Majuro
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Marquesas
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Midway
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Nauru
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Niue
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Norfolk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Noumea
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Pago_Pago
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Palau
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Pitcairn
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Pohnpei
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Ponape
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Port_Moresby
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Rarotonga
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Saipan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Samoa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Tahiti
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Tarawa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Tongatapu
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Truk
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Wake
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Wallis
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Pacific/Yap
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Poland
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Portugal
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/ROC
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/ROK
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Singapore
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/AST4
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/AST4ADT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/CST6
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/CST6CDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/EST5
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/EST5EDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/HST10
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/MST7
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/MST7MDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/PST8
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/PST8PDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/YST9
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/SystemV/YST9YDT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Turkey
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/UCT
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Alaska
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Aleutian
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Arizona
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Central
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/East-Indiana
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Eastern
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Hawaii
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Indiana-Starke
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Michigan
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Mountain
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Pacific
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/US/Samoa
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/UTC
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Universal
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/W-SU
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/WET
	new file:   Cilent/dist/main/_internal/_tcl_data/tzdata/Zulu
	new file:   Cilent/dist/main/_internal/_tcl_data/word.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/bgerror.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/button.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/choosedir.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/clrpick.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/comdlg.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/console.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/dialog.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/entry.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/focus.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/fontchooser.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/iconlist.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/icons.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/images/README
	new file:   Cilent/dist/main/_internal/_tk_data/images/logo.eps
	new file:   Cilent/dist/main/_internal/_tk_data/images/logo100.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/logo64.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/logoLarge.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/logoMed.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo.eps
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo100.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo150.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo175.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo200.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/pwrdLogo75.gif
	new file:   Cilent/dist/main/_internal/_tk_data/images/tai-ku.gif
	new file:   Cilent/dist/main/_internal/_tk_data/license.terms
	new file:   Cilent/dist/main/_internal/_tk_data/listbox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/megawidget.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/menu.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/mkpsenc.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/msgbox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/cs.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/da.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/de.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/el.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/en.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/en_gb.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/eo.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/es.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/fi.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/fr.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/hu.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/it.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/nl.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/pl.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/pt.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/ru.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/sv.msg
	new file:   Cilent/dist/main/_internal/_tk_data/msgs/zh_cn.msg
	new file:   Cilent/dist/main/_internal/_tk_data/obsolete.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/optMenu.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/palette.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/panedwindow.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/pkgIndex.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/safetk.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/scale.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/scrlbar.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/spinbox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/tclIndex
	new file:   Cilent/dist/main/_internal/_tk_data/tearoff.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/text.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/tk.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/tkfbox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/altTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/aquaTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/button.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/clamTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/classicTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/combobox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/cursors.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/defaults.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/entry.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/fonts.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/menubutton.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/notebook.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/panedwindow.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/progress.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/scale.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/scrollbar.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/sizegrip.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/spinbox.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/treeview.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/ttk.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/utils.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/vistaTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/winTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/ttk/xpTheme.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/unsupported.tcl
	new file:   Cilent/dist/main/_internal/_tk_data/xmfbox.tcl
	new file:   Cilent/dist/main/_internal/_tkinter.pyd
	new file:   Cilent/dist/main/_internal/_uuid.pyd
	new file:   Cilent/dist/main/_internal/_wmi.pyd
	new file:   Cilent/dist/main/_internal/api-ms-win-core-console-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-datetime-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-debug-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-errorhandling-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-fibers-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-file-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-file-l1-2-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-file-l2-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-handle-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-heap-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-interlocked-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-libraryloader-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-localization-l1-2-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-memory-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-namedpipe-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-processenvironment-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-processthreads-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-processthreads-l1-1-1.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-profile-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-string-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-synch-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-synch-l1-2-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-sysinfo-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-timezone-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-core-util-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-conio-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-convert-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-environment-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-filesystem-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-heap-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-locale-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-math-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-process-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-runtime-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-stdio-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-string-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-time-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/api-ms-win-crt-utility-l1-1-0.dll
	new file:   Cilent/dist/main/_internal/base_library.zip
	new file:   Cilent/dist/main/_internal/certifi/cacert.pem
	new file:   Cilent/dist/main/_internal/certifi/py.typed
	new file:   Cilent/dist/main/_internal/charset_normalizer/md.cp313-win_amd64.pyd
	new file:   Cilent/dist/main/_internal/charset_normalizer/md__mypyc.cp313-win_amd64.pyd
	new file:   Cilent/dist/main/_internal/libcrypto-3.dll
	new file:   Cilent/dist/main/_internal/libffi-8.dll
	new file:   Cilent/dist/main/_internal/libssl-3.dll
	new file:   Cilent/dist/main/_internal/pyexpat.pyd
	new file:   Cilent/dist/main/_internal/python3.dll
	new file:   Cilent/dist/main/_internal/python313.dll
	new file:   Cilent/dist/main/_internal/select.pyd
	new file:   Cilent/dist/main/_internal/tcl8/8.4/platform-1.0.19.tm
	new file:   Cilent/dist/main/_internal/tcl8/8.4/platform/shell-1.1.4.tm
	new file:   Cilent/dist/main/_internal/tcl8/8.5/msgcat-1.6.1.tm
	new file:   Cilent/dist/main/_internal/tcl8/8.5/tcltest-2.5.8.tm
	new file:   Cilent/dist/main/_internal/tcl8/8.6/http-2.9.8.tm
	new file:   Cilent/dist/main/_internal/tcl86t.dll
	new file:   Cilent/dist/main/_internal/tk86t.dll
	new file:   Cilent/dist/main/_internal/ucrtbase.dll
	new file:   Cilent/dist/main/_internal/unicodedata.pyd
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/INSTALLER
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/LICENSE
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/METADATA
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/RECORD
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/REQUESTED
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/WHEEL
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/entry_points.txt
	new file:   Cilent/dist/main/_internal/websockets-15.0.1.dist-info/top_level.txt
	new file:   Cilent/dist/main/_internal/websockets/speedups.cp313-win_amd64.pyd
	new file:   Cilent/dist/main/_internal/zlib1.dll
	new file:   Cilent/dist/main/_internal/zstandard/_cffi.cp313-win_amd64.pyd
	new file:   Cilent/dist/main/_internal/zstandard/backend_c.cp313-win_amd64.pyd
	new file:   Cilent/dist/main/main.exe
	new file:   Cilent/ico.spec
	new file:   Cilent/main.py
	new file:   Cilent/main.spec
2025-06-25 17:52:47 +08:00

374 lines
13 KiB
Python

import tkinter as tk
from tkinter import messagebox, scrolledtext
import json
import threading
import websockets
import asyncio
import requests
from urllib.parse import urlparse
from datetime import datetime
class ChatClient:
def __init__(self):
# 客户端配置
self.client_version = "1.3"
self.min_server_version = "1.3"
self.language = "Python"
# 网络组件
self.websocket = None
self.loop = None
self.ws_thread = None
self.current_user = None
self.server_url = ""
self.connected = False
self.ws_url = "" # 新增的初始化
self.ws_url = input('请选择连接IP')
self.server_url = self.ws_url
# 初始化UI
self.root = tk.Tk()
self.root.title(f"聊天客户端 v{self.client_version}")
self.setup_ui()
self.root.protocol("WM_DELETE_WINDOW", self.cleanup)
def setup_ui(self):
# 登录框架
self.login_frame = tk.Frame(self.root, padx=20, pady=20)
self.login_frame.pack()
# 服务器配置
tk.Label(self.login_frame, text="服务器地址:").grid(row=0, column=0, sticky="w")
self.server_entry = tk.Entry(self.login_frame, width=30)
self.server_entry.grid(row=0, column=1, sticky="ew")
self.server_entry.insert(0, "http://127.0.0.1:3000")
# 认证信息
tk.Label(self.login_frame, text="用户名:").grid(row=1, column=0, sticky="w")
self.username_entry = tk.Entry(self.login_frame)
self.username_entry.grid(row=1, column=1, sticky="ew")
tk.Label(self.login_frame, text="密码:").grid(row=2, column=0, sticky="w")
self.password_entry = tk.Entry(self.login_frame, show="*")
self.password_entry.grid(row=2, column=1, sticky="ew")
# 操作按钮
btn_frame = tk.Frame(self.login_frame)
btn_frame.grid(row=3, columnspan=2, pady=10)
tk.Button(btn_frame, text="登录", command=self.on_login).pack(side="left", padx=5)
tk.Button(btn_frame, text="注册", command=self.on_register).pack(side="left", padx=5)
# 状态显示
self.status_label = tk.Label(self.login_frame, text="等待连接...", fg="gray")
self.status_label.grid(row=4, columnspan=2)
# 聊天主界面(初始隐藏)
self.chat_frame = tk.Frame(self.root)
# 消息显示区域
self.chat_display = scrolledtext.ScrolledText(
self.chat_frame,
wrap=tk.WORD,
width=60,
height=20,
state='disabled'
)
self.chat_display.pack(pady=10, fill=tk.BOTH, expand=True)
# 消息输入区域
input_frame = tk.Frame(self.chat_frame)
input_frame.pack(fill=tk.X, pady=5)
self.message_entry = tk.Entry(input_frame)
self.message_entry.pack(side=tk.LEFT, fill=tk.X, expand=True)
self.message_entry.bind("<Return>", lambda e: self.send_message())
tk.Button(input_frame, text="发送", command=self.send_message).pack(side=tk.LEFT)
# 底部状态栏
self.connection_status = tk.Label(self.chat_frame, text="未连接", fg="red")
self.connection_status.pack(side=tk.BOTTOM, fill=tk.X)
def authenticate(self, action, username, password):
"""处理认证逻辑(登录/注册)"""
try:
# 规范化URL
self.server_url = self.server_entry.get().strip()
if not self.server_url.startswith(("http://", "https://")):
self.server_url = "http://" + self.server_url
# 准备请求
url = f"{self.server_url.rstrip('/')}/api/{action}"
headers = {"Content-Type": "application/json"}
payload = json.dumps({"username": username, "password": password})
# 发送请求
self.update_status(f"{action}中...", "blue")
response = requests.post(url, headers=headers, data=payload, timeout=10)
# 检查响应
if response.status_code != 200:
error_msg = f"HTTP {response.status_code}"
if response.text:
error_msg += f" - {response.text[:100]}{'...' if len(response.text)>100 else ''}"
raise ConnectionError(error_msg)
# 解析JSON
try:
data = response.json()
except json.JSONDecodeError:
raise ValueError(f"无效的JSON响应: {response.text[:100]}...")
# 处理结果
if not data.get("success"):
raise ValueError(data.get("message", f"{action}失败"))
# 认证成功
self.current_user = {
"username": username,
"is_admin": data.get("is_admin", False)
}
self.start_chat_session()
except Exception as e:
error_msg = f"{action}错误: {str(e)}"
self.update_status(error_msg, "red")
print(f"[DEBUG] {error_msg}\nURL: {url}\nResponse: {getattr(response, 'text', '')}")
def start_chat_session(self):
"""启动聊天会话"""
self.login_frame.pack_forget()
self.chat_frame.pack(fill=tk.BOTH, expand=True)
self.update_connection_status("连接中...", "orange")
# 启动WebSocket连接
self.loop = asyncio.new_event_loop()
self.ws_thread = threading.Thread(target=self.run_websocket, daemon=True)
self.ws_thread.start()
def run_websocket(self):
"""运行WebSocket客户端"""
asyncio.set_event_loop(self.loop)
self.loop.run_until_complete(self.websocket_handler())
async def websocket_handler(self):
"""处理WebSocket连接"""
try:
# 建立连接前设置ws_url
self.ws_url = self.server_url.replace("http", "ws") + "/chat"
async with websockets.connect(self.ws_url) as websocket:
self.websocket = websocket
self.connected = True
self.update_connection_status("已连接", "green")
# 1. 发送客户端信息
await websocket.send(json.dumps({
"type": "client-info",
"version": self.client_version,
"language": self.language
}))
# 2. 发送认证信息
await websocket.send(json.dumps({
"type": "login",
"username": self.current_user["username"],
"password": self.password_entry.get()
}))
# 3. 消息处理循环
while self.connected:
message = await websocket.recv()
self.handle_server_message(json.loads(message))
except Exception as e:
error_msg = f"连接错误: {str(e)}"
self.display_message(error_msg, "system")
self.update_connection_status("连接断开", "red")
finally:
self.connected = False
def handle_server_message(self, message):
"""处理服务端消息"""
msg_type = message.get("type")
if msg_type == "error":
self.display_message(message.get("message", "未知错误"), "error")
elif msg_type == "server-info":
server_version = message.get("version")
if server_version != self.client_version:
warn_msg = f"版本警告: 服务端({server_version})≠客户端({self.client_version})"
self.display_message(warn_msg, "warning")
elif msg_type == "history":
for msg in message.get("data", []):
self.display_history_message(msg)
elif msg_type == "message":
self.display_message(
message.get("content"),
"admin" if message.get("is_admin") else "user",
message.get("sender")
)
elif msg_type == "system":
self.display_message(message.get("message"), "system")
def send_message(self):
"""发送消息到服务器"""
message = self.message_entry.get().strip()
if not message or not self.connected:
return
try:
# 处理命令
if message.startswith("///"):
self.handle_command(message)
else:
# 发送普通消息
asyncio.run_coroutine_threadsafe(
self.send_websocket_message({
"type": "message",
"content": message
}),
self.loop
)
self.message_entry.delete(0, tk.END)
except Exception as e:
self.display_message(f"发送失败: {str(e)}", "error")
async def send_websocket_message(self, message):
"""通过WebSocket发送消息"""
if self.websocket:
await self.websocket.send(json.dumps(message))
def handle_command(self, command):
"""处理管理员命令"""
if not self.current_user.get("is_admin"):
self.display_message("需要管理员权限", "error")
return
# 示例命令处理
if command == "///help":
help_text = [
"可用命令:",
"///help - 显示帮助",
"///me - 显示我的信息",
"///list - 列出在线用户",
"///op <用户> - 授予管理员权限",
"///kick <用户> - 踢出用户"
]
self.display_message("\n".join(help_text), "system")
else:
asyncio.run_coroutine_threadsafe(
self.send_websocket_message({
"type": "message",
"content": command
}),
self.loop
)
def display_message(self, message, msg_type="normal", sender=None):
"""显示消息到聊天区域"""
colors = {
"system": "blue",
"error": "red",
"warning": "orange",
"admin": "purple",
"user": "black",
"normal": "green"
}
self.root.after(0, lambda: self._append_message(
text=message,
color=colors.get(msg_type, "black"),
sender=sender
))
def display_history_message(self, message):
"""显示历史消息"""
self._append_message(
text=message.get("content", ""),
color="gray",
sender=message.get("sender"),
timestamp=message.get("timestamp")
)
def _append_message(self, text, color, sender=None, timestamp=None):
"""内部方法:添加消息到文本框"""
self.chat_display.config(state='normal')
if timestamp:
time_str = datetime.fromisoformat(timestamp).strftime("%H:%M:%S")
self.chat_display.insert(tk.END, f"[{time_str}] ", "time")
if sender:
self.chat_display.insert(tk.END, f"{sender}: ", "sender")
self.chat_display.insert(tk.END, text + "\n", color)
self.chat_display.config(state='disabled')
self.chat_display.see(tk.END)
# 配置标签样式
for tag in ["time", "sender", color]:
self.chat_display.tag_config(tag, foreground=color)
def update_status(self, text, color="black"):
"""更新登录界面状态"""
self.root.after(0, lambda: self.status_label.config(text=text, fg=color))
def update_connection_status(self, text, color):
"""更新连接状态"""
self.root.after(0, lambda: self.connection_status.config(text=text, fg=color))
def on_login(self):
"""登录按钮事件"""
username = self.username_entry.get().strip()
password = self.password_entry.get().strip()
if not all([self.server_entry.get(), username, password]):
self.update_status("所有字段不能为空", "red")
return
threading.Thread(
target=self.authenticate,
args=("login", username, password),
daemon=True
).start()
def on_register(self):
"""注册按钮事件"""
username = self.username_entry.get().strip()
password = self.password_entry.get().strip()
if not all([self.server_entry.get(), username, password]):
self.update_status("所有字段不能为空", "red")
return
threading.Thread(
target=self.authenticate,
args=("register", username, password),
daemon=True
).start()
def cleanup(self):
"""清理资源"""
self.connected = False
try:
if self.websocket:
asyncio.run_coroutine_threadsafe(self.websocket.close(), self.loop)
if self.loop:
self.loop.call_soon_threadsafe(self.loop.stop)
except:
pass
self.root.destroy()
if __name__ == "__main__":
# 运行客户端
client = ChatClient()
client.root.mainloop()