<!DOCTYPE OFX [

<!--
    $Revision$
    $Date$
       
 Open Financial Exchange DTD 
 Copyright 1997, 1998 CheckFree Corp., Intuit Inc., Microsoft Corp.  All rights reserved
   
-->

<!-- ============================================================================= -->
<!-- ENTITIES - Extensions
    This entity allows users of this DTD to add new message sets
    to the DTD.
-->
<!-- ============================================================================= -->

<!-- Add extra xxxMSGSETRQVn here -->
<!ENTITY % EXTRARQMSGSETS "">

<!-- Add extra xxxMSGSETRSVn here -->
<!ENTITY % EXTRARSMSGSETS "">

<!-- Add extra XXXMSGSET here -->
<!ENTITY % EXTRAMSGSETS   "">

<!-- ============================================================================= -->
<!-- ENTITIES - types
    This section defines entities as 'types' for all 
    primitive element values.  This is the only place
    that #PCDATA should appear.  
-->
<!-- ============================================================================= -->


<!-- Server ID : encoding for <TOKEN>s, <SERVERTID>s, etc -->
<!ENTITY % SRVRIDTYPE "(#PCDATA)" >
<!--#ENTITY % SRVRIDTYPE			#Datatype(A-10)-->

<!-- UUID : a universal ID , up to 36 char hexadecimal -->
<!-- OFX 1.5 -->
<!-- Also encoding for <TOKEN2>s, <SERVERTID2>s, etc -->
<!ENTITY % UUIDTYPE "(#PCDATA)" >
<!--#ENTITY % UUIDTYPE			#Datatype(A-36)-->

<!-- Character string data, not used anymore -->
<!ENTITY % STRTYPE  "(#PCDATA)">

<!-- Single character data -->
<!ENTITY % CHARTYPE "(#PCDATA)">
<!--#ENTITY % CHARTYPE			#Datatype(A-1)-->

<!-- URL -->
<!ENTITY % URLTYPE  "(#PCDATA)">
<!--#ENTITY % URLTYPE			#Datatype(A-255)-->

<!-- URL2 was added to OFX 1.5 to handle longer URLs -->
<!ENTITY % URL2TYPE  "(#PCDATA)">
<!--#ENTITY % URL2TYPE			#Datatype(A-1024)-->

<!-- Integer -->
<!ENTITY % INTTYPE  "(#PCDATA)">
<!--#ENTITY % INTTYPE			#Datatype(I-4)-->

<!-- Rate, percentage -->
<!ENTITY % RATETYPE "(#PCDATA)">
<!--#ENTITY % RATETYPE			#DataType(N-32)-->

<!-- Current Amount: Used for specifying an amount.
 may be signed; comma or period for decimal point
-->
<!ENTITY % AMTTYPE  "(#PCDATA)">
<!--#ENTITY % AMTTYPE			#DataType(N-32)-->

<!--  Date and Time: Used for specifying
 the date and time. All date-time pairs
 are based on local time of the server or client.
-->
<!ENTITY % DTTMTYPE "(#PCDATA)">
<!--#ENTITY % DTTMTYPE			#DataType(DATE)-->

<!-- Date and Time formatted with the option to accept a zero as well -->
<!ENTITY % DTTMTYPE0 "(#PCDATA)">
<!--#ENTITY % DTTMTYPE0			#DataType(DATE0)-->

<!-- Datatype with time only, no date -->
<!ENTITY % TMTYPE "(#PCDATA)">
<!--#ENTITY % TMTYPE 			#DataType(TIME)-->

<!-- OFX 1.5 -->
<!-- NEW Type -->
<!--  OTZ Date and Time: Used for specifying
    the date and time with no time zone interpretation. 
-->
<!ENTITY % OTZDTTMTYPE "(#PCDATA)">
<!--#ENTITY % OTZDTTMTYPE		#Datatype(OTZDATE)-->

<!-- Boolean : Y/N -->
<!ENTITY % BOOLTYPE "(#PCDATA)">
<!--#ENTITY % BOOLTYPE			#DataType(BOOL)-->

<!-- a general purpose identifier type -->
<!ENTITY % IDTYPE   "(#PCDATA)">
<!--#ENTITY % IDTYPE			#DataType(A-32)-->

<!-- a general purpose name type -->
<!ENTITY % GENNAMETYPE   "(#PCDATA)">
<!--#ENTITY % GENNAMETYPE		#DataType(A-32)-->

<!-- Profile data types brought from MIFST 1.0 -->
<!ENTITY % EMPTYTYPE "(#PCDATA)">
<!--#ENTITY % EMPTYTYPE 		#DataType(A0-0)-->
<!ENTITY % STATETYPE "(#PCDATA)">
<!--#ENTITY % STATETYPE 		#DataType(A-5)-->
<!ENTITY % APPIDTYPE "(#PCDATA)">
<!--#ENTITY % APPIDTYPE			#DataType(A-5)-->
<!ENTITY % BANKIDTYPE "(#PCDATA)">
<!--#ENTITY % BANKIDTYPE		#DataType(A-9)-->
<!ENTITY % RATINGTYPE "(#PCDATA)">
<!--#ENTITY % RATINGTYPE		#DataType(A-10)-->
<!ENTITY % ZIPTYPE "(#PCDATA)">
<!--#ENTITY % ZIPTYPE			#DataType(A-11)-->
<!ENTITY % PAYEEIDTYPE "(#PCDATA)">
<!--#ENTITY % PAYEEIDTYPE	    	#DataType(A-12)-->
<!ENTITY % CHECKNUMTYPE "(#PCDATA)">
<!--#ENTITY % CHECKNUMTYPE		#DataType(A-12)-->
<!ENTITY % NONCETYPE "(#PCDATA)">
<!--#ENTITY % NONCETYPE	    		#DataType(A-16)-->
<!ENTITY % BROKERIDTYPE "(#PCDATA)">
<!--#ENTITY % BROKERIDTYPE 		#DataType(A-22)-->
<!ENTITY % ACCTIDTYPE "(#PCDATA)">
<!--#ENTITY % ACCTIDTYPE		#DataType(A-22)-->
<!ENTITY % CITYTYPE "(#PCDATA)">
<!--#ENTITY % CITYTYPE			#DataType(A-32)-->
<!ENTITY % TICKERTYPE "(#PCDATA)">
<!--#ENTITY % TICKERTYPE		#DataType(A-32)-->
<!ENTITY % FIIDTYPE "(#PCDATA)">
<!--#ENTITY % FIIDTYPE			#DataType(A-32)-->
<!ENTITY % FIASSETTYPE "(#PCDATA)">
<!--#ENTITY % FIASSETTYPE		#DataType(A-32)-->
<!ENTITY % TYPEDESCTYPE "(#PCDATA)">
<!--#ENTITY % TYPEDESCTYPE		#DataType(A-32)-->
<!ENTITY % PHONETYPE "(#PCDATA)">
<!--#ENTITY % PHONETYPE			#DataType(A-32)-->
<!ENTITY % ADDRESSTYPE "(#PCDATA)">
<!--#ENTITY % ADDRESSTYPE		#DataType(A-32)-->
<!ENTITY % CLTCOOKIETYPE "(#PCDATA)">
<!--#ENTITY % CLTCOOKIETYPE		#DataType(A-32)-->
<!ENTITY % OPTIONLEVELTYPE "(#PCDATA)">
<!--#ENTITY % OPTIONLEVELTYPE		#DataType(A-40)-->
<!ENTITY % SUBJECTTYPE "(#PCDATA)">
<!--#ENTITY % SUBJECTTYPE		#DataType(A-60)-->
<!ENTITY % FICERTIDTYPE "(#PCDATA)">
<!--#ENTITY % FICERTIDTYPE		#DataType(A-64)-->
<!ENTITY % USERKEYTYPE "(#PCDATA)">
<!--#ENTITY % USERKEYTYPE		#DataType(A-64)-->
<!ENTITY % SHORTMSGTYPE "(#PCDATA)">
<!--#ENTITY % SHORTMSGTYPE		#DataType(A-80)-->
<!ENTITY % SECNAMETYPE "(#PCDATA)">
<!--#ENTITY % SECNAMETYPE		#DataType(A-120)-->
<!ENTITY % PASSWORDTYPE "(#PCDATA)">
<!--#ENTITY % PASSWORDTYPE		#DataType(A-171)-->
<!ENTITY % FITIDTYPE "(#PCDATA)">
<!--#ENTITY % FITIDTYPE			#DataType(A-255)-->
<!ENTITY % MSGTYPE "(#PCDATA)">
<!--#ENTITY % MSGTYPE			#DataType(A-255)-->
<!ENTITY % LONGMSGTYPE "(#PCDATA)">
<!--#ENTITY % LONGMSGTYPE		#DataType(A-2000)-->
<!ENTITY % MEMO2TYPE "(#PCDATA)">
<!--#ENTITY % MEMO2TYPE			#DataType(A-390)-->
<!ENTITY % CHKDESCNAME "(#PCDATA)">
<!--#ENTITY % CHKDESCNAME		#DataType(A-32)-->
<!ENTITY % INFOTYPE "(#PCDATA)">
<!--#ENTITY % INFOTYPE			#DataType(A-360)-->
<!ENTITY % SESSCOOKIETYPE "(#PCDATA)">
<!--#ENTITY % SESSCOOKIETYPE		#DataType(A-1000)-->
<!ENTITY % MSGBODYTYPE "(#PCDATA)">
<!--#ENTITY % MSGBODYTYPE		#DataType(R-10000)-->
<!ENTITY % INVNOTYPE "(#PCDATA)">
<!--#ENTITY % INVNOTYPE			#DataType(A-32)-->
<!ENTITY % NINSTS "(#PCDATA)">
<!--#ENTITY % NINSTS			#DataType(I-3)-->
<!ENTITY % TEMPPASSTYPE "(#PCDATA)">
<!--#ENTITY % TEMPPASSTYPE		#DataType(A-32)-->
<!ENTITY % SIGNONREALMTYPE "(#PCDATA)">
<!--#ENTITY % SIGNONREALMTYPE		#DataType(A-32)-->
<!ENTITY % EXTDPMTDSCTYPE "(#PCDATA)">
<!--#ENTITY % EXTDPMTDSCTYPE		#DataType(A-255)-->
<!ENTITY % DAYSPANTYPE "(#PCDATA)">
<!--#ENTITY % DAYSPANTYPE		#DataType(I-3)-->
<!ENTITY % XFERFEETYPE "(#PCDATA)">
<!--#ENTITY % XFERFEETYPE		#DataType(N-8)-->
<!ENTITY % REFNUMTYPE "(#PCDATA)">
<!--#ENTITY % REFNUMTYPE		#DataType(A-32)-->
<!ENTITY % CHKERRORTYPE "(#PCDATA)">
<!--#ENTITY % CHKERRORTYPE		#DataType(A-255)-->
<!ENTITY % MAXMINTYPE "(#PCDATA)">
<!--#ENTITY % MAXMINTYPE		#DataType(I-2)-->
<!ENTITY % VERTYPE "(#PCDATA)">
<!--#ENTITY % VERTYPE			#DataType(I-5)-->
<!ENTITY % SHARESPERTYPE "(#PCDATA)">
<!--#ENTITY % SHARESPERTYPE		#DataType(I-5)-->
<!ENTITY % ERRORTYPE "(#PCDATA)">
<!--#ENTITY % ERRORTYPE  		#DataType(I-6)-->
<!ENTITY % SICTYPE "(#PCDATA)">
<!--#ENTITY % SICTYPE    		#DataType(I-6)-->
<!ENTITY % CUSIPTYPE "(#PCDATA)">
<!--#ENTITY % CUSIPTYPE			#DataType(N-9)-->
<!ENTITY % EXTTYPE "(#PCDATA)">
<!--#ENTITY % EXTTYPE			#DataType(I-10)-->
<!ENTITY % UNITSUSERTYPE "(#PCDATA)">
<!--#ENTITY % UNITSUSERTYPE		#DataType(A-32)-->
<!ENTITY % INVDESCTYPE "(#PCDATA)">
<!--#ENTITY % INVDESCTYPE		#DataType(A-80)-->
<!ENTITY % LITMDESCTYPE "(#PCDATA)">
<!--#ENTITY % LITMDESCTYPE		#DataType(A-80)-->
<!ENTITY % BILLREFINFOTYPE "(#PCDATA)">
<!--#ENTITY % BILLREFINFOTYPE		#DataType(A-80)-->
<!ENTITY % BOOKINGTEXTTYPE "(#PCDATA)">
<!--#ENTITY % BOOKINGTEXTTYPE		#DataType(A-40)-->
<!ENTITY % NAMEACCTHELDTYPE "(#PCDATA)">
<!--#ENTITY % NAMEACCTHELDTYPE	#DataType(A-96)-->
<!ENTITY % COLUMNTYPE "(#PCDATA)">
<!--#ENTITY % COLUMNTYPE		#DataType(A-8)-->
<!ENTITY % TANTYPE "(#PCDATA)">
<!--#ENTITY % TANTYPE			#DataType(A-80)-->

<!-- Country-specific data types follow -->

<!ENTITY % ITACAUSALETYPE "(#PCDATA)">
<!--#ENTITY % ITACAUSALETYPE		#DataType(I-2)-->


<!-- Enumerated data types follow-->

<!ENTITY % ASSETCLASSENUM "(#PCDATA)">
<!--#ENTITY % ASSETCLASSENUM		#Enum("DOMESTICBOND", "INTLBOND","LARGESTOCK","SMALLSTOCK",
							  "INTLSTOCK","MONEYMRKT","OTHER")-->
<!ENTITY % CALLTYPEENUM "(#PCDATA)">
<!--#ENTITY % CALLTYPEENUM		#Enum("CALL", "PUT","PREFUND","MATURITY")-->
<!ENTITY % STOCKENUM "(#PCDATA)">
<!--#ENTITY % STOCKENUM			#Enum("COMMON", "PREFERRED","CONVERTIBLE","OTHER")-->
<!ENTITY % BUYENUM "(#PCDATA)">
<!--#ENTITY % BUYENUM			#Enum("BUY", "BUYTOCOVER")-->
<!ENTITY % INCOMEENUM "(#PCDATA)">
<!--#ENTITY % INCOMEENUM		#Enum("CGLONG", "CGSHORT","DIV","INTEREST", "MISC")-->
<!ENTITY % OPTACTIONENUM "(#PCDATA)">
<!--#ENTITY % OPTACTIONENUM		#Enum("EXERCISE", "ASSIGN","EXPIRE")-->
<!ENTITY % OPTBUYENUM "(#PCDATA)">
<!--#ENTITY % OPTBUYENUM		#Enum("BUYTOOPEN", "BUYTOCLOSE")-->
<!ENTITY % OPTSELLENUM "(#PCDATA)">
<!--#ENTITY % OPTSELLENUM		#Enum("SELLTOOPEN", "SELLTOCLOSE")-->
<!ENTITY % POSTYPEENUM "(#PCDATA)">
<!--#ENTITY % POSTYPEENUM		#Enum("LONG", "SHORT")-->
<!ENTITY % RELATEDENUM "(#PCDATA)">
<!--#ENTITY % RELATEDENUM		#Enum("SPREAD", "STRADDLE","NONE","OTHER")-->
<!ENTITY % SECUREDENUM "(#PCDATA)">
<!--#ENTITY % SECUREDENUM		#Enum("NAKED", "COVERED")-->
<!ENTITY % SELLREASONENUM "(#PCDATA)">
<!--#ENTITY % SELLREASONENUM		#Enum("CALL", "MATURITY", "SELL")-->
<!ENTITY % SELLTYPEENUM "(#PCDATA)">
<!--#ENTITY % SELLTYPEENUM		#Enum("SELL", "SELLSHORT")-->
<!ENTITY % DURATIONENUM "(#PCDATA)">
<!--#ENTITY % DURATIONENUM		#Enum("DAY", "GOODTILCANCEL","IMMEDIATE")-->
<!ENTITY % RESTRICTIONENUM "(#PCDATA)">
<!--#ENTITY % RESTRICTIONENUM		#Enum("ALLORNONE", "MINUNITS","NONE")-->
<!ENTITY % INOUTENUM "(#PCDATA)">
<!--#ENTITY % INOUTENUM			#Enum("IN", "OUT")-->
<!ENTITY % UNITTYPEENUM "(#PCDATA)">
<!--#ENTITY % UNITTYPEENUM		#Enum("SHARES", "CURRENCY")-->
<!ENTITY % SUBACCTENUM "(#PCDATA)">
<!--#ENTITY % SUBACCTENUM		#Enum("CASH", "MARGIN","SHORT","OTHER")-->
<!ENTITY % OPTTYPEENUM "(#PCDATA)">
<!--#ENTITY % OPTTYPEENUM		#Enum("CALL", "PUT")-->
<!ENTITY % MFTENUM "(#PCDATA)">
<!--#ENTITY % MFTENUM			#Enum("OPENEND", "CLOSEEND","OTHER")-->
<!ENTITY % DEBTENUM "(#PCDATA)">
<!--#ENTITY % DEBTENUM			#Enum("COUPON","ZERO")-->
<!ENTITY % DEBTCLASSENUM "(#PCDATA)">
<!--#ENTITY % DEBTCLASSENUM		#Enum("TREASURY", "MUNICIPAL","CORPORATE","OTHER")-->
<!ENTITY % EXTDPMTFORENUM "(#PCDATA)">
<!--#ENTITY % EXTPMTFORENUM		#Enum("INDIVIDUAL","BUSINESS")-->
<!ENTITY % COUPONFREQENUM "(#PCDATA)">
<!--#ENTITY % COUPONFREQENUM		#Enum("MONTHLY","QUARTERLY","SEMIANNUALLY","ANUALLY","OTHER")-->
<!ENTITY % CHARTYPEENUM "(#PCDATA)">
<!--#ENTITY % CHARTYPEENUM		#Enum("ALPHAONLY","NUMERICONLY","ALPHAORNUMERIC","ALPHAANDNUMERIC")-->
<!ENTITY % BALANCEENUM "(#PCDATA)">
<!--#ENTITY % BALANCEENUM		#Enum("DOLLAR","PERCENT","NUMBER")-->
<!ENTITY % ACCOUNTENUM "(#PCDATA)">
<!--#ENTITY % ACCOUNTENUM		#Enum("CHECKING","SAVINGS","MONEYMRKT","CREDITLINE")-->
<!ENTITY % ACCOUNTENUM2 "(#PCDATA)">
<!--#ENTITY % ACCOUNTENUM2		#Enum("CHECKING","SAVINGS","MONEYMRKT","CREDITLINE","CMA")-->
<!ENTITY % FREQENUM "(#PCDATA)">
<!--#ENTITY % FREQENUM			#Enum("WEEKLY","BIWEEKLY","TWICEMONTHLY","MONTHLY","FOURWEEKS","BIMONTHLY",
							"QUARTERLY","SEMIANNUALLY","TRIANNUALLY","ANUALLY")-->
<!ENTITY % DAYSENUM "(#PCDATA)">
<!--#ENTITY % DAYSENUM			#Enum("MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY",
							"SATURDAY","SUNDAY")-->
<!ENTITY % CLIENTROUTINGENUM "(#PCDATA)">
<!--#ENTITY % CLIENTROUTINGENUM	#Enum("NONE","SERVICE","MSGSET")-->
<!ENTITY % XFERSTATUSENUM "(#PCDATA)">
<!--#ENTITY % XFERSTATUSENUM		#Enum("WILLPROCESSON","POSTEDON","NOFUNDSON", "CANCELEDON", "FAILEDON")-->
<!ENTITY % TRANSACTIONENUM "(#PCDATA)">
<!--#ENTITY % TRANSACTIONENUM		#Enum("CREDIT","DEBIT","INT","DIV","FEE","SRVCHG","DEP","ATM",
			       			"POS","XFER","CHECK","PAYMENT","CASH","DIRECTDEP","DIRECTDEBIT",
			       			"REPEATPMT","OTHER")-->		
<!ENTITY % PMTPROCESSSTATUSENUM "(#PCDATA)">
<!--#ENTITY % PMTPROCESSSTATUSENUM	#Enum("WILLPROCESSON","PROCESSEDON","NOFUNDSON","FAILEDON",
							"CANCELEDON")-->
<!ENTITY % USPRODUCTENUM "(#PCDATA)">
<!--#ENTITY % USPRODUCTENUM		#Enum("401K","403B","IRA","KEOGH","OTHER","SARSEP","SIMPLE","NORMAL",
				   			"TDA","TRUST","UGMA")-->
<!ENTITY % ASSETENUM "(#PCDATA)">
<!--#ENTITY % ASSETENUM			#Enum("DOMESTICBOND","INTLBOND","LARGESTOCK","SMALLSTOCK","INTLSTOCK",
				  			"MONEYMRKT","OTHER")-->
