<!DOCTYPE OFX [

<!--#version 160 -->

<!--
    $Revision: 1.2 $
    $Date: 2003-02-11 22:17:31 $
       
 Open Financial Exchange DTD 
 Copyright 1997, 1998, 1999 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.
    
    Note:  Since these entities are currently empty placeholders, they appear
    at the end of lists without a preceding comma or vertical bar.  Once these
    entities assume real values, a comma or vertical bar should be added
    before each occurrence in a list.
    In particular, new message set request and response aggregates should be
    separated and preceded by a comma and must be optional (followed by a
    question mark).
    New message set profile aggregates should be separated and preceded by
    vertical bars.

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

<!-- 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 and #Datatype 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)-->

<!-- 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)-->

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

<!-- 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 % COUNTRYTYPE "(#PCDATA)">
<!--#ENTITY % COUNTRYTYPE		#DataType(A-3)-->
<!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 % TICKERTYPE "(#PCDATA)">
<!--#ENTITY % TICKERTYPE		#DataType(A-32)-->
<!ENTITY % FIIDTYPE "(#PCDATA)">
<!--#ENTITY % FIIDTYPE			#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 % 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 % 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 % NINSTSTYPE "(#PCDATA)">
<!--#ENTITY % NINSTSTYPE		#DataType(I-3)-->
<!ENTITY % TEMPPASSTYPE "(#PCDATA)">
<!--#ENTITY % TEMPPASSTYPE		#DataType(A-32)-->
<!ENTITY % DAYSPANTYPE "(#PCDATA)">
<!--#ENTITY % DAYSPANTYPE		#DataType(I-3)-->
<!ENTITY % REFNUMTYPE "(#PCDATA)">
<!--#ENTITY % REFNUMTYPE		#DataType(A-32)-->
<!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(A-32)-->
<!ENTITY % EXTTYPE "(#PCDATA)">
<!--#ENTITY % EXTTYPE			#DataType(I-10)-->
<!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)-->
<!ENTITY % SECUIDTYPE "(#PCDATA)">
<!--#ENTITY % SECUIDTYPE 		#DataType(A-10)-->
<!ENTITY % EXTDPMTDSC2TYPE "(#PCDATA)">
<!--#ENTITY % EXTDPMTDSC2TYPE 	#DataType(A-1280)-->

<!-- 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 % EXTDPMTFORENUM		#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 % 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 % SERVICESTATUS2ENUM "(#PCDATA)">
<!--#ENTITY % SERVICESTATUS2ENUM	#Enum("AVAIL","PEND", "ACTIVE", "REJECTED")-->
<!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 % PWTYPEENUM "(#PCDATA)">
<!--#ENTITY % PWTYPEENUM 		#Enum("FIXED","ONETIME","HWTOKEN")-->
<!ENTITY % PMTINSTRUMENTENUM "(#PCDATA)">
<!--#ENTITY % PMTINSTRUMENTENUM 	#Enum("CONCENTRATOR","CHECKINGACCOUNT","CREDITCARD","ECOIN")-->

<!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","EUR","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")-->

<!-- OFX 1.6: Add PAYEEMODPENDING to BILLPAYMSGSETV2. -->
<!ENTITY % PAYEEMODENUM "(#PCDATA)">
<!--#ENTITY % PAYEEMODENUM	#Enum("NEVER", "IFREQUESTED")-->

<!-- OFX 1.6: Add these tags to PRESLISTRQ. -->               
<!ENTITY % BILLTYPEENUM "(#PCDATA)">
<!--#ENTITY % BILLTYPEENUM	#Enum("BILL", "STATEMENT", "NOTICE")-->
<!ENTITY % BILLSTATUSCODEENUM "(#PCDATA)">
<!--#ENTITY % BILLSTATUSCODEENUM	#Enum("NEW", "DELIVERED", "VIEWED", "RETIRED", 
                                          "WITHDRAWN", "UNDELIVERABLE")-->
<!ENTITY % BILLPMTSTATUSCODEENUM "(#PCDATA)">
<!--#ENTITY % BILLPMTSTATUSCODEENUM	#Enum("NONE", "SCHEDULED", "PROCESSED", "POSTED", 
                                          "PAIDOUTOFBAND", "AUTOPAY", "CANCELLED", 
                                          "UNPAYABLE")-->

<!-- OFX 1.6: New STATUSMODBY tag for the new BILLSTATUS and BILLPMTSATUS. -->
<!ENTITY % STATUSMODBYENUM "(#PCDATA)">
<!--#ENTITY % STATUSMODBYENUM	#Enum("CUSTOMER", "CUSTAGENT", "BILLPUBLISHER", 
                                      "BILLPUBLISHERSR", "PMTPROVIDER", 
                                      "PMTPROVIDERSR", "BILLER", "BILLERSR")-->

<!-- ============================================================================= -->
<!-- ENTITIES - special characters
    This section defines special characters defined in Chapter 2
-->
<!-- ============================================================================= -->
<!-- ampersand -->
<!ENTITY amp CDATA "&#38;">     

<!-- greater than -->
<!ENTITY gt CDATA "&#62;">

<!-- less than -->
<!ENTITY lt CDATA "&#60;">      


<!-- ============================================================================= -->
<!-- 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)" >   

<!-- OFX 1.5 -->
<!-- ADDED SYNCERROR -->
<!-- ADDED TOKEN2 -->
<!ENTITY % SYNCRSMACRO "((TOKEN | TOKEN2), LOSTSYNC?, SYNCERROR?)">

<!-- 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)">

<!-- OFX 1.5 -->
<!-- ADDED PRESACCTTO -->
<!ENTITY % ACCTTOMACRO "(BANKACCTTO | CCACCTTO | INVACCTTO | PRESACCTTO)">

<!-- OFX 1.5 -->
<!-- ADDED PRESACCTINFO -->
<!ENTITY % ACCTINFOMACRO "(BANKACCTINFO | CCACCTINFO | BPACCTINFO | INVACCTINFO | PRESACCTINFO)">

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

<!-- 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 -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!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, COUNTRY? , FI? , SESSCOOKIE? , APPID , APPVER)>
<!--#ELEMENT SONRQ #Link(ONETIMEPASS,SIGNONMSGSRQV2)-->
<!--#ELEMENT SONRQ #Link(COUNTRY,SIGNONMSGSRQV2)-->

<!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, COUNTRY? ,
                        DTPROFUP? , DTACCTUP? , FI?, SESSCOOKIE?)>
<!--#ELEMENT SONRS #Link(COUNTRY,SIGNONMSGSRSV2)-->

<!-- 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                                    -->
<!-- ============================================================================= -->

<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!ELEMENT BANKMSGSET        - - (BANKMSGSETV1, BANKMSGSETV2*)>
<!ELEMENT CREDITCARDMSGSET  - - (CREDITCARDMSGSETV1, CREDITCARDMSGSETV2*)>
<!ELEMENT INTERXFERMSGSET   - - (INTERXFERMSGSETV1, INTERXFERMSGSETV2*)>
<!ELEMENT WIREXFERMSGSET    - - (WIREXFERMSGSETV1, WIREXFERMSGSETV2*)>


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

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

<!ELEMENT BANKMSGSETV2 - - 
                                  (MSGSETCORE , INVALIDACCTTYPE2* , CLOSINGAVAIL , XFERPROF? , 
                                   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 -->
<!ELEMENT INTERXFERMSGSETV2  - - 
                                 (MSGSETCORE , XFERPROF, CANBILLPAY, CANCELWND , DOMXFERFEE , 
                                  INTLXFERFEE, CANMULTI)>

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


<!ELEMENT XFERPROF    - - (PROCDAYSOFF* , PROCENDTM , CANSCHED , CANRECUR , CANMODXFERS , 
                           CANMODMDLS , MODELWND, DAYSWITH, DFLTDAYSTOPAY, NEEDTANTRANSFER?, SUPPORTDTAVAIL?)>
<!--#ELEMENT XFERPROF #Link(NEEDTANTRANSFER,PROFMSGSRSV2)-->
<!--#ELEMENT XFERPROF #Link(SUPPORTDTAVAIL,PROFMSGSRSV2)-->


<!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)?)>
<!ELEMENT RECINTRATRNRS - - (%TRNRSMACRO , (RECINTRARS | RECINTRAMODRS | RECINTRACANRS)?)>
<!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)?)>
<!ELEMENT RECINTERTRNRS   - - (%TRNRSMACRO , (RECINTERRS | RECINTERMODRS | RECINTERCANRS)?)>
<!-- OFX 1.6 correction.  All previous DTD versions required one or more INTERRS
     aggregates, preventing normal error handling. -->
<!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,BANKMSGSRQV1)-->
<!--#ELEMENT INTRAMODRQ #Link(SRVRTID2,BANKMSGSRQV2)-->


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


<!-- 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,INTERXFERMSGSRQV1)-->
<!--#ELEMENT INTERMODRQ #Link(SRVRTID2,INTERXFERMSGSRQV2)-->


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


<!-- 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,WIREXFERMSGSRQV1)-->
<!--#ELEMENT WIRECANRQ #Link(SRVRTID2,WIREXFERMSGSRQV2)-->


<!-- recurring intra transfer request -->
<!ELEMENT RECINTRARQ - - (RECURRINST ,  (INTRARQ | XFERINFO) )>
<!--#ELEMENT RECINTRARQ #Link(INTRARQ,BANKMSGSRQV1)-->
<!--#ELEMENT RECINTRARQ #Link(XFERINFO,BANKMSGSRQV2)-->

