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

ADP = Andora pesetası||0|1
AED = Birləşmiş ərəb emiratlar dirhamı
AFA = Əfgəni (1927-2002)|||1
AFN = Əfgəni||0
ALL = Alban leki||0
AMD = Erməni dramı||0
ANG = Hollandiya antila gilderi
AOA = Anqola kvanzası
AOK = Anqola kvanzasi (1977-1990)|||1
AON = Anqola yeni kvanzası (1990-2000)|||1
AOR = Anqola kvanzası (1995-1999)|||1
ARA = Argentina avstralı|||1
ARP = Argentina pesosu (1983-1985)|||1
ARS = Argentina pesosu
ATS = Avstriya şilingi|||1
AUD = Avstraliya dolları|AU$
AWG = Aruba qilderi
AZM = Manat|||1
AZN = Azərbaycan manatı|man.
BAD = Bosniya-Herzeqovina dinarı|||1
BAM = Bosniya-Herzeqovina markası
BBD = Barbados dolları
BDT = Banqladeş takası
BEC = Belçika frankı (deyşirik)|||1
BEF = Belçika frankı|||1
BEL = Belçika frankı (finans)|||1
BGL = Bolqariya levası|||1
BGN = Bolqariya yeni levası
BHD = Bahreyn dinarı||3
BIF = Burundi frankası||0
BMD = Bermuda dolları
BND = Bruney dolları
BOB = Boliviya boliviano
BOP = Boliviya pesosu|||1
BOV = Boliviya mvdolı|||1
BRB = Braziliya kruzeyro novası|||1
BRC = Braziliya kruzadosu|||1
BRE = Braziliya kruzeyrosu (1990-1993)|||1
BRL = Braziliya realı|R$
BRN = Braziliya kruzado novası|||1
BRR = Braziliya kruzeyrosu|||1
BSD = Bahama dolları
BTN = Butan ngultrumu
BUK = Burmis kyatı|||1
BWP = Botsvana pulası
BYB = Belarusiya yeni rublu|||1
BYR = Belarusiya rublu||0
BZD = Beliz dolları
CAD = Kanadiya dolları|CA$
CDF = Konqoliz frank konqolaysı
CHE = WIR Yevrosu|||1
CHF = İsveçriya frankası||||5
CHW = WIR frankası|||1
CLP = Çili pesosu||0
CNY = Çin yuan renminbi|CN¥
COP = Kolombiya pesosu||0
CRC = Kosta rika kolonu||0
CSD = Qədimi Serb dinarı|||1
CSK = Çexoslavakiya korunası|||1
CUP = Kuba pesosu
CVE = Kape Verde eskudosu
CYP = Kipr paundu|||1
CZK = Çex respublikası korunası
DDM = şərq almaniya ostmarkı|||1
DEM = alman markası|||1
DJF = jibouti frankası||0
DKK = Danemarka kronası
DOP = dominika pesosu
DZD = Alcəzir dinarı
ECS = ekvador sukresi|||1
EEK = Estoniya krunu|||1
EGP = misir paundu
ERN = Eirtreya nakfası
ESA = İspan pesetası (A)|||1
ESB = İspan pesetası (dəyşirik)|||1
ESP = İspan pesetası||0|1
ETB = Efiopiya birası
EUR = Yevro|€
FIM = Fin markası|||1
FJD = Fici dolları
FKP = Folkland Adası paundu
FRF = Fransız markası|||1
GBP = Britaniya paund sterlingi|UK£
GEK = Gürcüstan kupon lariti|||1
GEL = Gürcüstan larisi
GHC = Qana sedisi (1979-2007)|||1
GHS = Qana sedisi
GIP = Gibraltar paundu
GMD = Qambiya dalasi
GNF = Qvineya frankası||0
GNS = Qvineya sulisi|||1
GQE = Ekvatoriya Gvineya ekvele quneanası|||1
GRD = Yunan draçması|||1
GTQ = Qvatemala küetzalı
GWE = Portugal Qvineya eskudosu|||1
GWP = Qvineya-Bisau pesosu|||1
GYD = Quyana dolları||0
HKD = Honk Konq dolları|HK$
HNL = Honduras lempirası
HRD = Xorvatiya dinarı|||1
HRK = Xorvatiya kunu
HTG = Haiti qourdu
HUF = Macarıstan forinti||0
IDR = İndoneziya rupisi||0
IEP = İrlandiya paundu|||1
ILP = İzrail paundu|||1
ILS = İzrail yeni şekeli|₪
INR = Hindistan rupisi|Rs.
IQD = İraq dinarı||0
IRR = İran rialı||0
ISK = Aysland kronası||0
ITL = İtaliya lirası||0|1
JMD = Yamayka dolları
JOD = İordaniya dinarı||3
JPY = Yapon yeni|JP¥|0
KES = Kenya şillingi
KGS = Kırğızstan somu
KHR = Kambodiya riyeli
KMF = Komoro frankı||0
KPW = Şimal koreya vonu||0
KRW = Cənub koreya vonu|₩|0
KWD = Kuveyt dinarı||3
KYD = Keyman Adaları dolları
KZT = Kazaxstan tenqesi
LAK = Laotiya kipi||0
LBP = Lebanon paundu||0
LKR = Şri Lanka rupisi
LRD = Liberiya dolları
LSL = Lesoto lotisi
LTL = Litva litası
LTT = Litva talonası|||1
LUC = Luksemburq frankası (dəyişik)|||1
LUF = Luksemburq frankası||0|1
LUL = Luksemburq frankası (finans)|||1
LVL = Latviya latsı
LVR = Latviya rublu|||1
LYD = Liviya dinarı||3
MAD = Morokko dirhamı
MAF = Morokko frankası|||1
MDL = Moldova leyusu
MGA = Madaqaskar ariarisi||0
MGF = Madaqaskar frankası||0|1
MKD = Masedoniya denarı
MLF = Mali frankı|||1
MMK = Myanmar kiyatı||0
MNT = Monqoliya tuqriki||0
MOP = Makao patakası
MRO = Mavritaniya oyuquyası||0
MTP = Maltiz paundu|||1
MUR = Mavritis rupiyi||0
MVR = Maldiv Adaları rufiyi
MWK = Malavi kvaçası
MXN = Meksika pesosu|MX$
MXP = Meksika gümüş pesosu|||1
MYR = Malaysiya rinqiti
MZE = Mozambik eskudosu|||1
MZM = Qədim Mozambik metikalı|||1
MZN = Mozambik metikalı
NAD = Namibiya dolları
NGN = Nigeriya nairi
NIC = Nikaraqua kordobu|||1
NLG = Hollandiya gilderi|||1
NOK = Norveç kronu
NPR = Nepal rupiyi
NZD = Yeni Zelandiya dolları|NZ$
OMR = Mman rialı||3
PAB = Panamaniya balboa
PEI = Peru inti|||1
PEN = Peru sol nuyevosu
PES = Peru solu|||1
PGK = Papua Yeni Qvineya kini
PHP = Filipin pesosu
PKR = Pakistan rupiyi||0
PLN = Polsha zlotisi
PLZ = Polsha zlotisi (1950-1995)|||1
PTE = Portuqal eskudosu|||1
PYG = Paraqvay quarani||0
QAR = Qatar rialı
RHD = Rodezian dolları|||1
ROL = Qədim Roman leyu|||1
RON = Roman leyu
RSD = Serbiya dinarı||0
RUB = Rusiya rublu
RUR = Rusiya rublu (1991-1998)|||1
RWF = Rvanda frankı||0
SAR = Saudi riyalı
SBD = Solomon Adaları dolları
SCR = Seyçel rupiyi
SDG = Sudan paundu
SEK = İsveç kronu
SGD = Sinqapur dolları
SIT = Sloveniya toları|||1
SKK = Slovak korunası|||1
SOS = Somaliya şillingi||0
SRD = Surinam dolları
SUR = Sovet rublu|||1
SVC = el salvador kolonu|||1
SYP = Siriya paundu||0
SZL = Svazilənd lilangeni
THB = tay bahtı|฿
TJR = Tacikistan rublu|||1
TJS = Tacikistan somoni
TMM = Türkmənistan manatı||0|1
TND = Tunis dinarı||3
TOP = Tonqa panqası
TPE = Timor eskudu|||1
TRL = Türk köhnə lirası||0|1
TRY = Türk lirası
TWD = Tayvan yeni dolları|NT$
TZS = Tanzaniya şilingi||0
UAH = Ukraina hrivnyası
UAK = Ukraina karbovenesası|||1
UGS = Uqanda şelingi (1966-1987)|||1
UGX = Uqanda şelingi||0
USD = ABŞ dolları|US$
USN = ABŞ dolları (yeni gün)|||1
USS = ABŞ dolları (həmin gün)|||1
UYI = Uruqvay pesosu Unidades Indexadas|||1
UYP = Uruqvay pesosu (1975-1993)|||1
UYU = Uruqvay pesosu
UZS = Özbəkistan sumu||0
VEB = Venesuela bolivarı (1871-2008)|||1
VEF = Venesuela bolivarı
VND = Vyetnam donqu|₫|0
WST = Qərb Samoa talası
XAG = gümüş|||1
XAU = qızıl|||1
XCD = Şərq karib dolları|EC$
XFO = Fransız gızıl frankı|||1
XFU = Fransız UİC frankı|||1
XOF = CFA franka BCEAO|CFA|0
XPD = Palladium|||1
XPF = CFP frankı|CFPF|0
XPT = platinum|||1
XXX = bilinməyən vəya gəcərsiz|||1
YDD = yemen dinarı|||1
YER = yemen rialı||0
YUD = Yuqoslaviya dinarı (hard)|||1
YUM = Yuqoslaviya yeni dinarı (hard)|||1
YUN = Yuqoslaviya dinarı (dəyişik)|||1
ZAL = Cənub afrika randı (finans)|||1
ZAR = Cənub afrika randı
ZMK = Zambiya kvaçı||0
ZRN = Zair yeni zairi|||1
ZRZ = Zair zairi|||1
ZWD = Zimbabve dolları (1980-2008)||0|1
