# Copyright 2014 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=25
#  date=$Date: 2013-08-26 05:28:21 +0200 (Mon, 26 Aug 2013) $
#  number=$Revision: 9275 $
#  type=Arab
AED = AED
AFN = AFN||0
ALL = ALL||0
AMD = AMD||0
ANG = ANG
AOA = AOA
ARS = ARS
AUD = AUD|$
AWG = AWG
AZN = AZN
BAM = BAM
BBD = BBD
BDT = BDT|৳
BGN = BGN
BHD = BHD||3
BIF = BIF||0
BMD = BMD|$
BND = BND
BOB = BOB
BRL = BRL|R$
BSD = BSD|$
BTN = BTN
BWP = BWP
BYR = BYR||0
BZD = BZD|$
CAD = CAD|CA$
CDF = CDF
CHF = CHF
CLP = CLP|$|0
CNY = CNY|¥
COP = COP||0
CRC = CRC||0
CUC = CUC
CUP = CUP|$
CVE = CVE
CZK = CZK
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||0
HKD = HKD|$
HNL = HNL
HRK = HRK
HTG = HTG
HUF = HUF||0
IDR = IDR||0
ILS = ILS|₪
INR = روپئیہ [INR]|Rs.
IQD = IQD||0
IRR = IRR||0
ISK = ISK||0
JMD = JMD
JOD = JOD||3
JPY = JPY|¥|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
LVL = LVL|||1
LYD = LYD||3
MAD = MAD
MDL = MDL
MGA = MGA||0
MKD = MKD
MMK = MMK||0
MNT = MNT||0
MOP = MOP
MRO = MRO||0
MUR = MUR||0
MVR = MVR
MWK = MWK
MXN = MXN|$
MYR = MYR
MZN = MZN
NAD = NAD|$
NGN = NGN
NIO = NIO
NOK = NOK
NPR = NPR
NZD = NZD|$
OMR = OMR||3
PAB = PAB
PEN = PEN
PGK = PGK
PHP = PHP
PKR = روپئیہ|ر|0
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
SYP = SYP||0
SZL = SZL
THB = THB|฿
TJS = TJS
TMT = TMT
TND = TND||3
TOP = TOP
TRY = TRY
TTD = TTD|$
TWD = TWD|NT$
TZS = TZS||0
UAH = UAH|₴
UGX = UGX||0
USD = USD|$
UYU = UYU
UZS = UZS||0
VEF = VEF
VND = VND|₫|0
VUV = VUV||0
WST = WST
XAF = XAF|FCFA|0
XCD = XCD|EC$
XOF = XOF|CFA|0
XPF = XPF|CFPF|0
XXX = XXX|||1
YER = YER||0
ZAR = ZAR
ZMW = ZMW
