# 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
ADP = ADP||0|1
AED = AED
AFA = AFA|||1
AFN = AFN||0
ALK = ALK|||1
ALL = ALL||0
AMD = AMD
ANG = ANG
AOA = AOA
AOK = AOK|||1
AON = AON|||1
AOR = AOR|||1
ARA = ARA|||1
ARL = ARL|||1
ARM = ARM|||1
ARP = ARP|||1
ARS = ARS
ATS = ATS|||1
AUD = AUD|A$
AWG = AWG
AZM = AZM|||1
AZN = AZN
BAD = BAD|||1
BAM = BAM
BAN = BAN|||1
BBD = BBD
BDT = BDT
BEC = BEC|||1
BEF = BEF|||1
BEL = BEL|||1
BGL = BGL|||1
BGM = BGM|||1
BGN = BGN
BGO = BGO|||1
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
BUK = BUK|||1
BWP = BWP
BYB = BYB|||1
BYN = BYN
BYR = BYR||0|1
BZD = BZD
CAD = CAD|CA$
CDF = CDF
CHE = CHE|||1
CHF = CHF
CHW = CHW|||1
CLE = CLE|||1
CLF = CLF||4|1
CLP = CLP||0
CNH = CNH|||1
CNX = CNX|||1
CNY = CNY|CN¥
COP = COP
COU = COU|||1
CRC = CRC
CSD = CSD|||1
CSK = CSK|||1
CUC = CUC
CUP = CUP
CVE = CVE
CYP = CYP|||1
CZK = CZK
DDM = DDM|||1
DEM = DEM|||1
DJF = DJF||0
DKK = DKK
DOP = DOP
DZD = DZD
ECS = ECS|||1
ECV = ECV|||1
EEK = EEK|||1
EGP = EGP
ERN = ERN
ESA = ESA|||1
ESB = ESB|||1
ESP = ESP||0|1
ETB = ETB
EUR = EUR|€
FIM = FIM|||1
FJD = FJD
FKP = FKP
FRF = FRF|||1
GBP = GBP|£
GEK = GEK|||1
GEL = GEL
GHC = GHC|||1
GHS = GHS
GIP = GIP
GMD = GMD
GNF = GNF||0
GNS = GNS|||1
GQE = GQE|||1
GRD = GRD|||1
GTQ = GTQ
GWE = GWE|||1
GWP = GWP|||1
GYD = GYD
HKD = HKD|HK$
HNL = HNL
HRD = HRD|||1
HRK = HRK
HTG = HTG
HUF = HUF
IDR = IDR
IEP = IEP|||1
ILP = ILP|||1
ILR = ILR|||1
ILS = ILS|₪
INR = INR|₹
IQD = IQD||0
IRR = IRR||0
ISJ = ISJ|||1
ISK = ISK||0
ITL = ITL||0|1
JMD = JMD
JOD = JOD||3
JPY = JPY|JP¥|0
KES = KES
KGS = KGS
KHR = KHR
KMF = KMF||0
KPW = KPW||0
KRH = KRH|||1
KRO = KRO|||1
KRW = KRW|₩|0
KWD = KWD||3
KYD = KYD
KZT = KZT
LAK = LAK||0
LBP = LBP||0
LKR = LKR
LRD = LRD
LSL = LSL
LTL = LTL|||1
LTT = LTT|||1
LUC = LUC|||1
LUF = LUF||0|1
LUL = LUL|||1
LVL = LVL|||1
LVR = LVR|||1
LYD = LYD||3
MAD = MAD
MAF = MAF|||1
MCF = MCF|||1
MDC = MDC|||1
MDL = MDL
MGA = MGA||0
MGF = MGF||0|1
MKD = MKD
MKN = MKN|||1
MLF = MLF|||1
MMK = MMK||0
MNT = MNT
MOP = MOP
MRO = MRO||0|1
MRU = MRU
MTL = MTL|||1
MTP = MTP|||1
MUR = MUR
MVP = MVP|||1
MVR = MVR
MWK = MWK
MXN = MXN|MX$
MXP = MXP|||1
MXV = MXV|||1
MYR = MYR
MZE = MZE|||1
MZM = MZM|||1
MZN = MZN
NAD = NAD
NGN = NGN
NIC = NIC|||1
NIO = NIO
NLG = NLG|||1
NOK = NOK
NPR = NPR
NZD = NZD|NZ$
OMR = OMR||3
PAB = PAB
PEI = PEI|||1
PEN = PEN
PES = PES|||1
PGK = PGK
PHP = PHP
PKR = PKR
PLN = PLN
PLZ = PLZ|||1
PTE = PTE|||1
PYG = PYG||0
QAR = QAR
RHD = RHD|||1
ROL = ROL|||1
RON = RON
RSD = RSD||0
RUB = RUB
RUR = RUR|||1
RWF = RWF||0
SAR = SAR
SBD = SBD
SCR = SCR
SDD = SDD|||1
SDG = SDG
SDP = SDP|||1
SEK = SEK
SGD = SGD
SHP = SHP
SIT = SIT|||1
SKK = SKK|||1
SLL = SLL||0
SOS = SOS||0
SRD = SRD
SRG = SRG|||1
SSP = SSP
STD = STD||0|1
STN = STN
SUR = SUR|||1
SVC = SVC|||1
SYP = SYP||0
SZL = SZL
THB = THB
TJR = TJR|||1
TJS = TJS
TMM = TMM||0|1
TMT = TMT
TND = TND||3
TOP = TOP
TPE = TPE|||1
TRL = TRL||0|1
TRY = TRY|TL
TTD = TTD
TWD = TWD|NT$
TZS = TZS
UAH = UAH
UAK = UAK|||1
UGS = UGS|||1
UGX = UGX||0
USD = USD|US$
USN = USN|||1
USS = USS|||1
UYI = UYI||0|1
UYP = UYP|||1
UYU = UYU
UYW = UYW||4|1
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
XBA = XBA|||1
XBB = XBB|||1
XBC = XBC|||1
XBD = XBD|||1
XCD = XCD|EC$
XDR = XDR|||1
XEU = XEU|||1
XFO = XFO|||1
XFU = XFU|||1
XOF = XOF|CFA|0
XPD = XPD|||1
XPF = XPF|CFPF|0
XPT = XPT|||1
XRE = XRE|||1
XSU = XSU|||1
XTS = XTS|||1
XUA = XUA|||1
XXX = XXX|¤||1
YDD = YDD|||1
YER = YER||0
YUD = YUD|||1
YUM = YUM|||1
YUN = YUN|||1
YUR = YUR|||1
ZAL = ZAL|||1
ZAR = ZAR
ZMK = ZMK||0|1
ZMW = ZMW
ZRN = ZRN|||1
ZRZ = ZRZ|||1
ZWD = ZWD||0|1
ZWL = ZWL|||1
ZWR = ZWR|||1