<!ENTITY % SEVERITYENUM "(#PCDATA)">
<!--#ENTITY % SEVERITYENUM		#Enum("INFO","WARN","ERROR")-->
<!ENTITY % SECURITYENUM "(#PCDATA)">
<!--#ENTITY % SECURITYENUM		#Enum("NONE","TYPE1")-->
<!ENTITY % SYNCENUM "(#PCDATA)">
<!--#ENTITY % SYNCENUM			#Enum("FULL","LITE")-->
<!ENTITY % SERVICESTATUSENUM "(#PCDATA)">
<!--#ENTITY % SERVICESTATUSENUM	#Enum("AVAIL","PEND", "ACTIVE")-->
<!ENTITY % SERVICEENUM "(#PCDATA)">
<!--#ENTITY % SERVICEENUM		#Enum("BANKSVC","BPSVC", "INVSVC")-->
<!ENTITY % SERVICEENUM2 "(#PCDATA)">
<!--#ENTITY % SERVICEENUM2		#Enum("BANKSVC","BPSVC", "INVSVC", "PRESSVC")-->
<!ENTITY % CORRECTIVEACTENUM "(#PCDATA)">
<!--#ENTITY % CORRECTIVEACTENUM	#Enum("REPLACE","DELETE")-->
<!ENTITY % CHECKSTATUSENUM "(#PCDATA)">
<!--#ENTITY % CHECKSTATUSENUM		#Enum("0","1","100","101")-->
<!ENTITY % IDSCOPEENUM "(#PCDATA)">
<!--#ENTITY % IDSCOPEENUM		#Enum("GLOBAL","USER")-->
<!ENTITY % INVESTMENTACCOUNTENUM "(#PCDATA)">
<!--#ENTITY % INVESTMENTACCOUNTENUM	#Enum("INDIVIDUAL","JOINT", "TRUST", "CORPORATE")-->
<!ENTITY % SECUIDENUM "(#PCDATA)">
<!--#ENTITY % SECUIDENUM 		#Enum("CUSIP")-->
<!ENTITY % PWTYPEENUM "(#PCDATA)">
<!--#ENTITY % PWTYPEENUM 		#Enum("FIXED","ONETIME","HWTOKEN")-->
<!ENTITY % PMTINSTRUMENTENUM "(#PCDATA)">
<!--#ENTITY % PMTINSTRUMENTENUM 	#Enum("CONCENTRATOR","CHECKINGACCOUNT","CREDITCARD","ECOIN")-->

<!ENTITY % COUNTRYENUM "(#PCDATA)">
<!--#ENTITY % COUNTRYENUM		#Enum("AFG","ALB","DZA","ASM","AND","AGO","AIA","ATA",
							"ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS",
							"BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU",
							"BTN","BOL","BIH","BWA","BVT","BRA","IOT","BRN",
							"BGR","BFA","BDI","KHM","CMR","CAN","CPV","CYM",
							"CAF","TCD","CHL","CHN","CXR","CCK","COL","COM",
							"COG","COK","CRI","CIV","HRV","CUB","CYP","CZE",
							"DNK","DJI","DMA","DOM","TMP","ECU","EGY","SLV",
							"GNQ","ERI","EST","ETH","FLK","FRO","FJI","FIN",
							"FRA","FXX","GUF","PYF","ATF","GAB","GMB","GEO",
							"DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM",
							"GTM","GIN","GNB","GUY","HTI","HMD","HND","HKG",
							"HUN","ISL","IND","IDN","IRN","IRQ","IRL","ISR",
							"ITA","JAM","JPN","JOR","KAZ","KEN","KIR","PRK",
							"KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR",
							"LBY","LIE","LTU","LUX","MAC","MKD","MDG","MWI",
							"MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS",
							"MYT","MEX","FSM","MDA","MCO","MNG","MSR","MAR",
							"MOZ","MMR","NAM","NRU","NPL","NLD","ANT","NCL",
							"NZL","NIC","NER","NGA","NIU","NFK","MNP","NOR",
							"OMN","PAK","PLW","PAN","PNG","PRY","PER","PHL",
							"PCN","POL","PRT","PRI","QAT","REU","ROM","RUS",
							"RWA","KNA","LCA","VCT","WSM","SMR","STP","SAU",
							"SEN","SYC","SLE","SGP","SVK","SVN","SLB","SOM",
							"ZAF","SGS","SSP","LKA","SHN","SPM","SDN","SUR",
							"SJM","SWZ","SWE","CHE","SYR","TWN","TJK","TZA",
							"THA","TGO","TKL","TON","TTO","TUN","TUR","TKM",
							"TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI",
							"URY","UZB","VUT","VAT","VEN","VNM","VGB","VIR",
							"WLF","ESH","YEM","YUG","ZAR","ZM","ZWE")-->
<!ENTITY % LANGUAGEENUM "(#PCDATA)">
<!--#ENTITY % LANGUAGEENUM		#Enum("AAR","ABK","ACE","ACH","ADA","AFA","AFH","AFR",
 							"AJM","AKA","AKK","ALB","ALE","ALG","AMH","ANG",
							"APA","ARA","ARC","ARM","ARN","ARP","ART","ARW",
							"ASM","ATH","AVA","AVE","AWA","AYM","AZE","BAD",
							"BAI","BAK","BAL","BAM","BAN","BAQ","BAS","BAT",
 							"BEJ","BEL","BEM","BEN","BER","BHO","BIH","BIK",
							"BIN","BIS","BLA","BOD","BRA","BRE","BUG","BUL",
 							"BUR","CAD","CAI","CAR","CAT","CAU","CEB","CEL",
 							"CES","CHA","CHB","CHE","CHG","CHI","CHN","CHO",
							"CHR","CHU","CHV","CHY","COP","COR","COS","CPE",
							"CPF","CPP","CRE","CRP","CUS","CYM","CZE","DAK",
							"DAN","DEL","DEU","DIN","DOI","DRA","DUA","DUM",
							"DUT","DYU","DZO","EFI","EGY","EKA","ELL","ELX",
							"ENG","ENM","EPO","ESK","ESL","EST","ETH","EUS",
							"EWE","EWO","FAN","FAO","FAS","FAT","FIJ","FIN",
							"FIU","FON","FRA","FRE","FRM","FRO","FRY","FUL",
							"GAA","GAE","GAI","GAY","GDH","GEM","GEO","GER",
							"GIL","GLG","GMH","GOH","GON","GOT","GRB","GRC",
							"GRE","GRN","GUJ","HAI","HAU","HAW","HEB","HER",
							"HIL","HIM","HIN","HMO","HUN","HUP","HYE","IBA",
							"IBO","ICE","IJO","IKU","ILE","ILO","INA","INC",
							"IND","INE","IPK","IRA","IRI","IRO","ISL","ITA",
							"JAV","JAW","JPN","JPR","JRB","KAA","KAB","KAC",
							"KAL","KAM","KAN","KAR","KAS","KAT","KAU","KAW",
							"KAZ","KHA","KHI","KHM","KHO","KIK","KIN","KIR",
							"KOK","KON","KOR","KPE","KRO","KRU","KUA","KUR",
							"KUS","KUT","LAD","LAH","LAM","LAO","LAP","LAT",
							"LAV","LIN","LIT","LOL","LOZ","LUB","LUG","LUI",
							"LUN","LUO","MAC","MAD","MAG","MAH","MAI","MAK",
							"MAL","MAN","MAO","MAP","MAR","MAS","MAX","MAY",
							"MEN","MIC","MIN","MIS","MKE","MKH","MLG","MLT",
							"MNI","MNO","MOH","MOL","MON","MOS","MRI","MSA",
 							"MUL","MUN","MUS","MWR","MYA","MYN","NAH","NAI",
							"NAU","NAV","NDE","NLD","NDO","NEP","NEW","NIC",
							"NIU","NON","NOR","NSO","NUB","NYA","NYM","NYN",
							"NYO","NZI","OCI","OJI","ORI","ORM","OSA","OSS",
							"OTA","OTO","PAA","PAG","PAL","PAM","PAN","PAP",
							"PAU","PEO","PER","PLI","POL","PON","POR","PRA",
							"PRO","PUS","QUE","RAJ","RAR","ROA","ROH","ROM",
							"RON","RUM","RUN","RUS","SAD","SAG","SAI","SAL",
							"SAM","SAN","SCO","SCR","SEL","SEM","SHN","SID",
							"SIN","SIO","SIT","SLA","SLK","SLO","SLV","SMO",
							"SNA","SND","SOG","SOM","SON","SOT","SPA","SQI",
 							"SRR","SSA","SSW","SUK","SUN","SUS","SUX","SVE",
							"SWA","SWE","SYR","TAH","TAM","TAT","TEL","TEM",
							"TER","TGK","TGL","THA","TIB","TIG","TIR","TIV",
							"TLI","TOG","TON","TRU","TSI","TSN","TSO","TUK",
							"TUM","TUR","TUT","TWI","UGA","UIG","UKR","UMB",
							"UND","URD","UZB","VAI","VEN","VIE","VOL","VOT",
							"WAK","WAL","WAR","WAS","WEL","WEN","WOL","XHO",
							"YAO","YAP","YID","YOR","ZAP","ZEN","ZHA","ZHO",
							"ZUL","ZUN")-->

<!ENTITY % CURRENCYENUM "(#PCDATA)">
<!--#ENTITY % CURRENCYENUM		#Enum("ADP","AED","AFA","ALL","ANG","AOK","ARA","ATS","AUD",
							"AWG","BBD","BDT","BEF","BGL","BHD","BIF","BMD","BND",
							"BOB","BRC","BSD","BTN","BUK","BWP","BZD","CAD","CHF",
							"CLF","CLP","CNY","COP","CRC","CSK","CUP","CVE","CYP",
							"DDM","DEM","DJF","DKK","DOP","DZD","ECS","EGP","ESP",
							"ETB","FIM","FJD","FKP","FRF","GBP","GHC","GIP","GMD",
							"GNF","GRD","GTQ","GWP","GYD","HKD","HNL","HTG","HUF",
							"IDR","IEP","ILS","INR","IQD","IRR","ISK","ITL","JMD",
							"JOD","JPY","KES","KHR","KMF","KPW","KRW","KWD","KYD",
							"LAK","LBP","LKR","LRD","LSL","LUF","LYD","MAD","MGF",
							"MNT","MOP","MRO","MTL","MUR","MVR","MWK","MXP","MYR",
							"MZM","NGN","NIC","NLG","NOK","NPR","NZD","OMR","PAB",
							"PEI","PGK","PHP","PKR","PLZ","PTE","PYG","QAR","ROL",
							"RWF","SAR","SBD","SCR","SDP","SEK","SGD","SHP","SLL",
							"SOS","SRG","STD","SUR","SVC","SYP","SZL","THB","TND",
							"TOP","TPE","TRL","TTD","TWD","TZS","UGS","USD","UYP",
							"VEB","VND","VUV","WST","YDD","YER","YUD","ZAR","ZMK",
							"ZRZ","ZWD")-->




<!-- ============================================================================= -->
<!-- ENTITIES - macros
    This section defines macros used in one or more modules
    where a new level of aggregation was not desired but
    common structure is present
-->
<!-- ============================================================================= -->

<!-- Sync macros: all sync requests/responses have same form, but
     have own name.  Although we could use the multiple-element syntax and put
     them all here, we'd rather keep service-specific names in the service files.
     Thus, we have a macro here that is trivially referenced in each service module -->

<!-- OFX 1.5 -->
<!-- ADDED TOKEN2 -->
<!ENTITY % SYNCRQMACRO "((TOKEN | TOKEN2 | TOKENONLY | REFRESH ) 
    , REJECTIFMISSING)" >   
<!--#ENTITY SYNCRQMACRO #Link(TOKEN,(SIGNONMSGSETV1 | SIGNUPMSGSETV1 | EMAILMSGSETV1 | 
					BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ENTITY SYNCRQMACRO #Link(TOKEN2,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!-- OFX 1.5 -->
<!-- ADDED SYNCERROR -->
<!-- ADDED TOKEN2 -->
<!ENTITY % SYNCRSMACRO "((TOKEN | TOKEN2), LOSTSYNC?, SYNCERROR?)">
<!--#ENTITY SYNCRSMACRO #Link(TOKEN,(SIGNONMSGSETV1 | SIGNUPMSGSETV1 | EMAILMSGSETV1 | 
					BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ENTITY SYNCRSMACRO #Link(TOKEN2,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!--#ENTITY SYNCRSMACRO #Link(SYNCERROR,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!-- Transaction Macro: all transaction requests have same form
     but own name.  Didn't want to create a new sub-aggregate
     to hold these elements so use a macro to incorporate them
     into each XXXTRNRQ and XXXTRNRS -->
<!ENTITY % TRNRQMACRO "(TRNUID , CLTCOOKIE?, TAN?)">
<!ENTITY % TRNRSMACRO "(TRNUID , STATUS , CLTCOOKIE?)">

<!-- Account from and account info: if you add a new service and it adds
     a specific account from or account info aggregate, add it here so it will be
     known to aggregates such as the account info request -->
<!-- OFX 1.5 -->
<!-- ADDED PRESACCTFROM -->
<!ENTITY % ACCTFROMMACRO "(BANKACCTFROM | CCACCTFROM | INVACCTFROM| PRESACCTFROM)">
<!--#ENTITY ACCTFROMMACRO #Link(PRESACCTFROM,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!-- OFX 1.5 -->
<!-- ADDED PRESACCTTO -->
<!ENTITY % ACCTTOMACRO "(BANKACCTTO | CCACCTTO | INVACCTTO | PRESACCTTO)">
<!--#ENTITY ACCTTOMACRO #Link(PRESACCTTO,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!-- OFX 1.5 -->
<!-- ADDED PRESACCTINFO -->
<!ENTITY % ACCTINFOMACRO "(BANKACCTINFO | CCACCTINFO | BPACCTINFO | INVACCTINFO | PRESACCTINFO)">
<!--#ENTITY ACCTINFOMACRO #Link(PRESACCTINFO,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
 
<!-- Profile message set macro 
     Each of the XXXMSGSET tags need to be listed here
     Referenced in oxprof MSGSETLIST element -->
<!ENTITY % MSGSETMACRO "
                     (SIGNONMSGSET?,
                      SIGNUPMSGSET?,
                      BANKMSGSET?,
                      CREDITCARDMSGSET?,
                      INVSTMTMSGSET?,
                      INTERXFERMSGSET?,
                      WIREXFERMSGSET?,
                      BILLPAYMSGSET?,
                      EMAILMSGSET?,
                      SECLISTMSGSET?,
                      PROFMSGSET?,
                      PRESDIRMSGSET?,
                      PRESDLVMSGSET?
                      %EXTRAMSGSETS
                      )">
                      
<!-- ============================================================================= -->

<!-- Signon Message set -->
<!-- Different from most: only one sonrq and at most one
     pin change allowed -->
<!ELEMENT (SIGNONMSGSRQV1, SIGNONMSGSRQV2)    - - (SONRQ , PINCHTRNRQ?, CHALLENGETRNRQ?)>
<!ELEMENT (SIGNONMSGSRSV1, SIGNONMSGSRSV2)    - - (SONRS , PINCHTRNRS?, CHALLENGETRNRS?)>

<!-- Signon message set profile entry -->
<!ELEMENT SIGNONMSGSET      - - (SIGNONMSGSETV1?, SIGNONMSGSETV2?)>
<!ELEMENT (SIGNONMSGSETV1, SIGNONMSGSETV2)    - - (MSGSETCORE)>


<!-- Transactions -->
<!ELEMENT PINCHTRNRQ    - - (%TRNRQMACRO , PINCHRQ)>
<!ELEMENT CHALLENGETRNRQ    - - (%TRNRQMACRO , CHALLENGERQ)>
<!ELEMENT PINCHTRNRS    - - (%TRNRSMACRO , PINCHRS?)>
<!ELEMENT CHALLENGETRNRS    - - (%TRNRSMACRO , CHALLENGERS?)>


<!-- Signon Request and Response -->

<!-- Signon Request version 2 adds country and onetimepass for non-US -->
<!-- OFX 1.5 -->
<!-- ADDED ONETIMEPASS, COUNTRY -->
<!-- COUNTRY was originally named COUNTSYS, until it was noticed that its data type is
     the same as that for country names in addresses. Since both are based on the ISO
     code for countries, the element name was changed in the signon -->
<!ELEMENT SONRQ 	- - (DTCLIENT , ((USERID , USERPASS, ONETIMEPASS?) | USERKEY),
                         GENUSERKEY? , LANGUAGE , FI? , SESSCOOKIE? , APPID , APPVER, COUNTRY?)>
<!--#ELEMENT SONRQ #Link(ONETIMEPASS,SIGNONMSGSETV2)-->
<!--#ELEMENT SONRQ #Link(COUNTRY,SIGNONMSGSETV2)-->

<!ELEMENT FI            - - (ORG , FID?)>
<!ELEMENT ORG           - o %GENNAMETYPE>
<!ELEMENT FID           - o %FIIDTYPE>

<!-- OFX 1.5 -->
<!-- ONETIMEPASS, A-32 -->
<!ELEMENT ONETIMEPASS   - o %TEMPPASSTYPE>
<!ELEMENT SESSCOOKIE    - o %SESSCOOKIETYPE>

<!-- Signon Response version 2 adds country for non-US -->
<!-- OFX 1.5 -->
<!-- ADDED COUNTRY -->
<!ELEMENT SONRS		- - (STATUS , DTSERVER , USERKEY? , 
                         TSKEYEXPIRE? , LANGUAGE ,
                        DTPROFUP? , DTACCTUP? , FI?, SESSCOOKIE?, COUNTRY?)>
<!--#ELEMENT SONRS #Link(COUNTRY,SIGNONMSGSETV2)-->

<!-- PIN Change request and response -->

<!ELEMENT PINCHRQ   - - (USERID , NEWUSERPASS)>

<!ELEMENT PINCHRS   - - (USERID , DTCHANGED?)>

<!ELEMENT NEWUSERPASS	- o %PASSWORDTYPE>
<!ELEMENT DTCHANGED     - o %DTTMTYPE>

<!-- Challenge request and response -->

<!ELEMENT CHALLENGERQ   - - (USERID, FICERTID?)>

<!ELEMENT CHALLENGERS   - - (USERID , NONCE, FICERTID)>

<!ELEMENT NONCE 	- o %NONCETYPE>
<!ELEMENT FICERTID 	- o %FICERTIDTYPE>


<!-- ============================================================================= -->
<!--            Message Entries for Message Sets                                    -->
<!-- ============================================================================= -->

<!ELEMENT BANKMSGSET        - - (BANKMSGSETV1?, BANKMSGSETV2?)>
<!ELEMENT CREDITCARDMSGSET  - - (CREDITCARDMSGSETV1?, CREDITCARDMSGSETV2?)>
<!ELEMENT INTERXFERMSGSET   - - (INTERXFERMSGSETV1?, INTERXFERMSGSETV2?)>
<!ELEMENT WIREXFERMSGSET    - - (WIREXFERMSGSETV1?, WIREXFERMSGSETV2?)>


<!-- ============================================================================= -->
<!--            Message Set Profile Data                                           -->
<!-- ============================================================================= -->

<!-- Banking Message Set -->
<!-- OFX 1.5 -->
<!-- ADDED XFERPROF2 -->
<!ELEMENT BANKMSGSETV1 - -        
                                  (MSGSETCORE , INVALIDACCTTYPE* , CLOSINGAVAIL , XFERPROF? , 
                                   STPCHKPROF? , EMAILPROF)>

<!ELEMENT BANKMSGSETV2 - - 
                                  (MSGSETCORE , INVALIDACCTTYPE2* , CLOSINGAVAIL , XFERPROF2? , 
                                   STPCHKPROF? , EMAILPROF)>

<!-- Credit Card Message Set -->
<!ELEMENT (CREDITCARDMSGSETV1, CREDITCARDMSGSETV2)  - - (MSGSETCORE , CLOSINGAVAIL)>

<!-- Interbank Transfer Message Set -->
<!ELEMENT INTERXFERMSGSETV1  - - 
                                 (MSGSETCORE , XFERPROF, CANBILLPAY, CANCELWND , DOMXFERFEE , 
                                  INTLXFERFEE)>
<!-- OFX 1.5 -->
<!-- ADDED CANMULTI -->
<!-- USE XFERPROF2 -->
<!ELEMENT INTERXFERMSGSETV2  - - 
                                 (MSGSETCORE , XFERPROF2, CANBILLPAY, CANCELWND , DOMXFERFEE , 
                                  INTLXFERFEE, CANMULTI)>

<!-- Wire Transfer Message Set -->
<!ELEMENT (WIREXFERMSGSETV1, WIREXFERMSGSETV2)  - - 
                                 (MSGSETCORE , PROCDAYSOFF* , PROCENDTM , CANSCHED , DOMXFERFEE , 
                                  INTLXFERFEE)>


<!-- xferprof version 2 adds needtantransfer, supportdtavail -->
<!ELEMENT XFERPROF    - - (PROCDAYSOFF* , PROCENDTM , CANSCHED , CANRECUR , CANMODXFERS , 
                           CANMODMDLS , MODELWND, DAYSWITH, DFLTDAYSTOPAY)>
<!-- OFX 1.5 -->
<!-- ADDED	NEEDTANTRANSFER, SUPPORTDTAVAIL -->
<!ELEMENT XFERPROF2    - - (PROCDAYSOFF* , PROCENDTM , CANSCHED , CANRECUR , CANMODXFERS , 
                           CANMODMDLS , MODELWND, DAYSWITH, DFLTDAYSTOPAY, 
                           NEEDTANTRANSFER, SUPPORTDTAVAIL)>

<!ELEMENT STPCHKPROF  - - (PROCDAYSOFF* , PROCENDTM , CANUSERANGE , CANUSEDESC, STPCHKFEE)>

<!ELEMENT EMAILPROF  - - (CANEMAIL , CANNOTIFY)>


<!--    Can schedule transfers -->
<!ELEMENT CANSCHED	- o %BOOLTYPE>

<!--    Can modify pending transfers -->
<!ELEMENT CANMODXFERS	- o %BOOLTYPE>

<!-- 	Can use description to stop a check -->
<!ELEMENT CANUSEDESC	- o %BOOLTYPE>

<!-- 	Can use range to stop checks -->
<!ELEMENT CANUSERANGE	- o %BOOLTYPE>

<!--    Default stop check fee -->
<!ELEMENT STPCHKFEE     - o %AMTTYPE>

<!-- 	Can handle email -->
<!ELEMENT CANEMAIL	- o %BOOLTYPE>

<!-- 	Can send notifications -->
<!ELEMENT CANNOTIFY	- o %BOOLTYPE>

<!--    Unsupported account types -->
<!ELEMENT INVALIDACCTTYPE - o %ACCOUNTENUM>