<!-- recurring intra transfer modification request -->
<!ELEMENT RECINTRAMODRQ - - ((RECSRVRTID | RECSRVRTID2), RECURRINST ,  (INTRARQ | XFERINFO), MODPENDING)>
<!--#ELEMENT RECINTRAMODRQ #Link(RECSRVRTID,BANKMSGSRQV1)-->
<!--#ELEMENT RECINTRAMODRQ #Link(RECSRVRTID2,BANKMSGSRQV2)-->
<!--#ELEMENT RECINTRAMODRQ #Link(INTRARQ,BANKMSGSRQV1)-->
<!--#ELEMENT RECINTRAMODRQ #Link(XFERINFO,BANKMSGSRQV2)-->

<!-- recurring intra transfer cancellation request -->
<!ELEMENT RECINTRACANRQ - - ((RECSRVRTID | RECSRVRTID2), CANPENDING)>
<!--#ELEMENT RECINTRACANRQ #Link(RECSRVRTID,BANKMSGSRQV1)-->
<!--#ELEMENT RECINTRACANRQ #Link(RECSRVRTID2,BANKMSGSRQV2)-->


<!-- recurring inter transfer request -->
<!ELEMENT RECINTERRQ - - (RECURRINST , (INTERRQ | XFERINFO) )>
<!--#ELEMENT RECINTERRQ #Link(INTERRQ,INTERXFERMSGSRQV1)-->
<!--#ELEMENT RECINTERRQ #Link(XFERINFO, INTERXFERMSGSRQV2)-->

<!-- recurring inter transfer modification request -->
<!ELEMENT RECINTERMODRQ - - ((RECSRVRTID | RECSRVRTID2), RECURRINST , (INTERRQ | XFERINFO), MODPENDING)>
<!--#ELEMENT RECINTERMODRQ #Link(RECSRVRTID, INTERXFERMSGSRQV1)-->
<!--#ELEMENT RECINTERMODRQ #Link(RECSRVRTID2, INTERXFERMSGSRQV2)-->
<!--#ELEMENT RECINTERMODRQ #Link(INTERRQ,INTERXFERMSGSRQV1)-->
<!--#ELEMENT RECINTERMODRQ #Link(XFERINFO, INTERXFERMSGSRQV2)-->

<!-- recurring inter transfer cancellation request -->
<!ELEMENT RECINTERCANRQ - - ((RECSRVRTID | RECSRVRTID2), CANPENDING)> 
<!--#ELEMENT RECINTERCANRQ #Link(RECSRVRTID, INTERXFERMSGSRQV1)-->
<!--#ELEMENT RECINTERCANRQ #Link(RECSRVRTID2, INTERXFERMSGSRQV2)-->




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



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

<!-- stop check synchronization request -->
<!ELEMENT STPCHKSYNCRQ - - (%SYNCRQMACRO , BANKACCTFROM, STPCHKTRNRQ*)>
<!--#ELEMENT STPCHKSYNCRQ #Link(TOKEN,BANKMSGSRQV1)-->
<!--#ELEMENT STPCHKSYNCRQ #Link(TOKEN2,BANKMSGSRQV2)-->


<!-- 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,BANKMSGSRQV2)-->
<!--#ELEMENT INTRASYNCRQ #Link(TOKEN,BANKMSGSRQV1)-->
<!--#ELEMENT INTRASYNCRQ #Link(TOKEN2,BANKMSGSRQV2)-->


<!-- 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(CCACCTFROM,INTERXFERMSGSRQV2)-->
<!--#ELEMENT INTERSYNCRQ #Link(MULTIINTERTRNRQ,INTERXFERMSGSRQV2)-->
<!--#ELEMENT INTERSYNCRQ #Link(TOKEN,INTERXFERMSGSRQV1)-->
<!--#ELEMENT INTERSYNCRQ #Link(TOKEN2,INTERXFERMSGSRQV2)-->

<!-- wire transfer synchronization request -->
<!ELEMENT WIRESYNCRQ - - (%SYNCRQMACRO , BANKACCTFROM, WIRETRNRQ*)>
<!--#ELEMENT WIRESYNCRQ #Link(TOKEN,WIREXFERMSGSRQV1)-->
<!--#ELEMENT WIRESYNCRQ #Link(TOKEN2,WIREXFERMSGSRQV2)-->

         
<!--
  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,BANKMSGSRQV2)-->
<!--#ELEMENT RECINTRASYNCRQ #Link(TOKEN,BANKMSGSRQV1)-->
<!--#ELEMENT RECINTRASYNCRQ #Link(TOKEN2,BANKMSGSRQV2)-->

<!--
  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,INTERXFERMSGSRQV2)-->
<!--#ELEMENT RECINTERSYNCRQ #Link(TOKEN,INTERXFERMSGSRQV1)-->
<!--#ELEMENT RECINTERSYNCRQ #Link(TOKEN2,INTERXFERMSGSRQV2)-->

<!-- bank mail synchronization request -->
<!ELEMENT BANKMAILSYNCRQ - - (%SYNCRQMACRO , INCIMAGES, USEHTML, (BANKACCTFROM | CCACCTFROM), BANKMAILTRNRQ*)>
<!--#ELEMENT BANKMAILSYNCRQ #Link(TOKEN,BANKMSGSRQV1)-->
<!--#ELEMENT BANKMAILSYNCRQ #Link(TOKEN2,BANKMSGSRQV2)-->

<!-- ============================================================================= -->
<!--            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 | RECSRVRTID2)?, XFERPRCSTS?)>	
<!--#ELEMENT INTRARS #Link(SRVRTID,BANKMSGSRSV1)-->
<!--#ELEMENT INTRARS #Link(SRVRTID2,BANKMSGSRSV2)-->
<!--#ELEMENT INTRARS #Link(RECSRVRTID,BANKMSGSRSV1)-->
<!--#ELEMENT INTRARS #Link(RECSRVRTID2,BANKMSGSRSV2)-->

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

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


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

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


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


<!-- 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,WIREXFERMSGSRSV1)-->
<!--#ELEMENT WIRERS #Link(SRVRTID2,WIREXFERMSGSRSV2)-->


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


<!-- recurring intra transfer response -->
<!ELEMENT RECINTRARS - - ((RECSRVRTID | RECSRVRTID2), RECURRINST , (INTRARS | XFERINFO) )>
<!--#ELEMENT RECINTRARS #Link(RECSRVRTID,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRARS #Link(RECSRVRTID2,BANKMSGSRSV2)-->
<!--#ELEMENT RECINTRARS #Link(INTRARS,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRARS #Link(XFERINFO,BANKMSGSRSV2)-->

<!-- recurring intra transfer modification request -->
<!ELEMENT RECINTRAMODRS - - ((RECSRVRTID | RECSRVRTID2), RECURRINST , (INTRARS | XFERINFO) , MODPENDING)>
<!--#ELEMENT RECINTRAMODRS #Link(RECSRVRTID,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRAMODRS #Link(RECSRVRTID2,BANKMSGSRSV2)-->
<!--#ELEMENT RECINTRAMODRS #Link(INTRARS,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRAMODRS #Link(XFERINFO,BANKMSGSRSV2)-->

<!-- recurring intra transfer cancellation response -->
<!ELEMENT RECINTRACANRS	- - ((RECSRVRTID | RECSRVRTID2), CANPENDING)>
<!--#ELEMENT RECINTRACANRS #Link(RECSRVRTID,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRACANRS #Link(RECSRVRTID2,BANKMSGSRSV2)-->


<!-- recurring inter transfer response -->
<!ELEMENT RECINTERRS - - ((RECSRVRTID | RECSRVRTID2), RECURRINST , (INTERRS | XFERINFO) )>
<!--#ELEMENT RECINTERRS #Link(RECSRVRTID,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERRS #Link(RECSRVRTID2,INTERXFERMSGSRSV2)-->
<!--#ELEMENT RECINTERRS #Link(INTERRS,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERRS #Link(XFERINFO,INTERXFERMSGSRSV2)-->

<!-- recurring inter transfer modification request -->
<!ELEMENT RECINTERMODRS	- - ((RECSRVRTID | RECSRVRTID2), RECURRINST , (INTERRS | XFERINFO) , MODPENDING)>
<!--#ELEMENT RECINTERMODRS #Link(RECSRVRTID,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERMODRS #Link(RECSRVRTID2,INTERXFERMSGSRSV2)-->
<!--#ELEMENT RECINTERMODRS #Link(INTERRS,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERMODRS #Link(XFERINFO,INTERXFERMSGSRSV2)-->

<!-- recurring inter transfer cancellation response -->
<!ELEMENT RECINTERCANRS	- - ((RECSRVRTID | RECSRVRTID2), CANPENDING)>
<!--#ELEMENT RECINTERCANRS #Link(RECSRVRTID,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERCANRS #Link(RECSRVRTID2,INTERXFERMSGSRSV2)-->


<!-- bank mail response -->
<!ELEMENT BANKMAILRS - - ((BANKACCTFROM | CCACCTFROM) , MAIL)>

