# 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 = United Arab Emirates Dirham
AFN = Afghan Afghani||0
ALL = Albanian Lek||0
AMD = Armenian Dram
ANG = Antillean Guilder ng Netherlands
AOA = Angolan Kwanza
ARS = Piso ng Argentina
AUD = Dolyar ng Australya|A$
AWG = Florin ng Aruba
AZN = Azerbaijani Manat
BAM = Bosnia-Herzegovina Convertible Mark
BBD = Dolyar ng Barbados
BDT = Bangladeshi Taka
BGN = Bulgarian Lev
BHD = Bahraini Dinar||3
BIF = Burundian Franc||0
BMD = Dolyar ng Bermuda
BND = Dolyar ng Brunei
BOB = Boliviano ng Bolivia
BRL = Real ng Barzil|R$
BSD = Dolyar ng Bahamas
BTN = Bhutanese Ngultrum
BWP = Botswanan Pula
BYN = Belarusian Ruble
BYR = Belarusian Ruble (2000–2016)||0|1
BZD = Dolyar ng Belize
CAD = Dolyar ng Canada|CA$
CDF = Congolese Franc
CHF = Swiss Franc
CLP = Piso ng Chile||0
CNY = Chinese Yuan|CN¥
COP = Piso ng Colombia
CRC = Colón ng Costa Rica
CUC = Convertible na Piso ng Cuba
CUP = Piso ng Cuba
CVE = Cape Verdean Escudo
CZK = Czech Republic Koruna
DEM = Deutsche Marks|||1
DJF = Djiboutian Franc||0
DKK = Danish Krone
DOP = Piso ng Dominican
DZD = Algerian Dinar
EEK = Estonian Kroon|||1
EGP = Egyptian Pound
ERN = Eritrean Nakfa
ETB = Ethiopian Birr
EUR = Euro|€
FJD = Dolyar ng Fiji
FKP = Pound ng Falkland Islands
FRF = French Franc|||1
GBP = British Pound|£
GEL = Georgian Lari|₾
GHS = Ghanaian Cedi
GIP = Gibraltar Pound
GMD = Gambian Dalasi
GNF = Guinean Franc||0
GTQ = Quetzal ng Guatemala
GYD = Dolyar ng Guyanese
HKD = Dolyar ng Hong Kong|HK$
HNL = Lempira ng Honduras
HRK = Croatian Kuna
HTG = Gourde ng Haiti
HUF = Hungarian Forint
IDR = Indonesian Rupiah
ILS = Israeli New Sheqel|₪
INR = Indian Rupee|₹
IQD = Iraqi Dinar||0
IRR = Iranian Rial||0
ISK = Icelandic Króna||0
JMD = Dolyar ng Jamaica
JOD = Jordanian Dinar||3
JPY = Japanese Yen|¥|0
KES = Kenyan Shilling
KGS = Kyrgystani Som
KHR = Cambodian Riel
KMF = Comorian Franc||0
KPW = Won ng Hilagang Korea||0
KRW = Won ng Timog Korea|₩|0
KWD = Kuwaiti Dinar||3
KYD = Dolyar ng Cayman Islands
KZT = Kazakhstani Tenge
LAK = Laotian Kip||0
LBP = Pound ng Lebanon||0
LKR = Sri Lankan Rupee
LRD = Dolyar ng Liberia
LSL = Lesotho Loti
LTL = Lithuanian Litas|||1
LVL = Latvian Lats|||1
LYD = Libyan Dinar||3
MAD = Moroccan Dirham
MDL = Moldovan Leu
MGA = Malagasy Ariary||0
MKD = Macedonian Denar
MMK = Myanmar Kyat||0
MNT = Mongolian Tugrik
MOP = Macanese Pataca
MRO = Mauritanian Ouguiya (1973–2017)||0|1
MRU = Ouguiya ng Mauritania
MUR = Mauritian Rupee
MVR = Maldivian Rufiyaa
MWK = Malawian Kwacha
MXN = Piso ng Mexico|MX$
MYR = Malaysian Ringgit
MZN = Mozambican Metical
NAD = Dolyar ng Namibia
NGN = Nigerian Naira
NIO = Córdoba ng Nicaragua
NOK = Norwegian Krone
NPR = Nepalese Rupee
NZD = Dolyar ng New Zealand|NZ$
OMR = Omani Rial||3
PAB = Balboa ng Panama
PEN = Peruvian Sol
PGK = Papua New Guinean Kina
PHP = Piso ng Pilipinas|₱
PKR = Pakistani Rupee
PLN = Polish Zloty
PYG = Paraguayan Guarani||0
QAR = Qatari Rial
RON = Romanian Leu
RSD = Serbian Dinar||0
RUB = Russian Ruble
RWF = Rwandan Franc||0
SAR = Saudi Riyal
SBD = Dolyar ng Solomon Islands
SCR = Seychellois Rupee
SDG = Pound ng Sudan
SEK = Swedish Krona
SGD = Dolyar ng Singapore
SHP = Saint Helena Pound
SIT = Slovenian Tolar|||1
SKK = Slovak Koruna|||1
SLL = Sierra Leonean Leone||0
SOS = Somali Shilling||0
SRD = Dolyar ng Suriname
SSP = Pound ng Timog Sudan
STD = São Tomé & Príncipe Dobra (1977–2017)||0|1
STN = São Tomé & Príncipe Dobra (2018)
SYP = Syrian Pound||0
SZL = Swazi Lilangeni
THB = Thai Baht|฿
TJS = Tajikistani Somoni
TMT = Turkmenistani Manat
TND = Tunisian Dinar||3
TOP = Tongan Paʻanga
TRY = Turkish Lira|TL
TTD = Dolyar ng Trinidad and Tobago
TWD = Dolyar ng New Taiwan|NT$
TZS = Tanzanian Shilling
UAH = Ukrainian Hryvnia
UGX = Ugandan Shilling||0
USD = Dolyar ng US|$
UYU = Piso ng Uruguay
UZS = Uzbekistan Som
VEB = Venezuelan Bolívar (1871–2008)|||1
VEF = Bolívar ng Venezuela (2008–2018)|||1
VES = Bolívar ng Venezuela
VND = Vietnamese Dong|₫|0
VUV = Vanuatu Vatu||0
WST = Samoan Tala
XAF = CFA Franc BEAC|FCFA|0
XCD = Dolyar ng Silangang Caribbean|EC$
XOF = CFA Franc ng Kanlurang Africa|CFA|0
XPF = CFP Franc|CFPF|0
XXX = Hindi Kilalang Pera|¤||1
YER = Yemeni Rial||0
ZAR = Rand ng Timog Africa
ZMK = Zambian Kwacha (1968–2012)||0|1
ZMW = Zambian Kwacha
