# Copyright 2012 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
ADP = pesetă andorrană||0|1
AED = dirham din Emiratele Arabe Unite
AFN = afgani afgan||0
ALL = leka albaneză||0
AMD = dram armenesc
ANG = gulden din Antilele Olandeze
AOA = kwanza angoleză
ARP = peso argentinian (1983–1985)|||1
ARS = peso argentinian
ATS = șiling austriac|||1
AUD = dolar australian
AWG = florin aruban
AZM = manat azer (1993–2006)|||1
AZN = manat azer
BAD = dinar Bosnia-Herțegovina (1992–1994)|||1
BAM = marcă convertibilă din Bosnia și Herțegovina
BBD = dolar din Barbados
BDT = taka din Bangladesh
BEC = franc belgian (convertibil)|||1
BEF = franc belgian|||1
BEL = franc belgian (financiar)|||1
BGN = leva bulgărească
BHD = dinar din Bahrain||3
BIF = franc burundez||0
BMD = dolar din Bermuda
BND = dolar din Brunei
BOB = boliviano bolivian
BOP = peso bolivian|||1
BOV = mvdol bolivian|||1
BRE = cruzeiro brazilian (1990–1993)|||1
BRL = real brazilian
BRR = cruzeiro brazilian (1993–1994)|||1
BSD = dolar din Bahamas
BTN = ngultrum din Bhutan
BUK = kyat birman|||1
BWP = pula Botswana
BYN = rublă belarusă
BYR = rublă belarusă (2000–2016)||0|1
BZD = dolar din Belize
CAD = dolar canadian
CDF = franc congolez
CHF = franc elvețian
CLP = peso chilian||0
CNH = yuan chinezesc (offshore)|||1
CNY = yuan chinezesc
COP = peso columbian
CRC = colon costarican
CSD = dinar Serbia și Muntenegru (2002–2006)|||1
CUC = peso cubanez convertibil
CUP = peso cubanez
CVE = escudo din Capul Verde
CYP = liră cipriotă|||1
CZK = coroană cehă
DDM = marcă est-germană|||1
DEM = marcă germană|||1
DJF = franc djiboutian||0
DKK = coroană daneză
DOP = peso dominican
DZD = dinar algerian
ECS = sucre Ecuador|||1
EEK = coroană estoniană|||1
EGP = liră egipteană
ERN = nakfa eritreeană
ESA = peseta spaniolă (cont A)|||1
ESB = peseta spaniolă (cont convertibil)|||1
ESP = pesetă spaniolă||0|1
ETB = birr etiopian
EUR = euro
FIM = marcă finlandeză|||1
FJD = dolar fijian
FKP = liră din Insulele Falkland
FRF = franc francez|||1
GBP = liră sterlină
GEL = lari georgian|₾
GHC = cedi Ghana (1979–2007)|||1
GHS = cedi ghanez
GIP = liră din Gibraltar
GMD = dalasi din Gambia
GNF = franc guineean||0
GRD = drahmă grecească|||1
GTQ = quetzal guatemalez
GWP = peso Guineea-Bissau|||1
GYD = dolar guyanez
HKD = dolar din Hong Kong
HNL = lempira honduriană
HRD = dinar croat|||1
HRK = kuna croată
HTG = gourde din Haiti
HUF = forint maghiar
IDR = rupie indoneziană
IEP = liră irlandeză|||1
ILP = liră israeliană|||1
ILS = șechel israelian nou
INR = rupie indiană
IQD = dinar irakian||0
IRR = rial iranian||0
ISK = coroană islandeză||0
ITL = liră italiană||0|1
JMD = dolar jamaican
JOD = dinar iordanian||3
JPY = yen japonez||0
KES = șiling kenyan
KGS = som kârgâz
KHR = riel cambodgian
KMF = franc comorian||0
KPW = won nord-coreean||0
KRW = won sud-coreean||0
KWD = dinar kuweitian||3
KYD = dolar din Insulele Cayman
KZT = tenge kazahă
LAK = kip laoțian||0
LBP = liră libaneză||0
LKR = rupie srilankeză
LRD = dolar liberian
LSL = loti lesothian
LTL = litu lituanian|||1
LUC = franc convertibil luxemburghez|||1
LUF = franc luxemburghez||0|1
LUL = franc financiar luxemburghez|||1
LVL = lats letonian|||1
LVR = rublă Letonia|||1
LYD = dinar libian||3
MAD = dirham marocan
MAF = franc marocan|||1
MDL = leu moldovenesc
MGA = ariary malgaș||0
MGF = franc Madagascar||0|1
MKD = dinar macedonean
MLF = franc Mali|||1
MMK = kyat din Myanmar||0
MNT = tugrik mongol
MOP = pataca din Macao
MRO = ouguiya mauritană (1973–2017)||0|1
MRU = ouguiya mauritană
MTL = liră malteză|||1
MUR = rupie mauritiană
MVR = rufiyaa maldiviană
MWK = kwacha malawiană
MXN = peso mexican
MXP = peso mexican de argint (1861–1992)|||1
MYR = ringgit malaiezian
MZE = escudo Mozambic|||1
MZM = metical Mozambic vechi|||1
MZN = metical mozambican
NAD = dolar namibian
NGN = naira nigeriană
NIC = cordoba nicaraguană (1988–1991)|||1
NIO = cordoba nicaraguană
NLG = gulden olandez|||1
NOK = coroană norvegiană
NPR = rupie nepaleză
NZD = dolar neozeelandez
OMR = rial omanez||3
PAB = balboa panameză
PEI = inti peruvian|||1
PEN = sol peruvian
PES = sol peruvian (1863–1965)|||1
PGK = kina din Papua-Noua Guinee
PHP = peso filipinez
PKR = rupie pakistaneză
PLN = zlot polonez
PLZ = zlot polonez (1950–1995)|||1
PYG = guarani paraguayan||0
QAR = rial qatarian
RHD = dolar rhodesian|||1
ROL = leu românesc (1952–2006)|||1
RON = leu românesc
RSD = dinar sârbesc||0
RUB = rublă rusească
RWF = franc rwandez||0
SAR = rial saudit
SBD = dolar din Insulele Solomon
SCR = rupie din Seychelles
SDD = dinar sudanez|||1
SDG = liră sudaneză
SDP = liră sudaneză (1957–1998)|||1
SEK = coroană suedeză
SGD = dolar singaporez
SHP = liră Insula Sf. Elena
SIT = tolar sloven|||1
SKK = coroană slovacă|||1
SLL = leone din Sierra Leone||0
SOS = șiling somalez||0
SRD = dolar surinamez
SRG = gulden Surinam|||1
SSP = liră din Sudanul de Sud
STD = dobra Sao Tome și Principe (1977–2017)||0|1
STN = dobra Sao Tome și Principe
SUR = rublă sovietică|||1
SVC = colon El Salvador|||1
SYP = liră siriană||0
SZL = lilangeni din Swaziland
THB = baht thailandez
TJR = rublă Tadjikistan|||1
TJS = somoni tadjic
TMM = manat turkmen (1993–2009)||0|1
TMT = manat turkmen
TND = dinar tunisian||3
TOP = pa’anga tongană
TRL = liră turcească (1922–2005)||0|1
TRY = liră turcească|TL
TTD = dolar din Trinidad-Tobago
TWD = dolar nou din Taiwan
TZS = șiling tanzanian
UAH = hryvna ucraineană
UAK = carboavă ucraineană|||1
UGS = șiling ugandez (1966–1987)|||1
UGX = șiling ugandez||0
USD = dolar american
USN = dolar american (ziua următoare)|||1
USS = dolar american (aceeași zi)|||1
UYP = peso Uruguay (1975–1993)|||1
UYU = peso uruguayan
UZS = sum Uzbekistan
VEB = bolivar Venezuela (1871–2008)|||1
VEF = bolivar venezuelean (2008–2018)|||1
VES = bolivar venezuelean
VND = dong vietnamez||0
VUV = vatu din Vanuatu||0
WST = tala samoană
XAF = franc CFA BEAC|FCFA|0
XAG = argint|||1
XAU = aur|||1
XBA = unitate compusă europeană|||1
XBB = unitate monetară europeană|||1
XBC = unitate de cont europeană (XBC)|||1
XBD = unitate de cont europeană (XBD)|||1
XCD = dolar din Caraibele de Est
XDR = drepturi speciale de tragere|||1
XEU = unitate de monedă europeană|||1
XFO = franc francez de aur|||1
XFU = franc UIC francez|||1
XOF = franc CFA BCEAO|CFA|0
XPD = paladiu|||1
XPF = franc CFP|CFPF|0
XPT = platină|||1
XTS = cod monetar de test|||1
XXX = monedă necunoscută|¤||1
YDD = dinar Yemen|||1
YER = rial yemenit||0
YUD = dinar iugoslav greu|||1
YUM = dinar iugoslav nou|||1
YUN = dinar iugoslav convertibil|||1
ZAL = rand sud-african (financiar)|||1
ZAR = rand sud-african
ZMK = kwacha zambian (1968–2012)||0|1
ZMW = kwacha zambian
ZRN = zair nou|||1
ZWD = dolar Zimbabwe (1980–2008)||0|1
ZWL = dolar Zimbabwe (2009)|||1
ZWR = dolar Zimbabwe (2008)|||1
