# 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:
#  cldrVersion=21.0
#  number=$Revision: 6546 $
#  type=root
#  date=$Date: 2012-02-07 13:32:35 -0500 (Tue, 07 Feb 2012) $

AED = Adirham n Tgeldunin Taɛrabin Yedduklen
AOA = Akwanza n Ungula
AUD = Adular n Lusṭrali|AU$
BHD = Adinar Abaḥrini||3
BIF = Afrank Aburandi||0
BWP = Apula Abusṭwanan
CAD = Adular Akanadi|CA$
CDF = Afrank Akunguli
CHF = Afrank Aswis||||5
CNY = Ayuwan Renminbi Acinwa|CN¥
CVE = Akabuviradinu Askudi
DJF = Afrank Ajibuti||0
DZD = Adinar Azzayri|DA
EGP = Apund Amaṣri
ERN = Anakfa Iritiri
ETB = Abir Utyupi
EUR = Uru|€
GBP = Apund Sterling Aglizi|UK£
GHC = Asidi Aɣani|||1
GMD = Adalasi Agambi
GNS = Afrank Aɣini|||1
INR = Arupi Ahendi|Rs.
JPY = Ayen Ajappuni|JP¥|0
KES = Aciling Akini
KMF = Afrank Akamiruni||0
LRD = Adular Alibiri
LSL = Aluṭi Alizuṭi
LYD = Adinar Alibi||3
MAD = Adirham Amerruki
MGA = Aryari Amalgac||0
MRO = Agiya Amuriṭani||0
MUR = Arupi Amurisi||0
MWK = Akwaca Amalawi
MZM = Amitikal Amuzembiqi|||1
NAD = Adular Anamibi
NGN = Anayra Anijiri
RWF = Afrank Aruwandi||0
SAR = Aryal Asuɛudi
SCR = Arupi Aseycili
SDG = Apund Asudani
SHP = Apund Asant Ilini
SLL = Alyun||0
SOS = Aciling Aṣumali||0
STD = Asw Ṭum d Udubra Amenzay||0
SZL = Alilangini
TND = Adinar Atunsi||3
TZS = Aciling Aṭanẓani||0
UGX = Aciling Awgandi||0
USD = Adular WD|US$
XAF = Afrank BCEA CFA|FCFA|0
XOF = Afrank BCEAO CFA|CFA|0
ZAR = Arand Afriqi n Wadda
ZMK = Akwaca Azambi||0
ZWD = Adular Azimbabwi||0|1
