# 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 = Dilàm è Yùnaetɛ Alab Emelɛ̀
AOA = Kwanzà è Àŋgolà
AUD = Dɔlà e Ùsɨ̀tɛ̀lɛlìa|A$
BHD = Dinà è Balae||3
BIF = Fàlâŋ è Bùlundì||0
BWP = Kpuwlà è Botɨshǔanà
CAD = Dɔlà è Kanadà|CA$
CDF = Fàlâŋ è Kuŋgùlê
CHF = Fàlâŋ è Sues
CNY = Yùwân Lèmembi è Chaenî|CN¥
CVE = Kàbòvàdianù è Èsùkudò
DJF = Fàlâŋ è Dzìbutì||0
DZD = Dinà è Àdzɛlìa
EGP = Bɔ̀ŋ è Edzì
ERN = Nakafa è Èletɨ̀làe
ETB = Bîi è Etyǒkpìa
EUR = Yulù|€
GBP = Bɔ̀ŋ è Bèletì|£
GHC = Sɛ̀di è Gaanà|||1
GMD = Dàlasì è Gambìa
GNS = Fàlâŋ è Ginè|||1
INR = Lukpì è Endìa|₹
JPY = Ghɨ̂n Dzàkpànê|JP¥|0
KES = Shwɨlà tɨ Kenyà
KMF = Fàlâŋ è Komolìa||0
LRD = Dɔlà Làebɛlìa
LSL = Lɔtì Lèsutù
LYD = Dinà è Lebìa||3
MAD = Dilàm è Mòlokò
MGA = Àlǐalè è Màlàgasì||0
MRO = Ùgueya è Mùlètenyìa (1973–2017)||0|1
MRU = Ùgueya è Mùlètenyìa
MUR = Lukpìi è Mùleshòs
MWK = Kwachà è Màlawè
MZM = Mètikà è Mùzàmbî|||1
NAD = Dɔlà è Nàmibìa
NGN = Naelà è Gɨ̀anyɨ
RWF = Fàlâŋ è Lùwandà||0
SAR = Leyà è Sàwudì
SCR = Lukpìi è Sɛchɛ̀lɛ̀
SDG = Bɔ̀ŋ è Sùdànê
SHP = Bɔ̀ŋ è Sɛ̀n Èlenà
SLL = Lyɔ̂ŋ||0
SOS = Shwɨlà è Sùmalìa||0
STD = Dɔbàlà è Sàwu Tɔ̀me à Pèlènsipè (1977–2017)||0|1
STN = Dɔbàlà è Sàwu Tɔ̀me à Pèlènsipè
SZL = Lèlàŋgenè
TND = Dinà è Tùwneshìa||3
TZS = Shwɨlà è Tàanzanyìa
UGX = Shwɨlà è Yùgandà||0
USD = Dɔlà è US|US$
XAF = CFA Fàlâŋ BEAC|FCFA|0
XOF = CFA Fàlâŋ BCEAO|CFA|0
ZAR = Lân è Afɨlekà ghɨ Emàm ghò
ZMK = Kwachà è Zambìa (1968–2012)||0|1
ZMW = Kwachà è Zambìa
ZWD = Dɔlà è Zìmbagbɛ̀||0|1