<!-- 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*)>
<!--#ELEMENT STPCHKSYNCRS #Link(TOKEN,BANKMSGSRSV1)-->
<!--#ELEMENT STPCHKSYNCRS #Link(TOKEN2,BANKMSGSRSV2)-->
<!--#ELEMENT STPCHKSYNCRS #Link(SYNCERROR,BANKMSGSRSV2)-->

<!-- 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,BANKMSGSRSV2)-->
<!--#ELEMENT INTRASYNCRS #Link(TOKEN,BANKMSGSRSV1)-->
<!--#ELEMENT INTRASYNCRS #Link(TOKEN2,BANKMSGSRSV2)-->
<!--#ELEMENT INTRASYNCRS #Link(SYNCERROR,BANKMSGSRSV2)-->

<!-- 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,INTERXFERMSGSRSV2)-->
<!--#ELEMENT INTERSYNCRS #Link(TOKEN,INTERXFERMSGSRSV1)-->
<!--#ELEMENT INTERSYNCRS #Link(TOKEN2,INTERXFERMSGSRSV2)-->
<!--#ELEMENT INTERSYNCRS #Link(SYNCERROR,INTERXFERMSGSRSV2)-->

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

<!-- 
  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,BANKMSGSRSV2)-->
<!--#ELEMENT RECINTRASYNCRS #Link(TOKEN,BANKMSGSRSV1)-->
<!--#ELEMENT RECINTRASYNCRS #Link(TOKEN2,BANKMSGSRSV2)-->
<!--#ELEMENT RECINTRASYNCRS #Link(SYNCERROR,BANKMSGSRSV2)-->

<!-- 
  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,INTERXFERMSGSRSV2)-->
<!--#ELEMENT RECINTERSYNCRS #Link(TOKEN,INTERXFERMSGSRSV1)-->
<!--#ELEMENT RECINTERSYNCRS #Link(TOKEN2,INTERXFERMSGSRSV2)-->
<!--#ELEMENT RECINTERSYNCRS #Link(SYNCERROR,INTERXFERMSGSRSV2)-->

<!-- BANK MAIL synchronization request -->
<!ELEMENT BANKMAILSYNCRS - - (%SYNCRSMACRO , (BANKACCTFROM | CCACCTFROM), BANKMAILTRNRS*)>
<!--#ELEMENT BANKMAILSYNCRS #Link(TOKEN,BANKMSGSRSV1)-->
<!--#ELEMENT BANKMAILSYNCRS #Link(TOKEN2,BANKMSGSRSV2)-->
<!--#ELEMENT BANKMAILSYNCRS #Link(SYNCERROR,BANKMSGSRSV2)-->

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



<!-- BANKACCTINFO CCACCTINFO -->
<!ELEMENT BANKACCTINFO  - - (BANKACCTFROM ,
                             SUPTXDL, XFERSRC, XFERDEST, (SVCSTATUS|SVCSTATUS2), REASON?)>
<!--#ELEMENT BANKACCTINFO #Link(SVCSTATUS,SIGNUPMSGSRSV1)-->
<!--#ELEMENT BANKACCTINFO #Link(SVCSTATUS2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT BANKACCTINFO #Link(REASON,SIGNUPMSGSRSV2)-->
<!ELEMENT CCACCTINFO    - - (CCACCTFROM ,
                             SUPTXDL, XFERSRC, XFERDEST, (SVCSTATUS|SVCSTATUS2), REASON?)>
<!--#ELEMENT CCACCTINFO #Link(SVCSTATUS,SIGNUPMSGSRSV1)-->
<!--#ELEMENT CCACCTINFO #Link(SVCSTATUS2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT CCACCTINFO #Link(REASON,SIGNUPMSGSRSV2)-->
                             
<!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) -->
<!-- OFX 1.6: Added SPNAME and allowed it only when SRVRTID[2] is there too. -->
<!ELEMENT STMTTRN	- - (TRNTYPE , DTPOSTED , DTUSER? , DTAVAIL? , TRNAMT , FITID ,
			     (CORRECTFITID , CORRECTACTION)? ,
			     ( SPNAME?, (SRVRTID | SRVRTID2) )?, CHECKNUM? , REFNUM? , 
			     SIC? , (PAYEEID | PAYEEID2)? , (NAME | (PAYEE | PAYEE2))?,
			     (BANKACCTTO | CCACCTTO)?,
			     (MEMO | MEMO2)? , (CURRENCY | ORIGCURRENCY)?)> 
<!--#ELEMENT STMTTRN #Link(SRVRTID,(BANKMSGSRQV1|BANKMSGSRSV1))-->
<!--#ELEMENT STMTTRN #Link(SRVRTID2,(BANKMSGSRQV2|BANKMSGSRSV2))-->
<!--#ELEMENT STMTTRN #Link(PAYEE,(BANKMSGSRQV1|BANKMSGSRSV1))-->
<!--#ELEMENT STMTTRN #Link(PAYEE2,(BANKMSGSRQV2|BANKMSGSRSV2))-->
<!--#ELEMENT STMTTRN #Link(MEMO,(BANKMSGSRQV1|BANKMSGSRSV1))-->
<!--#ELEMENT STMTTRN #Link(MEMO2,(BANKMSGSRQV2|BANKMSGSRSV2))-->
<!--#ELEMENT STMTTRN #Link(PAYEEID,(BANKMSGSRQV1|BANKMSGSRSV1))-->
<!--#ELEMENT STMTTRN #Link(PAYEEID2,(BANKMSGSRQV2|BANKMSGSRSV2))-->

<!-- 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,(BANKMSGSRQV2|BANKMSGSRSV2|CREDITCARDMSGSRQV2|CREDITCARDMSGSRSV2))-->
<!--#ELEMENT XFERINFO #Link(MEMO2,(BANKMSGSRQV2|BANKMSGSRSV2|CREDITCARDMSGSRQV2|CREDITCARDMSGSRSV2))-->

<!-- 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,(WIREXFERMSGSRQV1|WIREXFERMSGSRSV1))-->
<!--#ELEMENT WIREBENEFICIARY #Link(MEMO2,(WIREXFERMSGSRQV2|WIREXFERMSGSRSV2))-->

<!-- 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 %SHORTMSGTYPE>

<!-- 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)*)>

<!-- -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!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)>

<!-- OFX 1.6: Add CANMOTO and PAYEEMODPENDING. -->
<!ELEMENT BILLPAYMSGSETV2       - -     (MSGSETCORE,
                                        DAYSWITH, DFLTDAYSTOPAY,
                                        XFERDAYSWITH, XFERDFLTDAYSTOPAY, 
                                        PROCDAYSOFF*, PROCENDTM, 
                                        MODELWND, POSTPROCWND, STSVIAMODS,
                                        PMTBYADDR, PMTBYXFER, PMTBYPAYEEID,
                                        CANADDPAYEE, HASEXTDPMT, HASRECEXTDPMT,
                                        CANMODPMTS, CANMODMDLS, DIFFFIRSTPMT, 
                                        DIFFLASTPMT, NEEDTANPMT, NEEDTANPAYEE,
					SUPPORTDTAVAIL, CANMOTO?, PAYEEMODPENDING? )>

<!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 HASRECEXTDPMT - o     %BOOLTYPE>      <!--  supports the RECEXTDPMT 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) -->

<!-- OFX 1.6: Add CANMOTO and PAYEEMODPENDING. -->
<!ELEMENT CANMOTO	- o	%BOOLTYPE>	<!-- Support for <CCMOTOACCT>. -->
<!ELEMENT PAYEEMODPENDING - o	%PAYEEMODENUM>	<!-- Support for <MODPENDING> in
						     <PAYEEMODRQ>. -->

<!-- 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,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTRQ #Link(PMTINFO2,BILLPAYMSGSRQV2)-->

<!--  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,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTMODRQ #Link(SRVRTID2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT PMTMODRQ #Link(PMTINFO,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTMODRQ #Link(PMTINFO2,BILLPAYMSGSRQV2)-->


<!--  cancellation request -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTCANCRQ     - - ((SRVRTID | SRVRTID2))>
<!--#ELEMENT PMTCANCRQ #Link(SRVRTID,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTCANCRQ #Link(SRVRTID2,BILLPAYMSGSRQV2)-->


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


<!-- 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,BILLPAYMSGSRQV1)-->
<!--#ELEMENT RECPMTMODRQ #Link(RECSRVRTID2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT RECPMTMODRQ #Link(PMTINFO,BILLPAYMSGSRQV1)-->
<!--#ELEMENT RECPMTMODRQ #Link(PMTINFO2,BILLPAYMSGSRQV2)-->
 

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

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

<!-- 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,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PAYEERQ #Link(PAYEE2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT PAYEERQ #Link(PAYEEID,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PAYEERQ #Link(PAYEEID2,BILLPAYMSGSRQV2)-->

<!-- payee modification request -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!-- CHANGE PAYEELSTID to (PAYEELSTID | PAYEELSTID2) -->
<!-- OFX 1.6: Add MODPENDING. -->
<!ELEMENT PAYEEMODRQ    - - ((PAYEELSTID | PAYEELSTID2),
			     ((PAYEE | PAYEE2), BANKACCTTO?)?, PAYACCT*,
			     MODPENDING? )>
<!--#ELEMENT PAYEEMODRQ #Link(PAYEELSTID,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEELSTID2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEE,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PAYEEMODRQ #Link(PAYEE2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT PAYEEMODRQ #Link( MODPENDING, BILLPAYMSGSRQV2 )-->

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

