# 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.

# Generated from:
# http://www.itu.int/oth/T02020000C6/en [2010-09-30]
# http://en.wikipedia.org/wiki/+268 [451219164]

2682207|Nhlangano, Shiselweni district
2682217|Hlathikulu, Shiselweni district
2682227|Hluthi, Shiselweni district
2682237|Mahamba, Shiselweni district
2682303|Nsoko, Lubombo district
2682312|Mhlume, Lubombo district
2682313|Mhlume, Lubombo district
2682322|Tshaneni, Lubombo district
2682323|Tshaneni, Lubombo district
2682333|Mpaka, Lubombo district
2682343|Siteki, Lubombo district
2682344|Siphofaneni, Lubombo district
2682363|Big Bend, Lubombo district
2682364|Big Bend, Lubombo district
2682373|Maphiveni, Lubombo district
2682382|Simunye, Lubombo district
2682383|Simunye, Lubombo district
2682404|Mbabane, Hhohho district
2682405|Mbabane, Hhohho district
2682406|Mbabane, Hhohho district
2682416|Lobamba, Hhohho district
2682422|Sidwashini, Hhohho district
2682437|Pigg's Peak, Hhohho district
2682442|Ngwenya, Hhohho district
2682452|Bhunya, Hhohho district
2682453|Bhunya, Hhohho district
2682467|Mhlambanyatsi, Hhohho district
2682472|Mahwalala, Hhohho district
2682482|Siphocosini, Hhohho district
2682505|Manzini
2682506|Manzini
2682517|Matsapha, Manzini district
2682518|Matsapha, Manzini district
2682528|Malkerns, Manzini district
2682538|Mankayane, Manzini district
2682548|Ludzeludze, Manzini district