<!--    Unsupported account types -->
<!--    OFX 1.5 -->
<!--    Use INVALIDACCTTYPE2 -->
<!ELEMENT INVALIDACCTTYPE2 - o %ACCOUNTENUM2>

<!-- 	Can return closing statement info -->
<!ELEMENT CLOSINGAVAIL	- o %BOOLTYPE>

<!-- 	Can use interbank transfers for bill pay -->
<!ELEMENT CANBILLPAY	- o %BOOLTYPE>

<!-- Number of days after which a transfer is processed that it can be canceled -->
<!ELEMENT CANCELWND	- o	%DAYSPANTYPE>	

<!-- Fee for sending a domestic transfer transfer -->
<!ELEMENT DOMXFERFEE	- o	%AMTTYPE>	

<!-- Fee for sending an international transfer -->
<!ELEMENT INTLXFERFEE	- o	%AMTTYPE>	

<!-- Can Provider do MULTIINTER -->
<!ELEMENT CANMULTI	- o	%BOOLTYPE>	

<!-- If Y, TAN is required for funds xfer -->
<!ELEMENT NEEDTANTRANSFER - o %BOOLTYPE>


<!-- ============================================================================= -->
<!--             Message Sets                                                      -->
<!-- ============================================================================= -->


<!-- Banking Messages Request Sets and their contained TRN requests -->
<!ELEMENT (BANKMSGSRQV1, BANKMSGSRQV2) - - 
                                  ((STMTTRNRQ   | STMTENDTRNRQ  | INTRATRNRQ | RECINTRATRNRQ | 
                                   STPCHKTRNRQ  | BANKMAILTRNRQ | BANKMAILSYNCRQ |
                                   STPCHKSYNCRQ | INTRASYNCRQ   | RECINTRASYNCRQ)+) >
<!ELEMENT (CREDITCARDMSGSRQV1, CREDITCARDMSGSRQV2)  - -  
                                  ((CCSTMTTRNRQ | CCSTMTENDTRNRQ)+)>
<!ELEMENT (WIREXFERMSGSRQV1, WIREXFERMSGSRQV2)  - - 
                                  ((WIRETRNRQ   | WIRESYNCRQ)+)>
<!ELEMENT INTERXFERMSGSRQV1   - - ((INTERTRNRQ  | RECINTERTRNRQ | INTERSYNCRQ | RECINTERSYNCRQ)+)>  
<!-- OFX 1.5 -->
<!-- ADDED MULTIINTERTRNRQ -->
<!ELEMENT INTERXFERMSGSRQV2   - - ((INTERTRNRQ  | RECINTERTRNRQ | INTERSYNCRQ | RECINTERSYNCRQ | MULTIINTERTRNRQ)+)>  

<!-- Banking Message Set -->
<!ELEMENT STMTTRNRQ     - - (%TRNRQMACRO , STMTRQ)>
<!ELEMENT STMTENDTRNRQ  - - (%TRNRQMACRO , STMTENDRQ)>
<!ELEMENT STPCHKTRNRQ   - - (%TRNRQMACRO , STPCHKRQ)>
<!ELEMENT INTRATRNRQ    - - (%TRNRQMACRO , (INTRARQ | INTRAMODRQ | INTRACANRQ))>
<!ELEMENT RECINTRATRNRQ - - (%TRNRQMACRO , (RECINTRARQ | RECINTRAMODRQ | RECINTRACANRQ))>
<!ELEMENT BANKMAILTRNRQ - - (%TRNRQMACRO , BANKMAILRQ)>

<!-- Credit Card Message Set -->
<!ELEMENT CCSTMTTRNRQ      - - (%TRNRQMACRO , CCSTMTRQ)>
<!ELEMENT CCSTMTENDTRNRQ   - - (%TRNRQMACRO , CCSTMTENDRQ)>

<!-- Interbank Transfer Message Set -->
<!ELEMENT INTERTRNRQ      - - (%TRNRQMACRO , (INTERRQ | INTERMODRQ | INTERCANRQ))>
<!ELEMENT RECINTERTRNRQ   - - (%TRNRQMACRO , (RECINTERRQ | RECINTERMODRQ | RECINTERCANRQ))>
<!-- OFX 1.5 -->
<!-- New Aggregate -->
<!ELEMENT MULTIINTERTRNRQ - - (%TRNRQMACRO , INTERRQ+)>

<!-- Wire Transfer Message Set -->
<!ELEMENT WIRETRNRQ     - - (%TRNRQMACRO , (WIRERQ | WIRECANRQ))>

<!-- Banking Messages Response Sets and their contained TRN responses -->
<!ELEMENT (BANKMSGSRSV1, BANKMSGSRSV2)  - - 
                                  ((STMTTRNRS   | STMTENDTRNRS  | INTRATRNRS | RECINTRATRNRS | 
                                   STPCHKTRNRS  | BANKMAILTRNRS | BANKMAILSYNCRS |
                                   STPCHKSYNCRS | INTRASYNCRS   | RECINTRASYNCRS)+)>
<!ELEMENT (CREDITCARDMSGSRSV1, CREDITCARDMSGSRSV2)  - - 
                                  ((CCSTMTTRNRS | CCSTMTENDTRNRS)+)>
<!ELEMENT (WIREXFERMSGSRSV1, WIREXFERMSGSRSV2)  - - 
                                  ((WIRETRNRS   | WIRESYNCRS)+)>
<!ELEMENT INTERXFERMSGSRSV1   - - ((INTERTRNRS  | RECINTERTRNRS | INTERSYNCRS | RECINTERSYNCRS)+)>  
<!-- OFX 1.5 -->
<!-- ADDED MULTIINTERTRNRS -->
<!ELEMENT INTERXFERMSGSRSV2   - - ((INTERTRNRS  | RECINTERTRNRS | INTERSYNCRS | RECINTERSYNCRS | MULTIINTERTRNRS)+)>  

<!-- Banking TRN responses -->

<!-- Banking Message Set -->
<!ELEMENT STMTTRNRS     - - (%TRNRSMACRO , STMTRS?)>
<!ELEMENT STMTENDTRNRS  - - (%TRNRSMACRO , STMTENDRS?)>
<!ELEMENT STPCHKTRNRS   - - (%TRNRSMACRO , STPCHKRS?)>
<!ELEMENT INTRATRNRS    - - (%TRNRSMACRO , (INTRARS | INTRAMODRS | INTRACANRS)?)>
<!-- OFX 1.5 -->
<!-- ADDED RECINTRARS2, RECINTRAMODRS2 -->
<!ELEMENT RECINTRATRNRS - - (%TRNRSMACRO , (RECINTRARS | RECINTRARS2 | RECINTRAMODRS | RECINTRAMODRS2 | RECINTRACANRS)?)>
<!--#ELEMENT RECINTRATRNRS #Link(RECINTRARS,BANKMSGSETV1)-->
<!--#ELEMENT RECINTRATRNRS #Link(RECINTRAMODRS,BANKMSGSETV1)-->
<!--#ELEMENT RECINTRATRNRS #Link(RECINTRARS2,BANKMSGSETV2)-->
<!--#ELEMENT RECINTRATRNRS #Link(RECINTRAMODRS2,BANKMSGSETV2)-->
<!ELEMENT BANKMAILTRNRS - - (%TRNRSMACRO , (BANKMAILRS | CHKMAILRS | DEPMAILRS)?)>

<!-- Credit Card Message Set -->
<!ELEMENT CCSTMTTRNRS    - - (%TRNRSMACRO , CCSTMTRS?)>
<!ELEMENT CCSTMTENDTRNRS - - (%TRNRSMACRO , CCSTMTENDRS?)>

<!-- Interbank Transfer Message Set -->

<!ELEMENT INTERTRNRS      - - (%TRNRSMACRO , (INTERRS | INTERMODRS | INTERCANRS)?)>
<!-- OFX 1.5 -->
<!-- ADDED RECINTERRS2, RECINTERMODRS2 -->
<!ELEMENT RECINTERTRNRS   - - (%TRNRSMACRO , (RECINTERRS | RECINTERRS2 | RECINTERMODRS | RECINTERMODRS2 | RECINTERCANRS)?)>
<!--#ELEMENT RECINTERTRNRS #Link(RECINTERRS,INTERXFERMSGSETV1)-->
<!--#ELEMENT RECINTERTRNRS #Link(RECINTERMODRS,INTERXFERMSGSETV1)-->
<!--#ELEMENT RECINTERTRNRS #Link(RECINTERRS2,INTERXFERMSGSETV2)-->
<!--#ELEMENT RECINTERTRNRS #Link(RECINTERMODRS2,INTERXFERMSGSETV2)-->
<!ELEMENT MULTIINTERTRNRS - - (%TRNRSMACRO , INTERRS+)>

<!-- Wire Transfer Message Set -->
<!ELEMENT WIRETRNRS     - - (%TRNRSMACRO , (WIRERS | WIRECANRS)?)>

<!-- ============================================================================= -->
<!--            Requests                                                           -->
<!-- ============================================================================= -->

<!-- statement request -->
<!ELEMENT STMTRQ - - (BANKACCTFROM , INCTRAN?)>

<!-- credit card statement request -->
<!ELEMENT CCSTMTRQ - - (CCACCTFROM , INCTRAN?)>

<!-- closing statement request request -->
<!ELEMENT STMTENDRQ - - (BANKACCTFROM , DTSTART? , DTEND?)>

<!-- credit card closing statement request  -->
<!ELEMENT CCSTMTENDRQ - - (CCACCTFROM , DTSTART? , DTEND?)>

<!-- stop check request -->
<!ELEMENT STPCHKRQ - - (BANKACCTFROM , (CHKRANGE|CHKDESC))> 


<!-- intrabank transfer request -->
<!ELEMENT INTRARQ - - (XFERINFO)>


<!-- intrabank transfer modification request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTRAMODRQ - - ((SRVRTID|SRVRTID2), XFERINFO)> 
<!--#ELEMENT INTRAMODRQ #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT INTRAMODRQ #Link(SRVRTID2,BANKMSGSETV2)-->


<!-- intrabank transfer cancellation request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTRACANRQ - - (SRVRTID|SRVRTID2)>
<!--#ELEMENT INTRACANRQ #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT INTRACANRQ #Link(SRVRTID2,BANKMSGSETV2)-->


<!-- interbank transfer request -->
<!ELEMENT INTERRQ - - (XFERINFO)> 


<!-- interbank transfer modification request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTERMODRQ - - ((SRVRTID|SRVRTID2) , XFERINFO )>
<!--#ELEMENT INTERMODRQ #Link(SRVRTID,INTERXFERMSGSETV1)-->
<!--#ELEMENT INTERMODRQ #Link(SRVRTID2,INTERXFERMSGSETV2)-->


<!-- interbank transfer cancellation request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTERCANRQ - - (SRVRTID|SRVRTID2)>
<!--#ELEMENT INTERCANRQ #Link(SRVRTID,INTERXFERMSGSETV1)-->
<!--#ELEMENT INTERCANRQ #Link(SRVRTID2,INTERXFERMSGSETV2)-->


<!-- wire transfer request -->
<!ELEMENT WIRERQ - - (BANKACCTFROM , WIREBENEFICIARY , WIREDESTBANK? , TRNAMT , DTDUE? , PAYINSTRUCT?)> 


<!-- wire transfer cancellation request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT WIRECANRQ - - (SRVRTID|SRVRTID2)>
<!--#ELEMENT WIRECANRQ #Link(SRVRTID,WIREXFERMSGSETV1)-->
<!--#ELEMENT WIRECANRQ #Link(SRVRTID2,WIREXFERMSGSETV2)-->


<!-- recurring intra transfer request -->
<!ELEMENT RECINTRARQ - - (RECURRINST , INTRARQ)>


<!-- recurring intra transfer modification request -->
<!ELEMENT RECINTRAMODRQ - - (RECSRVRTID , RECURRINST , INTRARQ , MODPENDING)>


<!-- recurring intra transfer cancellation request -->
<!ELEMENT RECINTRACANRQ - - (RECSRVRTID , CANPENDING)>


<!-- recurring inter transfer request -->
<!ELEMENT RECINTERRQ - - (RECURRINST , INTERRQ)>


<!-- recurring inter transfer modification request -->
<!ELEMENT RECINTERMODRQ - - (RECSRVRTID , RECURRINST , INTERRQ , MODPENDING)>

<!-- recurring inter transfer cancellation request -->
<!ELEMENT RECINTERCANRQ - - (RECSRVRTID , CANPENDING)>



<!-- bank mail request -->
<!ELEMENT BANKMAILRQ - - ((BANKACCTFROM | CCACCTFROM) , MAIL)>



<!-- ============================================================================= -->
<!--            Synchronization                                                    -->
<!-- ============================================================================= -->

<!-- stop check synchronization request -->
<!ELEMENT STPCHKSYNCRQ - - (%SYNCRQMACRO , BANKACCTFROM, STPCHKTRNRQ*)>


<!-- intrabank transfer sychronization request, v2 adds ccacctfrom -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT INTRASYNCRQ - - (%SYNCRQMACRO , (BANKACCTFROM | CCACCTFROM), INTRATRNRQ*)>
<!--#ELEMENT INTRASYNCRQ #Link(CCACCTFROM,BANKMSGSETV2)-->


<!-- interbank transfer synchronization request, v2 adds ccacctfrom -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!-- FROM INTERTRNRQ to (INTERTRNRQ | MULTIINTERTRNRQ) -->
<!ELEMENT INTERSYNCRQ - - (%SYNCRQMACRO , (BANKACCTFROM | CCACCTFROM), (INTERTRNRQ | MULTIINTERTRNRQ)*)>
<!--#ELEMENT INTERSYNCRQ #Link(MULTIINTERTRNRQ,INTERXFERMSGSETV2)-->

<!-- wire transfer synchronization request -->
<!ELEMENT WIRESYNCRQ - - (%SYNCRQMACRO , BANKACCTFROM, WIRETRNRQ*)>

         
<!--
  recurring intra transfer synchronization request, 
  for transactions <RECINTRARQ>,<RECINTRAMODRQ>, and/or <RECINTRACANRQ>
  v2 adds ccacctfrom
-->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT RECINTRASYNCRQ - - (%SYNCRQMACRO, (BANKACCTFROM | CCACCTFROM), RECINTRATRNRQ*)>
<!--#ELEMENT RECINTRASYNCRQ #Link(CCACCTFROM,BANKMSGSETV2)-->

<!--
  recurring inter transfer synchronization request, 
  for transactions <RECINTERRQ>,<RECINTERMODRQ>, and/or <RECINTERCANRQ>
  v2 adds ccacctfrom
-->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT RECINTERSYNCRQ - - (%SYNCRQMACRO, (BANKACCTFROM | CCACCTFROM), RECINTERTRNRQ*)>
<!--#ELEMENT RECINTERSYNCRQ #Link(CCACCTFROM,INTERXFERMSGSETV2)-->

<!-- bank mail synchronization request -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT BANKMAILSYNCRQ - - (%SYNCRQMACRO , INCIMAGES, USEHTML, (BANKACCTFROM | CCACCTFROM), BANKMAILTRNRQ*)>
<!--#ELEMENT BANKMAILSYNCRQ #Link(CCACCTFROM,BANKMSGSETV2)-->

<!-- ============================================================================= -->
<!--            Responses                                                          -->
<!-- ============================================================================= -->

<!-- statement response -->
<!ELEMENT STMTRS - -	(CURDEF , BANKACCTFROM , BANKTRANLIST? , LEDGERBAL , AVAILBAL? , MKTGINFO?)>

<!-- credit card statement response -->
<!ELEMENT CCSTMTRS - -	(CURDEF , CCACCTFROM , BANKTRANLIST? , LEDGERBAL , AVAILBAL? , MKTGINFO?)>

<!-- closing info response -->
<!ELEMENT STMTENDRS - -	(CURDEF , BANKACCTFROM , CLOSING*)>

<!-- credit card closing info response -->
<!ELEMENT CCSTMTENDRS - -	(CURDEF , CCACCTFROM , CCCLOSING*)>

<!-- stop check response -->
<!ELEMENT STPCHKRS - - (CURDEF , BANKACCTFROM , STPCHKNUM+,
                        FEE, FEEMSG)>
 

<!-- intrabank transfer response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTRARS - - (CURDEF , (SRVRTID | SRVRTID2), XFERINFO , (DTXFERPRJ|DTPOSTED)? , RECSRVRTID?, XFERPRCSTS?)>	
<!--#ELEMENT INTRARS #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT INTRARS #Link(SRVRTID2,BANKMSGSETV2)-->


<!-- intrabank transfer modification response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTRAMODRS - - ((SRVRTID | SRVRTID2), XFERINFO , XFERPRCSTS?)>
<!--#ELEMENT INTRAMODRS #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT INTRAMODRS #Link(SRVRTID2,BANKMSGSETV2)-->


<!-- intrabank transfer transfer cancellation response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTRACANRS - - (SRVRTID|SRVRTID2)>
<!--#ELEMENT INTRACANRS #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT INTRACANRS #Link(SRVRTID2,BANKMSGSETV2)-->


<!-- interbank transfer response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTERRS - - (CURDEF , (SRVRTID | SRVRTID2), XFERINFO,
                      (DTXFERPRJ|DTPOSTED)? , REFNUM? , RECSRVRTID?, XFERPRCSTS?)>
<!--#ELEMENT INTERRS #Link(SRVRTID,INTERXFERMSGSETV1)-->
<!--#ELEMENT INTERRS #Link(SRVRTID2,INTERXFERMSGSETV2)-->


<!-- interbank transfer modification response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTERMODRS - - ((SRVRTID | SRVRTID2), XFERINFO, XFERPRCSTS?)>
<!--#ELEMENT INTERMODRS #Link(SRVRTID,INTERXFERMSGSETV1)-->
<!--#ELEMENT INTERMODRS #Link(SRVRTID2,INTERXFERMSGSETV2)-->


<!-- interbank transfer cancellation request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT INTERCANRS - - (SRVRTID|SRVRTID2)>
<!--#ELEMENT INTERCANRS #Link(SRVRTID,INTERXFERMSGSETV1)-->
<!--#ELEMENT INTERCANRS #Link(SRVRTID2,INTERXFERMSGSETV2)-->


<!-- wire transfer response -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT WIRERS - - (CURDEF , (SRVRTID | SRVRTID2), BANKACCTFROM , WIREBENEFICIARY ,
                      WIREDESTBANK? , TRNAMT , DTDUE? , PAYINSTRUCT? , (DTXFERPRJ|DTPOSTED)? , FEE? , CONFMSG?)>
<!--#ELEMENT WIRERS #Link(SRVRTID,WIREXFERMSGSETV1)-->
<!--#ELEMENT WIRERS #Link(SRVRTID2,WIREXFERMSGSETV2)-->


<!-- wire transfer cancellation request -->
<!-- version 2 uses SRVRTID2, version 1 SRVRTID -->
<!-- OFX 1.5 -->
<!ELEMENT WIRECANRS	- - (SRVRTID|SRVRTID2)>
<!--#ELEMENT WIRECANRS #Link(SRVRTID,WIREXFERMSGSETV1)-->
<!--#ELEMENT WIRECANRS #Link(SRVRTID2,WIREXFERMSGSETV2)-->


<!-- recurring intra transfer response -->
<!--  version 2 substitutes xferinfo for intrars -->
<!ELEMENT RECINTRARS - - (RECSRVRTID , RECURRINST , INTRARS)>
<!-- OFX 1.5 -->
<!-- CHANGE INTRARS to XFERINFO -->
<!ELEMENT RECINTRARS2 - - (RECSRVRTID , RECURRINST , XFERINFO)>


<!-- recurring intra transfer modification request -->
<!-- version 2 substitutes xferinfo for intrars -->
<!ELEMENT RECINTRAMODRS - - (RECSRVRTID , RECURRINST , INTRARS , MODPENDING)>
<!-- OFX 1.5 -->
<!-- CHANGE INTRARS to XFERINFO -->
<!ELEMENT RECINTRAMODRS2 - - (RECSRVRTID , RECURRINST , XFERINFO , MODPENDING)>


<!-- recurring intra transfer cancellation response -->
<!ELEMENT RECINTRACANRS	- - (RECSRVRTID , CANPENDING)>

<!-- recurring inter transfer response -->
<!-- version 2 substitutes xferinfo for interrs -->
<!ELEMENT RECINTERRS - - (RECSRVRTID , RECURRINST , INTERRS)>
<!-- OFX 1.5 -->
<!-- CHANGE INTERRS to XFERINFO -->
<!ELEMENT RECINTERRS2 - - (RECSRVRTID , RECURRINST , XFERINFO)>


<!-- recurring inter transfer modification request -->
<!-- version 2 substitutes xferinfo for interrs -->
<!ELEMENT RECINTERMODRS	- - (RECSRVRTID , RECURRINST , INTERRS , MODPENDING)>
<!-- OFX 1.5 -->
<!-- CHANGE INTERRS to XFERINFO -->
<!ELEMENT RECINTERMODRS2 - - (RECSRVRTID , RECURRINST , XFERINFO , MODPENDING)>

<!-- recurring inter transfer cancellation response -->
<!ELEMENT RECINTERCANRS	- - (RECSRVRTID , CANPENDING)>


<!-- bank mail response -->
<!-- OFX 1.5 -->
<!-- CHANGE BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT BANKMAILRS - - ((BANKACCTFROM | CCACCTFROM) , MAIL)>
<!--#ELEMENT BANKMAILRS #Link(CCACCTFROM,BANKMSGSETV2)-->

<!-- returned check mail response -->
<!ELEMENT CHKMAILRS - - (BANKACCTFROM , MAIL , CHECKNUM , TRNAMT? , DTUSER? , FEE?)>

<!-- returned deposit mail response -->
<!ELEMENT DEPMAILRS - - (BANKACCTFROM , MAIL , TRNAMT , DTUSER? , FEE?)>