<!-- ============================================================================= -->
<!-- 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 | RECSRVRTID2)?)>
<!--#ELEMENT PMTRS #Link(SRVRTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTRS #Link(SRVRTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTRS #Link(PMTINFO,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTRS #Link(PMTINFO2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTRS #Link(PAYEELSTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTRS #Link(PAYEELSTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTRS #Link(RECSRVRTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTRS #Link(RECSRVRTID2,BILLPAYMSGSRSV2)-->
   

<!-- 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,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTMODRS #Link(SRVRTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTMODRS #Link(PMTINFO,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTMODRS #Link(PMTINFO2,BILLPAYMSGSRSV2)-->


<!-- payment cancellation response -->
<!-- OFX 1.5 -->
<!-- CHANGE SRVRTID to (SRVRTID | SRVRTID2) -->
<!ELEMENT PMTCANCRS     - -     (SRVRTID | SRVRTID2)>              
<!--#ELEMENT PMTCANCRS #Link(SRVRTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTCANCRS #Link(SRVRTID2,BILLPAYMSGSRSV2)-->


<!--  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,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTRS #Link(RECSRVRTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT RECPMTRS #Link(PAYEELSTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTRS #Link(PAYEELSTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT RECPMTRS #Link(PMTINFO,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTRS #Link(PMTINFO2,BILLPAYMSGSRSV2)-->
 

<!-- 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,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTMODRS #Link(RECSRVRTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT RECPMTMODRS #Link(PMTINFO,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTMODRS #Link(PMTINFO2,BILLPAYMSGSRSV2)-->


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

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


<!-- 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,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PAYEERS #Link(PAYEELSTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PAYEERS #Link(PAYEE,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PAYEERS #Link(PAYEE2,BILLPAYMSGSRSV2)-->

<!-- payee modification response -->
<!-- OFX 1.5 -->
<!-- CHANGE PAYEE to (PAYEELSTID | PAYEELSTID2) -->
<!-- CHANGE PAYEE to (PAYEE | PAYEE2) -->
<!-- OFX 1.6: Add MODPENDING. -->
<!ELEMENT PAYEEMODRS    - - ((PAYEELSTID | PAYEELSTID2),
			     ((PAYEE | PAYEE2), BANKACCTTO?)?, PAYACCT*, EXTDPAYEE?,
			     MODPENDING? )>
<!--#ELEMENT PAYEEMODRS #Link(PAYEELSTID,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEELSTID2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEE,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PAYEEMODRS #Link(PAYEE2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PAYEEMODRS #Link( MODPENDING, BILLPAYMSGSRSV2 )-->

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


<!-- BPACCTINFO -->
<!ELEMENT BPACCTINFO  - - (BANKACCTFROM, (SVCSTATUS|SVCSTATUS2), REASON?)>
<!--#ELEMENT BPACCTINFO #Link(SVCSTATUS,SIGNUPMSGSRSV1)-->
<!--#ELEMENT BPACCTINFO #Link(SVCSTATUS2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT BPACCTINFO #Link(REASON,SIGNUPMSGSRSV2)-->

<!-- 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 -->
<!-- OFX 1.6: Changed BANKACCTFROM to ( BANKACCTFROM | CCMOTOACCT ).
     Added SPNAME and BILLID. -->
<!ELEMENT PMTINFO2  - - (PMTTYPE?, ( BANKACCTFROM | CCMOTOACCT ), TRNAMT,
                         (PAYEELSTID2 | ((PAYEEID2 | PAYEE2), PAYEELSTID2?)),
			 BANKACCTTO?, EXTDPMT?, PAYACCT?, DTDUE,
                         DTAVAIL?, ITA.CAUSALE?, PMTFOR?, BOOKINGTEXT?,
                         MEMO2?, BILLREFINFO?,
			 ( SPNAME?, BILLID )? )>
 
<!--  Some non-US fields from pmtinfo -->
<!ELEMENT PMTTYPE       - o %TYPEDESCTYPE>           
<!ELEMENT PMTFOR        - o %GENNAMETYPE>           
<!ELEMENT ITA.CAUSALE   - o %ITACAUSALETYPE>           
<!ELEMENT BOOKINGTEXT   - o %BOOKINGTEXTTYPE>

<!-- OFX 1.6: Add CCMOTOACCT aggregate. -->
<!ELEMENT CCMOTOACCT	- - ( CCACCTFROM, DTEXPIRE, BRAND?, NAMEACCTHELD?,
			     ( ADDR1, (ADDR2, ADDR3? )? )?, CITY?, STATE?,
			     POSTALCODE?, COUNTRY? ) >

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

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

<!--  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 | EXTDPMTDSC2), EXTDPMTINV?) | EXTDPMTINV))>
<!--#ELEMENT EXTDPMT #Link(EXTDPMTCHK,(BILLPAYMSGSRQV1|BILLPAYMSGSRSV1))-->
<!--#ELEMENT EXTDPMT #Link(EXTDPMTCHK2,(BILLPAYMSGSRQV2|BILLPAYMSGSRSV2))-->
<!--#ELEMENT EXTDPMT #Link(EXTDPMTDSC,(BILLPAYMSGSRQV1|BILLPAYMSGSRSV1))-->
<!--#ELEMENT EXTDPMT #Link(EXTDPMTDSC2,(BILLPAYMSGSRQV2|BILLPAYMSGSRSV2))-->


<!ELEMENT EXTDPMTINV    - - (INVOICE+|INVOICE2+)>
<!--#ELEMENT EXTDPMTINV #Link(INVOICE,(BILLPAYMSGSRQV1|BILLPAYMSGSRSV1))-->
<!--#ELEMENT EXTDPMTINV #Link(INVOICE2,(BILLPAYMSGSRQV2|BILLPAYMSGSRSV2))-->

<!ELEMENT INVOICE       - - (INVNO, INVTOTALAMT, INVPAIDAMT,
                             INVDATE, INVDESC, DISCOUNT?,
                             ADJUSTMENT?, LINEITEM*)>
<!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,(BILLPAYMSGSRQV2|BILLPAYMSGSRSV2|PRESDLVMSGSRSV1))-->

<!ELEMENT EXTDPMTFOR    - o %EXTDPMTFORENUM>
<!ELEMENT EXTDPMTCHK    - o %EXTTYPE>
<!ELEMENT EXTDPMTCHK2   - o %CHECKNUMTYPE>
<!-- OFX 1.6 correction to make OFX 1.5 clients and servers compatible with OFX 1.0.2
     servers and clients.  End tag for this element required in all versions of OFX. -->
<!ELEMENT EXTDPMTDSC    - - %MSGTYPE>
<!ELEMENT EXTDPMTDSC2   - o %EXTDPMTDSC2TYPE>
<!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, (BILLPAYMSGSRQV1|BILLPAYMSGSRSV1)) -->
<!-- #ELEMENT EXTDPAYEE #Link (PAYEEID2, (BILLPAYMSGSRQV2|BILLPAYMSGSRSV2)) -->

<!--  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*)>                
<!--#ELEMENT PMTSYNCRQ #Link(TOKEN,	BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTSYNCRQ #Link(TOKEN2,BILLPAYMSGSRQV2)-->
 

<!--  recurring payment synchronization request -->
<!ELEMENT RECPMTSYNCRQ  - -     (%SYNCRQMACRO, BANKACCTFROM, RECPMTTRNRQ*)>
<!--#ELEMENT RECPMTSYNCRQ #Link(TOKEN,BILLPAYMSGSRQV1)-->
<!--#ELEMENT RECPMTSYNCRQ #Link(TOKEN2,BILLPAYMSGSRQV2)-->
 
<!-- payee list synchronization request -->
<!ELEMENT PAYEESYNCRQ   - - (%SYNCRQMACRO, PAYEETRNRQ*)>
<!--#ELEMENT PAYEESYNCRQ #Link(TOKEN,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PAYEESYNCRQ #Link(TOKEN2,BILLPAYMSGSRQV2)-->


<!-- bill pay mail sync request -->
<!ELEMENT PMTMAILSYNCRQ - -     (%SYNCRQMACRO, INCIMAGES, USEHTML, PMTMAILTRNRQ*)>
<!--#ELEMENT PMTMAILSYNCRQ #Link(TOKEN,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTMAILSYNCRQ #Link(TOKEN2,BILLPAYMSGSRQV2)-->


<!--
        synchronization response messages
  -->

<!-- payment synchronization response -->
<!ELEMENT PMTSYNCRS     - -     (%SYNCRSMACRO, BANKACCTFROM, PMTTRNRS*)>                
<!--#ELEMENT PMTSYNCRS #Link(TOKEN,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTSYNCRS #Link(TOKEN2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTSYNCRS #Link(SYNCERROR,BILLPAYMSGSRSV2)-->
 

<!--  recurring payment synchronization response -->
<!ELEMENT RECPMTSYNCRS  - -     (%SYNCRSMACRO, BANKACCTFROM, RECPMTTRNRS*)>
<!--#ELEMENT RECPMTSYNCRS #Link(TOKEN,BILLPAYMSGSRSV1)-->
<!--#ELEMENT RECPMTSYNCRS #Link(TOKEN2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT RECPMTSYNCRS #Link(SYNCERROR,BILLPAYMSGSRSV2)-->
 
