# Copyright 2014 Google Inc.
# 
# 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.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA:
#  cldrVersion=25
#  date=$Date: 2014-01-09 06:02:40 +0100 (Thu, 09 Jan 2014) $
#  number=$Revision: 9624 $
#  type=root
AED = dirḥam de los Emiratos Árabes Xuníos
AFN = afganí afganistanu||0
ALL = lek||0
AMD = dram armeniu||0
ANG = guilder de les Antilles Neerlandeses
AOA = kwanza angolanu
ARS = pesu arxentín
AUD = dólar australianu|$
AWG = florín arubanu
AZN = manat azerbaixanu
BAM = marcu convertible de Bosnia-Herzegovina
BBD = dólar barbadianu
BDT = taka bangladexí|৳
BGN = lev
BHD = dinar baḥreiní||3
BIF = francu burundianu||0
BMD = dólar bermudianu|$
BND = dólar bruneyanu
BOB = bolivianu
BRL = real brasilanu|R$
BSD = dólar bahamés|$
BTN = ngultrum butanés
BWP = pula botsuaniana
BYR = rublu bielorrusu||0
BZD = dólar belizianu|$
CAD = dólar canadiense|CA$
CDF = francu congolés
CHF = francu suizu
CLP = pesu chilenu|$|0
CNY = yuan chinu|¥
COP = pesu colombianu||0
CRC = colón costarricanu||0
CUC = pesu convertible cubanu
CUP = pesu cubanu|$
CVE = escudu cabuverdianu
CZK = corona checa
DJF = francu xibutianu||0
DKK = corona danesa
DOP = pesu dominicanu|$
DZD = dinar arxelín
EGP = llibra exipciana
ERN = nafka eritréu
ETB = birr etíope
EUR = euro|€
FJD = dólar fixanu
FKP = llibra malviniana
GBP = llibra esterlina|£
GEL = lari xeorxanu
GHS = cedi ghanianu
GIP = llibra de Xibraltar|£
GMD = dalasi gambianu
GNF = francu guineanu||0
GTQ = quetzal de Guatemala
GYD = dólar guyanés||0
HKD = dólar ḥongkonés|$
HNL = lempira hondurana
HRK = kuna
HTG = gourde haitianu
HUF = forint||0
IDR = rupiah indonesia||0
ILS = xequel nuevu|₪
INR = rupia india|₹
IQD = dinar iraquín||0
IRR = rial iranín||0
ISK = corona islandesa||0
JMD = dólar xamaicanu
JOD = dinar xordanu||3
JPY = yen xaponés|¥|0
KES = shilling kenianu
KGS = som kirguistanín
KHR = riel camboyanu
KMF = francu comoranu||0
KPW = won norcoreanu||0
KRW = won surcoreanu|₩|0
KWD = dinar kuwaitianu||3
KYD = dólar caimanés|$
KZT = tenge kazaquistanín|₸
LAK = kip laosianu||0
LBP = llibra libanesa||0
LKR = rupia de Sri Lanka
LRD = dólar liberianu
LTL = litas
LVL = lats|||1
LYD = dinar libiu||3
MAD = dirḥam marroquín
MDL = leu moldavu
MGA = ariary malgaxe||0
MKD = denar
MMK = kyat de Myanmar||0
MNT = tugrik mongol||0
MOP = pataca de Macáu
MRO = ouguiya mauritanu||0
MUR = rupia mauriciana||0
MVR = rufiyaa maldiviana
MWK = kwacha malauianu
MXN = pesu mexicanu|$
MYR = ringgit malasiu
MZN = metical mozambicanu
NAD = dólar namibianu|$
NGN = naira nixeriana
NIO = córdoba nicaraguanu
NOK = corona noruega
NPR = rupia nepalesa
NZD = dólar neozelandés|$
OMR = rial omanianu||3
PAB = balboa panamiegu
PEN = sol nuevu peruanu
PGK = kina papuana
PHP = pesu filipín
PKR = rupia paquistanina||0
PLN = zloty
PYG = guaraní paraguayu|₲|0
QAR = rial qatarín
RON = leu rumanu
RSD = dinar serbiu||0
RUB = rublu rusu
RWF = francu ruandés||0
SAR = riyal saudita
SBD = dólar salomonés|$
SCR = rupia seixelesa
SDG = llibra sudanesa
SEK = corona sueca
SGD = dólar singapuranu|$
SHP = llibra de Santa Lena
SLL = leone sierralleonés||0
SOS = shilling somalín||0
SRD = dólar surinamés
SSP = llibra sursudanesa|£
STD = dobra de Santu Tomé y Príncipe||0
SYP = llibra siria||0
SZL = lilangeni suazilandés
THB = baht tailandés|฿
TJS = somoni taxiquistanín
TMT = manat turcomanu
TND = dinar tunecín||3
TOP = paʻanga tonganu
TRY = llira turca
TTD = dólar de Trinidá y Tobagu|$
TWD = dólar nuevu taiwanés|NT$
TZS = shilling tanzanianu||0
UAH = grivna|₴
UGX = shilling ugandés||0
USD = dólar de los Estaos Xuníos|$
UYU = pesu uruguayu
UZS = som uzbequistanín||0
VEF = bolívar venezolanu
VND = dong vietnamín|₫|0
VUV = vatu vanuatuanu||0
WST = tala samoanu
XAF = francu CFA BEAC|FCFA|0
XCD = dólar del Caribe Oriental|EC$
XOF = francu CFA BCEAO|CFA|0
XPF = francu CFP|CFPF|0
XXX = divisa desconocida|||1
YER = rial yemenín||0
ZAR = rand sudafricanu
ZMK = kwacha zambianu (1968–2012)||0|1
ZMW = kwacha zambianu