<!-- stop check synchronization request -->
<!ELEMENT STPCHKSYNCRS - - (%SYNCRSMACRO , BANKACCTFROM,  STPCHKTRNRS*)>

<!-- intrabank transfer synchronization request, v2 adds ccacctfrom -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT INTRASYNCRS - - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), INTRATRNRS*)>
<!--#ELEMENT INTRASYNCRS #Link(CCACCTFROM,BANKMSGSETV2)-->

<!-- interbank transfer synchronization request, v2 adds ccacctfrom -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!-- FROM INTERTRNRS to (INTERTRNRS | MULTIINTERTRNRS) -->
<!ELEMENT INTERSYNCRS - - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), (INTERTRNRS | MULTIINTERTRNRS)*)>
<!--#ELEMENT INTERSYNCRS #Link(CCACCTFROM,INTERXFERMSGSETV2)-->

<!-- wire transfer synchronization request -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT WIRESYNCRS - - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), WIRETRNRS*)>
<!--#ELEMENT WIRESYNCRS #Link(CCACCTFROM,WIREXFERMSGSETV2)-->

<!-- 
  recurring intra transfer synchronization request, 
  for transactions <RECINTRARS>,<RECINTRARS>, and/or <RECINTRACANRS>
  v2 adds ccacctfrom  
-->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT RECINTRASYNCRS	- - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), RECINTRATRNRS*)>
<!--#ELEMENT RECINTRASYNCRS #Link(CCACCTFROM,BANKMSGSETV2)-->

<!-- 
  recurring inter transfer synchronization request, 
  for transactions <RECINTERRS>,<RECINTERRS>, and/or <RECINTERCANRS>
  v2 adds ccacctfrom
-->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT RECINTERSYNCRS	- - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), RECINTERTRNRS*)>
<!--#ELEMENT RECINTERSYNCRS #Link(CCACCTFROM,INTERXFERMSGSETV2)-->

<!-- wire transfer synchronization request -->
<!-- OFX 1.5 -->
<!-- FROM BANKACCTFROM to (BANKACCTFROM | CCACCTFROM) -->
<!ELEMENT BANKMAILSYNCRS - - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), BANKMAILTRNRS*)>
<!--#ELEMENT BANKMAILSYNCRS #Link(CCACCTFROM,BANKMSGSETV2)-->

<!-- ============================================================================= -->
<!--            Aggregates                                                         -->
<!-- ============================================================================= -->



<!-- BANKACCTINFO CCACCTINFO -->
<!ELEMENT BANKACCTINFO  - - (BANKACCTFROM ,
                             SUPTXDL, XFERSRC, XFERDEST, SVCSTATUS)>
<!ELEMENT CCACCTINFO    - - (CCACCTFROM ,
                             SUPTXDL, XFERSRC, XFERDEST, SVCSTATUS)>
                             
<!ELEMENT SUPTXDL       - o %BOOLTYPE>
<!ELEMENT XFERSRC       - o %BOOLTYPE>
<!ELEMENT XFERDEST      - o %BOOLTYPE>

<!--
	statement transaction data
-->
<!ELEMENT BANKTRANLIST    	- - (DTSTART , DTEND , STMTTRN*)>


<!--
	Ledger balance
-->
<!ELEMENT LEDGERBAL     - - (BALAMT , DTASOF)>


<!--
	Available balance
-->
<!ELEMENT AVAILBAL      - - (BALAMT , DTASOF)>




<!--
	credit card statement information
-->
<!ELEMENT CCCLOSING	- - (FITID , DTOPEN? , DTCLOSE , DTNEXT? ,
						 BALOPEN? , BALCLOSE ,
						 DTPMTDUE? , MINPMTDUE? ,
						 FINCHG? , PAYANDCREDIT? , PURANDADV? , DEBADJ? , CREDITLIMIT? ,
						 DTPOSTSTART , DTPOSTEND , MKTGINFO? ,
						 (CURRENCY | ORIGCURRENCY)? )>

<!--
	non-Credit Card account types
-->
<!ELEMENT CLOSING	- -	(FITID , DTOPEN? , DTCLOSE , DTNEXT? ,
						 BALOPEN? , BALCLOSE , BALMIN? ,
						 DEPANDCREDIT? , CHKANDDEB? , TOTALFEES? , TOTALINT? ,
						 DTPOSTSTART , DTPOSTEND , MKTGINFO? ,
						 (CURRENCY | ORIGCURRENCY)? )>


<!-- Opening statement date -->
<!ELEMENT DTOPEN	- o	%DTTMTYPE>


<!-- Closing statement date -->
<!ELEMENT DTCLOSE	- o	%DTTMTYPE>


<!-- Closing date of next statement -->
<!ELEMENT DTNEXT	- o	%DTTMTYPE>
	

<!-- Opening statement balance -->
<!ELEMENT BALOPEN	- o	%AMTTYPE>


<!-- Closing statement balance -->
<!ELEMENT BALCLOSE	- o %AMTTYPE>


<!-- Payment due date -->
<!ELEMENT DTPMTDUE	- o	%DTTMTYPE>

<!-- Minimum amount due -->
<!ELEMENT MINPMTDUE	- o	%AMTTYPE>


<!-- Finance charges -->
<!ELEMENT FINCHG	- o %AMTTYPE>


<!-- Total of payments and credits -->
<!ELEMENT PAYANDCREDIT	- o	%AMTTYPE>


<!-- Total of purchases and cash advance -->
<!ELEMENT PURANDADV	- o	%AMTTYPE>


<!-- Debit adjustments -->
<!ELEMENT DEBADJ	- o	%AMTTYPE>


<!-- Current credit limit -->
<!ELEMENT CREDITLIMIT		- o	%AMTTYPE>


<!-- Minimum balance in statement period -->
<!ELEMENT BALMIN	- o %AMTTYPE>


<!-- Total of deposits and credits -->
<!ELEMENT DEPANDCREDIT	- o %AMTTYPE>


<!-- Total of checks and debits	-->
<!ELEMENT CHKANDDEB	- o	%AMTTYPE>

<!-- Total fees	-->
<!ELEMENT TOTALFEES	- o	%AMTTYPE>

<!-- Total interest	-->
<!ELEMENT TOTALINT	- o	%AMTTYPE>

<!-- Start date for posted transactions -->
<!ELEMENT DTPOSTSTART - o %DTTMTYPE>

<!-- End date for posted transactions -->
<!ELEMENT DTPOSTEND - o %DTTMTYPE>

<!-- statement transaction aggregate -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!-- CHANGE PAYEEID to (PAYEEID | PAYEEID2) -->
<!ELEMENT STMTTRN	- - (TRNTYPE , DTPOSTED , DTUSER? , DTAVAIL? , TRNAMT , FITID ,
						 (CORRECTFITID , CORRECTACTION)? ,
						 (SRVRTID | SRVRTID2)?, CHECKNUM? , REFNUM? , 
						 SIC? , (PAYEEID | PAYEEID2)? , (NAME | (PAYEE | PAYEE2))?, (BANKACCTTO | CCACCTTO)?,
						 (MEMO | MEMO2)? , (CURRENCY | ORIGCURRENCY)?)> 
<!--#ELEMENT STMTTRN #Link(SRVRTID,BANKMSGSETV1)-->
<!--#ELEMENT STMTTRN #Link(SRVRTID2,BANKMSGSETV2)-->
<!--#ELEMENT STMTTRN #Link(PAYEE,BANKMSGSETV1)-->
<!--#ELEMENT STMTTRN #Link(PAYEE2,BANKMSGSETV2)-->
<!--#ELEMENT STMTTRN #Link(MEMO,BANKMSGSETV1)-->
<!--#ELEMENT STMTTRN #Link(MEMO2,BANKMSGSETV2)-->
<!--#ELEMENT STMTTRN #Link(PAYEEID,BANKMSGSETV1)-->
<!--#ELEMENT STMTTRN #Link(PAYEEID2,BANKMSGSETV2)-->

<!-- Status of request -->
<!ELEMENT TRNTYPE	- o %TRANSACTIONENUM>
	

<!-- Date transaction was posted to account -->
<!ELEMENT DTPOSTED	- o	%DTTMTYPE>


<!-- Date user initiated transaction, if known -->	
<!ELEMENT DTUSER	- o %DTTMTYPE>

<!-- Standard Industrial Code -->
<!ELEMENT SIC	- o	%SICTYPE>	


<!-- Check range aggregate. -->
<!ELEMENT CHKRANGE	- -	(CHKNUMSTART , CHKNUMEND?)>


<!-- Check description aggregate. -->
<!ELEMENT CHKDESC	- - (NAME , CHECKNUM? , DTUSER? , TRNAMT?)>	


<!-- Start check number -->
<!ELEMENT CHKNUMSTART	- o %CHECKNUMTYPE>


<!-- Ending check number to cancel -->
<!ELEMENT CHKNUMEND	- o %CHECKNUMTYPE>

<!-- Reference number -->
<!ELEMENT REFNUM	- o	%REFNUMTYPE>

<!-- stopped check item -->
<!ELEMENT STPCHKNUM	- -	(CHECKNUM , NAME? , DTUSER? , TRNAMT? , 
                         CHKSTATUS , CHKERROR? , (CURRENCY | ORIGCURRENCY)?)>

<!-- Status code for individual stop check request -->
<!ELEMENT CHKSTATUS	- o	%CHECKSTATUSENUM>	

<!-- Further textual error explanation -->
<!ELEMENT CHKERROR	- o %MSGTYPE>	

<!-- Transfer information aggregate -->
<!-- OFX 1.5 -->
<!-- ADDED DTAVAIL -->
<!ELEMENT XFERINFO	- -	((BANKACCTFROM | CCACCTFROM) , (BANKACCTTO | CCACCTTO) , TRNAMT , DTDUE?, DTAVAIL?, MEMO2?)>
<!--#ELEMENT XFERINFO #Link(DTAVAIL,(BANKMSGSETV2|CREDITCARDMSGSETV2))-->
<!--#ELEMENT XFERINFO #Link(MEMO2,(BANKMSGSETV2|CREDITCARDMSGSETV2))-->

<!-- Transfer processing status -->
<!ELEMENT XFERPRCSTS	- -	(XFERPRCCODE , DTXFERPRC)>

<!--  Transfers processing date; enum for processing date interpretation -->
<!ELEMENT XFERPRCCODE	- o %XFERSTATUSENUM>		

<!-- Date transfer is expected to be processed -->
<!ELEMENT DTXFERPRC - o	%DTTMTYPE>

<!-- Date transaction is projected for posting to account -->
<!ELEMENT DTXFERPRJ - o	%DTTMTYPE>

<!-- Beneficiary of a wire transfer -- >
<!-- OFX 1.5 -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!ELEMENT WIREBENEFICIARY - - (NAME , BANKACCTTO , (MEMO | MEMO2)?)>
<!--#ELEMENT WIREBENEFICIARY #Link(MEMO,WIREXFERMSGSETV1)-->
<!--#ELEMENT WIREBENEFICIARY #Link(MEMO2,WIREXFERMSGSETV2)-->

<!-- Beneficiary's bank for a wire transfer -- >
<!ELEMENT WIREDESTBANK - - (EXTBANKDESC)>

<!-- Extended description of a bank for a wire transfer -- >
<!ELEMENT EXTBANKDESC - - (NAME , BANKID , (ADDR1,(ADDR2,ADDR3?)?) , CITY , STATE , POSTALCODE , COUNTRY? , PHONE?)>

<!-- Payment instructions for a wire transfer -->
<!ELEMENT PAYINSTRUCT	- o	%MSGTYPE>

<!-- Fee assessed for the transfer -->
<!ELEMENT FEE	- o	%AMTTYPE>

<!-- Description of fee -->
<!ELEMENT FEEMSG    - o %MSGTYPE>

<!-- Transfer confirmation message -->
<!ELEMENT CONFMSG	- o	%MSGTYPE>


<!-- Message Set Wrappers and Profile -->

<!ELEMENT (BILLPAYMSGSRQV1,BILLPAYMSGSRQV2)       - -     ((PAYEETRNRQ | PAYEESYNCRQ)*,
                                                             ( PMTTRNRQ | RECPMTTRNRQ | PMTINQTRNRQ | PMTMAILTRNRQ |
                                                                   PMTSYNCRQ | RECPMTSYNCRQ | PMTMAILSYNCRQ)*)>

<!ELEMENT (BILLPAYMSGSRSV1,BILLPAYMSGSRSV2)       - -     ((PAYEETRNRS | PAYEESYNCRS)*,
                                                                 ( PMTTRNRS | RECPMTTRNRS | PMTINQTRNRS | PMTMAILTRNRS |
                                                                   PMTSYNCRS | RECPMTSYNCRS | PMTMAILSYNCRS)*)>

<!-- -->
<!ELEMENT BILLPAYMSGSET         - -     (BILLPAYMSGSETV1?, BILLPAYMSGSETV2?)>

<!ELEMENT BILLPAYMSGSETV1       - -     (MSGSETCORE,
                                        DAYSWITH, DFLTDAYSTOPAY,
                                        XFERDAYSWITH, XFERDFLTDAYSTOPAY, 
                                        PROCDAYSOFF*, PROCENDTM, 
                                        MODELWND, POSTPROCWND, STSVIAMODS,
                                        PMTBYADDR, PMTBYXFER, PMTBYPAYEEID,
                                        CANADDPAYEE, HASEXTDPMT, 
                                        CANMODPMTS, CANMODMDLS, DIFFFIRSTPMT, 
                                        DIFFLASTPMT)>

<!ELEMENT BILLPAYMSGSETV2       - -     (MSGSETCORE,
                                        DAYSWITH, DFLTDAYSTOPAY,
                                        XFERDAYSWITH, XFERDFLTDAYSTOPAY, 
                                        PROCDAYSOFF*, PROCENDTM, 
                                        MODELWND, POSTPROCWND, STSVIAMODS,
                                        PMTBYADDR, PMTBYXFER, PMTBYPAYEEID,
                                        CANADDPAYEE, HASEXTDPMT, 
                                        CANMODPMTS, CANMODMDLS, DIFFFIRSTPMT, 
                                        DIFFLASTPMT, NEEDTANPMT, NEEDTANPAYEE, SUPPORTDTAVAIL)>

<!ELEMENT DAYSWITH              - o     %DAYSPANTYPE>       <!--  number of days before the processing date that funds are withdrawn -->
<!ELEMENT DFLTDAYSTOPAY - o %DAYSPANTYPE> 		  <!--  the default number of days to pay -->
<!ELEMENT XFERDAYSWITH          - o     %DAYSPANTYPE>       <!--  number of days before the processing date that funds are withdrawn for xfers-->
<!ELEMENT XFERDFLTDAYSTOPAY     - o %DAYSPANTYPE>   <!--  the default number of days to pay for transfers-->
<!ELEMENT POSTPROCWND   - o     %DAYSPANTYPE>       <!--  the number of days after a transaction is processed that it is acessible
                                                                                          for status inquiries -->
<!ELEMENT STSVIAMODS    - o     %BOOLTYPE>      <!--  server supports communication of server-initiated payment status changes
                                                                                          via the PMTMODRS -->
<!ELEMENT PMTBYADDR             - o     %BOOLTYPE>      <!--  the payment provider supports payments to payees identified by billing
                                                                                          address, i.e. the PAYEE aggregate -->
<!ELEMENT PMTBYXFER     - o %BOOLTYPE>  <!--  can pay by transfers -->
<!ELEMENT PMTBYPAYEEID  - o %BOOLTYPE>  <!--  can pay by user supplied payee IDs -->
<!ELEMENT CANADDPAYEE   - o     %BOOLTYPE>      <!--  user can add payees if no, the user is restricted to payees added to the
                                                                                          users payee list by the payment system -->
<!ELEMENT HASEXTDPMT    - o     %BOOLTYPE>      <!--  supports the EXTDPMT business payment aggregate -->
<!ELEMENT CANMODPMTS    - o     %BOOLTYPE>      <!--  permit modifications to payments, i.e. PMTMODRQ -->
<!ELEMENT DIFFFIRSTPMT  - o     %BOOLTYPE>      <!--  support for specifying a different amount for the first payment
                                                                                          generated by a model -->
<!ELEMENT DIFFLASTPMT   - o     %BOOLTYPE>      <!--  support for specifying a different amount for the last payment generated
                                                                                          by a model -->
<!ELEMENT NEEDTANPMT    - o     %BOOLTYPE>      <!-- need TAN for payment requests (should be N in US) -->
<!ELEMENT NEEDTANPAYEE  - o     %BOOLTYPE>      <!-- need TAN for payee requests (should be N in US) -->


<!-- Transactions -->


<!ELEMENT PMTTRNRQ      - - (%TRNRQMACRO, (PMTRQ | PMTMODRQ | PMTCANCRQ))>
<!ELEMENT RECPMTTRNRQ   - - (%TRNRQMACRO, (RECPMTRQ | RECPMTMODRQ | RECPMTCANCRQ))>
<!ELEMENT PAYEETRNRQ    - - (%TRNRQMACRO, (PAYEERQ | PAYEEMODRQ | PAYEEDELRQ))>
<!ELEMENT PMTINQTRNRQ   - -     (%TRNRQMACRO, PMTINQRQ)>
<!ELEMENT PMTMAILTRNRQ  - - (%TRNRQMACRO, PMTMAILRQ)>

<!ELEMENT PMTTRNRS      - - (%TRNRSMACRO, (PMTRS | PMTMODRS | PMTCANCRS)?)>
<!ELEMENT RECPMTTRNRS   - - (%TRNRSMACRO, (RECPMTRS | RECPMTMODRS | RECPMTCANCRS)?)>
<!ELEMENT PAYEETRNRS    - - (%TRNRSMACRO, (PAYEERS | PAYEEMODRS | PAYEEDELRS)?)>
<!ELEMENT PMTINQTRNRS   - -     (%TRNRSMACRO, PMTINQRS?)>
<!ELEMENT PMTMAILTRNRS  - - (%TRNRSMACRO, PMTMAILRS?)>


<!-- ============================================================================= -->
<!-- Requests                                                                      -->
<!-- ============================================================================= -->

<!--  payment request -->
<!-- OFX 1.5 -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTRQ - -     ((PMTINFO | PMTINFO2))>              
<!--#ELEMENT PMTRQ #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTRQ #Link(PMTINFO2,BILLPAYMSGSETV2)-->

<!--  modification request -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTMODRQ      - -     ((SRVRTID | SRVRTID2), (PMTINFO | PMTINFO2))>             
<!--#ELEMENT PMTMODRQ #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMODRQ #Link(SRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PMTMODRQ #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMODRQ #Link(PMTINFO2,BILLPAYMSGSETV2)-->


<!--  modification request -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTCANCRQ     - - ((SRVRTID | SRVRTID2))>
<!--#ELEMENT PMTCANCRQ #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTCANCRQ #Link(SRVRTID2,BILLPAYMSGSETV2)-->


<!--  recurring payment request -->
<!-- OFX 1.5 -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT RECPMTRQ      - -     (RECURRINST, (PMTINFO | PMTINFO2), INITIALAMT?, FINALAMT?)>          
<!--#ELEMENT RECPMTRQ #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTRQ #Link(PMTINFO2,BILLPAYMSGSETV2)-->