<!-- payee list synchronization response -->
<!ELEMENT PAYEESYNCRS   - - (%SYNCRSMACRO, PAYEETRNRS*)>
<!--#ELEMENT PAYEESYNCRS #Link(TOKEN,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PAYEESYNCRS #Link(TOKEN2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PAYEESYNCRS #Link(SYNCERROR,BILLPAYMSGSRSV2)-->


<!-- bill pay mail sync response -->
<!ELEMENT PMTMAILSYNCRS - -     (%SYNCRSMACRO, PMTMAILTRNRS*)>
<!--#ELEMENT PMTMAILSYNCRS #Link(TOKEN,BILLPAYMSGSRSV1)-->
<!--#ELEMENT PMTMAILSYNCRS #Link(TOKEN2,BILLPAYMSGSRSV2)-->
<!--#ELEMENT PMTMAILSYNCRS #Link(SYNCERROR,BILLPAYMSGSRSV2)-->


<!--
 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(SRVRTID,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTMAILRQ #Link(SRVRTID2,BILLPAYMSGSRQV2)-->
<!--#ELEMENT PMTMAILRQ #Link(PMTINFO,BILLPAYMSGSRQV1)-->
<!--#ELEMENT PMTMAILRQ #Link(PMTINFO2,BILLPAYMSGSRQV2)-->

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


<!-- Message Sets -->

<!-- OFX 1.6: V1 and V2 sign up message set wrappers are no longer identical. -->
<!ELEMENT SIGNUPMSGSRQV1  - - 
                                   ((ENROLLTRNRQ | ACCTINFOTRNRQ | 
                                    CHGUSERINFOTRNRQ | CHGUSERINFOSYNCRQ |
                                    ACCTTRNRQ | ACCTSYNCRQ)+ )> 
<!ELEMENT SIGNUPMSGSRSV1  - - 
                                   ((ENROLLTRNRS | ACCTINFOTRNRS | 
                                    CHGUSERINFOTRNRS | CHGUSERINFOSYNCRS |
                                    ACCTTRNRS | ACCTSYNCRS)+ )>

<!-- OFX 1.6: Added USERID to SIGNUPMSGSRQV2 and SIGNUPMSGSRSV2. -->
<!ELEMENT SIGNUPMSGSRQV2  - - 
                                   ( USERID?, (ENROLLTRNRQ | ACCTINFOTRNRQ | 
                                    CHGUSERINFOTRNRQ | CHGUSERINFOSYNCRQ |
                                    ACCTTRNRQ | ACCTSYNCRQ)+ )> 
<!ELEMENT SIGNUPMSGSRSV2  - - 
                                   ( USERID?, (ENROLLTRNRS | ACCTINFOTRNRS | 
                                    CHGUSERINFOTRNRS | CHGUSERINFOSYNCRS |
                                    ACCTTRNRS | ACCTSYNCRS)+ )>

<!-- Profile entry for message set -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!ELEMENT SIGNUPMSGSET        - - (SIGNUPMSGSETV1, SIGNUPMSGSETV2*)>
<!ELEMENT SIGNUPMSGSETV1  - - 
                                  (MSGSETCORE , 
                                   (CLIENTENROLL | WEBENROLL | OTHERENROLL),
                                   CHGUSERINFO, AVAILACCTS, CLIENTACTREQ)>
<!-- OFX 1.5 -->
<!-- ADDED PREAUTH -->
<!-- OFX 1.6: Added CANSUPPORTUSERID. -->
<!ELEMENT SIGNUPMSGSETV2  - - 
                                  (MSGSETCORE , 
                                   (CLIENTENROLL | WEBENROLL | OTHERENROLL),
                                   CHGUSERINFO, AVAILACCTS, CLIENTACTREQ, PREAUTH,
				   CANSUPPORTUSERID?)>

<!ELEMENT CLIENTENROLL          - - (ACCTREQUIRED)>

<!-- OFX 1.5 -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT WEBENROLL             - - ((URL|URL2))>
<!--#ELEMENT WEBENROLL #Link(URL,(SIGNUPMSGSRQV1|SIGNUPMSGSRSV1))-->
<!--#ELEMENT WEBENROLL #Link(URL2,(SIGNUPMSGSRQV2|SIGNUPMSGSRSV2))-->

<!-- OFX 1.5 -->
<!-- CHANGE MESSAGE TO (MESSAGE|MESSAGE2) -->
<!ELEMENT OTHERENROLL             - - ((MESSAGE|MESSAGE2))>
<!--#ELEMENT OTHERENROLL #Link(MESSAGE,(SIGNUPMSGSRQV1|SIGNUPMSGSRSV1))-->
<!--#ELEMENT OTHERENROLL #Link(MESSAGE2,(SIGNUPMSGSRQV2|SIGNUPMSGSRSV2))-->

<!ELEMENT ACCTREQUIRED          - o %BOOLTYPE>
<!ELEMENT CHGUSERINFO           - o %BOOLTYPE>
<!ELEMENT AVAILACCTS            - o %BOOLTYPE>
<!ELEMENT CLIENTACTREQ          - o %BOOLTYPE>
<!ELEMENT PREAUTH		- o %BOOLTYPE>
<!ELEMENT CANSUPPORTUSERID      - 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 - - (USERID?, FIRSTNAME?, MIDDLENAME?, LASTNAME?,
                             (ADDR1,(ADDR2,ADDR3?)?)?,
                             CITY?, STATE?, POSTALCODE?, COUNTRY?,
                             DAYPHONE?, EVEPHONE?, EMAIL?)>
<!--#ELEMENT CHGUSERINFORQ #Link(USERID,(SIGNUPMSGSRQV2|SIGNUPMSGSRSV2))-->

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

                             
<!ELEMENT DTINFOCHG     - o %DTTMTYPE>                             

<!ELEMENT CHGUSERINFOSYNCRQ    - - (%SYNCRQMACRO , CHGUSERINFOTRNRQ*)>
<!--#ELEMENT CHGUSERINFOSYNCRQ #Link(TOKEN,SIGNUPMSGSRQV1)-->
<!--#ELEMENT CHGUSERINFOSYNCRQ #Link(TOKEN2,SIGNUPMSGSRQV2)-->
<!ELEMENT CHGUSERINFOSYNCRS    - - (%SYNCRSMACRO , CHGUSERINFOTRNRS*)>
<!--#ELEMENT CHGUSERINFOSYNCRS #Link(TOKEN,SIGNUPMSGSRSV1)-->
<!--#ELEMENT CHGUSERINFOSYNCRS #Link(TOKEN2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT CHGUSERINFOSYNCRS #Link(SYNCERROR,SIGNUPMSGSRSV2)-->

<!-- Top level request and response -->
<!-- OFX 1.6: Added SVC2 when within SIGNUPMSGSRQV2 or PRESDLVMSGSRQV1 -->
<!ELEMENT ACCTINFORQ    - - (DTACCTUP, SVC2*)>
<!-- #ELEMENT ACCTINFORQ #Link( SVC2,( SIGNUPMSGSRQV2 | PRESDLVMSGSRSV1 )) -->
<!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>      
<!ELEMENT SVCSTATUS2    - o %SERVICESTATUS2ENUM>      
<!-- -----------------
  Service Activation
  ----------------- -->


<!-- version 2 ACCTRQ/ACCTRS uses SVC2, version 1 uses SVC -->
<!-- OFX 1.5 -->
<!ELEMENT ACCTRQ        - - ((SVCADD | SVCCHG | SVCDEL) ,
                             (SVC | SVC2))>
<!--#ELEMENT ACCTRQ #Link(SVC,SIGNUPMSGSRQV1)-->
<!--#ELEMENT ACCTRQ #Link(SVC2,SIGNUPMSGSRQV2)-->
<!ELEMENT ACCTRS        - -  ((SVCADD | SVCCHG | SVCDEL) ,
                             (SVC | SVC2), (SVCSTATUS|SVCSTATUS2), REASON?)>
<!--#ELEMENT ACCTRS #Link(SVC,SIGNUPMSGSRSV1)-->
<!--#ELEMENT ACCTRS #Link(SVC2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT ACCTRS #Link(SVCSTATUS,SIGNUPMSGSRSV1)-->
<!--#ELEMENT ACCTRS #Link(SVCSTATUS2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT ACCTRS #Link(REASON,SIGNUPMSGSRSV2)-->

<!-- SVCADD Version 1 has no preauthtoken, version 2 does have preauthtoken -->
<!-- OFX 1.5 -->
<!-- ADDED PREAUTHTOKEN -->
<!ELEMENT SVCADD        - - (%ACCTTOMACRO , PREAUTHTOKEN?)>
<!--#ELEMENT SVCADD #Link(PREAUTHTOKEN,(SIGNUPMSGSRQV2|SIGNUPMSGSRSV2))-->
<!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 ACCTSYNCRQ #Link(TOKEN,SIGNUPMSGSRQV1)-->
<!--#ELEMENT ACCTSYNCRQ #Link(TOKEN2,SIGNUPMSGSRQV2)-->
<!ELEMENT ACCTSYNCRS    - - (%SYNCRSMACRO , ACCTTRNRS*)>
<!--#ELEMENT ACCTSYNCRS #Link(TOKEN,SIGNUPMSGSRSV1)-->
<!--#ELEMENT ACCTSYNCRS #Link(TOKEN2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT ACCTSYNCRS #Link(SYNCERROR,SIGNUPMSGSRSV2)-->
<!ELEMENT PREAUTHTOKEN  - o %IDTYPE>      




<!-- Investment Message Set -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!ELEMENT INVSTMTMSGSET  - - (INVSTMTMSGSETV1, INVSTMTMSGSETV2*) >

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

<!-- 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 %SECUIDTYPE >

<!-- *** 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,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT SECINFO #Link(MEMO2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!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 | SVCSTATUS2), REASON?, INVACCTTYPE? , OPTIONLEVEL?) >
<!--#ELEMENT INVACCTINFO #Link(SVCSTATUS,SIGNUPMSGSRSV1)-->
<!--#ELEMENT INVACCTINFO #Link(SVCSTATUS2,SIGNUPMSGSRSV2)-->
<!--#ELEMENT INVACCTINFO #Link(REASON,SIGNUPMSGSRSV2)-->

<!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,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT INVTRAN #Link(SRVRTID2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->
<!--#ELEMENT INVTRAN #Link(MEMO,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT INVTRAN #Link(MEMO2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!-- 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,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->
<!--#ELEMENT INVBUY #Link(REVERSALFITID,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!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,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->
<!--#ELEMENT INVSELL #Link(REVERSALFITID,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!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, BUYTYPE?) >
<!--#ELEMENT BUYOTHER #Link(BUYTYPE, INVSTMTMSGSRSV2)-->

<!-- ** 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, SELLTYPE?) >
<!--#ELEMENT SELLOTHER #Link(SELLTYPE, INVSTMTMSGSRSV2)-->

