# 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-07-20 19:27:45 +0200 (Sat, 20 Jul 2013) $
#  number=$Revision: 9061 $
#  type=PT
AED = Dirham dos Emirados Árabes Unidos
AFA = Afeghani (1927–2002)|||1
AFN = Afegani do Afeganistão||0
ALL = Lek albanês||0
AMD = Dram arménio||0
AOA = Kwanza angolano
AWG = Florim de Aruba
AZN = Manat do Azerbaijão
BAD = Dinar da Bósnia-Herzegóvina|||1
BAM = Marco bósnio-herzegóvino conversível
BDT = Taka de Bangladesh|৳
BEC = Franco belga (convertível)|||1
BHD = Dinar baremita||3
BMD = Dólar bermudense|$
BND = Dólar bruneíno
BSD = Dólar das Bahamas|$
BTN = Ngultrum do Butão
BWP = Pula de Botswana
BYB = Rublo novo bielorusso (1994–1999)|||1
BYR = Rublo bielorusso||0
BZD = Dólar belizense|$
CAD = Dólar canadiano|CA$
CRC = Colon costa-riquenho||0
CYP = Libra de Chipre|||1
DJF = Franco jibutiano||0
ECV = Unidad de Valor Constante (UVC) do Equador|||1
FJD = Dólar de Fiji
FKP = Libra das Ilhas Falkland
GHC = Cedi do Gana|||1
GHS = Cedi de Gana
GMD = Dalasi da Gâmbia
GNF = Franco Guineense||0
GTQ = Quetzal da Guatemala
GYD = Dólar da Guiana||0
HNL = Lempira das Honduras
HUF = Forint húngaro||0
ILS = Sheqel novo israelita|₪
INR = Rupia indiana|Rs.
KGS = Som do Quirguistão
KMF = Franco comoriano||0
KWD = Dinar kuwaitiano||3
KYD = Dólar das Ilhas Caimão|$
KZT = Tenge do Cazaquistão|₸
LKR = Rupia do Sri Lanka
LTL = Litas da Lituânia
LVL = Lats da Letónia|||1
MAD = Dirham marroquino
MDL = Leu moldavo
MGA = Ariari de Madagáscar||0
MKD = Dinar macedónio
MLF = Franco do Mali|||1
MMK = Kyat de Mianmar||0
MNT = Tugrik da Mongólia||0
MOP = Pataca de Macau
MRO = Ouguiya da Mauritânia||0
MVR = Rupia das Ilhas Maldivas
MWK = Kwacha do Malawi
MXP = Peso Plata mexicano (1861–1992)|||1
MXV = Unidad de Inversion (UDI) mexicana|||1
MZN = Metical de Moçambique
NAD = Dólar da Namíbia|$
NIC = Córdoba nicaraguano|||1
NIO = Córdoba Ouro nicaraguano
NZD = Dólar neozelandês|$
OMR = Rial de Omã||3
PAB = Balboa panamenho
PGK = Kina da Papua-Nova Guiné
PLN = Zloti polaco
PLZ = Zloti polaco (1950–1995)|||1
QAR = Rial do Qatar
SGD = Dólar de Singapura|$
SRD = Dólar do Suriname
STD = Dobra de São Tomé e Príncipe|Db|0
SZL = Lilangeni da Suazilândia
THB = Baht da Tailândia|฿
TJS = Somoni do Tajaquistão
TND = Dinar tunisino||3
TOP = Paʻanga de Tonga
TTD = Dólar de Trindade e Tobago|$
TZS = Xelim tanzaniano||0
UAH = Hryvnia da Ucrânia|₴
USD = Dólar dos Estados Unidos|$
UZS = Som do Uzbequistão||0
XAF = Franco CFA de BEAC|FCFA|0
XCD = Dólar das Caraíbas Orientais|EC$
XEU = Unidade da Moeda Europeia|||1
XOF = Franco CFA de BCEAO|CFA|0
YUD = Dinar forte jugoslavo|||1
YUM = Super Dinar jugoslavo|||1
YUN = Dinar conversível jugoslavo|||1
ZMK = Kwacha zambiano (1968–2012)||0|1
ZMW = Kwacha zambiano
ZWD = Dólar do Zimbabwe||0|1