<!-- modification request -->
<!-- OFX 1.5 -->
<!-- CHANGE RECSRVRTID to (RECSRVRTID | RECSRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT RECPMTMODRQ   - -     ((RECSRVRTID | RECSRVRTID2), RECURRINST, (PMTINFO | PMTINFO2),
					  INITIALAMT?, FINALAMT?, MODPENDING)>          
<!--#ELEMENT RECPMTMODRQ #Link(RECSRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTMODRQ #Link(RECSRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT RECPMTMODRQ #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTMODRQ #Link(PMTINFO2,BILLPAYMSGSETV2)-->
 

<!--  cancellation request -->
<!-- OFX 1.5 -->
<!-- CHANGE RECSRVRTID to (RECSRVRTID | RECSRVRTID2) -->
<!ELEMENT RECPMTCANCRQ  - -     ((RECSRVRTID | RECSRVRTID2), CANPENDING)>
<!--#ELEMENT RECPMTCANCRQ #Link(RECSRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTCANCRQ #Link(RECSRVRTID2,BILLPAYMSGSETV2)-->

<!-- payment status inquiry request -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTINQRQ      - -     ((SRVRTID | SRVRTID2))>
<!--#ELEMENT PMTINQRQ #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTINQRQ #Link(SRVRTID2,BILLPAYMSGSETV2)-->
 

<!-- payee request : add a payee to the payee list -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!-- CHANGE PAYEE to (PAYEEID | PAYEEID2) -->
<!ELEMENT PAYEERQ       - -     ((PAYEEID | PAYEEID2 | ((PAYEE | PAYEE2), BANKACCTTO?)), PAYACCT*)>
<!--#ELEMENT PAYEERQ #Link(PAYEE,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEERQ #Link(PAYEE2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PAYEERQ #Link(PAYEEID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEERQ #Link(PAYEEID2,BILLPAYMSGSETV2)-->

<!-- payee modification request -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!-- CHANGE PAYEELSTID to (PAYEELSTID | PAYEELSTID2) -->
<!ELEMENT PAYEEMODRQ    - - ((PAYEELSTID | PAYEELSTID2), ((PAYEE | PAYEE2), BANKACCTTO?)?, PAYACCT*)>
<!--#ELEMENT PAYEEMODRQ #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEE,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEE2,BILLPAYMSGSETV2)-->

<!-- payee deletion request -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEELSTID to (PAYEELSTID | PAYEELSTID2) -->
<!ELEMENT PAYEEDELRQ    - - ((PAYEELSTID | PAYEELSTID2))>
<!--#ELEMENT PAYEEDELRQ #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEDELRQ #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->

<!-- ============================================================================= -->
<!-- Responses                                                                     -->
<!-- ============================================================================= -->

<!--  payment response -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEELSTID to (PAYEELSTID | PAYEELSTID2) -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTRS         - - ((SRVRTID | SRVRTID2), (PAYEELSTID | PAYEELSTID2), CURDEF, (PMTINFO | PMTINFO2), EXTDPAYEE?, 
                         CHECKNUM?, PMTPRCSTS, RECSRVRTID?)>
<!--#ELEMENT PMTRS #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTRS #Link(SRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PMTRS #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTRS #Link(PMTINFO2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PMTRS #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTRS #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
   

<!-- payment modification response -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTMODRS      - -     ((SRVRTID | SRVRTID2), (PMTINFO | PMTINFO2), PMTPRCSTS?)>         
<!--#ELEMENT PMTMODRS #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMODRS #Link(SRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PMTMODRS #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMODRS #Link(PMTINFO2,BILLPAYMSGSETV2)-->


<!-- payment modification response -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTCANCRS     - -     ((SRVRTID | SRVRTID2))>              
<!--#ELEMENT PMTCANCRS #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTCANCRS #Link(SRVRTID2,BILLPAYMSGSETV2)-->


<!--  recurring payment response -->
<!-- OFX 1.5 -->
<!-- CHANGE RECSRVRTID to (RECSRVRTID | RECSRVRTID2) -->
<!-- CHANGE PAYEELSTID to (PAYEELSTID | PAYEELSTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT RECPMTRS      - -     ((RECSRVRTID | RECSRVRTID2), (PAYEELSTID | PAYEELSTID2), CURDEF, RECURRINST,
					  (PMTINFO | PMTINFO2), INITIALAMT?, FINALAMT?, EXTDPAYEE?)>
<!--#ELEMENT RECPMTRS #Link(RECSRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTRS #Link(RECSRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT RECPMTRS #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTRS #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT RECPMTRS #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTRS #Link(PMTINFO2,BILLPAYMSGSETV2)-->
 

<!-- modification response -->
<!-- OFX 1.5 -->
<!-- CHANGE RECSRVRTID to (RECSRVRTID | RECSRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT RECPMTMODRS   - -     ((RECSRVRTID | RECSRVRTID2), RECURRINST, (PMTINFO | PMTINFO2),
					  INITIALAMT?, FINALAMT?, MODPENDING)>          
<!--#ELEMENT RECPMTMODRS #Link(RECSRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTMODRS #Link(RECSRVRTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT RECPMTMODRS #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTMODRS #Link(PMTINFO2,BILLPAYMSGSETV2)-->


<!-- recurring payment modification response --> 
<!-- OFX 1.5 -->
<!-- CHANGE RECSRVRTID to (RECSRVRTID | RECSRVRTID2) -->
<!ELEMENT RECPMTCANCRS  - -     ((RECSRVRTID | RECSRVRTID2), CANPENDING)>               
<!--#ELEMENT RECPMTCANCRS #Link(RECSRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT RECPMTCANCRS #Link(RECSRVRTID2,BILLPAYMSGSETV2)-->

<!-- payment status inquiry response -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTINQRS      - -     ((SRVRTID | SRVRTID2), PMTPRCSTS, CHECKNUM?)>
<!--#ELEMENT PMTINQRS #Link(SRVRTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTINQRS #Link(SRVRTID2,BILLPAYMSGSETV2)-->


<!-- payee response : add a payee to the payee list -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEELSTID | PAYEELSTID2) -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!ELEMENT PAYEERS       - -     ((PAYEELSTID | PAYEELSTID2), ((PAYEE | PAYEE2), BANKACCTTO?)?, EXTDPAYEE?, PAYACCT*)>
<!--#ELEMENT PAYEERS #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEERS #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PAYEERS #Link(PAYEE,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEERS #Link(PAYEE2,BILLPAYMSGSETV2)-->

<!-- payee modification response -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEELSTID | PAYEELSTID2) -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!ELEMENT PAYEEMODRS    - - ((PAYEELSTID | PAYEELSTID2), ((PAYEE | PAYEE2), BANKACCTTO?)?, PAYACCT*, EXTDPAYEE?)>
<!--#ELEMENT PAYEEMODRS #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEE,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEE2,BILLPAYMSGSETV2)-->

<!-- payee deletion response -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEELSTID | PAYEELSTID2) -->
<!ELEMENT PAYEEDELRS    - - ((PAYEELSTID | PAYEELSTID2))>
<!--#ELEMENT PAYEEDELRS #Link(PAYEELSTID,BILLPAYMSGSETV1)-->
<!--#ELEMENT PAYEEDELRS #Link(PAYEELSTID2,BILLPAYMSGSETV2)-->
   
<!-- ============================================================================= -->
<!--                    Aggregates                                                         -->
<!-- ============================================================================= -->


<!-- BPACCTINFO -->
<!ELEMENT BPACCTINFO  - - (BANKACCTFROM, SVCSTATUS)>

<!-- Payment information aggregate -->
<!ELEMENT PMTINFO  - - (BANKACCTFROM, TRNAMT, 
                        (PAYEEID|PAYEE), PAYEELSTID?, BANKACCTTO?,
                        EXTDPMT*, PAYACCT, DTDUE, 
                        MEMO?, BILLREFINFO?)>
<!-- OFX 1.5 -->
<!-- ADDED PMTTYPE -->
<!-- CHANGE PAYEEID | PAYEE to being optional -->
<!-- CHANGE PAYACCT to being optional -->
<!-- ADD DTAVAIL, ITA.CAUSALE, PMTFOR, BOOKINGTEXT -->
<!-- CHANGE PAYEE to PAYEE2 -->
<!-- CHANGE MEMO to MEMO2 -->
<!-- CHANGE PAYEEID to PAYEEID2 -->
<!-- CHANGE PAYEELSTID to PAYEELSTID2 -->
<!ELEMENT PMTINFO2  - - (PMTTYPE?, BANKACCTFROM, TRNAMT, 
                         (PAYEEID2 | PAYEE2)?, PAYEELSTID2?, BANKACCTTO?,
                         EXTDPMT*, PAYACCT?, DTDUE, 
                         DTAVAIL?, ITA.CAUSALE?, PMTFOR?, BOOKINGTEXT?,
                         MEMO2?, BILLREFINFO?)>
 
<!--  Some non-US fields from pmtinfo -->
<!ELEMENT PMTTYPE       - o %TYPEDESCTYPE>           
<!ELEMENT PMTFOR        - o %GENNAMETYPE>           
<!ELEMENT ITA.CAUSALE   - o %ITACAUSALETYPE>           
<!ELEMENT BOOKINGTEXT   - o %BOOKINGTEXTTYPE>           

<!--  Payment processing status -->
<!ELEMENT PMTPRCSTS     - -     (PMTPRCCODE, DTPMTPRC)>

<!--  Payment processing date; enum for processing date interpretation -->
<!ELEMENT PMTPRCCODE    - o %XFERSTATUSENUM>           

<!--  Payment processing date; Interpretation depends on <PMTPRCCODE> -->
<!ELEMENT DTPMTPRC      - o %DTTMTYPE>          
 
<!-- billing reference info -->
<!ELEMENT BILLREFINFO - o %BILLREFINFOTYPE>
 
<!--  Extended Payment aggregate -->
<!--  Either extdpmtdsc or extdpmtinv, or both, but at least one required -->
<!-- OFX 1.5 -->
<!-- CHANGE EXTDPMTCHK to (EXTDPMTCHK | EXTPMTCHK2) -->
<!ELEMENT EXTDPMT           - - (EXTDPMTFOR?, (EXTDPMTCHK|EXTDPMTCHK2)?, 
                             ((EXTDPMTDSC, EXTDPMTINV?) |
                             (EXTDPMTINV)))>
<!--#ELEMENT EXTDPMT #Link(EXTDPMTCHK,BILLPAYMSGSETV1)-->
<!--#ELEMENT EXTDPMT #Link(EXTDPMTCHK2,BILLPAYMSGSETV2)-->


<!-- OFX 1.5 -->
<!-- CHANGE INVOICE to (INVOICE | INVOICE2) -->
<!ELEMENT EXTDPMTINV    - - ((INVOICE | INVOICE2)+)>
<!--#ELEMENT EXTDPMTINV #Link(INVOICE,BILLPAYMSGSETV1)-->
<!--#ELEMENT EXTDPMTINV #Link(INVOICE2,BILLPAYMSGSETV2)-->

<!ELEMENT INVOICE       - - (INVNO, INVTOTALAMT, INVPAIDAMT,
                             INVDATE, INVDESC, DISCOUNT?,
                             ADJUSTMENT?, LINEITEM*)>
<!-- OFX 1.5 -->
<!-- CHANGE INVPAIDAMT to optional -->
<!-- CHANGE DISCOUNT to DISCOUNT2 -->
<!ELEMENT INVOICE2       - - (INVNO, INVTOTALAMT, INVPAIDAMT?,
                             INVDATE, INVDESC, DISCOUNT2?,
                             ADJUSTMENT?, LINEITEM*)>
<!ELEMENT DISCOUNT      - - (DSCRATE, DSCAMT, DSCDATE?, DSCDESC)>
<!-- OFX 1.5 -->
<!-- CHANGE DSCRATE, DSCAMT to (DSCRATE | DSCAMT) -->
<!ELEMENT DISCOUNT2      - - ((DSCRATE | DSCAMT), DSCDATE?, DSCDESC)>

<!ELEMENT ADJUSTMENT    - - (ADJNO?, ADJDESC, ADJAMT, ADJDATE?)>
<!-- OFX 1.5 -->
<!-- ADDED LITMCODE -->
<!ELEMENT LINEITEM      - - (LITMAMT, LITMDESC, LITMCODE?)>
<!--#ELEMENT LINEITEM #Link(LITMCODE,BILLPAYMSGSETV2)-->

<!ELEMENT EXTDPMTFOR    - o %EXTDPMTFORENUM>
<!ELEMENT EXTDPMTCHK    - o %EXTTYPE>
<!ELEMENT EXTDPMTCHK2   - o %CHECKNUMTYPE>
<!ELEMENT EXTDPMTDSC    - o %MSGTYPE>
<!ELEMENT INVNO         - o %INVNOTYPE>
<!ELEMENT INVTOTALAMT   - o %AMTTYPE>
<!ELEMENT INVPAIDAMT    - o %AMTTYPE>
<!ELEMENT INVDATE       - o %DTTMTYPE>
<!ELEMENT INVDESC       - o %SHORTMSGTYPE>
<!ELEMENT DSCRATE       - o %RATETYPE>
<!ELEMENT DSCAMT        - o %AMTTYPE>
<!ELEMENT DSCDATE       - o %DTTMTYPE>
<!ELEMENT DSCDESC       - o %SHORTMSGTYPE>
<!ELEMENT ADJNO         - o %INVNOTYPE>
<!ELEMENT ADJDESC       - o %SHORTMSGTYPE>   
<!ELEMENT ADJAMT        - o %AMTTYPE>
<!ELEMENT ADJDATE       - o %DTTMTYPE>
<!ELEMENT LITMCODE      - o %IDTYPE>
<!ELEMENT LITMAMT       - o %AMTTYPE>
<!ELEMENT LITMDESC      - o %SHORTMSGTYPE>
 
<!--  Initial Amount -->
<!ELEMENT INITIALAMT    - o %AMTTYPE>           
 
<!--  Final Amount -->
<!ELEMENT FINALAMT      - o %AMTTYPE>           
 
<!--  standard payee -->
<!-- OFX 1.5 -->
<!-- Changed PAYEEID to (PAYEEID | PAYEEID2) -->
<!ELEMENT EXTDPAYEE     - - ( ((PAYEEID | PAYEEID2), IDSCOPE, NAME)?, DAYSTOPAY)>
<!-- #ELEMENT EXTDPAYEE #Link (PAYEEID, BILLPAYMSGSETV1) -->
<!-- #ELEMENT EXTDPAYEE #Link (PAYEEID2, BILLPAYMSGSETV2) -->

<!--  Server-assigned standard payee ID -->             
<!ELEMENT PAYEEID       - o %PAYEEIDTYPE>                

<!-- OFX 1.5 -->
<!--  Server-assigned standard payee ID -->             
<!ELEMENT PAYEEID2       - o %UUIDTYPE>                

<!--  Payee ID scope enumeration ; currently one of {GLOBAL,USER} -->
<!ELEMENT IDSCOPE       - o %IDSCOPEENUM>           

<!--  Minimum number of days needed to process -->   
<!ELEMENT DAYSTOPAY     - o %DAYSPANTYPE>           

<!-- Check number -->
<!ELEMENT CHECKNUM      - o %CHECKNUMTYPE>

<!-- Payee aggregate, version 2 makes things optional for non-usa, still required in usa -->
<!ELEMENT PAYEE - -     (NAME, (ADDR1,(ADDR2,ADDR3?)?), CITY, STATE, POSTALCODE, COUNTRY?, PHONE)>      
<!-- OFX 1.5 -->
<!-- CHANGE all required tags except NAME to being optional -->
<!ELEMENT PAYEE2 - -     (NAME, (ADDR1,(ADDR2,ADDR3?)?)?, CITY?, STATE?, POSTALCODE?, COUNTRY?, PHONE?)>      

<!--  Server-assigned payee list ID -->         
<!ELEMENT PAYEELSTID    - o %PAYEEIDTYPE>                

<!-- OFX 1.5 -->
<!--  Server-assigned payee list ID -->         
<!ELEMENT PAYEELSTID2   - o %UUIDTYPE>                

<!--
        synchronization request messages
  -->

<!--  payment synchronization request -->
<!ELEMENT PMTSYNCRQ     - -     (%SYNCRQMACRO, BANKACCTFROM, PMTTRNRQ*)>                
 

<!--  recurring payment synchronization request -->
<!ELEMENT RECPMTSYNCRQ  - -     (%SYNCRQMACRO, BANKACCTFROM, RECPMTTRNRQ*)>
 
<!-- payee list synchronization request -->
<!ELEMENT PAYEESYNCRQ   - - (%SYNCRQMACRO, PAYEETRNRQ*)>


<!-- bill pay mail sync request -->
<!ELEMENT PMTMAILSYNCRQ - -     (%SYNCRQMACRO, INCIMAGES, USEHTML, PMTMAILTRNRQ*)>


<!--
        synchronization response messages
  -->

<!-- payment synchronization response -->
<!ELEMENT PMTSYNCRS     - -     (%SYNCRSMACRO, BANKACCTFROM, PMTTRNRS*)>                
 

<!--  recurring payment synchronization response -->
<!ELEMENT RECPMTSYNCRS  - -     (%SYNCRSMACRO, BANKACCTFROM, RECPMTTRNRS*)>
 
<!-- payee list synchronization response -->
<!ELEMENT PAYEESYNCRS   - - (%SYNCRSMACRO, PAYEETRNRS*)>


<!-- bill pay mail sync response -->
<!ELEMENT PMTMAILSYNCRS - -     (%SYNCRSMACRO, PMTMAILTRNRS*)>


<!--
 Payment mail messages
  --> 

<!-- payment inquiry mail message --> 
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTMAILRQ     - -     (MAIL,((SRVRTID | SRVRTID2),(PMTINFO | PMTINFO2))?)>
<!--#ELEMENT PMTMAILRQ #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMAILRQ #Link(PMTINFO2,BILLPAYMSGSETV2)-->

<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE PMTINFO to (PMTINFO | PMTINFO2) -->
<!ELEMENT PMTMAILRS     - -     (MAIL,((SRVRTID | SRVRTID2),(PMTINFO | PMTINFO2))?)>
<!--#ELEMENT PMTMAILRS #Link(PMTINFO,BILLPAYMSGSETV1)-->
<!--#ELEMENT PMTMAILRS #Link(PMTINFO2,BILLPAYMSGSETV2)-->


<!-- Message Sets -->

<!ELEMENT (SIGNUPMSGSRQV1, SIGNUPMSGSRQV2)  - - 
                                   ((ENROLLTRNRQ | ACCTINFOTRNRQ | 
                                    CHGUSERINFOTRNRQ | CHGUSERINFOSYNCRQ |
                                    ACCTTRNRQ | ACCTSYNCRQ)+ )> 
<!ELEMENT (SIGNUPMSGSRSV1, SIGNUPMSGSRSV2)  - - 
                                   ((ENROLLTRNRS | ACCTINFOTRNRS | 
                                    CHGUSERINFOTRNRS | CHGUSERINFOSYNCRS |
                                    ACCTTRNRS | ACCTSYNCRS)+ )>

<!-- Profile entry for message set -->
<!ELEMENT SIGNUPMSGSET        - - (SIGNUPMSGSETV1?, SIGNUPMSGSETV2?)>
<!ELEMENT SIGNUPMSGSETV1  - - 
                                  (MSGSETCORE , 
                                   (CLIENTENROLL | WEBENROLL | OTHERENROLL),
                                   CHGUSERINFO, AVAILACCTS, CLIENTACTREQ)>
<!-- OFX 1.5 -->
<!-- ADDED PREAUTH -->
<!ELEMENT SIGNUPMSGSETV2  - - 
                                  (MSGSETCORE , 
                                   (CLIENTENROLL | WEBENROLL | OTHERENROLL),
                                   CHGUSERINFO, AVAILACCTS, CLIENTACTREQ, PREAUTH)>

<!ELEMENT CLIENTENROLL          - - (ACCTREQUIRED)>
<!-- OFX 1.5 -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT WEBENROLL             - - ((URL|URL2))>
<!--#ELEMENT WEBWNROLL #Link(URL,SIGNUPMSGSETV1)-->
<!--#ELEMENT WEBENROLL #Link(URL2,SIGNUPMSGSETV2)-->

<!ELEMENT OTHERENROLL           - - (MESSAGE)>

<!ELEMENT ACCTREQUIRED          - o %BOOLTYPE>
<!ELEMENT CHGUSERINFO           - o %BOOLTYPE>
<!ELEMENT AVAILACCTS            - o %BOOLTYPE>
<!ELEMENT CLIENTACTREQ          - o %BOOLTYPE>

<!-- Transactions -->

<!ELEMENT ENROLLTRNRQ       - - (%TRNRQMACRO , ENROLLRQ)>
<!ELEMENT ENROLLTRNRS       - - (%TRNRSMACRO , ENROLLRS?)>
<!ELEMENT ACCTINFOTRNRQ     - - (%TRNRQMACRO , ACCTINFORQ)>
<!ELEMENT ACCTTRNRQ         - - (%TRNRQMACRO , ACCTRQ)>
<!ELEMENT ACCTINFOTRNRS     - - (%TRNRSMACRO , ACCTINFORS?)>
<!ELEMENT ACCTTRNRS         - - (%TRNRSMACRO , ACCTRS?)>
<!ELEMENT CHGUSERINFOTRNRQ  - - (%TRNRQMACRO, CHGUSERINFORQ)>
<!ELEMENT CHGUSERINFOTRNRS  - - (%TRNRSMACRO, CHGUSERINFORS?)>

<!-- ================== -->
<!-- Enrollment         -->
<!-- ==================  -->

<!ELEMENT ENROLLRQ       - - (FIRSTNAME , MIDDLENAME ,
                             LASTNAME , (ADDR1,(ADDR2,ADDR3?)?) ,
                             CITY , STATE , POSTALCODE ,
                             COUNTRY , DAYPHONE , EVEPHONE ,
                             EMAIL , USERID? , TAXID ,
                             SECURITYNAME , DATEBIRTH ,
                             (%ACCTFROMMACRO)? )>

<!-- most above name / addr elements in ofxmain.dtd -->
                             
<!ELEMENT TAXID         - o %IDTYPE>
<!ELEMENT SECURITYNAME  - o %GENNAMETYPE>
<!ELEMENT DATEBIRTH     - o %DTTMTYPE>
  
<!ELEMENT ENROLLRS      - - (TEMPPASS? , USERID? , DTEXPIRE?)>
    <!-- NOTE: could constrain  DTEXPIRE -->

<!ELEMENT TEMPPASS      - o %TEMPPASSTYPE>
<!ELEMENT DTEXPIRE      - o %DTTMTYPE>

<!-- Change User Info -->

<!-- CHGUSERINFORQ/RS Version 2 adds userid -->
<!-- OFX 1.5 -->
<!-- ADDED USERID -->
<!ELEMENT CHGUSERINFORQ - - (FIRSTNAME?, MIDDLENAME?, LASTNAME?,
                             (ADDR1,(ADDR2,ADDR3?)?)?,
                             CITY?, STATE?, POSTALCODE?, COUNTRY?,
                             DAYPHONE?, EVEPHONE?, EMAIL?, USERID?)>
<!--#ELEMENT CHGUSERINFORQ #Link(USERID,SIGNUPMSGSETV2)-->

<!-- OFX 1.5 -->
<!-- ADDED USERID -->
<!ELEMENT CHGUSERINFORS - - (FIRSTNAME?, MIDDLENAME?, LASTNAME?,
                             (ADDR1,(ADDR2,ADDR3?)?)?,
                             CITY?, STATE?, POSTALCODE?, COUNTRY?,
                             DAYPHONE?, EVEPHONE?, EMAIL?,
                             DTINFOCHG, USERID?)>
<!--#ELEMENT CHGUSERINFORS #Link(USERID,SIGNUPMSGSETV2)-->

                             
<!ELEMENT DTINFOCHG     - o %DTTMTYPE>                             

<!ELEMENT CHGUSERINFOSYNCRQ    - - (%SYNCRQMACRO , CHGUSERINFOTRNRQ*)>
<!ELEMENT CHGUSERINFOSYNCRS    - - (%SYNCRSMACRO , CHGUSERINFOTRNRS*)>

<!-- Top level request and response -->
<!ELEMENT ACCTINFORQ    - - (DTACCTUP)>
<!ELEMENT ACCTINFORS    - - (DTACCTUP , ACCTINFO*)>