<!-- ** 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 >

<!ELEMENT NUMERATOR  - O %AMTTYPE >

<!ELEMENT DENOMINATOR  - O %AMTTYPE >

<!-- 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,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT OO #Link(SRVRTID2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->
<!--#ELEMENT OO #Link(MEMO,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT OO #Link(MEMO2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!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,(INVSTMTMSGSRQV1|INVSTMTMSGSRSV1))-->
<!--#ELEMENT INVPOS #Link(MEMO2,(INVSTMTMSGSRQV2|INVSTMTMSGSRSV2))-->

<!-- 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 *** -->

<!-- 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 -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!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 INVMAILSYNCRQ #Link(TOKEN,INVSTMTMSGSRQV1)-->
<!--#ELEMENT INVMAILSYNCRQ #Link(TOKEN2,INVSTMTMSGSRQV2)-->
<!ELEMENT INVMAILSYNCRS     - - (%SYNCRSMACRO, INVACCTFROM, INVMAILTRNRS*)>
<!--#ELEMENT INVMAILSYNCRS #Link(TOKEN,INVSTMTMSGSRSV1)-->
<!--#ELEMENT INVMAILSYNCRS #Link(TOKEN2,INVSTMTMSGSRSV2)-->
<!--#ELEMENT INVMAILSYNCRS #Link(SYNCERROR,INVSTMTMSGSRSV2)-->

<!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 -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!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 MAILSYNCRQ #Link(TOKEN,EMAILMSGSRQV1)-->
<!--#ELEMENT MAILSYNCRQ #Link(TOKEN2,EMAILMSGSRQV2)-->
<!ELEMENT MAILSYNCRS    - - (%SYNCRSMACRO , MAILTRNRS*)>
<!--#ELEMENT MAILSYNCRS #Link(TOKEN,EMAILMSGSRSV1)-->
<!--#ELEMENT MAILSYNCRS #Link(TOKEN2,EMAILMSGSRSV2)-->
<!--#ELEMENT MAILSYNCRS #Link(SYNCERROR,EMAILMSGSRSV2)-->

<!-- HTML GET -->

<!-- OFX 1.5 -->
<!-- CHANGE URL TO (URL|URL2) -->
<!ELEMENT GETMIMERQ     - - ((URL|URL2))>
<!--#ELEMENT GETMIMERQ #Link(URL,EMAILMSGSRQV1)-->
<!--#ELEMENT GETMIMERQ #Link(URL2,EMAILMSGSRQV2)-->
<!ELEMENT GETMIMERS     - - ((URL|URL2))>
<!--#ELEMENT GETMIMERS #Link(URL,EMAILMSGSRSV1)-->
<!--#ELEMENT GETMIMERS #Link(URL2,EMAILMSGSRSV2)-->

    <!-- BILL PRESENTMENT   -->
    
    <!-- Profile entry for message set -->
