# 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
AED = Dirham Emiriah Arab Bersatu
AFN = Afghani Afghanistan||0
ALL = Lek Albania||0
AMD = Dram Armenia||0
ANG = Guilder Antillen Belanda
AOA = Kwanza Angola
ARS = Peso Argentina
AUD = Dolar Australia|A$
AWG = Florin Aruba
AZN = Manat Azerbaijan
BAM = Mark Boleh Tukar Bosnia-Herzegovina
BBD = Dolar Barbados
BDT = Taka Bangladesh
BGN = Lev Bulgaria
BHD = Dinar Bahrain||3
BIF = Franc Burundi||0
BMD = Dolar Bermuda
BND = Dolar Brunei
BOB = Boliviano Bolivia
BRL = Real Brazil|R$
BSD = Dolar Bahamas
BTN = Ngultrum Bhutan
BWP = Pula Botswana
BYN = Rubel Belarus baharu
BYR = Rubel Belarus (2000–2016)||0|1
BZD = Dolar Belize
CAD = Dolar Kanada
CDF = Franc Congo
CHF = Franc Switzerland
CLP = Peso Chile||0
CNH = Yuan China (luar pesisir)|||1
CNY = Yuan Cina|CN¥
COP = Peso Colombia||0
CRC = Colon Costa Rica
CUC = Peso Boleh Tukar Cuba
CUP = Peso Cuba
CVE = Escudo Tanjung Verde
CZK = Koruna Republik Czech
DJF = Franc Djibouti||0
DKK = Krone Denmark
DOP = Peso Dominican
DZD = Dinar Algeria
EGP = Paun Mesir
ETB = Birr Ethiopia
EUR = Euro|€
FJD = Dolar Fiji
FKP = Paun Kepulauan Falkland
GBP = Paun British|£
GEL = Lari Georgia
GHS = Cedi Ghana
GIP = Paun Gibraltar
GMD = Dalasi Gambia
GNF = Franc Guinea||0
GTQ = Quetzal Guatemala
GYD = Dolar Guyana||0
HKD = Dolar Hong Kong|HK$
HNL = Lempira Honduras
HRK = Kuna Croatia
HTG = Gourde Haiti
HUF = Forint Hungary
IDR = Rupiah Indonesia||0
ILS = Syekel Baharu Israel|₪
INR = Rupee India|₹
IQD = Dinar Iraq||0
IRR = Rial Iran||0
ISK = Krona Iceland||0
JMD = Dolar Jamaica
JOD = Dinar Jordan||3
JPY = Yen Jepun|JP¥|0
KES = Syiling Kenya
KGS = Som Kyrgystani
KHR = Riel Kemboja
KMF = Franc Comoria||0
KPW = Won Korea Utara||0
KRW = Won Korea Selatan|₩|0
KWD = Dinar Kuwait||3
KYD = Dolar Kepulauan Cayman
KZT = Tenge Kazakhstan
LAK = Kip Laos||0
LBP = Paun Lubnan||0
LKR = Rupee Sri Lanka
LRD = Dolar Liberia
LSL = Loti Lesotho
LTL = Litas Lithuania|||1
LVL = Lats Latvia|||1
LYD = Dinar Libya||3
MAD = Dirham Maghribi
MDL = Leu Moldova
MGA = Ariary Malagasy||0
MKD = Denar Macedonia
MMK = Kyat Myanma||0
MNT = Tugrik Mongolia||0
MOP = Pataca Macau
MRO = Ouguiya Mauritania||0
MUR = Rupee Mauritius||0
MVR = Rufiyaa Maldives
MWK = Kwacha Malawi
MXN = Peso Mexico
MYR = Ringgit Malaysia|RM
MZN = Metikal Mozambique
NAD = Dolar Namibia
NGN = Naira Nigeria
NIO = Cordoba Nicaragua
NOK = Krone Norway
NPR = Rupee Nepal
NZD = Dolar New Zealand|NZ$
OMR = Rial Oman||3
PAB = Balboa Panama
PEN = Sol Peru
PGK = Kina Papua New Guinea
PHP = Peso Filipina
PKR = Rupee Pakistan||0
PLN = Zloty Poland
PYG = Guarani Paraguay||0
QAR = Rial Qatar
RON = Leu Romania
RSD = Dinar Serbia||0
RUB = Rubel Rusia
RWF = Franc Rwanda||0
SAR = Riyal Saudi
SBD = Dolar Kepulauan Solomon
SCR = Rupee Seychelles
SDG = Paun Sudan
SEK = Krona Sweden
SGD = Dolar Singapura
SHP = Paun Saint Helena
SLL = Leone Sierra Leone||0
SOS = Syiling Somali||0
SRD = Dolar Surinam
SSP = Paun Sudan selatan
STD = Dobra Sao Tome dan Principe||0|1
SYP = Paun Syria||0
SZL = Lilangeni Swazi
THB = Baht Thai
TJS = Somoni Tajikistan
TMT = Manat Turkmenistan
TND = Dinar Tunisia||3
TOP = Pa’anga Tonga
TRY = Lira Turki|TL
TTD = Dolar Trinidad dan Tobago
TWD = Dolar Taiwan Baru|NT$
TZS = Syiling Tanzania||0
UAH = Hryvnia Ukraine
UGX = Syiling Uganda||0
USD = Dolar AS
UYU = Peso Uruguay
UZS = Som Uzbekistan||0
VEF = Bolivar Venezuela
VND = Dong Vietnam|₫|0
VUV = Vatu Vanuatu||0
WST = Tala Samoa
XAF = Franc CFA BEAC|FCFA|0
XCD = Dolar Caribbean Timur|EC$
XOF = Franc CFA BCEAO|CFA|0
XPF = Franc CFP|CFPF|0
XXX = Mata Wang Tidak Diketahui|||1
YER = Rial Yaman||0
ZAR = Rand Afrika Selatan
ZMK = Kwacha Zambia (1968–2012)||0|1
ZMW = Kwacha Zambia