<!-- Account Info aggregate
     Note: this refers to a macro in ofxmain that
     list all of the account info aggregates
-->
<!ELEMENT ACCTINFO      - - (DESC? , PHONE? ,
                             (%ACCTINFOMACRO)+ )>

<!-- Service status - should be included as part of
     the ACCTINFOMACRO aggregates.  Values
     are AVAIL, PEND, ACTIVE -->
<!ELEMENT SVCSTATUS     - o %SERVICESTATUSENUM>      
<!-- -----------------
  Service Activation
  ----------------- -->


<!-- version 2 ACCTRQ/ACCTRS uses SVC2, version 1 SVC -->
<!-- OFX 1.5 -->
<!ELEMENT ACCTRQ        - - ((SVCADD | SVCCHG | SVCDEL) ,
                             (SVC | SVC2))>
<!--#ELEMENT ACCTRQ #Link(SVC,SIGNUPMSGSETV1)-->
<!--#ELEMENT ACCTRQ #Link(SVC2,SIGNUPMSGSETV2)-->
<!ELEMENT ACCTRS        - -  ((SVCADD | SVCCHG | SVCDEL) ,
                             (SVC | SVC2), SVCSTATUS)>
<!--#ELEMENT ACCTRS #Link(SVC,SIGNUPMSGSETV1)-->
<!--#ELEMENT ACCTRS #Link(SVC2,SIGNUPMSGSETV2)-->

<!-- SVCADD Version 1 has no preauthtoken, version 2 does have preauthtoken -->
<!-- OFX 1.5 -->
<!-- ADDED PREAUTHTOKEN -->
<!ELEMENT SVCADD        - - (%ACCTTOMACRO , PREAUTHTOKEN?)>
<!--#ELEMENT SVCADD #Link(PREAUTHTOKEN,SIGNUPMSGSETV2)-->
<!ELEMENT SVCDEL        - - (%ACCTFROMMACRO)>
<!ELEMENT SVCCHG        - - (%ACCTFROMMACRO , %ACCTTOMACRO)>

<!ELEMENT SVC           - o %SERVICEENUM>
<!-- OFX 1.5 -->
<!-- ADDED SVC2 to support bill presentment -->
<!ELEMENT SVC2          - o %SERVICEENUM2>

<!-- Synchronization -->

<!ELEMENT ACCTSYNCRQ    - - (%SYNCRQMACRO , ACCTTRNRQ*)>
<!ELEMENT ACCTSYNCRS    - - (%SYNCRSMACRO , ACCTTRNRS*)>
<!ELEMENT PREAUTHTOKEN  - o %IDTYPE>      



<!-- Investment Statement Messages -->
<!ELEMENT (INVSTMTMSGSRQV1, INVSTMTMSGSRQV2)  - - 
           ((INVSTMTTRNRQ | INVMAILTRNRQ | INVMAILSYNCRQ)+) >

<!ELEMENT (INVSTMTMSGSRSV1, INVSTMTMSGSRSV2)  - - 
           ((INVSTMTTRNRS | INVMAILTRNRS | INVMAILSYNCRS)+) >

<!-- Security List Messages -->
<!ELEMENT (SECLISTMSGSRQV1, SECLISTMSGSRQV2)  - - (SECLISTTRNRQ+) >

<!ELEMENT (SECLISTMSGSRSV1, SECLISTMSGSRSV2)  - - (SECLISTTRNRS* , SECLIST?) >

<!-- **** SECURITIES *** -->

<!-- Security List Transaction Request/Response -->
<!ELEMENT SECLISTTRNRQ  - - (%TRNRQMACRO , SECLISTRQ) >

<!ELEMENT SECLISTTRNRS  - - (%TRNRSMACRO , SECLISTRS?) >

<!-- Security List Request/Response -->
<!ELEMENT SECLISTRQ  - - (SECRQ+)>

<!ELEMENT SECRQ      - - (SECID | TICKER | FIID) >

<!ELEMENT SECLISTRS  - - %EMPTYTYPE >
            
<!-- Security Ticker Symbol -->
<!ELEMENT TICKER  - O %TICKERTYPE >
                      
<!-- Financial Institution ID for the Security -->                      
<!ELEMENT FIID  - O %FIIDTYPE >

<!-- ** Security Identifier ** -->
<!ELEMENT SECID  - - (UNIQUEID , UNIQUEIDTYPE) >

<!-- Unique ID for the Security -->
<!ELEMENT UNIQUEID  - O %CUSIPTYPE >

<!-- Standard used for Unique ID currently only CUSIP -->
<!ELEMENT UNIQUEIDTYPE  - O %SECUIDENUM >

<!-- *** Security Information *** -->

<!-- Security List -->
<!ELEMENT SECLIST  - - ((MFINFO | STOCKINFO | OPTINFO | DEBTINFO | 
               OTHERINFO)*) >

<!-- ** Info all security types have in common ** -->
<!-- OFX 1.5 -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!ELEMENT SECINFO  - - (SECID , SECNAME , TICKER? , FIID? ,
               RATING? , UNITPRICE? , DTASOF? ,
               CURRENCY? , (MEMO | MEMO2)?) >
<!--#ELEMENT SECINFO #Link(MEMO,INVSTMTMSGSETV1)-->
<!--#ELEMENT SECINFO #Link(MEMO2,INVSTMTMSGSETV2)-->

<!ELEMENT SECNAME   - O %SECNAMETYPE>
              
<!-- Rating for Security -->
<!ELEMENT RATING  - O %RATINGTYPE >

<!-- Unitprice for Security -->
<!ELEMENT UNITPRICE  - O %AMTTYPE >

<!-- *** Debt Information *** -->
<!ELEMENT DEBTINFO  - - (SECINFO , PARVALUE , DEBTTYPE , DEBTCLASS? ,
               COUPONRT? , DTCOUPON? , COUPONFREQ? , CALLPRICE? , 
               YIELDTOCALL? , DTCALL? , CALLTYPE? , YIELDTOMAT? , 
               DTMAT? , ASSETCLASS? , FIASSETCLASS?) >

<!ELEMENT PARVALUE  - O %AMTTYPE >

<!ELEMENT DEBTTYPE  - O %DEBTENUM >

<!ELEMENT DEBTCLASS  - O %DEBTCLASSENUM >

<!ELEMENT COUPONRT  - O %RATETYPE >

<!ELEMENT DTCOUPON  - O %DTTMTYPE >

<!ELEMENT COUPONFREQ  - O %COUPONFREQENUM >

<!ELEMENT CALLPRICE  - O %AMTTYPE >

<!ELEMENT YIELDTOCALL  - O %RATETYPE >

<!ELEMENT DTCALL  - O %DTTMTYPE >

<!ELEMENT CALLTYPE - O %CALLTYPEENUM >

<!ELEMENT YIELDTOMAT  - O %RATETYPE >

<!ELEMENT DTMAT  - O %DTTMTYPE >

<!-- Asset Class for Security -->
<!ELEMENT ASSETCLASS  - O %ASSETCLASSENUM >

<!-- FI's Asset Class for Security -->
<!ELEMENT FIASSETCLASS  - O %GENNAMETYPE >

<!-- *** Mutual Fund Information *** -->
<!ELEMENT MFINFO  - - (SECINFO , MFTYPE? , YIELD? , DTYIELDASOF? , 
               MFASSETCLASS? , FIMFASSETCLASS?) >

<!ELEMENT MFTYPE  - O %MFTENUM >

<!ELEMENT YIELD  - O %RATETYPE >

<!ELEMENT DTYIELDASOF  - O %DTTMTYPE >

<!-- Asset Class for Mutual Funds -->
<!ELEMENT MFASSETCLASS  - - (PORTION+) >

<!-- Asset Class Portion -->
<!ELEMENT PORTION  - - (ASSETCLASS , PERCENT) >

<!ELEMENT PERCENT  - O %RATETYPE >

<!-- FI's Asset Class for Mutual Funds  -->
<!ELEMENT FIMFASSETCLASS  - - (FIPORTION+) >

<!-- FI's Asset Class Portion -->
<!ELEMENT FIPORTION  - - (FIASSETCLASS , PERCENT) >

<!-- *** Option Information *** -->
<!ELEMENT OPTINFO  - - (SECINFO , OPTTYPE , STRIKEPRICE , DTEXPIRE , 
               SHPERCTRCT , SECID? , ASSETCLASS? , FIASSETCLASS?) >

<!ELEMENT OPTTYPE  - O %OPTTYPEENUM >

<!ELEMENT STRIKEPRICE  - O %AMTTYPE >

<!-- Number of shares per contract -->
<!ELEMENT SHPERCTRCT  - O %SHARESPERTYPE >
          
<!-- *** Other Security Type Information *** -->
<!ELEMENT OTHERINFO  - - (SECINFO , TYPEDESC?, ASSETCLASS? , FIASSETCLASS?) >

<!ELEMENT TYPEDESC  - O %TYPEDESCTYPE >


<!-- *** Stock Information *** -->
<!ELEMENT STOCKINFO  - - (SECINFO , STOCKTYPE? , YIELD? , DTYIELDASOF? , 
               ASSETCLASS? , FIASSETCLASS?) >

<!ELEMENT STOCKTYPE  - O %STOCKENUM >


<!-- ***** Investment Accounts ****** -->

<!-- Investment Account From -->
<!ELEMENT INVACCTFROM  - - (BROKERID , ACCTID) >

<!-- Investment Account To -->
<!ELEMENT INVACCTTO  - - (BROKERID , ACCTID) >

<!ELEMENT BROKERID  - O %BROKERIDTYPE >

<!-- ** Investment Account Information ** -->
<!ELEMENT INVACCTINFO - - (INVACCTFROM , USPRODUCTTYPE , CHECKING , 
                           SVCSTATUS, INVACCTTYPE? , OPTIONLEVEL?) >

<!ELEMENT USPRODUCTTYPE - O %USPRODUCTENUM >

<!ELEMENT CHECKING - O %BOOLTYPE >

<!ELEMENT INVACCTTYPE - O %INVESTMENTACCOUNTENUM >

<!ELEMENT OPTIONLEVEL - O %OPTIONLEVELTYPE >  


<!-- ****** INVESTMENT STATEMENT DOWNLOAD ****** -->

<!-- Investment Statement Transaction Request/Response -->
<!ELEMENT INVSTMTTRNRQ  - - (%TRNRQMACRO , INVSTMTRQ) >

<!ELEMENT INVSTMTTRNRS  - - (%TRNRSMACRO , INVSTMTRS?) >

<!-- *** Investment Statement Request *** -->
<!ELEMENT INVSTMTRQ  - - (INVACCTFROM , INCTRAN , INCOO , INCPOS ,
                          INCBAL) >

<!-- ** Include Transactions ** -->
<!ELEMENT INCTRAN  - - (DTSTART? , DTEND? , INCLUDE) >

<!-- ** Include Open Orders ** -->
<!ELEMENT INCOO  - O %BOOLTYPE >

<!-- ** Include Positions ** -->
<!ELEMENT INCPOS  - - (DTASOF? , INCLUDE) >

<!-- Include Balances -->
<!ELEMENT INCBAL  - O %BOOLTYPE >


<!-- *** Investment Statement Response *** -->
<!ELEMENT INVSTMTRS  - - (DTASOF , CURDEF , INVACCTFROM , INVTRANLIST? ,
               INVPOSLIST? , INVBAL? , INVOOLIST? ,  MKTGINFO?) >

<!-- Marketing Mesage -->
<!ELEMENT MKTVAL  - O %AMTTYPE >

<!-- ** Transaction List ** -->
<!ELEMENT INVTRANLIST  - - (DTSTART , DTEND , (BUYDEBT | BUYMF | BUYOPT | BUYOTHER |
               BUYSTOCK | CLOSUREOPT | INCOME | INVEXPENSE | JRNLFUND |
               JRNLSEC | MARGININTEREST | REINVEST | RETOFCAP| SELLDEBT |
               SELLMF | SELLOPT | SELLOTHER |  SELLSTOCK |
               SPLIT | TRANSFER)* , INVBANKTRAN*) >

<!-- ** Investment Banking Transaction ** -->
<!ELEMENT INVBANKTRAN  - - (STMTTRN , SUBACCTFUND) >

<!-- ** Transaction fields common to many types of transactions ** -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!ELEMENT INVTRAN  - - (FITID , (SRVRTID | SRVRTID2)? , DTTRADE , DTSETTLE? , (MEMO | MEMO2)?) >
<!--#ELEMENT INVTRAN #Link(SRVRTID,INVSTMTMSGSETV1)-->
<!--#ELEMENT INVTRAN #Link(SRVRTID2,INVSTMTMSGSETV2)-->
<!--#ELEMENT INVTRAN #Link(MEMO,INVSTMTMSGSETV1)-->
<!--#ELEMENT INVTRAN #Link(MEMO2,INVSTMTMSGSETV2)-->

<!-- Trade Date -->
<!ELEMENT DTTRADE  - O %DTTMTYPE >

<!-- Settlement Date -->
<!ELEMENT DTSETTLE  - O %DTTMTYPE >

<!-- ** Transaction fields common to BUY types of transactions ** -->
<!-- version 2 adds reversalfees, reversalfitid -->
<!-- OFX 1.5 -->
<!-- ADDED REVERSALFEES, REVERSALFITID -->
<!ELEMENT INVBUY  - - (INVTRAN , SECID , UNITS , UNITPRICE , MARKUP? , 
               COMMISSION? , TAXES? , FEES? , LOAD? , TOTAL , REVERSALFEES?, REVERSALFITID?, CURRENCY? ,
               ORIGCURRENCY? , SUBACCTSEC , SUBACCTFUND) >
<!--#ELEMENT INVBUY #Link(REVERSALFEES,INVSTMTMSGSETV2)-->
<!--#ELEMENT INVBUY #Link(REVERSALFITID,INVSTMTMSGSETV2)-->

<!ELEMENT UNITS  - O %AMTTYPE >

<!ELEMENT MARKUP  - O %AMTTYPE >

<!ELEMENT COMMISSION  - O %AMTTYPE >

<!ELEMENT TAXES  - O %AMTTYPE >

<!ELEMENT FEES  - O %AMTTYPE >

<!ELEMENT LOAD  - O %AMTTYPE >

<!ELEMENT TOTAL  - O %AMTTYPE >

<!-- Sub-account for the security -->
<!ELEMENT SUBACCTSEC  - O %SUBACCTENUM >

<!-- Sub-account for the funds involved in the trade: CASH, SHORT, MARGIN, OTHER -->
<!ELEMENT SUBACCTFUND  - O %SUBACCTENUM >

<!-- ** Transaction fields common to SELL types of transactions ** -->
<!-- version 2 adds reversalfees, reversalfitid -->
<!-- OFX 1.5 -->
<!-- ADDED REVERSALFEES, REVERSALFITID -->
<!ELEMENT INVSELL  - - (INVTRAN , SECID , UNITS , UNITPRICE , MARKDOWN? , 
               COMMISSION? , TAXES? , FEES? , LOAD? , WITHHOLDING? ,
               TAXEXEMPT? , TOTAL , REVERSALFEES?, REVERSALFITID?, GAIN? , CURRENCY? , ORIGCURRENCY? ,
               SUBACCTSEC , SUBACCTFUND) >
<!--#ELEMENT INVSELL #Link(REVERSALFEES,INVSTMTMSGSETV2)-->
<!--#ELEMENT INVSELL #Link(REVERSALFITID,INVSTMTMSGSETV2)-->

<!ELEMENT MARKDOWN  - O %AMTTYPE >

<!ELEMENT WITHHOLDING  - O %AMTTYPE >

<!ELEMENT GAIN  - O %AMTTYPE >

<!-- ** Buy Debt Transaction ** -->
<!ELEMENT BUYDEBT  - - (INVBUY , ACCRDINT?) >

<!ELEMENT ACCRDINT  - O %AMTTYPE >

<!-- ** Buy Mutual Fund Transaction ** -->
<!ELEMENT BUYMF  - - (INVBUY , BUYTYPE , RELFITID?) >

<!-- Buy Type -->
<!ELEMENT BUYTYPE  - O %BUYENUM >

<!-- Related Transaction ID -->
<!ELEMENT RELFITID  - O %FITIDTYPE >

<!-- ** Buy Option Transaction ** -->
<!ELEMENT BUYOPT  - - (INVBUY , OPTBUYTYPE , SHPERCTRCT) >

<!-- Option Buy Type -->
<!ELEMENT OPTBUYTYPE  - O %OPTBUYENUM >

<!-- ** Buy Other Transaction ** -->
<!ELEMENT BUYOTHER  - - (INVBUY) >

<!-- ** Buy Stock Transaction ** -->
<!ELEMENT BUYSTOCK  - - (INVBUY , BUYTYPE) >

<!-- ** Closure of Option Transaction ** -->
<!ELEMENT CLOSUREOPT  - - (INVTRAN , SECID , OPTACTION , UNITS , SHPERCTRCT ,
               SUBACCTSEC , RELFITID? , GAIN?) >      
               
<!-- Closure of option action -->
<!ELEMENT OPTACTION  - O %OPTACTIONENUM >

<!-- **Income Transaction ** -->
<!ELEMENT INCOME  - - (INVTRAN , SECID , INCOMETYPE , TOTAL , SUBACCTSEC ,
               SUBACCTFUND , TAXEXEMPT? , WITHHOLDING? ,CURRENCY? ,
               ORIGCURRENCY? ) >

<!-- Type of Income -->
<!ELEMENT INCOMETYPE  - O %INCOMEENUM >

<!ELEMENT TAXEXEMPT - O %BOOLTYPE >

<!-- ** Investment Related Expense Transaction ** -->
<!ELEMENT INVEXPENSE  - - (INVTRAN , SECID , TOTAL , SUBACCTSEC ,
               SUBACCTFUND , CURRENCY? , ORIGCURRENCY?) >

<!-- OFX 1.5 -->
<!-- Added REVERSALFEES -->
<!-- Fees charged for investment reversal -->
<!ELEMENT REVERSALFEES   - O %AMTTYPE >

<!-- OFX 1.5 -->
<!-- Added REVERSALFITID -->
<!-- FITID of transaction to be reversed -->
<!ELEMENT REVERSALFITID	 - O %FITIDTYPE >

<!-- ** Journaling of Funds between sub-accounts Transaction ** -->
<!ELEMENT JRNLFUND - - (INVTRAN , SUBACCTTO , SUBACCTFROM , TOTAL) >

<!ELEMENT SUBACCTTO - O %SUBACCTENUM >

<!ELEMENT SUBACCTFROM - O %SUBACCTENUM >

<!-- ** Journaling of Security between sub-accounts Transaction ** -->
<!ELEMENT JRNLSEC - - (INVTRAN , SECID, SUBACCTTO , SUBACCTFROM , UNITS) >

<!-- ** Margin Interest Transaction ** -->
<!ELEMENT MARGININTEREST  - - (INVTRAN , TOTAL , SUBACCTFUND , CURRENCY? ,
               ORIGCURRENCY?) >

<!-- ** Reinvest Transaction ** -->
<!ELEMENT REINVEST  - - (INVTRAN , SECID , INCOMETYPE , TOTAL , SUBACCTSEC ,
               UNITS , UNITPRICE , COMMISSION? , TAXES? , FEES? , LOAD? ,
               TAXEXEMPT? , CURRENCY? , ORIGCURRENCY?) >

<!-- ** Return Of Capital Transaction ** -->
<!ELEMENT RETOFCAP - - (INVTRAN , SECID , TOTAL , SUBACCTSEC ,
                        SUBACCTFUND , CURRENCY? , ORIGCURRENCY?) >

<!-- ** Sell Debt Transaction ** -->
<!ELEMENT SELLDEBT  - - (INVSELL , SELLREASON , ACCRDINT?) >

<!-- Reason Sell of Debt generated -->
<!ELEMENT SELLREASON - O %SELLREASONENUM >

<!-- ** Sell Mutual Fund Transaction ** -->
<!ELEMENT SELLMF  - - (INVSELL , SELLTYPE , AVGCOSTBASIS? , RELFITID?) >

<!-- Sell Type -->
<!ELEMENT SELLTYPE  - O %SELLTYPEENUM >

<!-- Average cost basis -->
<!ELEMENT AVGCOSTBASIS  - O %AMTTYPE >

<!-- ** Sell Option Transaction ** -->
<!ELEMENT SELLOPT  - - (INVSELL , OPTSELLTYPE , SHPERCTRCT ,
                        RELFITID? , RELTYPE?, SECURED?) >

<!-- Option Sell Type -->
<!ELEMENT OPTSELLTYPE  - O %OPTSELLENUM >

<!-- Related option transaction type -->
<!ELEMENT RELTYPE  - O %RELATEDENUM >

<!-- How the option is secured -->          
<!ELEMENT SECURED  - O %SECUREDENUM >

<!-- ** Sell Other Transaction ** -->
<!ELEMENT SELLOTHER  - - (INVSELL) >

<!-- ** Sell Stock Transaction ** -->
<!ELEMENT SELLSTOCK  - - (INVSELL , SELLTYPE) >

<!-- ** Split Transaction ** -->
<!ELEMENT SPLIT  - - (INVTRAN , SECID , SUBACCTSEC ,
               OLDUNITS , NEWUNITS , NUMERATOR , DENOMINATOR ,
               CURRENCY? , ORIGCURRENCY? , FRACCASH? , SUBACCTFUND?) >

<!ELEMENT OLDUNITS  - O %AMTTYPE >

<!ELEMENT NEWUNITS  - O %AMTTYPE >

<!-- OFX 1.5 -->
<!-- Changed AMTTYPE to INTTYPE but didn't rev the name because AMTTYPE was a bug -->
<!ELEMENT NUMERATOR  - O %INTTYPE >

<!-- OFX 1.5 -->
<!-- Changed AMTTYPE to INTTYPE but didn't rev the name because AMTTYPE was a bug -->
<!ELEMENT DENOMINATOR  - O %INTTYPE >

