# *   Copyright (C) 1998-2015, International Business Machines
# *   Corporation and others.  All Rights Reserved.
REGION_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  REGION_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  REGION_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
REGION_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt he_IL.txt id_ID.txt\
 in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\
 ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt no.txt\
 no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\
 pa_PK.txt ro_MD.txt sh.txt sh_BA.txt sh_CS.txt\
 sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\
 sr_Cyrl_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_BA.txt sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt\
 sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\
 th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt uz_Arab_AF.txt\
 uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt\
 zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt zh_MO.txt\
 zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
REGION_ALIAS_SOURCE = $(REGION_SYNTHETIC_ALIAS)


# Ordinary resources
REGION_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.txt ar_AE.txt as.txt asa.txt az.txt\
 az_Cyrl.txt az_Latn.txt bas.txt be.txt bem.txt\
 bez.txt bg.txt bm.txt bn.txt bo.txt\
 bo_IN.txt br.txt brx.txt bs.txt bs_Cyrl.txt\
 bs_Latn.txt ca.txt ce.txt cgg.txt chr.txt\
 cs.txt cy.txt da.txt dav.txt de.txt\
 de_CH.txt dje.txt dsb.txt dua.txt dyo.txt\
 dz.txt ebu.txt ee.txt el.txt en.txt\
 en_150.txt en_AG.txt en_AI.txt en_AT.txt en_AU.txt\
 en_BB.txt en_BE.txt en_BM.txt en_BS.txt en_BW.txt\
 en_BZ.txt en_CA.txt en_CC.txt en_CH.txt en_CK.txt\
 en_CM.txt en_CX.txt en_CY.txt en_DE.txt en_DG.txt\
 en_DK.txt en_DM.txt en_ER.txt en_FI.txt en_FJ.txt\
 en_FK.txt en_FM.txt en_GB.txt en_GD.txt en_GG.txt\
 en_GH.txt en_GI.txt en_GM.txt en_GY.txt en_HK.txt\
 en_IE.txt en_IL.txt en_IM.txt en_IN.txt en_IO.txt\
 en_JE.txt en_JM.txt en_KE.txt en_KI.txt en_KN.txt\
 en_KY.txt en_LC.txt en_LR.txt en_LS.txt en_MG.txt\
 en_MO.txt en_MS.txt en_MT.txt en_MU.txt en_MW.txt\
 en_MY.txt en_NA.txt en_NF.txt en_NG.txt en_NL.txt\
 en_NR.txt en_NU.txt en_NZ.txt en_PG.txt en_PH.txt\
 en_PK.txt en_PN.txt en_PW.txt en_RW.txt en_SB.txt\
 en_SC.txt en_SD.txt en_SE.txt en_SG.txt en_SH.txt\
 en_SI.txt en_SL.txt en_SS.txt en_SX.txt en_SZ.txt\
 en_TC.txt en_TK.txt en_TO.txt en_TT.txt en_TV.txt\
 en_TZ.txt en_UG.txt en_VC.txt en_VG.txt en_VU.txt\
 en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt eo.txt\
 es.txt es_419.txt es_AR.txt es_BO.txt es_CL.txt\
 es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EC.txt\
 es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
 es_PE.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\
 es_UY.txt es_VE.txt et.txt eu.txt ewo.txt\
 fa.txt fa_AF.txt ff.txt fi.txt fil.txt\
 fo.txt fr.txt fr_CA.txt fur.txt fy.txt\
 ga.txt gd.txt gl.txt gsw.txt gu.txt\
 guz.txt gv.txt ha.txt haw.txt he.txt\
 hi.txt hr.txt hsb.txt hu.txt hy.txt\
 id.txt ig.txt ii.txt is.txt it.txt\
 ja.txt jgo.txt jmc.txt ka.txt kab.txt\
 kam.txt kde.txt kea.txt khq.txt ki.txt\
 kk.txt kkj.txt kl.txt kln.txt km.txt\
 kn.txt ko.txt kok.txt ks.txt ksb.txt\
 ksf.txt ksh.txt kw.txt ky.txt lag.txt\
 lb.txt lg.txt lkt.txt ln.txt lo.txt\
 lrc.txt lt.txt lu.txt luo.txt luy.txt\
 lv.txt mas.txt mer.txt mfe.txt mg.txt\
 mgh.txt mgo.txt mk.txt ml.txt mn.txt\
 mr.txt ms.txt mt.txt mua.txt my.txt\
 mzn.txt naq.txt nb.txt nd.txt ne.txt\
 nl.txt nmg.txt nn.txt nnh.txt nus.txt\
 nyn.txt om.txt or.txt os.txt pa.txt\
 pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\
 pt_AO.txt pt_CV.txt pt_GW.txt pt_MO.txt pt_MZ.txt\
 pt_PT.txt pt_ST.txt pt_TL.txt qu.txt rm.txt\
 rn.txt ro.txt rof.txt ru.txt rw.txt\
 rwk.txt sah.txt saq.txt sbp.txt se.txt\
 se_FI.txt seh.txt ses.txt sg.txt shi.txt\
 shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\
 smn.txt sn.txt so.txt sq.txt sr.txt\
 sr_Cyrl.txt sr_Latn.txt sv.txt sw.txt sw_CD.txt\
 ta.txt te.txt teo.txt th.txt ti.txt\
 to.txt tr.txt twq.txt tzm.txt ug.txt\
 uk.txt ur.txt ur_IN.txt uz.txt uz_Arab.txt\
 uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt\
 vi.txt vun.txt wae.txt xog.txt yav.txt\
 yi.txt yo.txt yo_BJ.txt zgh.txt zh.txt\
 zh_Hans.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

