# 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 = AED
AFN = AFN||0
ALL = ALL||0
AMD = AMD
ANG = ANG
AOA = AOA
ARA = ARA|||1
ARL = ARL|||1
ARM = ARM|||1
ARP = ARP|||1
ARS = ARS
AUD = AUD|A$
AWG = AWG
AZN = AZN
BAM = BAM
BBD = BBD
BDT = BDT
BGN = BGN
BHD = BHD||3
BIF = BIF||0
BMD = BMD
BND = BND
BOB = BOB
BOL = BOL|||1
BOP = BOP|||1
BOV = BOV|||1
BRB = BRB|||1
BRC = BRC|||1
BRE = BRE|||1
BRL = BRL|R$
BRN = BRN|||1
BRR = BRR|||1
BRZ = BRZ|||1
BSD = BSD
BTN = BTN
BWP = BWP
BYN = BYN
BYR = BYR||0|1
BZD = BZD
CAD = CAD|CA$
CDF = CDF
CHF = CHF
CLP = CLP||0
CNH = CNH|||1
CNY = CNY|CN¥
COP = COP
CRC = CRC
CUC = CUC
CUP = CUP
CVE = CVE
CZK = CZK
DEM = DEM|||1
DJF = DJF||0
DKK = DKK
DOP = DOP
DZD = DZD
EGP = EGP
ERN = ERN
ETB = ETB
EUR = يورو|€
FJD = FJD
FKP = FKP
GBP = GBP|£
GEL = GEL
GHS = GHS
GIP = GIP
GMD = GMD
GNF = GNF||0
GTQ = GTQ
GYD = GYD
HKD = HKD|HK$
HNL = HNL
HRK = HRK
HTG = HTG
HUF = HUF
IDR = IDR
IEP = IEP|||1
ILP = ILP|||1
ILS = ILS|₪
INR = روپئیہ [INR]|₹
IQD = IQD||0
IRR = IRR||0
ISK = ISK||0
JMD = JMD
JOD = JOD||3
JPY = JPY|JP¥|0
KES = KES
KGS = KGS
KHR = KHR
KMF = KMF||0
KPW = KPW||0
KRW = KRW|₩|0
KWD = KWD||3
KYD = KYD
KZT = KZT
LAK = LAK||0
LBP = LBP||0
LKR = LKR
LRD = LRD
LTL = LTL|||1
LVL = LVL|||1
LYD = LYD||3
MAD = MAD
MDL = MDL
MGA = MGA||0
MKD = MKD
MMK = MMK||0
MNT = MNT
MOP = MOP
MRO = MRO||0|1
MRU = MRU
MUR = MUR
MVR = MVR
MWK = MWK
MXN = MXN|MX$
MYR = MYR
MZN = MZN
NAD = NAD
NGN = NGN
NIO = NIO
NOK = NOK
NPR = NPR
NZD = NZD|NZ$
OMR = OMR||3
PAB = PAB
PEN = PEN
PGK = PGK
PHP = PHP
PKR = روپئیہ|ر
PLN = PLN
PYG = PYG||0
QAR = QAR
RON = RON
RSD = RSD||0
RUB = RUB
RWF = RWF||0
SAR = SAR
SBD = SBD
SCR = SCR
SDG = SDG
SEK = SEK
SGD = SGD
SHP = SHP
SLL = SLL||0
SOS = SOS||0
SRD = SRD
SSP = SSP
STD = STD||0|1
STN = STN
SUR = SUR|||1
SYP = SYP||0
SZL = SZL
THB = THB
TJS = TJS
TMT = TMT
TND = TND||3
TOP = TOP
TRY = TRY|TL
TTD = TTD
TWD = TWD|NT$
TZS = TZS
UAH = UAH
UGX = UGX||0
USD = USD|US$
UYP = UYP|||1
UYU = UYU
UZS = UZS
VEB = VEB|||1
VEF = VEF|||1
VES = VES
VND = VND|₫|0
VNN = VNN|||1
VUV = VUV||0
WST = WST
XAF = XAF|FCFA|0
XAG = XAG|||1
XAU = XAU|||1
XBB = XBB|||1
XCD = XCD|EC$
XEU = XEU|||1
XOF = XOF|CFA|0
XPF = XPF|CFPF|0
XXX = XXX|¤||1
YER = YER||0
ZAR = ZAR
ZMW = ZMW