<!-- Amount of cash recieved from fractional shares -->
<!ELEMENT FRACCASH  - O %AMTTYPE >

<!-- ** Transfer Transaction ** -->
<!ELEMENT TRANSFER  - - (INVTRAN, SECID , SUBACCTSEC , UNITS ,
                        TFERACTION , POSTYPE , INVACCTFROM?,
                        AVGCOSTBASIS?, UNITPRICE?, DTPURCHASE?) >
<!-- Transfer action -->
<!ELEMENT TFERACTION  - O %INOUTENUM >

<!ELEMENT DTPURCHASE  - o %DTTMTYPE>

<!-- ***** Open Orders List ***** -->
<!ELEMENT INVOOLIST  - - ((OOBUYDEBT | OOBUYMF | OOBUYOPT | OOBUYOTHER |
               OOBUYSTOCK | OOSELLDEBT | OOSELLMF | OOSELLOPT |
               OOSELLOTHER | OOSELLSTOCK | OOSWITCHMF)*) >

<!-- ** Open Order fields common to all open orders ** -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!ELEMENT OO  - - (FITID , (SRVRTID | SRVRTID2)? , SECID , DTPLACED , UNITS , SUBACCT ,
               DURATION , RESTRICTION , MINUNITS? , LIMITPRICE? ,
               STOPPRICE? , (MEMO | MEMO2)? , CURRENCY?) >
<!--#ELEMENT OO #Link(SRVRTID,INVSTMTMSGSETV1)-->
<!--#ELEMENT OO #Link(SRVRTID2,INVSTMTMSGSETV2)-->
<!--#ELEMENT OO #Link(MEMO,INVSTMTMSGSETV1)-->
<!--#ELEMENT OO #Link(MEMO2,INVSTMTMSGSETV2)-->

<!ELEMENT DTPLACED  - O %DTTMTYPE >

<!ELEMENT SUBACCT  - O %SUBACCTENUM >

<!ELEMENT DURATION  - O %DURATIONENUM >

<!ELEMENT RESTRICTION  - O %RESTRICTIONENUM >

<!ELEMENT MINUNITS  - O %AMTTYPE >

<!ELEMENT LIMITPRICE  - O %AMTTYPE >

<!ELEMENT STOPPRICE  - O %AMTTYPE >

<!-- ** Buy Debt Open Order ** -->
<!ELEMENT OOBUYDEBT  - - (OO , AUCTION , DTAUCTION?) >

<!ELEMENT AUCTION  - O %BOOLTYPE >

<!ELEMENT DTAUCTION  - O %DTTMTYPE >

<!-- ** Buy Mutual Fund Open Order ** -->
<!ELEMENT OOBUYMF  - - (OO , BUYTYPE , UNITTYPE) >

<!-- Type of units: SHARES or CURRENCY -->
<!ELEMENT UNITTYPE  - O %UNITTYPEENUM >

<!-- ** Buy Option Open Order ** -->
<!ELEMENT OOBUYOPT  - - (OO , OPTBUYTYPE) >

<!-- ** Buy Other Open Order ** -->
<!ELEMENT OOBUYOTHER  - - (OO , UNITTYPE) >

<!-- ** Buy Stock Open Order ** -->
<!ELEMENT OOBUYSTOCK  - - (OO , BUYTYPE) >

<!-- ** Sell Debt Open Order ** -->
<!ELEMENT OOSELLDEBT  - - (OO) >

<!-- ** Sell Mutual Fund Open Order ** -->
<!ELEMENT OOSELLMF  - - (OO , SELLTYPE , UNITTYPE , SELLALL) >

<!ELEMENT SELLALL  - O %BOOLTYPE >

<!-- ** Sell Option Open Order ** -->
<!ELEMENT OOSELLOPT  - - (OO , OPTSELLTYPE) >

<!-- ** Sell Other Security Type Open Order ** -->
<!ELEMENT OOSELLOTHER  - - (OO , UNITTYPE) >

<!-- ** Sell Stock Open Order ** -->
<!ELEMENT OOSELLSTOCK  - - (OO , SELLTYPE) >

<!-- ** Switch Mutual Fund Open Order ** -->
<!ELEMENT OOSWITCHMF  - - (OO , SECID , UNITTYPE , SWITCHALL) >

<!ELEMENT SWITCHALL  - O %BOOLTYPE >


<!-- ***** Position List ***** -->
<!ELEMENT INVPOSLIST  - - ((POSMF | POSSTOCK | POSDEBT| POSOPT |
                           POSOTHER)*) >

<!-- Position fields common to and types of positions -->
<!-- OFX 1.5 -->
<!-- CHANGE MEMO to (MEMO | MEMO2) -->
<!ELEMENT INVPOS  - - (SECID , HELDINACCT , POSTYPE , UNITS , UNITPRICE , 
               MKTVAL , DTPRICEASOF , CURRENCY? , (MEMO | MEMO2)?) >
<!--#ELEMENT INVPOS #Link(MEMO,INVSTMTMSGSETV1)-->
<!--#ELEMENT INVPOS #Link(MEMO2,INVSTMTMSGSETV2)-->

<!-- Which sub-account the position is held in: CASH, MARGIN, SHORT, OTHER -->
<!ELEMENT HELDINACCT  - O %SUBACCTENUM >

<!-- Position Type: SHORT, LONG -->
<!ELEMENT POSTYPE  - O %POSTYPEENUM >

<!ELEMENT DTPRICEASOF  - O %DTTMTYPE >

<!-- ** Debt Position ** -->
<!ELEMENT POSDEBT  - - (INVPOS) >

<!-- ** Mutual Fund Position ** -->
<!ELEMENT POSMF  - - (INVPOS , UNITSSTREET? , UNITSUSER? , REINVDIV? ,
               REINVCG?) >

<!ELEMENT UNITSSTREET  - O %AMTTYPE >

<!ELEMENT UNITSUSER  - O %AMTTYPE >

<!ELEMENT REINVDIV  - O %BOOLTYPE >

<!ELEMENT REINVCG  - O %BOOLTYPE >

<!-- ** Option Position ** -->
<!ELEMENT POSOPT  - - (INVPOS , SECURED?) >

<!-- ** Other Security Type Position ** -->
<!ELEMENT POSOTHER  - - (INVPOS) >

<!-- ** Stock Position ** -->
<!ELEMENT POSSTOCK  - - (INVPOS , UNITSSTREET? , UNITSUSER? , REINVDIV?) >


<!-- ** Balances ** -->
<!ELEMENT INVBAL  - - (AVAILCASH , MARGINBALANCE , SHORTBALANCE ,
                       BUYPOWER? , BALLIST?) >

<!ELEMENT MARGINBALANCE  - O %AMTTYPE >

<!ELEMENT SHORTBALANCE  - O %AMTTYPE >

<!ELEMENT AVAILCASH  - O %AMTTYPE >

<!ELEMENT BUYPOWER  - O %AMTTYPE >

<!ELEMENT BALLIST  - - (BAL*) >

<!-- **** Investment Statement Message Set *** -->

<!-- Investment Message Set -->
<!ELEMENT INVSTMTMSGSET  - - (INVSTMTMSGSETV1?, INVSTMTMSGSETV2?) >

<!-- Investment Message Set: Version 1 and 2-->
<!ELEMENT (INVSTMTMSGSETV1, INVSTMTMSGSETV2)  - - (MSGSETCORE , TRANDNLD , OODNLD , POSDNLD , BALDNLD, CANEMAIL) >

<!-- FI supports download of transactions -->
<!ELEMENT TRANDNLD  - O %BOOLTYPE >

<!-- FI supports download of open orders -->
<!ELEMENT OODNLD  - O %BOOLTYPE >

<!-- FI supports download of positions -->
<!ELEMENT POSDNLD  - O %BOOLTYPE >

<!-- FI supports download of balances -->
<!ELEMENT BALDNLD  - O %BOOLTYPE >

<!-- **** Security List Message Set *** -->

<!-- Security List message Set -->
<!ELEMENT SECLISTMSGSET  - - (SECLISTMSGSETV1?, SECLISTMSGSETV2?) >

<!-- Investment Message Set: Version 1 and 2 -->
<!ELEMENT (SECLISTMSGSETV1, SECLISTMSGSETV2)  - - (MSGSETCORE , SECLISTRQDNLD) >

<!-- FI supports SECLISTRQ -->
<!ELEMENT SECLISTRQDNLD  - O %BOOLTYPE >

<!-- INVESTMENT EMAIL -->
<!ELEMENT INVMAILTRNRQ      - - (%TRNRQMACRO, INVMAILRQ)>
<!ELEMENT INVMAILTRNRS      - - (%TRNRSMACRO, INVMAILRS?)>
<!ELEMENT INVMAILSYNCRQ     - - (%SYNCRQMACRO, INCIMAGES, USEHTML, INVACCTFROM, INVMAILTRNRQ*)>
<!ELEMENT INVMAILSYNCRS     - - (%SYNCRSMACRO, INVACCTFROM, INVMAILTRNRS*)>

<!ELEMENT INVMAILRQ         - - (INVACCTFROM, MAIL)>
<!ELEMENT INVMAILRS         - - (INVACCTFROM, MAIL)>

<!-- Message sets -->
<!ELEMENT (EMAILMSGSRQV1, EMAILMSGSRQV2)     - - ((MAILTRNRQ | MAILSYNCRQ | GETMIMETRNRQ)+ )>
<!ELEMENT (EMAILMSGSRSV1, EMAILMSGSRSV2)     - - ((MAILTRNRS | MAILSYNCRS | GETMIMETRNRS)+ )>

<!-- Profile entry for message set -->
<!ELEMENT EMAILMSGSET       - - (EMAILMSGSETV1?, EMAILMSGSETV2?)>
<!ELEMENT (EMAILMSGSETV1, EMAILMSGSETV2)     - - (MSGSETCORE , MAILSUP , GETMIMESUP)>
<!ELEMENT MAILSUP           - o %BOOLTYPE>
<!ELEMENT GETMIMESUP        - o %BOOLTYPE>

<!-- Email Transactions -->

<!ELEMENT MAILTRNRQ     - - (%TRNRQMACRO , MAILRQ)>
<!ELEMENT MAILTRNRS     - - (%TRNRSMACRO , MAILRS?)>
<!ELEMENT GETMIMETRNRQ  - - (%TRNRQMACRO , GETMIMERQ)>
<!ELEMENT GETMIMETRNRS  - - (%TRNRSMACRO , GETMIMERS?)>

<!-- Email Request -->

<!ELEMENT MAILRQ        - - (MAIL)>
<!ELEMENT MAIL          - - (USERID , DTCREATED , FROM , TO ,
                             SUBJECT , MSGBODY , INCIMAGES ,
                             USEHTML)>

<!ELEMENT DTCREATED     - o %DTTMTYPE>
<!ELEMENT FROM          - o %GENNAMETYPE>
<!ELEMENT TO            - o %GENNAMETYPE>
<!ELEMENT SUBJECT       - o %SUBJECTTYPE>
<!ELEMENT USEHTML       - o %BOOLTYPE>

<!ELEMENT MSGBODY       - - %MSGBODYTYPE>

<!-- Email Response -->

<!ELEMENT MAILRS        - - (MAIL)>

<!-- Email sync -->

<!ELEMENT MAILSYNCRQ    - - (%SYNCRQMACRO , INCIMAGES, USEHTML, MAILTRNRQ*)>
<!ELEMENT MAILSYNCRS    - - (%SYNCRSMACRO , MAILTRNRS*)>

<!-- HTML GET -->

<!-- OFX 1.5 -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT GETMIMERQ     - - ((URL|URL2))>
<!--#ELEMENT GETMIMERQ #Link(URL,EMAILMSGSETV1)-->
<!--#ELEMENT GETMIMERQ #Link(URL2,EMAILMSGSETV2)-->
<!ELEMENT GETMIMERS     - - ((URL|URL2))>
<!--#ELEMENT GETMIMERS #Link(URL,EMAILMSGSETV1)-->
<!--#ELEMENT GETMIMERS #Link(URL2,EMAILMSGSETV2)-->


<!-- Profile message set -->
<!ELEMENT (PROFMSGSRQV1, PROFMSGSRQV2)        - - ((PROFTRNRQ)+ )>
<!ELEMENT (PROFMSGSRSV1, PROFMSGSRSV2)        - - ((PROFTRNRS)+ )>

<!-- Profile entry for message set -->
<!ELEMENT PROFMSGSET        - - (PROFMSGSETV1?, PROFMSGSETV2?)>
<!ELEMENT (PROFMSGSETV1, PROFMSGSETV2)      - - (MSGSETCORE)>

<!-- No synchronization in this module -->

<!-- Transactions -->
<!ELEMENT PROFTRNRQ     - - (%TRNRQMACRO , PROFRQ)>
<!ELEMENT PROFTRNRS     - - (%TRNRSMACRO , PROFRS?)>

<!-- Messages -->

<!ELEMENT PROFRQ    - - (CLIENTROUTING , DTPROFUP)>
<!ELEMENT CLIENTROUTING - o %CLIENTROUTINGENUM>

<!-- version 2 adds urlgetdirect -->
<!-- OFX 1.5 -->
<!-- ADDED URLGETREDIRECT -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT PROFRS    - - (MSGSETLIST , SIGNONINFOLIST , DTPROFUP,
                        FINAME, (ADDR1,(ADDR2,ADDR3?)?), CITY, STATE, POSTALCODE, COUNTRY,
                        CSPHONE?, TSPHONE?, FAXPHONE?, (URL|URL2)?, URLGETREDIRECT?, EMAIL? )>
<!--#ELEMENT PROFRS #Link(URL,EMAILMSGSETV1)-->
<!--#ELEMENT PROFRS #Link(URL2,EMAILMSGSETV2)-->
<!--#ELEMENT PROFRS #Link(URLGETDIRECT,EMAILMSGSETV2)-->
                        
<!ELEMENT FINAME        - o %GENNAMETYPE>
<!ELEMENT CSPHONE       - o %PHONETYPE>
<!ELEMENT TSPHONE       - o %PHONETYPE>
<!ELEMENT FAXPHONE      - o %PHONETYPE>

<!-- OFX 1.5 -->
<!-- ADDED URLGETREDIRECT -->
<!ELEMENT URLGETREDIRECT	- o %BOOLTYPE>

<!-- Message List -->
<!-- Defined in terms of macro in ofxmain -->
<!ELEMENT MSGSETLIST    - - ( (%MSGSETMACRO)* )>

<!-- Message set core info - used by all XXXMSGSETVn -->
<!-- version 2 adds COUNTRY -->
<!-- OFX 1.5 -->
<!-- ADDED COUNTRY -->
<!-- CHANGE URL to URL+ -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT MSGSETCORE    - - (VER , (URL|URL2)+ , OFXSEC ,
                             TRANSPSEC , SIGNONREALM ,
                             LANGUAGE+, COUNTRY*, SYNCMODE, RESPFILEER, SPNAME? )>
<!--#ELEMENT MSGSETCORE #Link(URL,(SIGNONMSGSETV1 | SIGNUPMSGSETV1 | EMAILMSGSETV1 | 
					BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ELEMENT MSGSETCORE #Link(URL2,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!--#ELEMENT MSGSETCORE #Link(COUNTRY,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!ELEMENT VER           - o %VERTYPE>
<!ELEMENT OFXSEC        - o %SECURITYENUM>
<!ELEMENT TRANSPSEC     - o %BOOLTYPE> 
<!ELEMENT SYNCMODE      - o %SYNCENUM>
<!ELEMENT RESPFILEER    - o %BOOLTYPE>
<!ELEMENT SPNAME        - o %GENNAMETYPE>
                            

<!-- Signon realm info - version 2 adds pwtype for intl use -->
<!ELEMENT SIGNONINFOLIST    - - (SIGNONINFO*)>
<!-- OFX 1.5 -->
<!-- ADDED PWTYPE -->
<!ELEMENT SIGNONINFO        - - (SIGNONREALM , MIN , MAX ,
                                 CHARTYPE , CASESEN ,
                                 SPECIAL , SPACES, PINCH, CHGPINFIRST, PWTYPE?)>
