3z-?      !"#$%&'()*+,-./0123456789:;<=>9Chars necessary to be escaped when are within RDN values ##Represents Distinguished Name (DN) BRepresents ChangeModify operations upon one entry within given DN  2Represents one LDAP operation within changes LDIF @Represents one data record within LDIF file with DN and content E | Represents one change record within LDIF file with DN and content ERepresents LDIF structure, it can be either simply LDIF data dump or & | changes LDIF with LDAP operations &Type of LDIF Files (Content, Changes)  !"#$#  !"#$)     #$"!#       !"#$$+%;Parse string as LDIF content and return LDIF or ParseError &;Read and parse provided file and return LDIF or ParseError ?>Read and parse provided string and return LDIF or ParserError F | If LDIF type is specified than given type is expected for parsing % | and mismatch generates ParseError '(4Parse string as DN and return DN type or ParseError @@Preprocessing for concat wrapped lines and remove comment lines ARemove Comment Lines BFUnwrap lines, lines with space at begin is continue of previous line CDEParsec ldif parser FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde%&'(%'&(%&'( )Serialize LDIF in LDIF Format f'Serialize version to LDIF Format Lines *Serialize DN to LDIF Format g+(Serialize Content Record in LDIF Format hijk)*+)*+)*+, Find all Contents with given DN -!Find first Content with given DN .1Find fist Attribute within attributes pairs list /5Filter Attribute Value list according Attribute name 0!Change record without any impact 123l45"Check if the dn1 is prefix of dn2 m6nop789:;,-./0123456789:;,-53412./06978:;,-./0123456789:;<4Create Change LDIF between to LDIF contents. If any = | of input argument is not LDIFContent it returns Nothing. 9 | If there is not difference the Change LDIF with empty  | change list is returned.  |  | Unsing following strategy:  | 1. Iterate over L1 DN' s and Modify / Remove Content 0 | 2. Iterate over L2 and Add Content not in L1 q=.Diff two AttrVal Records if any of provided. a | Implementation uses inefficient algorithm for large count of attributes within ContentRecord. <=<=<=>9Apply one LDIF to another LDIF. The destination LDIF has  | to be Content LDIF rApply one LDIF Content/1Change Record into LDIF and produce Changed LDIF sApply one LDIF Change (adddel(modf) for given DN within LDIF Content t!Apply Attribute Modification (AddDel<Replace) to ContentRecord and produce changed ContentRecord >>>=  !"#$%&'()*+,-./0123456789:;<=>u       !!"#$%&'()**+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ ldif-0.0.10Text.LDIF.ConstsText.LDIF.TypesText.LDIF.ParserText.LDIF.PrinterText.LDIF.UtilsText.LDIF.DiffText.LDIF.Apply Text.LDIFspecialDNCharsescapedDNCharsDNDNi dnAttrValsModify ModReplace ModDeleteModAddmodAttr modAttrValsChange ChangeModDN ChangeModifychMods ChangeDelete ChangeAdd chAttrVals LDIFRecord ChangeRecordchOp ContentRecordreDN coAttrValsLDIF lcVersion lcEntriesLDIFType LDIFMixedTypeLDIFChangesTypeLDIFContentType AttrValueValue Attribute parseLDIFStr parseLDIFFileparseLDIFStrAs parseDNStrldif2strdn2str record2strfindRecordsByDNfindRecordByDN lookupAttr filterAttr isDummyRecordleafOfDNrootOfDNsizeOfDN takeDNPrefix isDNPrefixOf ldif2treeisContentRecordisChangeRecord getLDIFTypedn2dnI ldif2ldifIdiffLDIF diffRecord applyLDIFparseLDIFStrAs'preproc stripCommentsunwrap takeLinestakeLinepLdif pLdifChanges pLdifMixed pLdifContent pAttrValRecpRec pChangeRec pChangeAdd pChangeDel pChangeMod pChangeModDNpRDNpDNSpecpDN pAttrEqValue pAttrValueDN pVersionSpecpModSpecmkModpModTypepAttributeDescriptionpAttributeType pAttrValSpec pValueSpecpURL pSafeString pSafeString' pBase64StringpAttrTypeCharspLdapOidpFILLpSEPpSEPsver2str escapeDNVals attrVals2Ln attrVal2Lnmods2Lnmod2Ln getDNValue dummyRootDNisParentRecordOf ldifRoots ldifRecs2tree diffLDIF'applyRecord2LDIFapplyChange2RecordapplyMod2Record