# Copyright (C) 2011 The Libphonenumber Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Translated from hu/36.txt using Freebase.

361|Budapest
3622|Székesfehérvár
3623|Biatorbágy
3624|Szigetszentmiklós
3625|Dunaujvaros
3626|Szentendre
3627|Vac
3628|Godollo
3629|Monor
3632|Salgotarjan
3633|Esztergom
3634|Tatabanya
3635|Balassagyarmat
3636|Eger
3637|Gyongyos
3642|Nyiregyhaza
3644|Mátészalka
3645|Kisvarda
3646|Miskolc
3647|Szerencs
3648|Ozd
3649|Mezokovesd
3652|Debrecen
3653|Cegled
3654|Berettyoujfalu
3656|Szolnok
3657|Jaszbereny
3659|Karcag
3662|Szeged
3663|Szentes
3666|Bekescsaba
3668|Oroshaza
3669|Mohacs
3672|Pecs
3673|Szigetvar
3674|Szekszard
3675|Paks
3676|Kecskemet
3677|Kiskunhalas
3678|Kiskoros
3679|Baja
3682|Kaposvar
3683|Keszthely
3684|Siofok
3685|Marcali
3687|Tapolca
3688|Veszprem
3689|Papa
3692|Zalaegerszeg
3693|Nagykanizsa
3694|Szombathely
3695|Sarvar
3696|Gyor
3699|Sopron