<!-- OFX 1.6 correction of ordinance within profile.  Allows for multiple Biller Directory
     services within an FI. -->
    <!ELEMENT PRESDIRMSGSET        - - (PRESDIRMSGSETV1+)>
    <!ELEMENT PRESDIRMSGSETV1      - - (MSGSETCORE, PRESDIRPROF?)>

    <!ELEMENT PRESDIRPROF      - - (PROCDAYSOFF*, CANSUPPORTIMAGES, PROCENDTM)>


    <!-- No synchronization in this module -->
   
    <!-- ================== -->
    <!-- DIRECTORY MESSAGES -->
    <!-- ================== -->
    
    <!-- FIND BILLER -->
    
    <!-- Find Biller Message set -->
    <!ELEMENT PRESDIRMSGSRQV1    - - (FINDBILLERTRNRQ)>
    <!ELEMENT PRESDIRMSGSRSV1    - - (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 -->

    <!-- OFX 1.6: Add BUSNAMEACCTHELD. -->
    <!ELEMENT PRESNAMEADDRESS - - (NAMEACCTHELD?, BUSNAMEACCTHELD?, ADDR1?, ADDR2?,
				   ADDR3?, CITY?, STATE?, POSTALCODE?, COUNTRY?,
				   DAYPHONE?, EVEPHONE?)>
    
    <!-- ACCOUNT INFO SAME AS STANDARD OFX EXCEPT FOR GROUP Messages-->

    <!ELEMENT NAMEACCTHELD - o %NAMEACCTHELDTYPE>
    <!ELEMENT BUSNAMEACCTHELD - o %NAMEACCTHELDTYPE>
       
    <!-- ====================== -->
    <!-- BILL DELIVERY MESSAGES -->
    <!-- ====================== -->
    
    <!-- Bill Delivery -->
    
    <!-- Bill Delivery Message set -->
    <!-- Profile entry for message set -->
    <!-- OFX 1.6 correction of ordinance within profile.  Allows for multiple Bill Presentment
     services within an FI. -->
    <!ELEMENT PRESDLVMSGSET        - - (PRESDLVMSGSETV1+)>
    <!ELEMENT PRESDLVMSGSETV1      - - (MSGSETCORE, PRESDLVPROF?, EMAILPROF)>

    <!ELEMENT PRESDLVPROF     - - (CANSUPPORTGROUPID, PROCDAYSOFF*, CANSUPPORTIMAGES, PROCENDTM, CANUPDATEPRESNAMEADDRESS)>

    
    <!-- No synchronization in this module -->
    
     <!-- OFX 1.6 addition of BILLSTATUSMODTRNRQ and BILLSTATUSMODTRNRS.  -->
   <!ELEMENT PRESDLVMSGSRQV1  - - ((PRESLISTTRNRQ
                                |PRESGRPACCTINFOTRNRQ
                                |PRESDETAILTRNRQ
                                |BILLTBLSTRUCTTRNRQ
                                |PRESNOTIFYTRNRQ
                                |BILLSTATUSMODTRNRQ
                                |PRESMAILSYNCRQ
                                |PRESMAILTRNRQ)+
                                )>
    <!ELEMENT PRESDLVMSGSRSV1  - - ((PRESLISTTRNRS
                                |PRESGRPACCTINFOTRNRS
                                |PRESDETAILTRNRS
                                |BILLTBLSTRUCTTRNRS
                                |PRESNOTIFYTRNRS
                                |BILLSTATUSMODTRNRS
                                |PRESMAILSYNCRS
                                |PRESMAILTRNRS)+
                                )>

    <!-- Account Info Group Transactions -->
    <!ELEMENT PRESGRPACCTINFOTRNRQ    - - (%TRNRQMACRO, (USERID | GROUPID)?, ACCTINFORQ)>
    <!ELEMENT PRESGRPACCTINFOTRNRS    - - (%TRNRSMACRO, ACCTINFORS?)>
  
    <!ELEMENT PRESACCTINFO              - - (PRESACCTFROM, SVCSTATUS2, REASON?)>

    <!-- OFX 1.6: Add BILLERNAME, SPNAME, PAYEEID2 and PAYEELSTID2. -->
    <!ELEMENT ( PRESACCTFROM, PRESACCTTO ) - -
			( BILLPUB, BILLERID, BILLERNAME?, ACCTID, PRESNAMEADDRESS?,
			USERID?, ( SPNAME?, ((PAYEEID2, PAYEELSTID2?) | PAYEELSTID2 ))?)>
  
    <!ELEMENT GROUPID                 - o %IDTYPE>
    <!ELEMENT REASON                  - o %MSGTYPE>
    <!ELEMENT PMTINSTRUMENTTYPE       - o %PMTINSTRUMENTENUM>
    <!ELEMENT BRAND                   - o %GENNAMETYPE>
    <!ELEMENT BILLERNAME	      - o %GENNAMETYPE>

    <!-- Bill Delivery Transactions -->
    <!ELEMENT PRESLISTTRNRQ    - - (%TRNRQMACRO,  (USERID|GROUPID)?, PRESLISTRQ)>
    <!ELEMENT PRESLISTTRNRS    - - (%TRNRSMACRO, PRESLISTRS?)>
    
    <!ELEMENT PRESNOTIFYTRNRQ    - - (%TRNRQMACRO, PRESNOTIFYRQ)>
    <!ELEMENT PRESNOTIFYTRNRS    - - (%TRNRSMACRO, PRESNOTIFYRS?)>
    
    <!-- OFX 1.6 addition of BILLSTATUSMODTRNRQ and BILLSTATUSMODTRNRS.  -->
    <!ELEMENT BILLSTATUSMODTRNRQ    - - (%TRNRQMACRO, BILLSTATUSMODRQ)>
    <!ELEMENT BILLSTATUSMODTRNRS    - - (%TRNRSMACRO, BILLSTATUSMODRS?)>
    
    <!-- OFX 1.6 addition of several new tags to PRESLISTRQ.  
         See "New tags in PRESLISTRQ", below. -->
    <!ELEMENT PRESLISTRQ       - - (BILLPUB, DTSTART?, DTEND?, DTDUEBY?, BILLERID?, 
                                    BILLID?, BILLTYPE*, BILLSTATUSCODE*, 
                                    BILLPMTSTATUSCODE*, NOTIFYWILLING, INCLUDEDETAIL, 
                                    INCLUDEBILLSTATUS?, INCLUDEBILLPMTSTATUS?, 
                                    INCLUDESTATUSHIST?, INCLUDECOUNTS?, INCLUDESUMMARY?)>
    
    <!-- New tags in PRESLISTRQ for OFX 1.6.  BILLERID was also added. -->
    <!ELEMENT DTDUEBY                  - o %DTTMTYPE>
    <!ELEMENT BILLTYPE                 - o %BILLTYPEENUM>
    <!ELEMENT BILLSTATUSCODE           - o %BILLSTATUSCODEENUM>
    <!ELEMENT BILLPMTSTATUSCODE        - o %BILLPMTSTATUSCODEENUM>
    <!ELEMENT INCLUDEBILLSTATUS        - o %BOOLTYPE>
    <!ELEMENT INCLUDEBILLPMTSTATUS     - o %BOOLTYPE> 
    <!ELEMENT INCLUDESTATUSHIST        - o %BOOLTYPE>
    <!ELEMENT INCLUDECOUNTS            - o %BOOLTYPE>
    <!ELEMENT INCLUDESUMMARY           - o %BOOLTYPE>
                                
    <!-- OFX 1.6 addition of the PRESCOUNTS aggregate to PRESLISTRS -->                                                            
    <!ELEMENT PRESLISTRS       - - (BILLPUB, USERID, DTSTART, DTEND, 
                                    PRESLIST?, PRESCOUNTS?)>
    
    <!ELEMENT PRESCOUNTS             - - (BILLSTATUSCOUNTS*, BILLPMTSTATUSCOUNTS*)>      
    <!ELEMENT BILLSTATUSCOUNTS       - - (BILLSTATUSCODE, COUNT)>  
    <!ELEMENT BILLPMTSTATUSCOUNTS    - - (BILLPMTSTATUSCODE, COUNT)>  
    <!ELEMENT COUNT                  - o %IDTYPE>
    
    <!ELEMENT PRESLIST         - - (PRESBILLINFO*)>
    
    <!-- OFX 1.6 addition of BILLTYPE, BILLSTATUS and BILLPMTSTATUS to PRESBILLINFO.  -->
    <!ELEMENT PRESBILLINFO     - - (BILLID, PRESACCTFROM, PAYEEID2?, BILLREFINFO?, AMTDUE,
                                    MINAMTDUE?, DTPMTDUE, DTBILL, DTOPEN?, DTCLOSE?,
                                    PREVBAL?, ACTIVITY?, ACCTBAL?, INVOICE2?, NOTIFYDESIRED,
                                    BILLTYPE?, BILLSTATUS*, BILLPMTSTATUS*,
                                    STMNTIMAGE?, (DETAILAVAILABLE|BILLDETAILTABLE))>
    
    <!ELEMENT BILLSTATUS       - - (BILLSTATUSCODE, DTEFF, STATUSMODBY?)>  
    <!ELEMENT BILLPMTSTATUS    - - (SRVRTID2?, BILLPMTSTATUSCODE, DTEFF, STATUSMODBY?)>
    <!ELEMENT DTEFF            - o %DTTMTYPE> 
    <!ELEMENT STATUSMODBY      - o %STATUSMODBYENUM>                                

    <!-- OFX 1.6 addition of BILLSTATUSMODRQ and BILLSTATUSMODRS.  -->
    <!ELEMENT BILLSTATUSMODRQ  - - (BILLID?, BILLSTATUS?, BILLPMTSTATUS?)>
    <!ELEMENT BILLSTATUSMODRS  - - (BILLID?, BILLSTATUS?, BILLPMTSTATUS?)>

    <!-- OFX 1.6 correction of ordinance for PREFETCHURL element.
         This version (optional and repeating versus optional) matches the
	 intent and wording of the specification. -->
    <!ELEMENT STMNTIMAGE     - - ( IMAGEURL, PREFETCHURL*, DTEXPIRE? )>
    
    <!ELEMENT PRESDETAILTRNRQ  - - (%TRNRQMACRO, PRESDETAILRQ)>
    <!ELEMENT PRESDETAILRQ     - - (BILLID, BILLDETAILTABLETYPE?)>
    <!ELEMENT PRESDETAILTRNRS  - - (%TRNRSMACRO, PRESDETAILRS?)>
    <!ELEMENT PRESDETAILRS   - - (PRESDETAIL*)>
  
    <!ELEMENT PRESDETAIL       - - (BILLID, PRESACCTFROM?, BILLDETAILTABLE*)>
    
    <!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)>
<!-- OFX 1.6 correction.  All previous DTD versions allowed zero or more identifier
     aggregates.  Nothing other than a single <PRESDELIVERID> has meaning. -->
    <!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 , INCIMAGES, USEHTML, PRESACCTFROM, PRESMAILTRNRQ*)>
<!--#ELEMENT PRESMAILSYNCRQ #Link(TOKEN2, PRESDLVMSGSRQV1)-->

    <!ELEMENT PRESMAILSYNCRS   - - (%SYNCRSMACRO , PRESACCTFROM, PRESMAILTRNRS*)>
<!--#ELEMENT PRESMAILSYNCRS #Link(TOKEN2,PRESDLVMSGSRSV1)-->
<!--#ELEMENT PRESMAILSYNCRS #Link(SYNCERROR, PRESDLVMSGSRSV1)-->

  
    <!-- Bill Presentment Mail -->
    <!ELEMENT PRESMAILTRNRQ    - - (%TRNRQMACRO, PRESMAILRQ)>
    <!ELEMENT PRESMAILTRNRS    - - (%TRNRSMACRO, PRESMAILRS?)>
    
    <!ELEMENT PRESMAILRQ       - - (PRESACCTFROM, MAIL)>
    <!ELEMENT PRESMAILRS       - - (PRESACCTFROM, MAIL)>
 


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

<!-- Profile entry for message set -->
<!-- OFX 1.6 correction of ordinance within profile.  OFX 1.5.1 servers are compatible with
     OFX 1.0.2 clients if they comply. -->
<!ELEMENT PROFMSGSET        - - (PROFMSGSETV1, PROFMSGSETV2?)>
<!ELEMENT (PROFMSGSETV1, PROFMSGSETV2)      - - (MSGSETCORE)>

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

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

<!-- Messages -->

<!-- Message List -->
<!-- OFX 1.5 -->
<!-- Moved message set list from entity section to here -->
<!-- ADDED PRESDIRMSGSET, PRESDLVMSGSET -->
<!-- OFX 1.6 correction: While entirely compatible with the previous formation
     of this macro ( SIGNONMSETSET?, SIGNUPMSGSET?, ... ), this form makes the
     intent more obvious.  Message set profile aggregates may appear in any
     order in <MSGSETLIST>.
     Also, removed SIGNONMSGSET and PROFMSGSET from the macro to make them
     required in <MSGSETLIST>. -->
<!ENTITY % MSGSETMACRO "
                     ( SIGNUPMSGSET | BANKMSGSET | CREDITCARDMSGSET |
		     INVSTMTMSGSET | INTERXFERMSGSET | WIREXFERMSGSET |
		     BILLPAYMSGSET | EMAILMSGSET | SECLISTMSGSET |
		     PRESDIRMSGSET | PRESDLVMSGSET
		     %EXTRAMSGSETS
		     )">

<!-- OFX 1.6 correction: Disallow an empty <MSGSETLIST> by requiring one or
     more occurances of the %MSGSETMACRO contents.
     Also, make <SIGNONMSGSET> and <PROFMSGSET> required. -->
<!ELEMENT MSGSETLIST    - - (
    ((( SIGNONMSGSET, (%MSGSETMACRO)+, PROFMSGSET ) |
     ( PROFMSGSET, (%MSGSETMACRO)+, SIGNONMSGSET )), (%MSGSETMACRO)* ) |
    ( (%MSGSETMACRO)+,
     (( SIGNONMSGSET, (%MSGSETMACRO)*, PROFMSGSET ) |
      ( PROFMSGSET, (%MSGSETMACRO)*, SIGNONMSGSET )), (%MSGSETMACRO)* )
    )>

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