<!--#ELEMENT SIGNONINFO #Link(PWTYPE,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!ELEMENT SIGNONREALM       - o %GENNAMETYPE>
<!ELEMENT MIN               - o %INTTYPE>
<!ELEMENT MAX               - o %INTTYPE>
<!ELEMENT CHARTYPE          - o %CHARTYPEENUM>
<!ELEMENT CASESEN           - o %BOOLTYPE>
<!ELEMENT SPECIAL           - o %BOOLTYPE>
<!ELEMENT SPACES            - o %BOOLTYPE>
<!ELEMENT PINCH             - o %BOOLTYPE>
<!ELEMENT CHGPINFIRST       - o %BOOLTYPE>
<!-- OFX 1.5 -->
<!ELEMENT PWTYPE            - o %PWTYPEENUM> 

    
    <!-- BILL PRESENTMENT   -->
    
    <!-- Profile entry for message set -->
    <!ELEMENT PRESDIRMSGSET        - - (PRESDIRMSGSETV2)>
    <!ELEMENT PRESDIRMSGSETV2      - - (MSGSETCORE)>
  
    <!-- No synchronization in this module -->
   
    <!-- ================== -->
    <!-- DIRECTORY MESSAGES -->
    <!-- ================== -->
    
    <!-- FIND BILLER -->
    
    <!-- Find Biller Message set -->
    <!ELEMENT PRESDIRMSGSRQV2    - - (FINDBILLERTRNRQ)>
    <!ELEMENT PRESDIRMSGSRSV2    - - (FINDBILLERTRNRS)>
    
    <!-- Find Biller Transactions -->
    
    <!ELEMENT FINDBILLERTRNRQ    - - (%TRNRQMACRO, FINDBILLERRQ)>
    <!ELEMENT FINDBILLERTRNRS    - - (%TRNRSMACRO, FINDBILLERRS)>
    
    
    
    <!-- Find Biller Request and Response -->
    
    <!ELEMENT FINDBILLERRQ  - - (DTUPDATE? , BILLERID?, NAME?, ADDR1?,
                                    ADDR2? , ADDR3? , CITY?, STATE?,  
                                    POSTALCODE? , COUNTRY? , SIC? ,
                                    CONSUPOSTALCODE?,INCIMAGES)>
             
                                     
    <!ELEMENT FINDBILLERRS  - - (DTUPDATE ,BILLERINFO*)>
    
    <!ELEMENT BILLERINFO    - - (BILLPUB, BILLERID, NAME, ADDR1,
                                    ADDR2? , ADDR3? , CITY, STATE,  
                                    POSTALCODE ,COUNTRY ,SIC ,PHONE ,
                                PAYMENTINSTRUMENTS?, ACCTFORMAT?,
                                    ACCTEDITMASK?, HELPMESSAGE?, RESTRICT?, LOGO?,
                                    VALIDATE?, BILLERINFOURL?)>
    
    <!ELEMENT PAYMENTINSTRUMENTS      - - (PAYMENTINSTRUMENT+)>
    <!ELEMENT PAYMENTINSTRUMENT       - - (PMTINSTRUMENTTYPE, BRAND?)>
    <!ELEMENT DTUPDATE      - o %DTTMTYPE>
    <!ELEMENT CONSUPOSTALCODE - o %ZIPTYPE>
    <!ELEMENT BILLPUB       - o %GENNAMETYPE>
    <!ELEMENT BILLERID      - o %IDTYPE>
    <!ELEMENT ACCTFORMAT    - o %MSGTYPE>
    <!ELEMENT ACCTEDITMASK  - o %MSGTYPE>
    <!ELEMENT HELPMESSAGE   - o %MSGTYPE>
    <!ELEMENT RESTRICT      - o %MSGTYPE>
    <!ELEMENT VALIDATE      - o %URL2TYPE>
    <!ELEMENT BILLERINFOURL - o %URL2TYPE>
    <!ELEMENT LOGO          - o %URL2TYPE>
    
    
    <!-- ================== -->
    <!-- SIGNUP MESSAGES    -->
    <!-- ================== -->
    
    <!-- ENROLL SAME AS STANDARD OFX ENROLL-->
    
    <!-- ACTIVATION SAME AS STANDARD OFX -->
   
    <!ELEMENT PRESNAMEADDRESS - - (NAMEACCTHELD?, ADDR1?, ADDR2?, ADDR3?, CITY?, STATE?,  
                            POSTALCODE?, COUNTRY?, DAYPHONE?, EVEPHONE?)>
    
    <!-- ACCOUNT INFO SAME AS STANDARD OFX EXCEPT FOR GROUP Messages-->

    <!ELEMENT NAMEACCTHELD - o %NAMEACCTHELDTYPE>
 
       
    <!-- ====================== -->
    <!-- BILL DELIVERY MESSAGES -->
    <!-- ====================== -->
    
    <!-- Bill Delivery -->
    
    <!-- Bill Delivery Message set -->
    <!-- Profile entry for message set -->
    <!ELEMENT PRESDLVMSGSET        - - (PRESDLVMSGSETV1)>
    <!ELEMENT PRESDLVMSGSETV1      - - (MSGSETCORE)>
    
    <!-- No synchronization in this module -->
    
   <!ELEMENT PRESDLVMSGSRQV1  - - ((PRESLISTTRNRQ
                                |PRESGRPACCTINFOTRNRQ
                                |PRESDETAILTRNRQ
                                |BILLTBLSTRUCTTRNRQ
                                |PRESNOTIFYTRNRQ
                                |PRESMAILSYNCRQ
                                |PRESMAILTRNRQ)+
                                )>
    <!ELEMENT PRESDLVMSGSRSV1  - - ((PRESLISTTRNRS
                                |PRESGRPACCTINFOTRNRS
                                |PRESDETAILTRNRS
                                |BILLTBLSTRUCTTRNRS
                                |PRESNOTIFYTRNRS
                                |PRESMAILSYNCRS
                                |PRESMAILTRNRS)+
                                )>

    <!-- Account Info Group Transactions -->
    <!ELEMENT PRESGRPACCTINFOTRNRQ    - - (%TRNRQMACRO, (USERID | GROUPID)?, ACCTINFORQ)>
    <!ELEMENT PRESGRPACCTINFOTRNRS    - - (%TRNRSMACRO, ACCTINFORS)>
  
    <!ELEMENT PRESACCTINFO              - - (PRESACCTFROM, SVCSTATUS, REASON?)>
    <!ELEMENT PRESACCTFROM    - - (BILLPUB,BILLERID,ACCTID,PRESNAMEADDRESS?,USERID)>
    <!ELEMENT PRESACCTTO      - - (BILLPUB ,BILLERID, ACCTID, PRESNAMEADDRESS?, USERID)>
  
    <!ELEMENT GROUPID                 - o %IDTYPE>
    <!ELEMENT REASON                  - o %MSGTYPE>
    <!ELEMENT PMTINSTRUMENTTYPE       - o %PMTINSTRUMENTENUM>
    <!ELEMENT BRAND                   - o %GENNAMETYPE> 

    <!-- Bill Delivery Transactions -->
    <!ELEMENT PRESLISTTRNRQ    - - (%TRNRQMACRO,  (USERID|GROUPID)?, PRESLISTRQ)>
    <!ELEMENT PRESLISTTRNRS    - - (%TRNRSMACRO, PRESLISTRS)>
    
    <!ELEMENT PRESNOTIFYTRNRQ    - - (%TRNRQMACRO, PRESNOTIFYRQ)>
    <!ELEMENT PRESNOTIFYTRNRS    - - (%TRNRSMACRO, PRESNOTIFYRS)>
    
    <!ELEMENT PRESLISTRQ       - - (BILLPUB, DTSTART?, DTEND?, BILLID?, NOTIFYWILLING, INCLUDEDETAIL)>
    <!ELEMENT PRESLISTRS       - - (BILLPUB, USERID, DTSTART, DTEND, PRESLIST?)>
    
    <!ELEMENT PRESLIST         - - (PRESBILLINFO*)>
    
    <!ELEMENT PRESBILLINFO     - - (BILLID, PRESACCTFROM, PAYEEID2?, BILLREFINFO?, AMTDUE,
                                    MINAMTDUE?, DTPMTDUE, DTBILL, DTOPEN?, DTCLOSE?,
                                    PREVBAL?, ACTIVITY?, ACCTBAL?, INVOICE?, NOTIFYDESIRED, 
                                    STMNTIMAGE?, (DETAILAVAILABLE|PRESDETAIL))>

    
    <!ELEMENT STMNTIMAGE     - - (IMAGEURL,PREFETCHURL?,DTEXPIRE?)>
    
    <!ELEMENT PRESDETAILTRNRQ  - - (%TRNRQMACRO, PRESDETAILRQ)>
    <!ELEMENT PRESDETAILRQ     - - (BILLID, BILLDETAILTABLETYPE?)>
    <!ELEMENT PRESDETAILTRNRS  - - (%TRNRSMACRO, PRESDETAILRS)>
    <!ELEMENT PRESDETAILRS   - - (PRESDETAIL*)>
  
    <!ELEMENT PRESDETAIL       - - (BILLID, PRESACCTFROM?, PMTINSTRUMENTTABLE*)>
    
    <!ELEMENT BILLDETAILTABLE        - - (TABLENAME, BILLDETAILTABLETYPE, BILLDETAILROW*)>
    
    <!ELEMENT BILLDETAILROW          - - (C|N)*>
    
    <!ELEMENT BILLTBLSTRUCTTRNRQ    - - (%TRNRQMACRO, BILLTBLSTRUCTRQ)>
    <!ELEMENT BILLTBLSTRUCTTRNRS    - - (%TRNRSMACRO, BILLTBLSTRUCTRS)>
    
    <!ELEMENT BILLTBLSTRUCTRQ  - - (BILLID, BILLDETAILTABLETYPE)>
    
    <!ELEMENT BILLTBLSTRUCTRS  - - (BILLID, BILLDETAILTABLETYPE, COLDEF*)>
    
    <!ELEMENT COLDEF                 - - (COLNAME, COLTYPE)>
    
    <!ELEMENT PRESNOTIFYRQ     - - (PRESDELIVERYID)>
    <!ELEMENT PRESNOTIFYRS     - - (PRESDELIVERYID)>
     
    <!ELEMENT PRESDELIVERYID   - - (PRESACCTFROM,BILLID,DTSEEN)>
    
    
    <!ELEMENT NOTIFYWILLING  - o %BOOLTYPE>
    <!ELEMENT INCLUDEDETAIL  - o %BOOLTYPE>
    <!ELEMENT AMTDUE         - o %AMTTYPE>
    <!ELEMENT MINAMTDUE      - o %AMTTYPE>
    <!ELEMENT DTBILL         - o %DTTMTYPE>
    <!ELEMENT PREVBAL        - o %AMTTYPE>
    <!ELEMENT ACTIVITY       - o %AMTTYPE>
    <!ELEMENT ACCTBAL        - o %AMTTYPE>
    <!ELEMENT NOTIFYDESIRED  - o %BOOLTYPE>
    <!ELEMENT DETAILAVAILABLE - o %BOOLTYPE>
    <!ELEMENT IMAGEURL       - o %URL2TYPE>
    <!ELEMENT PREFETCHURL    - o %URL2TYPE>
    <!ELEMENT TABLENAME      - o %GENNAMETYPE>
    <!ELEMENT BILLDETAILTABLETYPE      - o %GENNAMETYPE>
    <!ELEMENT C              - o %MSGTYPE>
    <!ELEMENT N              - o %CHARTYPE>
    <!ELEMENT COLNAME        - o %GENNAMETYPE>
    <!ELEMENT COLTYPE        - o %COLUMNTYPE>
    <!ELEMENT DTSEEN         - o %DTTMTYPE>
	<!ELEMENT BILLID         - o     %IDTYPE>
    
    <!-- =============================== -->
    <!-- BILL PRESENTMENT EMAIL MESSAGES -->
    <!-- =============================== -->
    
    <!-- Synchronization -->
    <!ELEMENT PRESMAILSYNCRQ   - - (%SYNCRQMACRO , PRESMAILTRNRQ*)>
    <!ELEMENT PRESMAILSYNCRS   - - (%SYNCRSMACRO , PRESMAILTRNRS*)>
  
    <!-- Bill Presentment Mail -->
    <!ELEMENT PRESMAILTRNRQ    - - (%TRNRQMACRO, PRESMAILRQ)>
    <!ELEMENT PRESMAILTRNRS    - - (%TRNRSMACRO, PRESMAILRS)>
    
    <!ELEMENT PRESMAILRQ       - - (PRESACCTFROM, MAIL)>
    <!ELEMENT PRESMAILRS       - - (PRESACCTFROM, MAIL)>
 
 
<!-- ============================================================================= -->
<!--
    OpenExchange Element Structure
    This file defines common and high-level elements.
    New requests and responses need to be added to the TRNRQ/TRNRS elements here
-->
<!-- ============================================================================= -->

<!-- Top-level -->
<!-- Add the 'meta-token' for sync requests from each
     service module here -->


<!ENTITY % OFXRQMSGSETS 
                     "(SIGNONMSGSRQV1     | SIGNONMSGSRQV2),
                      (SIGNUPMSGSRQV1     | SIGNUPMSGSRQV2)?,
                      (BANKMSGSRQV1       | BANKMSGSRQV2)?,
                      (CREDITCARDMSGSRQV1 | CREDITCARDMSGSRQV2)?,
                      (INVSTMTMSGSRQV1    | INVSTMTMSGSRQV2)?,
                      (INTERXFERMSGSRQV1  | INTERXFERMSGSRQV2)?,
                      (WIREXFERMSGSRQV1   | WIREXFERMSGSRQV2)?,
                      (BILLPAYMSGSRQV1    | BILLPAYMSGSRQV2)?,
                      (EMAILMSGSRQV1      | EMAILMSGSRQV2)?,
                      (SECLISTMSGSRQV1    | SECLISTMSGSRQV2)?,
                      (PROFMSGSRQV1       | PROFMSGSRQV2)?,
                      PRESDIRMSGSRQV2?,
                      PRESDLVMSGSRQV2?
                      %EXTRARQMSGSETS">

<!ENTITY % OFXRSMSGSETS                      
                     "(SIGNONMSGSRSV1     | SIGNONMSGSRSV2),
                      (SIGNUPMSGSRSV1     | SIGNUPMSGSRSV2)?,
                      (BANKMSGSRSV1       | BANKMSGSRSV2)?,
                      (CREDITCARDMSGSRSV1 | CREDITCARDMSGSRSV2)?,
                      (INVSTMTMSGSRSV1    | INVSTMTMSGSRSV2)?,
                      (INTERXFERMSGSRSV1  | INTERXFERMSGSRSV2)?,
                      (WIREXFERMSGSRSV1   | WIREXFERMSGSRSV2)?,
                      (BILLPAYMSGSRSV1    | BILLPAYMSGSRSV2)?,
                      (EMAILMSGSRSV1      | EMAILMSGSRSV2)?,
                      (SECLISTMSGSRSV1    | SECLISTMSGSRSV2)?,
                      (PROFMSGSRSV1       | PROFMSGSRSV2)?,
                      PRESDIRMSGSRSV2?,
                      PRESDLVMSGSRSV2?
                      %EXTRARSMSGSETS">                
                      
<!ELEMENT OFX   - - ((%OFXRQMSGSETS) | (%OFXRSMSGSETS))>


<!-- Generic Elements and Common Aggregates -->

<!ELEMENT DTCLIENT  - o %DTTMTYPE>
<!ELEMENT USERID    - o %IDTYPE>
<!ELEMENT USERPASS  - o %PASSWORDTYPE>
<!ELEMENT USERKEY   - o %USERKEYTYPE>
<!ELEMENT GENUSERKEY        - o %BOOLTYPE>
<!ELEMENT APPID     - o %APPIDTYPE>
<!ELEMENT APPVER    - o %VERTYPE>
<!ELEMENT DTSERVER  - o %DTTMTYPE>
<!ELEMENT TSKEYEXPIRE       - o     %DTTMTYPE>
<!ELEMENT CLTCOOKIE - o %IDTYPE>
<!ELEMENT TAN       - o %TANTYPE>

<!ELEMENT DESC      - o %SHORTMSGTYPE>
<!ELEMENT PHONE     - o %PHONETYPE>


<!-- general error reporting aggregate -->
<!-- OFX 1.5 -->
<!-- CHANGED MESSAGE TO (MESSAGE | MESSAGE2) -->
<!ELEMENT STATUS    - -     (CODE , SEVERITY , (MESSAGE | MESSAGE2)? )> 
<!--#ELEMENT STATUS #Link(MESSAGE,(SIGNONMSGSETV1 | SIGNUPMSGSETV1 | EMAILMSGSETV1 | 
					BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ELEMENT STATUS #Link(MESSAGE2,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!ELEMENT CODE              - o     %ERRORTYPE>
<!ELEMENT SEVERITY  - o     %SEVERITYENUM>

<!-- OFX 1.02 A-255 -->
<!ELEMENT MESSAGE   - o     %MSGTYPE>

<!-- OFX 1.5 -->
<!-- ADDED MESSAGE2, A-2000 -->
<!ELEMENT MESSAGE2   - o     %LONGMSGTYPE>

<!-- Balance record -->
<!ELEMENT BAL               - -     (NAME , DESC , BALTYPE , VALUE , 
                         DTASOF? , CURRENCY?)>
<!ELEMENT BALTYPE   - o %BALANCEENUM>
<!ELEMENT VALUE             - o %AMTTYPE>


<!--
    TRNUID - a UUID that uniquely identifies transactions
-->
<!ELEMENT TRNUID                    - o     %UUIDTYPE>


<!-- Server ID -->
<!ELEMENT SRVRTID   - o %SRVRIDTYPE>

<!-- OFX 1.5 -->
<!-- Server ID -->
<!ELEMENT SRVRTID2   - o %UUIDTYPE>

<!-- Transaction ID issued by financial institution.This ID is used to detect duplicate downloads -->
<!ELEMENT FITID             - o     %FITIDTYPE>

<!-- starting date -->
<!ELEMENT DTSTART           - o     %DTTMTYPE>

<!-- ending date -->
<!ELEMENT DTEND                     - o     %DTTMTYPE>

<!ELEMENT DTPROFUP      - o %DTTMTYPE>
<!ELEMENT DTACCTUP      - o %DTTMTYPE>

<!-- Sync-related -->
<!ELEMENT TOKENONLY         - o %BOOLTYPE>
<!ELEMENT TOKEN             - o %SRVRIDTYPE>
<!-- OFX 1.5 -->
<!ELEMENT TOKEN2            - o %UUIDTYPE>
<!ELEMENT REFRESH           - o %BOOLTYPE>
<!ELEMENT REJECTIFMISSING   - o %BOOLTYPE>
<!ELEMENT LOSTSYNC          - o %BOOLTYPE>
<!ELEMENT SYNCERROR         - o %ERRORTYPE>

<!ELEMENT URL               - o %URLTYPE>
<!ELEMENT URL2              - o %URL2TYPE>
<!ELEMENT INCIMAGES     - o %BOOLTYPE>


<!-- Name & Address-related fields used in several messages -->

<!ELEMENT FIRSTNAME     - o %GENNAMETYPE>
<!ELEMENT MIDDLENAME    - o %GENNAMETYPE>
<!ELEMENT LASTNAME      - o %GENNAMETYPE>

<!--  Payees address lines (1 or more) -->
<!ELEMENT ADDR1     - o %ADDRESSTYPE>           
<!ELEMENT ADDR2     - o %ADDRESSTYPE>           
<!ELEMENT ADDR3     - o %ADDRESSTYPE>           

<!--  Payees city  -->
<!ELEMENT CITY      - o %ADDRESSTYPE>           

<!--  Payees state -->
<!ELEMENT STATE     - o %STATETYPE>           

<!--  Zip code -->
<!ELEMENT POSTALCODE        - o %ZIPTYPE>           

<!--  Payees country -->
<!ELEMENT COUNTRY   - o %COUNTRYENUM>   
    
<!ELEMENT DAYPHONE      - o %PHONETYPE>
<!ELEMENT EVEPHONE      - o %PHONETYPE>
<!ELEMENT EMAIL         - o %SHORTMSGTYPE>


<!-- ============================================================================= -->
<!--            Common between banking, billpay and/or investments                 -->
<!-- ============================================================================= -->

<!-- Bank account -->
<!-- OFX 1.5 -->
<!-- CHANGED ACCTTYPE TO (ACCTTYPE|ACCTTYPE2) -->
<!ELEMENT BANKACCTFROM - - (BANKID , BRANCHID? , ACCTID ,
                                        (ACCTTYPE|ACCTTYPE2) , ACCTKEY?)>
<!--#ELEMENT BANKACCTFROM #Link(ACCTTYPE,(BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ELEMENT BANKACCTFROM #Link(ACCTTYPE2,(BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!-- V2 adds extbankacctto for international only -->
<!-- OFX 1.5 -->
<!-- ADDED EXTBANKACCTTO -->
<!-- CHANGED ACCTTYPE TO (ACCTTYPE|ACCTTYPE2) -->
<!ELEMENT BANKACCTTO - - (BANKID , BRANCHID? , ACCTID ,
                                        (ACCTTYPE|ACCTTYPE2) , ACCTKEY?, EXTBANKACCTTO?)>
<!--#ELEMENT BANKACCTTO #Link(ACCTTYPE,(BANKMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ELEMENT BANKACCTTO #Link(ACCTTYPE2,(BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->
<!--#ELEMENT BANKACCTTO #Link(EXTBANKACCTTO,(BANKMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | BILLPRESMSGSETV1))-->

<!-- Credit card account -->

<!ELEMENT (CCACCTFROM,CCACCTTO) - - (ACCTID , ACCTKEY?)>

<!-- extbankacctto for international only, v2 only, CHE, DEU or ITA only -->
<!-- OFX 1.5 -->
<!-- NEW Aggregate -->
<!ELEMENT EXTBANKACCTTO - - (BANKNAME?, BANKBRANCH?, BANKCITY?, BANKPOSTALCODE?, CHE.PTTACCTID?)>
<!ELEMENT BANKNAME          - o     %GENNAMETYPE>
<!ELEMENT BANKBRANCH        - o     %GENNAMETYPE>
<!ELEMENT BANKCITY          - o     %ADDRESSTYPE>
<!ELEMENT BANKPOSTALCODE    - o     %ZIPTYPE>
<!ELEMENT CHE.PTTACCTID     - o     %IDTYPE>

<!-- Routing & transit number -->
<!ELEMENT BANKID            - o     %IDTYPE>

<!-- Bank identifier for international banks -->
<!ELEMENT BRANCHID          - o     %IDTYPE>

<!-- Account number -->
<!ELEMENT ACCTID            - o %IDTYPE>

<!-- Type of account.  -->
<!ELEMENT ACCTTYPE          - o %ACCOUNTENUM>
<!-- OFX 1.5 -->
<!-- ADDED ACCTTYPE2 -->
<!ELEMENT ACCTTYPE2         - o %ACCOUNTENUM2>

<!-- Checksum for international banks -->
<!ELEMENT ACCTKEY           - o %IDTYPE>

<!-- User account number for a merchant -->
<!ELEMENT PAYACCT           - o %IDTYPE>

<!--
 If present, this is the FITID of a previously sent transaction that is corrected by this record.
 This transaction replaces or deletes the transaction that it corrects.
-->
<!ELEMENT CORRECTFITID      - o %FITIDTYPE>


<!--
 Actions can be REPLACE or DELETE.
 REPLACE replaces the transaction referenced by CORRECTFITID; DELETE deletes it.
-->
<!ELEMENT CORRECTACTION     - o     %CORRECTIVEACTENUM>

<!-- Payee name or description -->
<!ELEMENT NAME              - o %GENNAMETYPE>

<!-- Extra information (not in <NAME>), A-255 -->
<!ELEMENT MEMO      - o     %MSGTYPE>       

<!-- OFX 1.5 -->
<!-- NEW Type, Only used in V2 message sets -->
<!-- Extra information (not in <NAME>), A-390 -->
<!ELEMENT MEMO2     - o     %MEMO2TYPE>       

<!-- Marketing information -->
<!ELEMENT MKTGINFO  - o %INFOTYPE>

<!-- Include flag -->
<!ELEMENT INCLUDE  - o (%BOOLTYPE;) >


<!-- ============================================================================= -->
<!--            Common amounts                                                     -->
<!-- ============================================================================= -->

<!-- Balance amount -->
<!ELEMENT BALAMT - o        %AMTTYPE>

<!-- Amount of transaction -->
<!ELEMENT TRNAMT    - o     %AMTTYPE>

<!-- ============================================================================= -->
<!--            Common dates                                                       -->
<!-- ============================================================================= -->

<!--        Date funds are available -->
<!ELEMENT DTDUE     - o %DTTMTYPE>

<!-- Balance date -->
<!ELEMENT DTASOF    - o     %DTTMTYPE>

<!-- Value date, not used in US -->
<!ELEMENT DTAVAIL   - o     %DTTMTYPE>


<!-- ============================================================================= -->
<!--        Recurring models and instances                                         -->
<!-- ============================================================================= -->

<!-- If the response is generated by a recurring model, this ID references it -->
<!ELEMENT RECSRVRTID        - o     %SRVRIDTYPE>    
<!-- OFX 1.5 -->
<!-- ADDED RECSRVRTID2 OF UUIDTYPE -->
<!ELEMENT RECSRVRTID2       - o     %UUIDTYPE>    



<!-- Recurring Instructions aggregate -->
<!ELEMENT RECURRINST - - (NINSTS? , FREQ)>

<!-- Number of instances. If this tag is omitted, the schedule is open-ended -->
<!ELEMENT NINSTS    - o     %INTTYPE>

<!-- Frequency -->
<!ELEMENT FREQ      - o     %FREQENUM>

<!--
 Modify pending flag, boolean
 Note: if this flag is set, the server should modify pending as well as future transfers.
-->
<!ELEMENT MODPENDING        - o     %BOOLTYPE>


<!--
 Cancel pending flag, boolean
 Note: if this flag is set, the server should cancel pending as well as future transfers.
-->
<!ELEMENT CANPENDING        - o     %BOOLTYPE>


<!-- International -->
<!ELEMENT LANGUAGE  - o %LANGUAGEENUM>

<!ELEMENT (CURRENCY, ORIGCURRENCY)  - - (CURRATE , CURSYM)>
<!ELEMENT CURSYM        - o %CURRENCYENUM>
<!ELEMENT CURRATE       - o %RATETYPE>
<!ELEMENT CURDEF        - o %CURRENCYENUM>

<!-- ============================================================================= -->
<!--            Common Profile Stuff                                               -->
<!-- ============================================================================= -->

<!--    Recurring transfers and payments -->

<!--    Supports recurring -->
<!ELEMENT CANRECUR  - o %BOOLTYPE>

<!--    Can modify recurring models -->
<!ELEMENT CANMODMDLS        - o %BOOLTYPE>

<!-- Number of days prior to processing that server makes a recurring transaction available to the client -->
<!ELEMENT MODELWND  - o     %DAYSPANTYPE>       

<!-- supports value date, dtavail (should be N in US) -->
<!ELEMENT SUPPORTDTAVAIL - o    %BOOLTYPE>      

<!-- Day where processing is unavailable (MONDAY, TUESDAY, etc) -->
<!ELEMENT PROCDAYSOFF       - o     %DAYSENUM>       

<!-- Cut off time for day's processing -->
<!ELEMENT PROCENDTM         - o     %TMTYPE>      
    
]>