<!-- version 2 adds URLGETREDIRECT -->
<!-- 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,PROFMSGSRSV1)-->
<!--#ELEMENT PROFRS #Link(URL2,PROFMSGSRSV2)-->
<!--#ELEMENT PROFRS #Link(URLGETREDIRECT,PROFMSGSRSV2)-->
                        
<!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>

<!-- 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?)>
<!-- OFX 1.6 correction.  This element previously was incorrectly linked to
     PROFMSGSETV2. -->
<!--#ELEMENT SIGNONINFO #Link(PWTYPE, PROFMSGSRSV2)-->

<!ELEMENT SIGNONREALM       - o %GENNAMETYPE>
<!ELEMENT MIN               - o %MAXMINTYPE>
<!ELEMENT MAX               - o %MAXMINTYPE>
<!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> 

<!-- 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) -->
<!-- OFX 1.6: Add REFRESHSUPT element. -->
<!ELEMENT MSGSETCORE    - - (VER , (URL|URL2) , OFXSEC ,
                             TRANSPSEC , SIGNONREALM ,
                             LANGUAGE+, COUNTRY*, SYNCMODE, REFRESHSUPT?,
			     RESPFILEER, SPNAME? )>
<!--#ELEMENT MSGSETCORE #Link(URL,(SIGNONMSGSETV1 | SIGNUPMSGSETV1 | EMAILMSGSETV1 | 
					BANKMSGSETV1 | CREDITCARDMSGSETV1 | INTERXFERMSGSETV1 | WIREXFERMSGSETV1 |
					SECLISTMSGSETV1 | PROFMSGSETV1 | BILLPAYMSGSETV1 | INVSTMTMSGSETV1))-->
<!--#ELEMENT MSGSETCORE #Link(URL2,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | CREDITCARDMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					SECLISTMSGSETV2 | PROFMSGSETV2 | BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | 
					PRESDIRMSGSETV1 | PRESDLVMSGSETV1))-->
<!--#ELEMENT MSGSETCORE #Link(COUNTRY,(SIGNONMSGSETV2 | SIGNUPMSGSETV2 | EMAILMSGSETV2 |
					BANKMSGSETV2 | CREDITCARDMSGSETV2 | INTERXFERMSGSETV2 | WIREXFERMSGSETV2 |
					SECLISTMSGSETV2 | PROFMSGSETV2 | BILLPAYMSGSETV2 | INVSTMTMSGSETV2 | 
					PRESDIRMSGSETV1 | PRESDLVMSGSETV1))-->

<!ELEMENT VER           - o %VERTYPE>
<!ELEMENT OFXSEC        - o %SECURITYENUM>
<!ELEMENT TRANSPSEC     - o %BOOLTYPE> 
<!ELEMENT SYNCMODE      - o %SYNCENUM>
<!ELEMENT REFRESHSUPT	- o %BOOLTYPE>
<!ELEMENT RESPFILEER    - o %BOOLTYPE>
<!ELEMENT SPNAME        - o %GENNAMETYPE>
    
 
<!-- ============================================================================= -->
<!--
    Open Financial Exchange Element Structure
    This section 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)?,
						PRESDIRMSGSRQV1?,
                        PRESDLVMSGSRQV1?,
                      (PROFMSGSRQV1       | PROFMSGSRQV2)?
						%EXTRARQMSGSETS">

<!ENTITY % OFXRSMSGSETS                      
                     "(SIGNONMSGSRSV1     | SIGNONMSGSRSV2),
                      (SIGNUPMSGSRSV1     | SIGNUPMSGSRSV2+)?,
                      (BANKMSGSRSV1       | BANKMSGSRSV2)?,
                      (CREDITCARDMSGSRSV1 | CREDITCARDMSGSRSV2)?,
                      (INVSTMTMSGSRSV1    | INVSTMTMSGSRSV2)?,
                      (INTERXFERMSGSRSV1  | INTERXFERMSGSRSV2)?,
                      (WIREXFERMSGSRSV1   | WIREXFERMSGSRSV2)?,
                      (BILLPAYMSGSRSV1    | BILLPAYMSGSRSV2)?,
                      (EMAILMSGSRSV1      | EMAILMSGSRSV2)?,
                      (SECLISTMSGSRSV1    | SECLISTMSGSRSV2)?,
						PRESDIRMSGSRSV1?,
                        PRESDLVMSGSRSV1?,
                      (PROFMSGSRSV1       | PROFMSGSRSV2)?
						%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 %INTTYPE>
<!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,(SIGNONMSGSRSV1 |  SIGNUPMSGSRSV1 | BANKMSGSRSV1 | CREDITCARDMSGSRSV1 | INVSTMTMSGSRSV1 | INTERXFERMSGSRSV1 | WIREXFERMSGSRSV1 | BILLPAYMSGSRSV1 | EMAILMSGSRSV1 | SECLISTMSGSRSV1 | PROFMSGSRSV1))-->
<!--#ELEMENT STATUS #Link(MESSAGE2, (SIGNONMSGSRSV2 |  SIGNUPMSGSRSV2 | BANKMSGSRSV2 | CREDITCARDMSGSRSV2 | INVSTMTMSGSRSV2 | INTERXFERMSGSRSV2 | WIREXFERMSGSRSV2 | BILLPAYMSGSRSV2 | EMAILMSGSRSV2 | SECLISTMSGSRSV2 | PROFMSGSRSV2 | PRESDIRMSGSRSV1 | PRESDLVMSGSRSV1))-->

<!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 %COUNTRYTYPE>   
    
<!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,(SIGNUPMSGSRQV1 | BANKMSGSRQV1 | INTERXFERMSGSRQV1 | 
					WIREXFERMSGSRQV1 | BILLPAYMSGSRQV1 | INVSTMTMSGSRQV1 | 
					SIGNUPMSGSRSV1 | BANKMSGSRSV1 | INTERXFERMSGSRSV1 | WIREXFERMSGSRSV1 |
					BILLPAYMSGSRSV1 | INVSTMTMSGSRSV1))-->
<!--#ELEMENT BANKACCTFROM #Link(ACCTTYPE2,(SIGNUPMSGSRQV2 | BANKMSGSRQV2 | INTERXFERMSGSRQV2 | 
					WIREXFERMSGSRQV2 | BILLPAYMSGSRQV2 | INVSTMTMSGSRQV2 | PRESDIRMSGSRQV1 | PRESDLVMSGSRQV1 |
					SIGNUPMSGSRSV2 | BANKMSGSRSV2 | INTERXFERMSGSRSV2 | WIREXFERMSGSRSV2 |
					BILLPAYMSGSRSV2 | INVSTMTMSGSRSV2 | PRESDIRMSGSRSV1 | PRESDLVMSGSRSV1))-->
<!-- 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,(SIGNUPMSGSRQV1 | BANKMSGSRQV1 | INTERXFERMSGSRQV1 | 
					WIREXFERMSGSRQV1 | BILLPAYMSGSRQV1 | INVSTMTMSGSRQV1 | 
					SIGNUPMSGSRSV1 | BANKMSGSRSV1 | INTERXFERMSGSRSV1 | WIREXFERMSGSRSV1 |
					BILLPAYMSGSRSV1 | INVSTMTMSGSRSV1))-->
<!--#ELEMENT BANKACCTTO #Link(ACCTTYPE2,(SIGNUPMSGSRQV2 | BANKMSGSRQV2 | INTERXFERMSGSRQV2 | 
					WIREXFERMSGSRQV2 | BILLPAYMSGSRQV2 | INVSTMTMSGSRQV2 | PRESDIRMSGSRQV1 | PRESDLVMSGSRQV1 |
					SIGNUPMSGSRSV2 | BANKMSGSRSV2 | INTERXFERMSGSRSV2 | WIREXFERMSGSRSV2 |
					BILLPAYMSGSRSV2 | INVSTMTMSGSRSV2 | PRESDIRMSGSRSV1 | PRESDLVMSGSRSV1))-->
<!--#ELEMENT BANKACCTTO #Link(EXTBANKACCTTO,(SIGNUPMSGSRQV2 | BANKMSGSRQV2 | INTERXFERMSGSRQV2 | 
					WIREXFERMSGSRQV2 | BILLPAYMSGSRQV2 | INVSTMTMSGSRQV2 | PRESDIRMSGSRQV1 | PRESDLVMSGSRQV1 |
					SIGNUPMSGSRSV2 | BANKMSGSRSV2 | INTERXFERMSGSRSV2 | WIREXFERMSGSRSV2 |
					BILLPAYMSGSRSV2 | INVSTMTMSGSRSV2 | PRESDIRMSGSRSV1 | PRESDLVMSGSRSV1))-->

<!-- 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     %BANKIDTYPE>

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

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

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

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

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

<!-- 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     %NINSTSTYPE>

<!-- 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>    

<!-- supports delivery of images as multi-part MIME -->
<!ELEMENT CANSUPPORTIMAGES    - o   %BOOLTYPE>    

<!-- supports GROUPID transactions -->
<!ELEMENT CANSUPPORTGROUPID    - o   %BOOLTYPE>    

<!-- supports updating PRESNAMEADDRESS on the server using SVCCHG in ACCTRQ -->
<!ELEMENT CANUPDATEPRESNAMEADDRESS    - o   %BOOLTYPE>    

]>

